From 88936964aaa4a570514b35b0a6553f8b9fd06397 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=98=BF=20Cai?= Date: Thu, 15 Oct 2026 14:59:42 +0800 Subject: [PATCH 01/13] chore(release): prepare 0.2.7 to 1.0 migration and validation evidence --- MIGRATION_1_0.md | 747 + PUBLISH.md | 33 +- README.md | 2 + README_zh_CN.md | 2 + scripts/sync-readme.mjs | 28 +- .../tasks.md | 8 +- .../migration.md | 2 + .../015-checkbox-demo-card-alignment/tasks.md | 5 +- .../tasks.md | 4 +- specs/027-component-test-manifest/tasks.md | 4 +- specs/027-slider-demo-alignment/tasks.md | 4 +- specs/028-backtop-contract-alignment/tasks.md | 5 +- specs/028-stepper-demo-alignment/tasks.md | 5 +- specs/028-tabbar-design-alignment/tasks.md | 5 +- specs/030-indexes-design-alignment/tasks.md | 4 +- specs/030-steps-design-alignment/tasks.md | 5 +- specs/031-navbar-contract-alignment/tasks.md | 5 +- specs/032-sidebar-design-alignment/tasks.md | 5 +- specs/038-skeleton-design-alignment/tasks.md | 4 +- .../acceptance.md | 2 + .../047-miniprogram-token-alignment/tasks.md | 8 +- .../acceptance.md | 4 + .../component-consumption-review.md | 2 + .../migration.md | 2 + .../report.md | 2 + .../tasks.md | 15 +- .../formal-tool-delivery.md | 2 + specs/050-public-api-documentation/tasks.md | 16 +- .../acceptance.md | 2 + specs/053-upload-async-picker-state/tasks.md | 4 +- specs/055-tag-single-line-centering/tasks.md | 6 +- .../057-release-readiness-audit/acceptance.md | 45 + .../baseline-open-tasks.json | 294 + .../057-release-readiness-audit/ci-review.md | 83 + .../dependency-plan.md | 33 + .../migration-plan.md | 42 + specs/057-release-readiness-audit/plan.md | 9 + .../spec-validation-plan.md | 64 + specs/057-release-readiness-audit/spec.md | 18 + specs/057-release-readiness-audit/tasks.md | 9 + specs/058-release-preparation/acceptance.md | 69 + .../component-migration-index.json | 344 + .../current-token-verification.json | 12948 +++++ .../import-cleanup.json | 162 + .../manual-acceptance.md | 31 + specs/058-release-preparation/plan.md | 7 + .../058-release-preparation/pr-validation.md | 24 + .../public-api-diff.json | 16195 +++++++ .../release-notes-draft.md | 28 + specs/058-release-preparation/spec.md | 19 + specs/058-release-preparation/tasks.md | 9 + specs/058-release-preparation/token-status.md | 78 + .../acceptance.md | 65 + .../compiled-consumption.json | 20367 ++++++++ .../next-batches.md | 37 + .../plan.md | 6 + .../runtime-observations.json | 8071 ++++ .../runtime-review.json | 40108 ++++++++++++++++ .../runtime-review.md | 252 + .../spec.md | 17 + .../tasks.md | 9 + .../validation-commands.json | 143 + .../acceptance.md | 65 + .../implemented-fix.patch | 13 + specs/060-token-difference-resolution/plan.md | 7 + .../proposed-visual-fixes.patch | 46 + .../resolution-report.json | 6725 +++ .../resolution-rules.json | 401 + .../runtime-observations.json | 8613 ++++ .../solutions.md | 343 + specs/060-token-difference-resolution/spec.md | 17 + .../060-token-difference-resolution/tasks.md | 10 + .../validation-commands.json | 165 + .../acceptance.md | 18 + .../component-entry-matrix.json | 633 + .../plan.md | 112 + .../spec.md | 34 + .../tasks.md | 20 + tdesign-component/MIGRATION_1_0.md | 747 + tdesign-component/README.md | 2 + tdesign-component/README_zh_CN.md | 2 + tdesign-component/example/ios/Podfile.lock | 14 +- .../lib/src/components/badge/t_badge.dart | 4 - .../lib/src/components/button/t_button.dart | 1 - .../components/button/t_button_resolve.dart | 2 +- .../components/calendar/t_calendar_body.dart | 1 - .../calendar/t_calendar_header.dart | 1 - .../t_date_time_picker_model.dart | 1 - .../components/dialog/t_confirm_dialog.dart | 1 - .../components/indexes/t_indexes_list.dart | 4 - .../src/components/link/t_link_resolve.dart | 1 - .../loading/t_activity_indicator.dart | 1 - .../loading/t_circle_indicator.dart | 1 - .../lib/src/components/loading/t_loading.dart | 1 - .../lib/src/components/popup/t_popup.dart | 1 - .../refresh/t_pull_down_refresh_texts.dart | 1 - .../swiper/t_swiper_theme_data.dart | 1 - .../time_counter/t_time_counter.dart | 2 - tdesign-component/lib/src/util/auto_size.dart | 1 - .../lib/src/util/string_util.dart | 1 - tdesign-component/pubspec.yaml | 3 +- .../test/components/avatar/t_avatar_test.dart | 215 + .../test/components/button/t_button_test.dart | 447 + .../test/components/empty/t_empty_test.dart | 110 +- .../test/components/input/t_input_test.dart | 167 +- .../test/components/link/t_link_test.dart | 122 + .../components/progress/t_progress_test.dart | 157 + .../test/components/switch/t_switch_test.dart | 232 + .../support/token_consumption_evidence.dart | 123 + .../test/migration_027_test.dart | 253 + .../test/support/migration_027_examples.dart | 178 + tdesign-site/site/docs/getting-started.md | 2 + tdesign-site/site/docs/migration-1-0.md | 747 + tdesign-site/site/site.config.mjs | 7 + tool/audit_compiled_token_consumption.mjs | 71 + tool/summarize_component_token_evidence.mjs | 198 + tool/verify_token_difference_resolutions.mjs | 129 + 117 files changed, 121628 insertions(+), 74 deletions(-) create mode 100644 MIGRATION_1_0.md create mode 100644 specs/057-release-readiness-audit/acceptance.md create mode 100644 specs/057-release-readiness-audit/baseline-open-tasks.json create mode 100644 specs/057-release-readiness-audit/ci-review.md create mode 100644 specs/057-release-readiness-audit/dependency-plan.md create mode 100644 specs/057-release-readiness-audit/migration-plan.md create mode 100644 specs/057-release-readiness-audit/plan.md create mode 100644 specs/057-release-readiness-audit/spec-validation-plan.md create mode 100644 specs/057-release-readiness-audit/spec.md create mode 100644 specs/057-release-readiness-audit/tasks.md create mode 100644 specs/058-release-preparation/acceptance.md create mode 100644 specs/058-release-preparation/component-migration-index.json create mode 100644 specs/058-release-preparation/current-token-verification.json create mode 100644 specs/058-release-preparation/import-cleanup.json create mode 100644 specs/058-release-preparation/manual-acceptance.md create mode 100644 specs/058-release-preparation/plan.md create mode 100644 specs/058-release-preparation/pr-validation.md create mode 100644 specs/058-release-preparation/public-api-diff.json create mode 100644 specs/058-release-preparation/release-notes-draft.md create mode 100644 specs/058-release-preparation/spec.md create mode 100644 specs/058-release-preparation/tasks.md create mode 100644 specs/058-release-preparation/token-status.md create mode 100644 specs/059-component-token-runtime-evidence/acceptance.md create mode 100644 specs/059-component-token-runtime-evidence/compiled-consumption.json create mode 100644 specs/059-component-token-runtime-evidence/next-batches.md create mode 100644 specs/059-component-token-runtime-evidence/plan.md create mode 100644 specs/059-component-token-runtime-evidence/runtime-observations.json create mode 100644 specs/059-component-token-runtime-evidence/runtime-review.json create mode 100644 specs/059-component-token-runtime-evidence/runtime-review.md create mode 100644 specs/059-component-token-runtime-evidence/spec.md create mode 100644 specs/059-component-token-runtime-evidence/tasks.md create mode 100644 specs/059-component-token-runtime-evidence/validation-commands.json create mode 100644 specs/060-token-difference-resolution/acceptance.md create mode 100644 specs/060-token-difference-resolution/implemented-fix.patch create mode 100644 specs/060-token-difference-resolution/plan.md create mode 100644 specs/060-token-difference-resolution/proposed-visual-fixes.patch create mode 100644 specs/060-token-difference-resolution/resolution-report.json create mode 100644 specs/060-token-difference-resolution/resolution-rules.json create mode 100644 specs/060-token-difference-resolution/runtime-observations.json create mode 100644 specs/060-token-difference-resolution/solutions.md create mode 100644 specs/060-token-difference-resolution/spec.md create mode 100644 specs/060-token-difference-resolution/tasks.md create mode 100644 specs/060-token-difference-resolution/validation-commands.json create mode 100644 specs/061-migration-documentation-design/acceptance.md create mode 100644 specs/061-migration-documentation-design/component-entry-matrix.json create mode 100644 specs/061-migration-documentation-design/plan.md create mode 100644 specs/061-migration-documentation-design/spec.md create mode 100644 specs/061-migration-documentation-design/tasks.md create mode 100644 tdesign-component/MIGRATION_1_0.md create mode 100644 tdesign-component/test/support/token_consumption_evidence.dart create mode 100644 tdesign-component/tool/fixtures/token_migration/test/migration_027_test.dart create mode 100644 tdesign-component/tool/fixtures/token_migration/test/support/migration_027_examples.dart create mode 100644 tdesign-site/site/docs/migration-1-0.md create mode 100644 tool/audit_compiled_token_consumption.mjs create mode 100644 tool/summarize_component_token_evidence.mjs create mode 100644 tool/verify_token_difference_resolutions.mjs diff --git a/MIGRATION_1_0.md b/MIGRATION_1_0.md new file mode 100644 index 0000000000..be50528294 --- /dev/null +++ b/MIGRATION_1_0.md @@ -0,0 +1,747 @@ +# 从 0.2.7 升级到 1.0 + +本文仅面向 `tdesign_flutter 0.2.7` 使用方。1.0 是不兼容升级,旧参数和旧行为不会通过兼容别名保留;不能对全项目执行一次 `TD` → `T` 替换后就认为迁移结束。 + +本文按 0.2.7 实际发布包与当前 1.0 候选编写。正式 1.0 发布后使用 `tdesign_flutter: ^1.0.0`;发布前不要把这个版本约束当作已经可从 pub.dev 安装的稳定版本。已有 alpha 的升级不在本文范围。 + +## 升级顺序 + +1. 保留当前依赖锁文件、主题 JSON 与关键页面截图;先在业务分支迁移。 +2. 升级到 Flutter ≥3.32.0、Dart ≥3.8.0。原生平台要求还受所解析的 Flutter/图片选择器实现包约束,按目标 SDK 构建验证。 +3. 先替换公共主题/文字与导入,再迁移基础组件,最后迁移选择器、表单、浮层和异步交互。 +4. 修复全部编译错误后,按本文的行为清单验证真实操作。默认视觉和回调行为变化不一定产生编译错误。 + +统一入口可同时提供 TD 与 Flutter Material 类型: + +```dart +import 'package:tdesign_flutter/tdesign_flutter.dart'; +``` + +仍可显式导入 Material;业务另有同名类型时用 import 前缀或 show/hide 解决。不要从 `package:tdesign_flutter/src/...` 导入旧 State、Painter 或内部适配类型。 + +## 主题、文字与样式 + +旧 `TDTheme.of(context)` 对应 `context.tTheme`;全局数据为 `TThemeData`,应用使用 `TThemeBuilder.light/dark`。让组件跟随局部主题时读取 `context.tTheme`,不要用固定默认值绕开子树 Theme。 + + +```dart +Widget migratedApp(Widget home) { + final tokens = TThemeData.defaultData(); + return MaterialApp( + theme: TThemeBuilder.light(tokens), + darkTheme: TThemeBuilder.dark(tokens), + home: home, + ); +} + +Widget migratedTextTheme(BuildContext context, Widget child) { + return Theme( + data: Theme.of( + context, + ).mergeExtension(const TTextThemeData(textStyle: TextStyle(fontSize: 18))), + child: child, + ); +} +``` + + +- TD 内置外观按全局 Token、TD 组件 Theme、受支持的显式实例配置解析。Material `textTheme`、按钮 Theme、`IconTheme`、visualDensity 等不再隐式改变 TD 内置视觉;原生 Material 和调用方自定义内容仍可使用自己的主题。 +- 使用 `mergeExtension` 合并子树组件主题,避免用 `copyWith(extensions: [...])` 意外丢弃其他 ThemeExtension。 +- `TText` 的单实例文字使用 `style: TextStyle(...)`;`TTextSpan` 也用 `style`。不要继续传旧 `fontWeight/fontFamily/textColor/isTextThrough/lineThroughColor`,删除线使用 `TextDecoration.lineThrough`。 +- `textScaleFactor` 改为 `textScaler`;未传时继承系统文字缩放。旧 `TDTextPaddingConfig` 改为父级 Padding/Align/Center,段落文字不要按单行居中规则强行裁切。 +- 在线字体先由业务调用 `TFontLoader.load` 并管理加载状态,之后通过文字 `style.fontFamily` 或 TD 文字 Theme 配置,不再在文字 build 时请求字体 URL。 +- 自定义主题 JSON 需要核对字段与最终默认值;旧按钮状态样式、组件形态、交互时长等不能一律塞进 Theme。具体视觉默认值与实例的状态/规格选择分开。 + +## 按钮与禁用语义 + +0.2.7:`TDButton(text: '保存', type: TDButtonType.fill, theme: TDButtonTheme.primary, onTap: save)`。 + +1.0 的对应写法: + + +```dart +Widget migratedButton(VoidCallback? onPressed) { + return TButton( + variant: TButtonVariant.fill, + colorPreset: TButtonColorPreset.primary, + onPressed: onPressed, + child: const Text('保存'), + ); +} +``` + + +`onPressed == null` 表示禁用;长按也要求按钮处于可点击状态。不要保留旧 `disabled: false` 却漏传回调。`icon` 使用 Widget,IconData 包在 `Icon(...)` 或 `TIcon(...)` 中。普通/按压/禁用的具体样式合并到 `ButtonStyle` 的状态属性;尺寸布局按 size、显式样式或外部约束表达,不搬旧 style/activeStyle/disableStyle 三套对象。 + +自定义反色主题时,默认配色的 `TButtonVariant.ghost` 文字与描边读取 `textColorAnti`,禁用时读取 `fontWhite4`;不要仅修改原始白色层级 `fontWhite1` 来控制这类按钮。单个按钮的前景、边框和交互状态仍通过 `ButtonStyle` 覆盖。 + +## 受控值、输入与选择 + +对于 `TCheckbox`、`TRadioGroup`、`TSwitch`、`TStepper`、Picker、Calendar 等,父级应接受回调并重建传回新值。只记录回调而不更新 value,会导致保持旧值或滚动结束回退;空回调的禁用规则以各组件 API 为准。 + + +```dart +Widget migratedCheckbox(bool value, ValueChanged? onChanged) { + return TCheckbox(value: value, onChanged: onChanged, title: '同意条款'); +} + +Widget migratedRadio(String value, ValueChanged? onChanged) { + return TRadioGroup.options( + value: value, + onChanged: onChanged, + options: const [ + TRadioOption(value: 'a', label: '方案 A'), + TRadioOption(value: 'b', label: '方案 B'), + ], + ); +} +``` + + +`TRadio` 必须在同类型 `TRadioGroup` 下,不能把 groupValue/onChanged 重新分散到每个 radio。复选框单项 value 为 bool?(null 表示不确定态),组的 value/options 以当前泛型 API 为准,旧 id、controller、passThrough 等不能原样套入。 + +输入框的 `controller` 与 `initialValue` 互斥;`initialValue` 仅初始化内部值。需要外部更新、表单重置或保留选区时使用 `TextEditingController`,由创建方释放。单行用 `TInput`,多行用 `TTextarea`;不要把旧 TDInput 的 maxLines 参数当成完整多行迁移方案。重验空内容粘贴、中文组合输入、清空按钮、焦点与键盘遮挡。 + +## 表单改为字段树 + +旧 `items/rules/data` 配置改为 `TForm + TFormField + TFormItem`。字段持有业务 value/onChanged,validator 返回错误文案;`TFormController.validate()` 用于主动校验,`required: true` 执行必填校验,单独设置表单项必填标记不等于校验。 + + +```dart +Widget migratedForm({ + required TFormController form, + required TextEditingController text, + required String value, + required ValueChanged onChanged, +}) { + return TForm( + controller: form, + child: TFormField( + name: 'name', + value: value, + onChanged: onChanged, + required: true, + requiredMessage: '请输入姓名', + builder: (context, current, change, error) => TFormItem( + label: '姓名', + errorText: error, + child: TInput(controller: text, onChanged: change), + ), + ), + ); +} +``` + + +示例中的 text/form 由页面持有,value 由父级在 onChanged 中更新;页面销毁时释放自建 TextEditingController。业务执行 reset 时,同时更新字段值与自己的文本控制器;不要指望 initialValue 覆盖现有编辑状态。 + +## Picker、日期与浮层确认分离 + +`TDPicker/TDMultiPicker/TDMultiLinkedPicker` 改为 `TPicker` 和不可变 `TPickerColumns/TPickerLinked` 数据。面板回调只是候选值变化,不是业务确认。 + + +```dart +TPopupHandle migratedPicker({ + required BuildContext context, + required String initialValue, + required ValueChanged onConfirmed, +}) { + var draft = initialValue; + return TPickerPopup.show( + context, + child: StatefulBuilder( + builder: (context, setPanelState) => TPicker( + items: const TPickerColumns([ + [ + TPickerOption(label: '选项 A', value: 'a'), + TPickerOption(label: '选项 B', value: 'b'), + ], + ]), + value: [draft], + onChanged: (next) => setPanelState(() { + draft = next.values.single! as String; + }), + ), + ), + headerBuilder: (context, close) => TPopupHeader( + title: const Text('请选择'), + cancelButton: TButton(onPressed: close, child: const Text('取消')), + confirmButton: TButton( + onPressed: () { + onConfirmed(draft); + close(); + }, + child: const Text('确认'), + ), + ), + ); +} +``` + + +调用方在 `onConfirmed` 中更新业务保存值,并确保对应业务 State 仍 mounted;取消只关闭、不提交草稿。重新打开时用保存值创建新草稿。`TPickerPopup` 会为标准头部和滚轮预留高度;自定义通用 Popup 时也须提供合理内容约束。 + +`TDDatePicker + DatePickerModel` 改为 `TDateTimePicker + TDateTimePickerValue + DateTimePickerMode`。默认年月日,按需组合时间列;start/end 与 steps 用当前模型,onChanged 实时回写。`TDCalendar` 的 value 改为 `List`,single/multiple/range 由 variant 表达,组件不再同时负责业务弹窗确认或时间选择。 + + +```dart +Widget migratedCalendar( + List value, + ValueChanged>? onChanged, +) { + return SizedBox( + height: 400, + child: TCalendar( + value: value, + variant: TCalendarVariant.single, + minDate: DateTime(2026, 1, 1), + maxDate: DateTime(2026, 12, 31), + onChanged: onChanged, + ), + ); +} + +Widget migratedDateTime( + TDateTimePickerValue value, + ValueChanged? onChanged, +) { + return TDateTimePicker(value: value, onChanged: onChanged); +} +``` + + +**重新验证边界**:最小/最大日期的时分、跨天、闰日、区间端点、数据源变更、连续滚动与惯性。不要用整数时间戳或旧通知器替代新受控值。 + +## Popup、Dialog、Toast + +旧 `TDPopup*Panel/TDSlidePopupRoute` 组合改为 `TPopup.show(context, options: ...)`。按方向选择 `TPopupOptions.bottom/center/left/right/top` 与对应 Inset;从返回的 `TPopupHandle` 关闭/重开并读取本次 `result`。用正确 Theme/Navigator 子树的 context 打开;handle 重开不会自动重新解析已经合并的主题选项,需要新配置时重新创建。 + +`TConfirmDialog` 是单确认便捷组件;多操作使用 `TDialog.actions + TDialogAction`,输入弹窗组合 `TDialog + TInput`,不要寻找被删除的 TDInputDialog。 + + +```dart +Future migratedDialog(BuildContext context) { + return TDialog.show( + context, + dialog: const TConfirmDialog( + title: '操作确认', + content: '确认继续?', + buttonText: '继续', + ), + ); +} +``` + + +Toast 时长用 `Duration`;加载提示默认也会自动关闭。持续任务显式设置 `Duration.zero`,任务结束后按返回 ID 关闭。可见遮罩与背景点击/滚动拦截是独立配置,不要把半透明遮罩等同于不可穿透。 + + +```dart +String migratedLoading(BuildContext context) { + return TToast.showLoading( + context: context, + text: '处理中', + duration: Duration.zero, + overlay: const TOverlayConfig(preventScrollThrough: true), + ); +} +``` + + +结束任务时调用 `TToast.dismissToast(id)`。匿名提示会复用匿名 ID;需要并存时提供不同 toastId。`TMessage.duration` 同样使用 Duration,显示由 Widget 树或其公开命令管理,不能继续用旧 visible 参数控制。 + +## Upload 与平台依赖 + +Upload 只负责选择及文件列表交互,不执行 HTTP 上传。旧 `max/sizeLimit/multiple/disabled/onChange` 不能仅改名:改为 `maxFiles/maxFileSize`、单一 mediaType、受控 files/onChanged;自定义业务 picker 使用 `Future>`。 + + +```dart +Widget migratedUpload({ + required List files, + required ValueChanged>? onChanged, + TUploadPicker? picker, +}) { + return TUpload( + files: files, + onChanged: onChanged, + maxFiles: 2, + maxFileSize: 5 * 1024 * 1024, + picker: picker, + ); +} +``` + + +回调列表不可变,接受时直接保存新列表,不原地 add/remove;上传进度和结果由业务创建新 TUploadFile/列表更新。`onChanged == null` 阻止新交互,但不会取消已经开始的选择;卸载后不通知。数量/大小错误、选择器异常和业务回调异常分别按当前回调契约处理。 + +相册权限、iOS Info.plist、文件持久化和 Android 进程回收后的恢复属于宿主集成。默认选择器底层是 image_picker;业务可用 picker 接入自己的权限、恢复和上传流程。升级后重新构建原生宿主,并检查实际解析的平台实现版本;Dart 编译通过不能证明权限与系统相册行为通过。 + +## 两种 TabBar 与 Swiper + +- **顶部页签**:旧 `TDTabBar/TDTabBarView` → `TTabsBar/TTabsBarView`,显式共享 TabController 或位于同一个 DefaultTabController。TTabsBarView 默认不可滑动,需要手势切页时显式配置 physics。 +- **底部导航**:旧 `TDBottomTabBar` → `TTabBar`,提供 type、navigationTabs、受控 value/onChanged;旧 `topBorder/showTopBorder/centerDistance` 没有等价开关恢复,按新的默认边线和内置图文布局验收。 +- **Swiper**:使用 `TSwiper` 的 children 或 itemBuilder/itemCount;自建 `TSwiperController` 并在页面 dispose 中释放。旧第三方 SwiperPlugin/SwiperController 和 TDSwiperPagination 不能直接传入;按当前分页、箭头与 pageEffect 能力重组。TSwiper 默认 loop/autoplay 均 false,业务需要时显式打开。 + +## 全部组件迁移索引 + +下表是入口与职责迁移索引,不承诺旧构造参数一一保留。每个组件的全部当前字段与默认值以 1.0 API 文档为准;旧名查找见文末导出索引。 + +| 组件 | 0.2.7 入口 | 1.0 入口 | 必须检查的迁移点 | +|---|---|---|---| +| button | `TDButton` | `TButton` | text→child;onTap→onPressed;type→variant;theme→colorPreset;状态样式合并为 ButtonStyle。 | +| divider | `TDDivider` | `TDivider` | 按当前构造及 TDividerThemeData 配置;方向/内容与具体视觉默认值分开。 | +| fab | `TDFab` | `TFab` | 重新核对尺寸/形态枚举、内容和事件;具体视觉从 TFabThemeData 配置。 | +| icon | `TDIcons / Icon` | `TIcons / TIcon` | 图标数据来自 tdesign_flutter_icons;TIcon 的默认视觉由 TD 控制,实例 size/color 可覆盖。 | +| text | `TDText / TDTextSpan` | `TText / TTextSpan` | 删除分散字体、在线加载和 padding 入口;用 style、textScaler、显式父布局,见文字一节。 | +| link | `TDLink` | `TLink` | 内容改用 Widget child;内置规格与 colorPreset 留实例,具体视觉从 TLinkThemeData 配置。 | +| backtop | `TDBackTop` | `TBackTop` | 按当前滚动绑定与形态配置;仅提供滚动控制器时按组件契约回顶,不用空回调猜禁用。 | +| drawer | `TDDrawer / TDDrawerWidget` | `TDrawer / showTDrawer` | 内容与浮层打开分开;宽度/背景移入 TDrawerThemeData,旧内容实现类型不再直接构造。 | +| indexes | `TDIndexes` | `TIndexes` | 重新核对受控索引及滚动对象;字母列表最大高度在组件 Theme 配置。 | +| navbar | `TDNavBar` | `TNavBar` | title/操作保留内容职责,背景、颜色、间距、边框和阴影迁入 TNavBarThemeData。 | +| sidebar | `TDSideBar` | `TSideBar` | 选择交给 value/onChanged;去掉旧 Controller/数据项样式依赖,视觉使用 TSideBarThemeData。 | +| steps | `TDSteps` | `TSteps.progress / selectable / display` | 选择进度、可选择或纯展示模式;不把三种状态源混用。 | +| tab_bar | `TDBottomTabBar` | `TTabBar` | 底部导航:显式 type、navigationTabs、value/onChanged;尺寸/颜色/分隔线迁 Theme。 | +| tabs | `TDTabBar / TDTabBarView` | `TTabsBar / TTabsBarView` | 顶部页签:共享 TabController 或 DefaultTabController;不是底部 TTabBar。 | +| form | `TDForm / FormController` | `TForm / TFormField / TFormController` | 从 items/rules/data 配置改为字段 Widget 树;value/onChanged、validator 与控制器职责分开。 | +| input | `TDInput` | `TInput` | controller 与 initialValue 互斥;onChanged/hintText/prefix/suffix;不要把 initialValue 当持续受控值。 | +| textarea | `TDTextarea` | `TTextarea` | 多行输入独立组件;用 minLines/maxLines、controller 与字段回调,核对计数/字符限制。 | +| search | `TDSearchBar` | `TSearchBar` | placeHolder→hintText、onTextChanged→onChanged、onActionClick→onActionPressed;不保留旧样式对象。 | +| checkbox | `TDCheckbox / TDCheckboxGroup` | `TCheckbox / TCheckboxGroup` | checked/id/controller 方案改为 value/onChanged;组提供 options 和受控选中集合,类型按当前 API。 | +| radio | `TDRadio / TDRadioGroup` | `TRadio / TRadioGroup` | 单项必须位于同类型组下;组持有 value/onChanged,不再为每项维护选中状态。 | +| switch | `TDSwitch` | `TSwitch` | value/onChanged 管开关状态;空回调禁用;规格与具体配色分别从实例/Theme 设置。 | +| stepper | `TDStepper` | `TStepper` | required value;回调接受后重建;旧 defaultValue/eventController 不能作为迁移目标。 | +| slider | `TDSlider / TDRangeSlider` | `TSlider / TRangeSlider` | 按当前值及回调类型迁移;旧 Thumb/Track/Painter 类型不再作为可继承公开入口。 | +| rate | `TDRate` | `TRate` | 按当前受控数值与回调迁移;重验半星、禁用、只读与自定义指示器。 | +| picker | `TDPicker / TDMultiPicker / TDMultiLinkedPicker` | `TPicker + TPickerColumns / TPickerLinked` | 列数据改不可变 option 树;选择面板不负责业务确认,使用 TPickerPopup 组合草稿/确认/取消。 | +| date_time_picker | `TDDatePicker` | `TDateTimePicker` | DatePickerModel 改为 TDateTimePickerValue + DateTimePickerMode;上下界/步进显式传入,外部管理确认。 | +| cascader | `TDCascader / TDMultiCascader` | `TCascader` | 使用 TCascaderOption 树与受控路径;旧自定义 Tab/Action/多选控制类型不能机械替换,按当前能力重组。 | +| tree_select | `TDTreeSelect / TDSelectOption` | `TTreeSelect / TTreeSelectOption` | 树数据、选中集合与 multiple 明确配置;不再复用旧副作用控制器。 | +| calendar | `TDCalendar` | `TCalendar` | value 是 List;variant 决定单选/多选/区间;onChanged 回写,时间选择和弹层外部组合。 | +| upload | `TDUpload` | `TUpload` | files/onChanged 受控;单一 mediaType,maxFiles/maxFileSize、不可变结果;上传请求由业务执行。 | +| avatar | `TDAvatar` | `TAvatar` | 形状用 shape,物理大小/颜色迁 TAvatarThemeData;特殊文字用 child: Text(style: ...)。 | +| badge | `TDBadge` | `TBadge` | 统一 label/size 等当前入口;旧数字/红点/丝带类型按组件 API 重组,不复用旧 BadgeConfig。 | +| cell | `TDCell / TDCellGroup` | `TCell / TCellGroup` | 以内容槽组合;连续列表用 TCellGroup;统一背景/分隔线由组或 Theme 管理。 | +| collapse | `TDCollapse / TDCollapsePanel` | `TCollapse / TCollapsePanel` | 受控展开值与内容分开;形态/动画属于实例,具体外观从 TCollapseThemeData 配置。 | +| empty | `TDEmpty` | `TEmpty` | 旧 type 改为 icon/image/emptyText/operation 组合;不再查找 TDEmptyType,也不导入内部插图。 | +| footer | `TDFooter` | `TFooter` | 按当前内容/链接数据与组件 Theme 迁移,不继续使用旧 FooterType 作为类型。 | +| image | `TDImage` | `TImage` | 重验加载/失败/裁剪;尺寸和占位以当前 API 为准,旧 TDImageType 不能仅改前缀。 | +| image_viewer | `TDImageViewer / TDImageDialog` | `TImageViewer.show` | images 使用 ImageProvider 列表;initialIndex 与 onIndexChanged,内部 State/Dialog 类型不再直接实例化。 | +| progress | `TDProgress` | `TProgress` | variant/status 与主题分开;圆环 circleSize 表示外框边长,不能把旧半径语义套入。 | +| result | `TDResult` | `TResult` | 重选当前语义状态与内容插槽,背景/文字视觉使用 TResultThemeData。 | +| skeleton | `TDSkeleton / TDSkeletonRowCol*` | `TSkeleton / TSkeleton.custom` | 标准形态用 variant;自定义布局使用 TSkeletonLayout,不复用旧 RowCol 配置类型。 | +| swiper | `Swiper + TDSwiperPagination` | `TSwiper / TSwiperController` | 不再用第三方 SwiperController/SwiperPlugin;迁移 children 或 itemBuilder、分页及自有控制器。 | +| table | `TDTable / TDTableCol` | `TTable / TTableColumn` | 列使用 id/header/cellBuilder,data 必填;排序和选择是受控值,旧列/行选择回调需要改写。 | +| tag | `TDTag / TDSelectTag` | `TTag / TSelectTag` | 语义色用 colorPreset;选中/关闭遵循当前回调;具体字体和圆角从 Theme 设置。 | +| time_counter | `TDTimeCounter` | `TTimeCounter` | time 和 onChanged 均使用毫秒整数;重验自动开始、方向与结束;自建 Controller 由业务释放。 | +| action_sheet | `TDActionSheet` | `TActionSheet` | 按当前列表/宫格入口及 TActionSheetItem 组合;旧主题枚举不是新 Theme 类型。 | +| dialog | `TDAlertDialog / TDConfirmDialog / TDInputDialog` | `TDialog / TConfirmDialog / TDialogAction` | 单确认便捷弹窗与多操作槽分开;输入弹窗用 TDialog+TInput 组合,不恢复专用旧类。 | +| dropdown_menu | `TDDropdownMenu / TDDropdownItem` | `TDropdownMenu / TDropdownMenuItem` | 菜单项描述与 Single/MultiSelectPanel 组合;重验外部值更新、遮罩和 anchor,不直接改名前缀。 | +| loading | `TDLoading` | `TLoading` | 按当前 icon/内容与 TLoadingController 使用;旧内部指示器/State 不作为公开继承点。 | +| message | `TDMessage` | `TMessage` | duration 使用 Duration;status 替代旧 theme;显示由 Widget 树或命令句柄管理,不保留 visible 开关。 | +| notice_bar | `TDNoticeBar` | `TNoticeBar` | 语义状态/滚动/多行用当前 API;重验循环、点击与关闭,不搬旧样式类。 | +| popover | `TDPopover / TDPopoverWidget` | `TPopover` | 锚点和一次性命令按当前入口使用;offset/arrowSize/padding/背景/圆角从 TPopoverThemeData 设置。 | +| popup | `TDPopup*Panel / TDSlidePopupRoute` | `TPopup.show + TPopupOptions + TPopupHandle` | 面板、路由与控制统一;选择方向专属 Options/Inset,关闭结果从 handle.result 获取。 | +| refresh | `TDRefreshHeader` | `TPullDownRefresh` | 用 wrapper、受控回调和 TPullDownRefreshController 迁移;旧第三方 Header 不能仅改名。 | +| swipe_cell | `TDSwipeCell / TDSwipeCellAction` | `TSwipeCell / TSwipeCellAction` | 侧滑交互与逐项动作配置使用当前 API;不要依赖旧 Inherited/State,避免重复通知。 | +| toast | `TDToast` | `TToast` | duration 为 Duration,加载默认也会超时;持续加载显式 Duration.zero,背景拦截放 TOverlayConfig。 | +| theme | `TDTheme / TDThemeData` | `context.tTheme / TThemeData / TThemeBuilder` | 全局 Token→TD 组件 Theme→支持的实例配置;Material 外观不再反向影响 TD 默认视觉。 | + +## 编译通过后仍要检查 + +- 控件禁用条件、受控回调回写、连续操作与异步完成后的状态。 +- 主题明暗切换、局部 Theme、系统字体和 1/1.5/2 倍字号;不要用旧截图作为当前默认值的唯一依据。 +- 键盘、复制粘贴、输入法组合区、选区及焦点;返回键、安全区和 Overlay 的关闭/释放。 +- 列表排序/选择、日期边界、滚轮惯性、Swiper 实际页码;上传取消、权限与页面退出。 +- 业务创建的文本/Tab/Swiper/刷新控制器按其实际类型生命周期释放;回调中 setState 前确认 State 存活。 + +不存在替代入口的旧公开 State、Painter、布局适配和静态辅助类,不应通过深层 src 导入恢复。若业务依赖其具体能力,应使用公开 Widget/Theme/Flutter 原语重新组合,或在业务中维护对应实现;这类代码需要人工迁移。 + +## 0.2.7 公开导出名称索引 + +以下覆盖 0.2.7 主入口追踪到的自有公开声明(不包括外部包导出)。它用于查找旧名和定位处置方向,**不是自动替换表**。即使目标同名,构造参数、回调、默认值或行为也可能变化。公开基类的继承成员与业务自行继承/深层导入需额外审查。当前入口还导出 Material;同名的 Flutter 类型不作为旧 TD 自有声明的兼容实现。 + +| 0.2.7 名称 | 当前入口或处置 | 范围 | +|---|---|---| +| `BadgeConfig` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `CalendarBuilder` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `CalendarFormat` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `CalendarTrigger` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `CalendarType` | `TCalendarVariant` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `CellBuilder` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `ChevronPainter` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `Chinese2Formatter` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `ContentBuilder` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `DatePickerCallback` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `DatePickerModel` | `TDateTimePickerValue` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `DateSelectType` | `DateSelectType` | 同名或前缀对应,仍需核对参数/默认行为 | +| `DateSelectTypeNotifier` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `DateTypeKey` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `DefaultMapFactory` | `DefaultMapFactory` | 同名或前缀对应,仍需核对参数/默认行为 | +| `DefaultStickyHeaderController` | `DefaultStickyHeaderController` | 同名或前缀对应,仍需核对参数/默认行为 | +| `Font` | `Font` | 同名或前缀对应,仍需核对参数/默认行为 | +| `FontExtensions` | `FontExtensions` | 同名或前缀对应,仍需核对参数/默认行为 | +| `FontFamily` | `FontFamily` | 同名或前缀对应,仍需核对参数/默认行为 | +| `FormController` | `TFormController` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `FormItemNotifier` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `HollowCircle` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `IconBuilder` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `IconTextDirection` | `IconTextDirection` | 同名或前缀对应,仍需核对参数/默认行为 | +| `ImageWidget` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `ItemBuilderType` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `ItemDistanceCalculator` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `LabelBuilder` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `LeftItemBuilder` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `LeftLinePainter` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `LeftLineWidget` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `LinkClick` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `MessageLink` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `MessageMarquee` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `MessageTheme` | `TMessageStatus` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `MultiCascaderCallback` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `MultiCascaderListModel` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `MultiLinkedPickerModel` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `MultiPickerCallback` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `OnCellTap` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `OnCheckBoxGroupChange` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `OnCheckValueChanged` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `OnClose` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `OnDelete` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `OnGroupChange` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `OnImageTap` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `OnIndexChange` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `OnLongPress` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `OnLongTap` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `OnRadioGroupChange` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `OnRowSelect` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `OnScroll` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `OnSelect` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `OnSliderThemeDataUpdate` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `OnSwitchChanged` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `OnTap` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `PanelWithDownArrow` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `PlacementEnum` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `PlatformUtil` | `PlatformUtil` | 同名或前缀对应,仍需核对参数/默认行为 | +| `PopRoute` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `PopUpMenuItem` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `PopupClick` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `PopupDialog` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `PopupDialogState` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `Position` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `ProgressIndicator` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `RadioCorner` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `RadioCornerIcon` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `RectClipper` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `RightItemBuilder` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `RowCheckFunc` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `ScaleFormatter` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `SelectableFunc` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `SideItemProps` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `SlideTransitionFrom` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `SliderMeasureData` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `SliverStickyHeader` | `SliverStickyHeader` | 同名或前缀对应,仍需核对参数/默认行为 | +| `SliverStickyHeaderRenderObjectElement` | `SliverStickyHeaderRenderObjectElement` | 同名或前缀对应,仍需核对参数/默认行为 | +| `SliverStickyHeaderState` | `SliverStickyHeaderState` | 同名或前缀对应,仍需核对参数/默认行为 | +| `SliverStickyHeaderWidgetBuilder` | `SliverStickyHeaderWidgetBuilder` | 同名或前缀对应,仍需核对参数/默认行为 | +| `StickyHeaderController` | `StickyHeaderController` | 同名或前缀对应,仍需核对参数/默认行为 | +| `SwipeMotion` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDActionSheet` | `TActionSheet` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDActionSheetAlign` | `TActionSheetAlign` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDActionSheetItem` | `TActionSheetItem` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDActionSheetItemCallback` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDActionSheetTheme` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDAlertDialog` | `TDialog` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDAvatar` | `TAvatar` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDAvatarShape` | `TAvatarShape` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDAvatarSize` | `TAvatarSize` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDAvatarType` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDBackTop` | `TBackTop` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDBackTopStyle` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDBackTopTheme` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDBadge` | `TBadge` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDBadgeBorder` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDBadgeSize` | `TBadgeSize` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDBadgeType` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDBarItemAction` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDBottomTabBar` | `TTabBar` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDBottomTabBarBasicType` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDBottomTabBarComponentType` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDBottomTabBarIndicatorAnimation` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDBottomTabBarItemWithBadge` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDBottomTabBarOutlineType` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDBottomTabBarPopUpBtnConfig` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDBottomTabBarPopUpShapeConfig` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDBottomTabBarTabConfig` | `TTabBarItemConfig` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDBoxShadows` | `TBoxShadows` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDButton` | `TButton` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDButtonEvent` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDButtonIconPosition` | `TButtonIconPosition` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDButtonShape` | `TButtonShape` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDButtonSize` | `TButtonSize` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDButtonStatus` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDButtonStyle` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDButtonTheme` | `TButtonColorPreset` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDButtonType` | `TButtonVariant` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDCalendar` | `TCalendar` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDCalendarBody` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDCalendarCell` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDCalendarHeader` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDCalendarInherited` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDCalendarPopup` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDCalendarStyle` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDCapsuleRangeSliderThumbShape` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDCapsuleRangeSliderTickMarkShape` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDCapsuleRectRangeSliderTrackShape` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDCapsuleRectSliderTrackShape` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDCapsuleRectThemeData` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDCapsuleSliderThumbShape` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDCapsuleSliderTickMarkShape` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDCardStyle` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDCascader` | `TCascader` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDCascaderAction` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDCell` | `TCell` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDCellAlign` | `TCellAlign` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDCellClick` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDCellGroup` | `TCellGroup` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDCellGroupTheme` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDCellStyle` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDCheckBoxSize` | `TCheckboxSize` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDCheckbox` | `TCheckbox` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDCheckboxGroup` | `TCheckboxGroup` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDCheckboxGroupContainer` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDCheckboxGroupContainerState` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDCheckboxGroupController` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDCheckboxGroupInherited` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDCheckboxGroupState` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDCheckboxState` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDCheckboxStyle` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDCircleIndicator` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDCollapse` | `TCollapse` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDCollapseIconTextBuilder` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDCollapsePanel` | `TCollapsePanel` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDCollapseStyle` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDColors` | `TColors` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDConfirmDialog` | `TConfirmDialog` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDContentDirection` | `TContentDirection` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDCustomTab` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDDatePicker` | `TDateTimePicker` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDDialogButtonOptions` | `TDialogAction` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDDialogButtonStyle` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDDialogImagePosition` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDDivider` | `TDivider` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDDrawer` | `TDrawer` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDDrawerItem` | `TDrawerItem` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDDrawerItemClickCallback` | `TDrawerItemClickCallback` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDDrawerPlacement` | `TDrawerPlacement` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDDrawerWidget` | `TDrawer` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDDropdownItem` | `TDropdownMenuItem` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDDropdownItemBuilder` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDDropdownItemContentBuilder` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDDropdownItemController` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDDropdownItemOption` | `TDropdownMenuOption` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDDropdownItemOptionsCallback` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDDropdownMenu` | `TDropdownMenu` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDDropdownMenuDirection` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDEmpty` | `TEmpty` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDEmptyType` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDExtraThemeData` | `TExtraThemeData` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDFab` | `TFab` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDFabShape` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDFabSize` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDFabTheme` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDFontFamilies` | `TFontFamilies` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDFontLoader` | `TFontLoader` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDFontLoaderWidget` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDFonts` | `TFonts` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDFooter` | `TFooter` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDFooterType` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDForm` | `TForm` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDFormItem` | `TFormItem` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDFormItemType` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDFormValidation` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDFractionPagination` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDIconLabel` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDIcons` | `TIcons` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDImage` | `TImage` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDImageDialog` | `TImageViewer` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDImageType` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDImageViewer` | `TImageViewer` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDImageViewerWidget` | `TImageViewer` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDIndexes` | `TIndexes` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDIndexesAnchor` | `TIndexesAnchor` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDIndexesList` | `TIndexesList` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDInput` | `TInput` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDInputDialog` | `TDialog` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDInputSize` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDInputSpacer` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDInputType` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDInputView` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDItemWidget` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDLabelWidget` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDLink` | `TLink` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDLinkConfiguration` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDLinkSize` | `TLinkSize` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDLinkState` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDLinkStyle` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDLinkType` | `TLinkColorPreset` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDLoading` | `TLoading` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDLoadingController` | `TLoadingController` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDLoadingIcon` | `TLoadingIcon` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDLoadingSize` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDMap` | `TMap` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDMessage` | `TMessage` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDMultiCascader` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDMultiLinkedPicker` | `TPicker` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDMultiPicker` | `TPicker` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDNavBar` | `TNavBar` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDNavBarItem` | `TNavBarItem` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDNavBarItemBorder` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDNoOverlayShape` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDNoneIndicator` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDNoticeBar` | `TNoticeBar` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDNoticeBarStyle` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDNoticeBarTheme` | `TNoticeBarStatus` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDNoticeBarType` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDPageTransformer` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDPicker` | `TPicker` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDPopover` | `TPopover` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDPopoverPlacement` | `TPopoverPlacement` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDPopoverTheme` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDPopoverWidget` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDPopupBasePanel` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDPopupBottomConfirmPanel` | `TPickerPopup` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDPopupBottomDisplayPanel` | `TPopupOptions` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDPopupCenterPanel` | `TPopupOptions` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDProgress` | `TProgress` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDProgressLabelPosition` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDProgressStatus` | `TProgressStatus` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDProgressType` | `TProgressVariant` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDRadio` | `TRadio` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDRadioGroup` | `TRadioGroup` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDRadioGroupState` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDRadioState` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDRadioStyle` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDRadius` | `TRadius` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDRangeSlider` | `TRangeSlider` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDRate` | `TRate` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDRefreshHeader` | `TPullDownRefresh` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDResourceDelegate` | `TResourceDelegate` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDResourceManager` | `TResourceManager` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDResult` | `TResult` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDResultTheme` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDRoundRangeSliderThumbShape` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDRoundRangeSliderTickMarkShape` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDRoundSliderThumbShape` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDRoundSliderTickMarkShape` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDRoundedRectRangeSliderTrackShape` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDRoundedRectSliderTrackShape` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDSearchAlignment` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDSearchBar` | `TSearchBar` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDSearchBarCallBack` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDSearchBarClearEvent` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDSearchBarEvent` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDSearchStyle` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDSelectOption` | `TTreeSelectOption` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDSelectTag` | `TSelectTag` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDSideBar` | `TSideBar` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDSideBarController` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDSideBarItem` | `TSideBarItem` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDSideBarStyle` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDSkeleton` | `TSkeleton` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDSkeletonAnimation` | `TSkeletonAnimation` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDSkeletonRowCol` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDSkeletonRowColObj` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDSkeletonRowColObjStyle` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDSkeletonRowColStyle` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDSkeletonTheme` | `TSkeletonVariant` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDSlidePopupRoute` | `TPopup` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDSlider` | `TSlider` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDSliderState` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDSliderThemeData` | `TSliderThemeData` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDSpacers` | `TSpacers` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDStepper` | `TStepper` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDStepperController` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDStepperEventType` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDStepperIconButton` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDStepperIconType` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDStepperOverlimitFunction` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDStepperOverlimitType` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDStepperSize` | `TStepperSize` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDStepperTheme` | `TStepperVariant` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDSteps` | `TSteps` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDStepsDirection` | `TStepsDirection` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDStepsItemData` | `TStepsItemData` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDStepsStatus` | `TStepsStatus` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDSwipeCell` | `TSwipeCell` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDSwipeCellAction` | `TSwipeCellAction` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDSwipeCellInherited` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDSwipeCellPanel` | `TSwipeCellPanel` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDSwipeDirection` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDSwiperArrowPagination` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDSwiperDotsPagination` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDSwiperPagination` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDSwitch` | `TSwitch` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDSwitchSize` | `TSwitchSize` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDSwitchState` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDSwitchType` | `TSwitchVariant` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDTDResourceBuilder` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDTab` | `TTab` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDTabBar` | `TTabsBar` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDTabBarIndicator` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDTabBarOutlineType` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDTabBarVerticalIndicator` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDTabBarView` | `TTabsBarView` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDTabOutlineType` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDTabSize` | `TTabsBarSize` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDTable` | `TTable` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDTableCol` | `TTableColumn` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDTableColAlign` | `TTableColumnAlign` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDTableColFixed` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDTableEmpty` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDTableState` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDTag` | `TTag` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDTagShape` | `TTagShape` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDTagSize` | `TTagSize` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDTagStyle` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDTagTheme` | `TTagColorPreset` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDTapEvent` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDTapFunction` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDText` | `TText` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDTextConfiguration` | `TTextThemeData` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDTextLabel` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDTextPaddingConfig` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDTextSpan` | `TTextSpan` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDTextarea` | `TTextarea` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDTextareaLayout` | `TTextareaLayout` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDTheme` | `TThemeData` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDThemeData` | `TThemeData` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDTimeCounter` | `TTimeCounter` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDTimeCounterController` | `TTimeCounterController` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDTimeCounterDirection` | `TTimeCounterDirection` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDTimeCounterSize` | `TTimeCounterSize` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDTimeCounterStatus` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDTimeCounterStyle` | `TTimeCounterVariant` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDTimeCounterTheme` | `TTimeCounterVariant` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDToast` | `TToast` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDToastConfig` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDTreeSelect` | `TTreeSelect` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDTreeSelectChangeEvent` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDTreeSelectStyle` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDUpload` | `TUpload` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDUploadBoxType` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDUploadClickEvent` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDUploadErrorEvent` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDUploadFile` | `TUploadFile` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDUploadFileStatus` | `TUploadFileStatus` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDUploadMediaType` | `TUploadMediaType` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDUploadType` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDUploadValidatorError` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDUploadValidatorEvent` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDUploadValueChangedEvent` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDate` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TGIconHeaderWidget` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TGIconHeaderWidgetState` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TapCallback` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TextAlignment` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TrapezoidPath` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `horizontalChild` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `slideTransitionFromToAlignment` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | diff --git a/PUBLISH.md b/PUBLISH.md index d51b28e4f5..8b4ff0b3ed 100644 --- a/PUBLISH.md +++ b/PUBLISH.md @@ -1,15 +1,34 @@ # 版本发布流程 -## 发布流程 +## 1.0 发布前准备 + +1. 固定发布候选提交,记录完整 SHA、目标版本及 Flutter/Dart 版本;统一组件 pubspec、示例 pubspec 与 example/assets/version 的版本展示及构建号。本轮准备不等于已经发布 1.0。 +2. 从 `0.2.7` 升级的说明统一维护在 [MIGRATION_1_0.md](./MIGRATION_1_0.md)。执行 `node scripts/sync-readme.mjs` 同步包、站点和示例代码;不直接改副本。 +3. 在 Flutter 3.32.0 和当前 stable 的隔离环境解析依赖并执行严格分析、Upload 回归、独立迁移消费测试;记录图片选择器及平台实现包的实际版本。最低版本、正常升级、业务同时依赖较新图片选择器三个场景分别留证。 +4. 运行 `dart run tool/run_component_regression.dart`、共享 Demo 功能及工具自测。Linux Flutter 3.32.0 的视觉回归先无更新运行;未登记场景单独验证。不能以批量更新 Golden 或更改容差消除未知差异。 +5. 验证 Android/iOS/Web 构建;依照实际解析的插件最低要求检查宿主平台配置。iOS 无签名构建只证明构建链,不等于真机运行或 App Store 交付。 +6. 在最终候选上填写 [人工验收表](./specs/058-release-preparation/manual-acceptance.md),覆盖输入/输入法、浮层、日期/滚动、字体/主题、权限和异步结果。设备、设计、Review 记录缺失的项目仍待办,不因旧 PR 合并自动关闭。 +7. 在 `tdesign-component` 执行 `flutter pub publish --dry-run`,检查版本、README/迁移说明、许可证和字体资源包含在包中,确认无单一版本依赖警告。独立宿主必须通过公开包入口编译与关键交互,不能依赖本库内部测试 helper。 +8. 先核对 [首批差异最新处置](./specs/060-token-difference-resolution/acceptance.md);候选补丁不等于已实施/通过视觉验收,32项处置不替代其余524项审查。再核对 [组件消费逐项验收](./specs/059-component-token-runtime-evidence/acceptance.md):功能回归通过不等于Token/视觉审查完成;按该记录检查仍未关闭的差异和运行缺口。另核对 [发布准备记录](./specs/058-release-preparation/acceptance.md) 与 [尚未处理的 CI 审查](./specs/057-release-readiness-audit/ci-review.md)。本轮没有实施 CI/远端规则调整;未关闭的发布门槛仍须在正式发布前处理。 + +## 现有仓库自动化流程 + +以下描述已有实现,不表示所有正式交付环节都已自动化: 1. 从 `develop` 新建 `release/x.y.z` 分支,修改 `tdesign-component/pubspec.yaml` 中的版本号,并创建目标为 `develop` 的 Pull Request。 2. PR 打开或更新时,Auto Release workflow 会生成从上个版本到当前版本的 CHANGELOG 草稿,并评论到 release PR。 -3. 发布人检查并整理 CHANGELOG;按 workflow 约定编辑对应评论,自动化会将确认后的内容写入 `tdesign-site/CHANGELOG.md`。 +3. 发布人检查并整理 CHANGELOG;按 workflow 约定编辑对应评论,自动化会将确认后的内容写入 `tdesign-site/CHANGELOG.md`。组件 CHANGELOG 由 CLI 生成,不手工改写。 4. 确认无误后合并 release PR 到 `develop`。 -5. release PR 合并后,Auto Release workflow 在 `develop` 上创建版本 tag。 -6. tag 创建后,TAG_PUSH workflow 将 `develop` 合并到 `main` 并推送,随后触发站点和发布流程。 +5. release PR 合并后,Auto Release workflow 创建版本 tag。 +6. tag 创建后,TAG_PUSH workflow 将当时的 `develop` 合并到 `main` 并推送。 + +相关实现:`.github/workflows/auto-release.yml`、`.github/workflows/tag-push.yml`。现有流程存在候选 SHA 与移动分支不一致的风险,具体审查保留在上述 CI 报告。正式发布人必须核实 tag、包及线上产物来源;不能证明一致时暂停交付。不要将 tag 创建或任务关闭当成包/站点/APK 已验证成功。 -相关实现: +## 正式上传和上线核对 -- `.github/workflows/auto-release.yml` -- `.github/workflows/tag-push.yml` +- 在最终 release PR 中把目标版本切换为 `1.0.0`,完成最终检查后由发布人按团队的 pub.dev/站点/CDN 发布权限执行实际上传;准备阶段不提前发布,不复用已存在的版本号。 +- 包、站点及 Demo APK 使用同一验收候选,记录来源 SHA、版本和产物哈希。确认正式站点的迁移页、API、示例代码与包接口一致。 +- pub.dev 正式 1.0 可用后,将根 README 的预发布源码依赖示例改为 `tdesign_flutter: ^1.0.0`,再同步包和站点副本。不要在版本不存在时给用户一个无法安装的稳定版依赖。 +- 发布后新建业务宿主,只声明 pub.dev 的 `tdesign_flutter: ^1.0.0`,重新获取依赖并验证本文迁移示例。准备阶段的 path 依赖和运行时文件副本验证不能替代该步骤。 +- 检查正式站点资源和缓存;从二维码/下载链接实际下载 APK,核对包版本、安装和主要页面。CDN 链接能访问不代表文件就是目标版本。 +- 交付失败时停止传播有问题的版本,记录受影响产物;按 pub.dev 的实际机制处理撤回或后续修复版本。不要移动已对外发布的 tag 或悄悄替换相同版本内容。 diff --git a/README.md b/README.md index 589ca6020d..480aff035b 100644 --- a/README.md +++ b/README.md @@ -45,6 +45,8 @@ Download link: [tdesign-flutter-example.apk](https://tdesign.gtimg.com/flutter/t ## 🚀 Quick Start +Upgrading from 0.2.7? Read the [1.0 migration guide (Chinese)](./MIGRATION_1_0.md) before changing the dependency. Version 1.0 contains breaking API and behavior changes. + Requires Flutter ≥ 3.32.0 and Dart ≥ 3.8.0. ### Add Dependency diff --git a/README_zh_CN.md b/README_zh_CN.md index c8772e9acc..aa165c3c21 100644 --- a/README_zh_CN.md +++ b/README_zh_CN.md @@ -45,6 +45,8 @@ ## 🚀 快速开始 +从 0.2.7 升级时,请先阅读 [1.0 迁移指南](./MIGRATION_1_0.md)。1.0 包含不兼容的接口与默认行为变化,不能只替换组件前缀。 + 要求 Flutter ≥ 3.32.0、Dart ≥ 3.8.0。 ### 添加依赖 diff --git a/scripts/sync-readme.mjs b/scripts/sync-readme.mjs index 7bf973f344..38314ef809 100644 --- a/scripts/sync-readme.mjs +++ b/scripts/sync-readme.mjs @@ -17,12 +17,19 @@ const rootDir = `${__dirname}/..`; const transforms = { // 移除语言切换链接: [English](./README.md) | 简体中文 removeLangLink: (content) => { - return content.replace(/\[English\]\(\.\/README\.md\) \| 简体中文\n?/g, '') + return content.replaceAll('./MIGRATION_1_0.md', '/flutter/migration-1-0').replace(/\[English\]\(\.\/README\.md\) \| 简体中文\n?/g, '') .replace('https://raw.githubusercontent.com/Tencent/tdesign-flutter/develop/tdesign-site/site/public/assets/qrcode/t_apk_qrcode.png', `data:image/png;base64,${readFileSync(`${rootDir}/tdesign-site/site/public/assets/qrcode/t_apk_qrcode.png`).toString('base64')}`); }, }; const syncConfig = [ + { + source: 'MIGRATION_1_0.md', + targets: [ + { path: 'tdesign-component/MIGRATION_1_0.md' }, + { path: 'tdesign-site/site/docs/migration-1-0.md' }, + ], + }, { source: 'README.md', targets: [ @@ -43,6 +50,25 @@ const syncConfig = [ // ============================================================ function sync() { + const guidePath = `${rootDir}/MIGRATION_1_0.md`; + if (existsSync(guidePath)) { + const examples = readFileSync(`${rootDir}/tdesign-component/tool/fixtures/token_migration/test/support/migration_027_examples.dart`, 'utf-8'); + const guide = readFileSync(guidePath, 'utf-8').replace( + /[\s\S]*?/g, + (_, name) => { + const start = `// migration:${name}:start`; + const end = `// migration:${name}:end`; + const offset = examples.indexOf(start); + const endOffset = examples.indexOf(end, offset + start.length); + if (offset < 0 || endOffset < 0) { + throw new Error(`Missing migration example: ${name}`); + } + const source = examples.slice(offset + start.length, endOffset).trim(); + return `\n\`\`\`dart\n${source}\n\`\`\`\n`; + }, + ); + writeFileSync(guidePath, guide, 'utf-8'); + } for (const { source, targets } of syncConfig) { const sourcePath = `${rootDir}/${source}`; diff --git a/specs/005-swipe-cell-theme-review-fixes/tasks.md b/specs/005-swipe-cell-theme-review-fixes/tasks.md index 473eae9e11..3bdd39fa07 100644 --- a/specs/005-swipe-cell-theme-review-fixes/tasks.md +++ b/specs/005-swipe-cell-theme-review-fixes/tasks.md @@ -1,9 +1,11 @@ +> 2026-10-15 发布前核销:当前自动检查与历史阶段记录分开;证据和保留待办见 [Spec 057](../057-release-readiness-audit/acceptance.md)。 + # TSwipeCell 组件 Review 修复 - 任务清单 ## TODO -- [ ] 确认 `flutter analyze` 无告警(本地无环境,依赖后续人工/CI 确认) -- [ ] 确认新增单元测试与主题验收测试通过(本地无环境,依赖后续验证) +- [x] 当前基线双版本严格 analyze 已通过,历史“本地无环境”待办已核销;见 Spec 057。 +- [x] 当前基线 SwipeCell 与主题验收测试已由组件回归入口执行并通过;见 Spec 057。 ## DOING @@ -17,4 +19,4 @@ ## DONE -- (待人工验证测试后更新) +- 自动测试待办已核销。上方实现条目保留原阶段记录;最终公开 API 以当前源码及后续 Spec 048 为准。 diff --git a/specs/011-text-flutter-contract-alignment/migration.md b/specs/011-text-flutter-contract-alignment/migration.md index ea40acb693..6ab0574a2a 100644 --- a/specs/011-text-flutter-contract-alignment/migration.md +++ b/specs/011-text-flutter-contract-alignment/migration.md @@ -1,3 +1,5 @@ +> 历史迁移草稿:本文仅描述 Spec 011 当时的 API,不能直接用于 0.2.7 → 1.0。后续收敛已改变 TText 字体入口与 Material 默认继承规则;当前迁移说明编写方案见 [Spec 057](../057-release-readiness-audit/migration-plan.md)。保留原记录供追溯。 + # Breaking 迁移指南 本次重构不保留 deprecated 别名或旧行为分支。旧调用会产生编译错误,请按以下方式迁移。 diff --git a/specs/015-checkbox-demo-card-alignment/tasks.md b/specs/015-checkbox-demo-card-alignment/tasks.md index 469e4d47bf..adf163b68c 100644 --- a/specs/015-checkbox-demo-card-alignment/tasks.md +++ b/specs/015-checkbox-demo-card-alignment/tasks.md @@ -1,3 +1,5 @@ +> 2026-10-15 发布前核销:当前自动检查与历史阶段记录分开;证据和保留待办见 [Spec 057](../057-release-readiness-audit/acceptance.md)。 + # 实施任务 - [x] DONE 明确需求和验收边界 @@ -5,5 +7,6 @@ - [x] DONE 补充或更新测试 - [x] DONE 修复 Checkbox 标题与副标题颜色污染 - [x] DONE 更新示例和生成代码片段 -- [ ] DOING 重新执行 Golden 与真机截图验证 +- [x] 当前基线 Linux 已登记 Checkbox Golden 无更新通过,见 Spec 057。 +- [ ] 真机截图及设计对照仍待验收;自动 Golden 不替代人工证据。 - [ ] TODO 完成 Review diff --git a/specs/019-popup-radius-duration-alignment/tasks.md b/specs/019-popup-radius-duration-alignment/tasks.md index 6693888911..0ab9660bb4 100644 --- a/specs/019-popup-radius-duration-alignment/tasks.md +++ b/specs/019-popup-radius-duration-alignment/tasks.md @@ -1,3 +1,5 @@ +> 2026-10-15 发布前核销:当前自动检查与历史阶段记录分开;证据和保留待办见 [Spec 057](../057-release-readiness-audit/acceptance.md)。 + # 任务清单 ## TODO @@ -6,7 +8,7 @@ ## DOING -- [ ] CI 验证:`flutter analyze --fatal-infos` 与 focused tests 全绿 +- [x] 当前基线双版本严格 analyze、Popup 组件回归和 Linux 登记 Golden 已通过;真机验收仍独立待办,见 Spec 057。 ## DONE diff --git a/specs/027-component-test-manifest/tasks.md b/specs/027-component-test-manifest/tasks.md index 53c3fb8c30..1f56da9464 100644 --- a/specs/027-component-test-manifest/tasks.md +++ b/specs/027-component-test-manifest/tasks.md @@ -1,3 +1,5 @@ +> 2026-10-15 发布前核销:当前自动检查与历史阶段记录分开;证据和保留待办见 [Spec 057](../057-release-readiness-audit/acceptance.md)。 + # Tasks - [x] DONE 建立强类型组件测试 manifest @@ -5,4 +7,4 @@ - [x] DONE 统一 GitHub/CNB Demo 回归入口 - [x] DONE 补齐 manifest 结构与路径测试 - [x] DONE 运行严格 analyze 和完整 Demo 功能回归 -- [ ] TODO 提交、推送并复核远端 PR +- [x] DONE 已随 #1078 合入 develop;当前双版本回归工具自测和实际调度均通过,见 Spec 057。 diff --git a/specs/027-slider-demo-alignment/tasks.md b/specs/027-slider-demo-alignment/tasks.md index d05f6b99c1..5ebc48efd4 100644 --- a/specs/027-slider-demo-alignment/tasks.md +++ b/specs/027-slider-demo-alignment/tasks.md @@ -1,7 +1,9 @@ +> 2026-10-15 发布前核销:当前自动检查与历史阶段记录分开;证据和保留待办见 [Spec 057](../057-release-readiness-audit/acceptance.md)。 + # Tasks - [x] DONE 固定跨端基线并完成 API Review - [x] DONE 对齐公开 Demo 的 8 个区块与 19 个组件实例 - [x] DONE 修复静态数值、Theme 优先级、thumb 与禁用视觉 - [x] DONE 更新功能测试、Golden、覆盖率并完成双版本验证 -- [ ] DOING 提交、推送并远端复核 PR +- [x] DONE 已随 #1063 合入 develop;当前基线 CI 已通过。历史分支提交/推送待办核销,见 Spec 057。 diff --git a/specs/028-backtop-contract-alignment/tasks.md b/specs/028-backtop-contract-alignment/tasks.md index 188295747c..2ae851fede 100644 --- a/specs/028-backtop-contract-alignment/tasks.md +++ b/specs/028-backtop-contract-alignment/tasks.md @@ -1,3 +1,5 @@ +> 2026-10-15 发布前核销:当前自动检查与历史阶段记录分开;证据和保留待办见 [Spec 057](../057-release-readiness-audit/acceptance.md)。 + # 实施任务 - [x] DONE 冻结 Figma、小程序 1.16.0 与当前 Flutter 差异 @@ -9,4 +11,5 @@ - [x] DONE 生成并检查 API 与示例代码资产 - [x] DONE 执行 Flutter 3.32.0 与 latest 验证 - [x] DONE 重新执行 Android 真机可见交互与普通 APK 持久安装验收 -- [ ] TODO 更新独立 GitHub PR 并完成 CNB CodeBuddy Review +- [x] DONE GitHub #1079 已合入 develop;当前基线 CI 通过,见 Spec 057。 +- [ ] 核对 CNB CodeBuddy Review 的最终处理记录;本轮未取得 CNB 证据,不因 GitHub 合并标记为完成。 diff --git a/specs/028-stepper-demo-alignment/tasks.md b/specs/028-stepper-demo-alignment/tasks.md index fed45b1d43..d81bed42e4 100644 --- a/specs/028-stepper-demo-alignment/tasks.md +++ b/specs/028-stepper-demo-alignment/tasks.md @@ -1,3 +1,5 @@ +> 2026-10-15 发布前核销:当前自动检查与历史阶段记录分开;证据和保留待办见 [Spec 057](../057-release-readiness-audit/acceptance.md)。 + # Tasks - [x] 固定 #1064 head、Figma 节点和小程序参考版本,完成 API Review。 @@ -9,4 +11,5 @@ - [x] 完成本地 Flutter 3.32.0 / 3.47.0 回归、严格 analyze、98.51% 生产覆盖率及 CI 工具自测;合并最新 `develop` 后再次通过。 - [x] 检查并更新 Linux Demo 和组件明暗 Golden;四张图精确复跑通过,登记视觉回归入口。 - [x] 提交、推送并同步 GitHub/CNB PR 标题与描述;触发 CNB 定向 review。 -- [ ] 推送手机验收修复后验证远端实际 latest 并重新触发 CNB review;Android/iOS 真机键盘、IME 和系统字体仍待验证。 +- [x] 当前基线远端 latest 分析和 Stepper 功能回归已实际通过,见 Spec 057。 +- [ ] 核对 CNB Review 的处理记录;Android/iOS 真机键盘、IME 和系统字体仍待验证。 diff --git a/specs/028-tabbar-design-alignment/tasks.md b/specs/028-tabbar-design-alignment/tasks.md index 6fbb9521af..afd3243d52 100644 --- a/specs/028-tabbar-design-alignment/tasks.md +++ b/specs/028-tabbar-design-alignment/tasks.md @@ -1,3 +1,5 @@ +> 2026-10-15 发布前核销:当前自动检查与历史阶段记录分开;证据和保留待办见 [Spec 057](../057-release-readiness-audit/acceptance.md)。 + # 实施任务 - [x] DONE 2026-09-27:删除 `showTopBorder`、实例/Theme `topBorder` 与 `placeholder`,Filled 固定默认顶线,`useSafeArea` 仅决定是否以组件背景填充底部安全区;自定义 Demo 恢复默认顶线。Flutter 3.32.0/3.47.0 组件测试各 44/44、Demo 测试各 9/9、两个包完整 analyze 零告警;3.32.0 生产覆盖率 504/513(98.25%)。Linux 3.32.0 组件 Golden 14/14 与共享导航矩阵 2/2 无更新通过;公开 Demo 先确认 8 张仅新增顶线,再更新 8 张且无更新严格复跑 11/11 通过。 @@ -38,7 +40,8 @@ - [x] DONE 收敛水波纹点击识别器、回调文档与单次通知回归 - [x] DONE 删除重复徽标配置层,以可空 TBadge 和自身 offset 收敛显隐与定位 - [x] DONE 撤回仅服务 TabBar 的公共 `ExamplePage.navBarTitle` 扩展 -- [ ] TODO 本轮修复推送后,检查新 head CI 并完成新一轮 CNB Review +- [x] 当前基线 TabBar 回归和 Linux 登记 Golden 的 CI 已通过,见 Spec 057。 +- [ ] 核对新一轮 CNB Review 的处理记录;本轮未取得 CNB 证据。 - [x] DONE 修复二级菜单默认宽度并同步公开 dartdoc - [x] DONE 补充九个公开实例的点击功能断言与明暗 postAction Golden - [x] DONE 补充纯文本点击和双层菜单选择 Toast 的独立明暗 Golden diff --git a/specs/030-indexes-design-alignment/tasks.md b/specs/030-indexes-design-alignment/tasks.md index 69ef177a5f..bada4f4af8 100644 --- a/specs/030-indexes-design-alignment/tasks.md +++ b/specs/030-indexes-design-alignment/tasks.md @@ -1,3 +1,5 @@ +> 2026-10-15 发布前核销:当前自动检查与历史阶段记录分开;证据和保留待办见 [Spec 057](../057-release-readiness-audit/acceptance.md)。 + # 任务 - [x] 读取 Figma 组件集属性。 @@ -10,7 +12,7 @@ - [x] 完成 Flutter 3.32 Linux 8 张 Indexes Demo + 2 张共享导航矩阵明暗 Golden,严格无更新复跑并逐张人工复核。 - [x] 完成双 Flutter 版本 analyze/test 与覆盖率门禁。 - [x] 生成 API/示例产物。 -- [ ] 独立提交、推送并创建关联 #1027 的 PR。 +- [x] 已创建并合入 #1081/#1133,#1027 正文已列出 Indexes PR;当前基线 CI 通过,见 Spec 057。 - [x] 修复 CodeBuddy 专项复审指出的 reverse、动态 indexList、Theme 插值与提示约束边界并完成回归。 - [x] 覆盖 reverse 最近锚点无进展边界,以视口步进继续构建目标锚点,并在滚动边界安全终止。 - [x] 修复固定默认尺寸在主题动画 50% 处跳变,并补齐固定默认值、动态 token 回退和 ThemeData 中间态测试。 diff --git a/specs/030-steps-design-alignment/tasks.md b/specs/030-steps-design-alignment/tasks.md index 7a3739acec..e8ce230a84 100644 --- a/specs/030-steps-design-alignment/tasks.md +++ b/specs/030-steps-design-alignment/tasks.md @@ -1,3 +1,5 @@ +> 2026-10-15 发布前核销:当前自动检查与历史阶段记录分开;证据和保留待办见 [Spec 057](../057-release-readiness-audit/acceptance.md)。 + # 任务清单 - [x] 完成新版 Figma / 小程序 / Flutter 三方差异输出 @@ -12,4 +14,5 @@ - [x] 处理上一轮 CodeBuddy Review 反馈 - [x] 补充逐字段主题、双轴 display、实际代码面板和核心片段编译回归 - [x] 用命名构造分离 progress/selectable/display,移除无效参数组合与 onChange 视觉耦合 -- [ ] 本轮修复推送后,检查新 head CI 并完成新一轮 CNB Review +- [x] 当前基线 Steps 回归和 Linux 登记 Golden 的 CI 已通过,见 Spec 057。 +- [ ] 核对新一轮 CNB Review 的处理记录;本轮未取得 CNB 证据。 diff --git a/specs/031-navbar-contract-alignment/tasks.md b/specs/031-navbar-contract-alignment/tasks.md index cb741d6664..5157e7b971 100644 --- a/specs/031-navbar-contract-alignment/tasks.md +++ b/specs/031-navbar-contract-alignment/tasks.md @@ -1,3 +1,5 @@ +> 2026-10-15 发布前核销:当前自动检查与历史阶段记录分开;证据和保留待办见 [Spec 057](../057-release-readiness-audit/acceptance.md)。 + # 实施任务 - [x] DONE 冻结新版 Figma H5/Flutter、小程序 develop 与当前 Flutter 差异 @@ -10,4 +12,5 @@ - [x] DONE 最终代码 Android 真机 Hot Restart、可见操作与普通 APK 持久安装 - [x] DONE 修复 TNavBarThemeData 类型安全与连续视觉字段插值 - [x] DONE 补齐 dartdoc、站点文档及可独立理解的 Demo 代码片段 -- [ ] TODO 独立 GitHub / CNB PR、#1027 NavBar 条目与 CodeBuddy Review +- [x] GitHub #1082/#1136 已合入,#1027 正文已有 NavBar 条目;当前基线 CI 通过,见 Spec 057。 +- [ ] 核对 CNB PR 与 CodeBuddy Review 的处理记录;本轮未取得 CNB 证据。 diff --git a/specs/032-sidebar-design-alignment/tasks.md b/specs/032-sidebar-design-alignment/tasks.md index df8a401310..75b38c3e52 100644 --- a/specs/032-sidebar-design-alignment/tasks.md +++ b/specs/032-sidebar-design-alignment/tasks.md @@ -1,3 +1,5 @@ +> 2026-10-15 发布前核销:当前自动检查与历史阶段记录分开;证据和保留待办见 [Spec 057](../057-release-readiness-audit/acceptance.md)。 + # 任务清单 - [x] 完成新版 Figma / 小程序 develop / Flutter 三方差异输出 @@ -7,7 +9,8 @@ - [x] 完成组件、Demo、覆盖率和严格 light/dark Golden - [x] 完成 Flutter 3.32.0 / latest analyze 与构建 - [x] 完成 Android 真机热重启、操作、集成测试与持久安装 -- [ ] 创建独立 GitHub/CNB PR并关联 #1027 对应条目 +- [x] GitHub #1083/#1135 已合入,#1027 正文已有 SideBar 条目,见 Spec 057。 +- [ ] 核对对应 CNB PR 的处理记录;本轮未取得 CNB 证据。 - [ ] 完成 CodeBuddy Review 并处理反馈 - [x] 修复 nullable Theme 字段在动画中间态制造临时显式样式,并补齐中间态回归测试 - [x] 明确并验证 `TSideBarItem.badge.child` 必须为空的契约 diff --git a/specs/038-skeleton-design-alignment/tasks.md b/specs/038-skeleton-design-alignment/tasks.md index 4b56d87c07..28cbc26edf 100644 --- a/specs/038-skeleton-design-alignment/tasks.md +++ b/specs/038-skeleton-design-alignment/tasks.md @@ -1,3 +1,5 @@ +> 2026-10-15 发布前核销:当前自动检查与历史阶段记录分开;证据和保留待办见 [Spec 057](../057-release-readiness-audit/acceptance.md)。 + # 实施任务 - [x] DONE 冻结 develop、移动端设计与小程序公开 Demo 参考证据 @@ -8,4 +10,4 @@ - [x] DONE 功能验证后生成并复验 Golden - [x] DONE 执行双版本、覆盖率和严格 analyze - [x] DONE 最终运行 Web Demo 比对两种动画 -- [ ] TODO 单提交、创建独立 PR、更新 Issue #1027 正文 +- [x] DONE #1094 已合入,#1027 正文已列出 Skeleton PR;当前基线 CI 通过,见 Spec 057。 diff --git a/specs/047-miniprogram-token-alignment/acceptance.md b/specs/047-miniprogram-token-alignment/acceptance.md index 42233abe72..52502e34ff 100644 --- a/specs/047-miniprogram-token-alignment/acceptance.md +++ b/specs/047-miniprogram-token-alignment/acceptance.md @@ -1,3 +1,5 @@ +> 当前状态(2026-10-15):以下为分阶段历史记录。`develop@30767a55` 的双版本功能与 Linux 3.32.0 已登记 Golden 已通过;正式工具 #29 已合入且 API --check 通过。旧失败数/待推送描述不作为当前结论。未登记场景、跨端像素和真机验收仍须独立核验,见 [Spec 057](../057-release-readiness-audit/acceptance.md)。 + # 验收记录 ## 验证环境 diff --git a/specs/047-miniprogram-token-alignment/tasks.md b/specs/047-miniprogram-token-alignment/tasks.md index c5c6728248..85983fe2ad 100644 --- a/specs/047-miniprogram-token-alignment/tasks.md +++ b/specs/047-miniprogram-token-alignment/tasks.md @@ -1,15 +1,17 @@ +> 2026-10-15 发布前核销:当前自动检查与历史阶段记录分开;证据和保留待办见 [Spec 057](../057-release-readiness-audit/acceptance.md)。 + # 实施任务 -- [ ] DOING 已按用户指定的全局 Radius 规范恢复 `radiusSmall/default/large/extraLarge/round = 3/6/9/12/999dp`,移除独有的 `radiusMedium`;受影响组件与 Linux 3.32.0 Golden 的最终验证待完成。 +- [x] DONE 全局 Radius 规范恢复及移除 `radiusMedium` 的自动回归已通过;当前基线双版本功能和 Linux 3.32.0 登记 Golden 全绿,见 Spec 057。 - [x] DONE 固定小程序 `develop` 源码提交并检查 Flutter 工作区。 - [x] DONE 建立全局 216 项与组件 804 项的静态清单、来源和差异分类;全局两模式的标量及复合结构均已逐键比较,组件小程序侧明暗默认值和冲突候选已逐项提取。 - [ ] DOING 核对组件变量的真实消费链,按需要开放 Theme 字段,不机械暴露全部变量;BackTop、Indexes、TabBar 的圆角来源已核实并修正,TabBar 胶囊阴影改用小程序的 `shadow-3`;Tag 四种语义色的深浅色回退链已补运行时测试。 - [x] DONE 全局 Token 216 个小程序同名键、明暗引用链和同名 getter 齐备;两端独有键均为 0。未批准静态值差、引用链差异和缺失 getter 均为 0;已批准例外仅有 `radiusCircle` 及浅色 `grayColor3`(连带 4 个引用项),视觉仍待验。 - [ ] TODO 固定设计与 Flutter 的实际字体后,直接核对 Tag 文字排版宽度;确认组件是否应显式解析全局字体族,再判定 38px 设计实例的剩余宽差。不通过增大 Padding 或固定宽度凑单个文案。 -- [ ] TODO 继续逐组件核实 Flutter 的最终消费值与必要的 Theme 覆盖;804 项默认值提取与静态映射不是逐项运行验证。优先处理 2 个回退冲突、1 个未解析暗色值、3 个无回退变量。 +- [ ] TODO 继续逐组件核实 Flutter 的最终消费值与必要的 Theme 覆盖;804 项默认值提取与静态映射不是逐项运行验证。历史静态候选包含 2 个回退冲突、1 个未解析暗色值、3 个无回退变量;须按当前源码重判,不能直接列为当前已复现缺陷。 - [x] DONE 补充全局 Token 测试、文档与 Flutter 3.32.0 / 3.47.0 静态检查和完整组件回归。 -- [ ] DOING 已在 Flutter 3.32.0 Linux 复跑受影响组件及 Demo 的无更新 Golden;固定半径与默认字体缺字已修复,仍有 35 张旧基线差异,需对正确 Token 值、TabBar 设计布局和阴影继续做设计裁定,不直接更新。 +- [x] DONE 当前基线 Linux 3.32.0 登记视觉套件无更新通过;“35 张旧基线差异”为历史检查点,已不作为当前失败数。跨端设计裁定仍由下方待办跟踪,见 Spec 057。 - [ ] TODO 对需设计稿裁定的歧义进行后续比对。 - [x] DONE 按已裁定设计稿修正 Avatar 默认背景/方角、Slider 普通与胶囊未选中轨道、Tag 四档方角及 Cell Demo 页面底色;组件/页面聚焦测试和双版本严格分析已通过。旧 Linux Golden 仍有混合差异,未更新基线,不能据此宣称整页视觉验收完成。 - [x] DONE Tag 方角按用户重新裁定为组件 Theme 显式值优先、否则全局 `radiusSmall = 3dp`;文字行盒与对应字体行高一致,显式组件 Theme 字体同时决定单行外盒高度。 diff --git a/specs/048-component-token-theme-ownership/acceptance.md b/specs/048-component-token-theme-ownership/acceptance.md index e38d1f3b60..9b3f6423db 100644 --- a/specs/048-component-token-theme-ownership/acceptance.md +++ b/specs/048-component-token-theme-ownership/acceptance.md @@ -1,3 +1,7 @@ +> 最新处置(2026-10-15,Spec060):已实修Ghost语义回退的2个观察项,8项由既有Flutter契约及运行断言支持;21项差异与1项平台几何已有具体方案,524项仍待补运行。当前代码为30767a55上的未提交工作区,本地新指纹验证见 [Spec060](../060-token-difference-resolution/acceptance.md),不沿用旧远端CI作为本次修复通过证据。 + +> 当前状态(2026-10-15):以下为分阶段历史记录。`develop@30767a55` 的双版本功能与 Linux 3.32.0 已登记 Golden 已通过;正式工具 #29 已合入且 API --check 通过。旧失败数/待推送描述不作为当前结论。未登记场景、跨端像素和真机验收仍须独立核验,见 [Spec 057](../057-release-readiness-audit/acceptance.md)。 + # 验收记录 ## 2026-10-03 breaking 迁移独立消费验收与边界修正 diff --git a/specs/048-component-token-theme-ownership/component-consumption-review.md b/specs/048-component-token-theme-ownership/component-consumption-review.md index 3b163681db..5b32986a0e 100644 --- a/specs/048-component-token-theme-ownership/component-consumption-review.md +++ b/specs/048-component-token-theme-ownership/component-consumption-review.md @@ -1,3 +1,5 @@ +> 最新处置(2026-10-15,Spec060):已实修Ghost语义回退的2个观察项,8项由既有Flutter契约及运行断言支持;21项差异与1项平台几何已有具体方案,524项仍待补运行。当前代码为30767a55上的未提交工作区,本地新指纹验证见 [Spec060](../060-token-difference-resolution/acceptance.md),不沿用旧远端CI作为本次修复通过证据。 + # 组件 Token 消费审查队列 数据来自 [`component-consumption-audit.json`](./component-consumption-audit.json),固定小程序源码 `1a1c5ca135b0e9bf19abc43a59870c4908a28ad5`。每项均保留小程序变量名、默认浅/暗值、全局回退表达式和 Flutter 代码位置。下表仅是审查范围与优先级,不把静态命中误判为最终绘制一致。 diff --git a/specs/048-component-token-theme-ownership/migration.md b/specs/048-component-token-theme-ownership/migration.md index 573d3f81ba..fb04bf77ce 100644 --- a/specs/048-component-token-theme-ownership/migration.md +++ b/specs/048-component-token-theme-ownership/migration.md @@ -1,3 +1,5 @@ +> 阶段性迁移资料:下表相对当时 develop,不能视为完整的 0.2.7 → 1.0 指南。正式指南须按两个版本的公开入口重新盘点;方案见 [Spec 057](../057-release-readiness-audit/migration-plan.md)。 + # 公开 API 迁移清单 本分支移除了若干**已发布**构造参数或 `ThemeExtension` 字段,属于 breaking change;默认视觉相近不等于源码兼容。以下清单记录相对 `develop` 的迁移方向。库的迁移验收要求替代调用能通过公开包接口编译并执行关键行为;具体业务应用仍需按清单升级,不要求所有未知第三方应用升级后才能发布。发布应使用 breaking 版本和用户可感知的迁移说明,不能作为普通 `refactor` 发布。 diff --git a/specs/048-component-token-theme-ownership/report.md b/specs/048-component-token-theme-ownership/report.md index 610db36d64..37fbf068b6 100644 --- a/specs/048-component-token-theme-ownership/report.md +++ b/specs/048-component-token-theme-ownership/report.md @@ -1,3 +1,5 @@ +> 当前状态(2026-10-15):以下为分阶段历史记录。`develop@30767a55` 的双版本功能与 Linux 3.32.0 已登记 Golden 已通过;正式工具 #29 已合入且 API --check 通过。旧失败数/待推送描述不作为当前结论。未登记场景、跨端像素和真机验收仍须独立核验,见 [Spec 057](../057-release-readiness-audit/acceptance.md)。 + # 组件 Theme/API 收敛与 Golden 复核报告(2026-09-27) > 2026-09-29 更新:用户已将本报告中“实例完整 style 可与组件 Theme 控制同一视觉值并存”的旧口径改为单入口。下文旧章节保留历史证据,本轮新结论见文末。 diff --git a/specs/048-component-token-theme-ownership/tasks.md b/specs/048-component-token-theme-ownership/tasks.md index 33b153024e..7f0ce2a4cd 100644 --- a/specs/048-component-token-theme-ownership/tasks.md +++ b/specs/048-component-token-theme-ownership/tasks.md @@ -1,9 +1,13 @@ +> 最新处置(2026-10-15,Spec060):已实修Ghost语义回退的2个观察项,8项由既有Flutter契约及运行断言支持;21项差异与1项平台几何已有具体方案,524项仍待补运行。当前代码为30767a55上的未提交工作区,本地新指纹验证见 [Spec060](../060-token-difference-resolution/acceptance.md),不沿用旧远端CI作为本次修复通过证据。 + +> 2026-10-15 发布前核销:当前自动检查与历史阶段记录分开;证据和保留待办见 [Spec 057](../057-release-readiness-audit/acceptance.md)。 + # 实施任务 - [x] 合并前审查实测修复 Tag 描边总高少算 2dp、图标占位/关闭图标固定 14dp、小号图文间距错误;统一按尺寸预设和边框盒计算。Cell/CellGroup 各文字槽位按字段合并组件 Theme 与 Token 默认样式,覆盖 TText 和原生 Text;清除 Tag Theme 的 Material 回退残留注释及 API 生成清单中已删除的 Style 类型。新增 19 项组件回归,视觉验证状态见 `acceptance.md`。 - [ ] DOING 盘点组件 Theme、公开 API 和小程序组件变量的真实消费链;已初筛 116 个同名候选,包导出过滤后的 64 项已降至 0;异名同义及 804 个组件变量最终消费仍未完成。 -- [ ] DOING 逐项确定唯一所有者、迁移路径和 breaking 风险;已确认项见 `ownership-table.md`,P0 未裁定项见 `report.md`。 +- [ ] DOING 逐项确定唯一所有者、迁移路径和 breaking 风险;已确认项见 `ownership-table.md`,历史风险见 `report.md`;其中已被后续证据覆盖的状态以 Spec 057 为准。 - [ ] DOING 收敛确认重复的公开控制入口与 Token 回退;已处理的 Button、Input、Dialog action、TabsBar、Tag、SideBar、Text、SwipeCellAction 和 Popup 字段见 `migration.md`。仍须逐组件审查尚未裁定的异名同义入口,不能把已处理组件外推为全仓完成。 - [x] DONE Avatar/Popover 异名同义入口:移除 Avatar Theme `textStyle` 和 Popover 实例 `overlayColor/radius`,将 Popover 圆角收敛到可逐角配置的 Theme `borderRadius`;双版本组件/Demo 功能测试、生成 API 文档与 3.32.0 Linux 无更新 Golden 已执行。Golden 仍有旧基线差异,列在视觉归因任务中,不视为通过。 - [x] DONE AvatarGroup 设计稿复核:按 Figma 三档尺寸对齐全部组成员 1/2/3dp 描边和阴影,修正公开 Demo 的顺序、折叠文案与层叠方向;Figma/develop/current 同尺寸像素比较、双版本聚焦测试及 Linux Golden 无更新复跑见 `acceptance.md`。 @@ -11,13 +15,14 @@ - [x] Text 逐字段恢复 `TTextThemeData` 已发布子树默认能力;恢复 Cascader/Picker 消费。默认回退修正为小程序 14dp/22dp。随后按单一来源规则移除 Material `TextTheme` 与 `DefaultTextStyle` 自动文字继承;旧 Text Demo Golden 结论须以最终源码重新验证,不代表 Figma 像素验收。 - [x] 恢复公开 `TText.style` 作为单实例完整视觉入口,将组合组件状态样式留在仅库内使用的解析路径;子树默认仍由 `TTextThemeData.textStyle` 管理。旧检查点的测试与 Golden 结论需以本轮最终源码重新验证。 - [x] 移除 Material `TextTheme` / 外层 `DefaultTextStyle` 对 TDesign 文字的自动推断;显式链路为全局 Token/Theme → 组件 Theme → 已有实例样式。移除 `TStyleResolver` 的 Material 转发 getter;双版本功能与字体注入测试见 `acceptance.md`。 -- [ ] DOING 以最终源码逐类归因 Linux Golden 的文字字形/行盒与尺寸差异;2026-10-03 已修复 Cell/Popup 组件文字插槽、核对 102 张尺寸变化并在隔离 Linux 环境更新 552 张基线、严格无更新复跑全通过。此结果仍不是逐张 Figma 像素验收,后续新视觉缺陷须单独裁定。 +- [ ] TODO 完成尚未验收的跨端/Figma 像素对照及未登记场景审查。2026-10-03 的 552 张基线记录保留为历史证据;当前已登记 Linux Golden 全绿,不能替代逐状态设计验收,见 Spec 057。 - [x] 全组件改为单向主题链:移除 `tExplicit*` 及 Material 组件外观反向读取,保留 TDesign Theme 向原生 Material 控件投影;Tag 前置图标与正文共用有效前景色。组件的内部已解析样式传递与明暗模式选择不等于外部外观入口。非 Golden 组件回归 2676/2676 通过,八张已裁定的 Linux Demo Golden 已更新;最终完整 Linux 视觉矩阵严格无更新通过,3.32.0/3.47.0 组件包和 Example 分析零诊断。 - [x] 实例保留 `TText.font` 作为 TDesign 字体预设,移除 `fontWeight/fontFamily/textColor/isTextThrough/lineThroughColor` 分散便利字段,迁移仓内调用与测试;独立消费包已验证实例 style、富文本与组件 Theme 的公开替代调用。 - [x] 既有 Button/Input 层级规则和 outline 状态回退完成测试;本轮进一步移除与完整实例 `style` 重复的组件 Theme 字段,测试需按新的单入口契约复核,旧规则不再作为验收标准。 -- [ ] DOING 更新源码 dartdoc、Demo 用法与组件测试;已迁移范围完成,待全量回归和 breaking 迁移说明。 -- [ ] DOING 双版本分析、聚焦功能和固定 Linux 3.32.0 无更新 Golden 比对;`37ce253b` 远端双版本分析、测试、全量 Linux Golden 与构建通过。新增独立消费包已在 3.32/3.47 本地验证,新增 CI 步骤仍待推送后执行。历史 47 张的阶段性结果见 `acceptance.md`,不能当作最终源码状态。 -- [ ] DOING 804 项组件变量已按冻结源码逐项建静态证据;纠正 Less 动态消费误判后,10 项未见静态消费者、81 项属于尚无 Flutter 对应组件的已消费变量;Button 12 项、Tag 12 项默认 Widget 值,Tag 7 项及 Switch/Fab/Form/PullDownRefresh/DropdownItem 各 1 项回退路径已裁定,Progress 9 项已另做默认 Widget/Painter 消费链复核(不等于跨端视觉完成),其余项目仍在 677 项待核队列中,不能直接扣减最终视觉待审数。 +- [x] DONE 当前基线 dartdoc 审计、Demo/组件自动回归已通过,见 Spec 057。 +- [x] 仅面向 0.2.7 → 1.0 的迁移指南已落地,覆盖组件入口、行为和删除能力;独立消费用例双版本通过,见根 MIGRATION_1_0.md 与 Spec 058。此项不代表677项消费审查或全部业务迁移完成。 +- [x] DONE 当前基线双版本分析、组件和 Demo 功能、独立消费包迁移检查及 Linux 3.32.0 登记 Golden 全部通过;消费包 CI 步骤实际成功,不再等待推送。历史检查点保留于 `acceptance.md`,当前证据见 Spec 057。 +- [ ] DOING 804 项组件变量已按冻结源码逐项建静态证据;纠正 Less 动态消费误判后,10 项未见静态消费者、81 项属于尚无 Flutter 对应组件的已消费变量;Button 12 项、Tag 12 项默认 Widget 值,Tag 7 项及 Switch/Fab/Form/PullDownRefresh/DropdownItem 各 1 项回退路径已裁定,Progress 9 项已另做默认 Widget/Painter 消费链复核(不等于跨端视觉完成),历史基线为677项待核;最新分层结果见Spec059,116项默认运行证据已补,不直接扣减最终视觉待审数。 - [x] 按 2026-10-03 用户裁定修正 Button 深色禁用字色、Switch 禁用/加载分层状态色与 Slider 浅色禁用滑块描边;Button/Switch 依冻结小程序,Slider 依直接选取的 Figma 图层。双版本聚焦测试与严格分析通过,生成 API 已更新;隔离 Linux 逐张检查、仅更新 10 张受影响 Golden 并无更新复跑通过。PR head CI 与整页 Figma 像素验收仍属总任务门禁,不以本项完成代替。 - [x] DONE breaking 迁移清单的公开替代入口已扩展为可重复执行的仓库外独立消费包;3.32/3.47 严格分析及各 10 项测试通过,登记 GitHub/CNB 双版本功能 CI。未知第三方业务仓库的升级进度不作为库验收门禁;能力删除和默认行为变化仍须以 breaking 版本发布。677 项组件 Token 最终消费审查不因本项通过而完成。 - [x] DONE 将组件内置配色选择器统一命名为 `colorPreset`:5 个已导出枚举及 Button、Tag、SelectTag、Link、BackTop、Popover、DialogAction 入口均移除旧 `colorScheme` 同义名;Material `ThemeData.colorScheme` 保留原义。Spec、dartdoc、公开 Demo、生成片段、API 文档和聚焦测试同步;两种 Popover 展示入口及其余配色入口已进入独立消费编译验证。 diff --git a/specs/050-public-api-documentation/formal-tool-delivery.md b/specs/050-public-api-documentation/formal-tool-delivery.md index b2ce9afb09..f7f073be45 100644 --- a/specs/050-public-api-documentation/formal-tool-delivery.md +++ b/specs/050-public-api-documentation/formal-tool-delivery.md @@ -1,3 +1,5 @@ +> 当前状态(2026-10-15):以下为分阶段历史记录。`develop@30767a55` 的双版本功能与 Linux 3.32.0 已登记 Golden 已通过;正式工具 #29 已合入且 API --check 通过。旧失败数/待推送描述不作为当前结论。未登记场景、跨端像素和真机验收仍须独立核验,见 [Spec 057](../057-release-readiness-audit/acceptance.md)。 + # 正式工具交付 工具 PR #29 已在 2026-10-09 合入 main,合并提交为 6bcf065e87a2fbd277c9b598205195f0a634414a;合并前八项远端检查通过。 diff --git a/specs/050-public-api-documentation/tasks.md b/specs/050-public-api-documentation/tasks.md index 3b484710a3..8f521328da 100644 --- a/specs/050-public-api-documentation/tasks.md +++ b/specs/050-public-api-documentation/tasks.md @@ -1,3 +1,5 @@ +> 2026-10-15 发布前核销:正式工具 #29 与文档 #1149 均已合入。当前生成一致性和 CI 证据见 [Spec 057](../057-release-readiness-audit/acceptance.md);下文历史阶段候选/阻塞说明仅描述当时检查点。 + # 任务拆分 - [x] 建立全量导出清单与 Spec。 @@ -9,7 +11,7 @@ - [x] 保存 57 个组件逐项签名/参数/Theme/页面验收清单;85 个生产源码文件与基础代码 Token 等价。 - [x] 修复 Demo 注册名与 API 文件 slug 不一致;真实页面双版本各 70 项测试通过并登记共享 CI 入口。 - [x] 工具 #28 已合入正式 main@96f1c693;双版本重新解析依赖,全量生成、--check、AST 审计、validate 及严格 analyze 通过,资产无差异。 -- [ ] PR 经维护者审核后合入 develop;正式链最新 CI/head 与 autofix 产物 diff 在 PR 描述和检查页记录。 +- [x] 文档 PR #1149 已于 2026-10-09 合入 develop(e724cd0c);当前基线 CI 通过。历史 head 的逐次 autofix diff 留在原 PR,当前生成一致性见 Spec 057。 ## 全量内容复检(2026-10-08) @@ -21,7 +23,7 @@ - [x] 候选工具重新生成并逐项核对全部组件文档,完成双版本与站点验收;正式 main 复验仍待 #29 合并。 - [x] 输出逐组件审查结果及组件源码、使用方式、公开 API、运行行为影响报告。 -- [ ] 工具 #29 合入正式 main 后重新生成/校验,并确认最终 head 的 CI 与 autofix。本轮修复按维护者明确要求先推送,正式验收仍待办。 +- [x] 本阶段“等待工具 #29 正式交付/生成复验”已由下方正式工具交付及 2026-10-15 检查覆盖:main@6bcf065e、57 份 API --check 无差异、当前基线 CI 通过。见 Spec 057。 ## API 展示精简:仅 Popup(2026-10-08) @@ -70,7 +72,7 @@ - [x] 全量重新生成 57 份 API;两 SDK 生成字节一致,当前资产无差异,AST 审计 0 issue。 - [x] 两 SDK 各 2707 项非 Golden 组件测试、70 项 API 页面测试、115 项文档专项测试通过。 - [x] 记录结构验收与语义验收的区别、测试误导风险、Theme.lerp 实现风险和正式工具/autofix 门禁,见 reasonableness-repair.md。 -- [ ] 工具 PR #29 合入正式 main 后重新解析 resolved ref、生成/--check 并复验 autofix;当前不将本轮候选结果声明为最终可合并。 +- [x] 本阶段“等待工具 #29 正式交付/生成复验”已由下方正式工具交付及 2026-10-15 检查覆盖:main@6bcf065e、57 份 API --check 无差异、当前基线 CI 通过。见 Spec 057。 - [x] TThemeData.lerp 的完整插值与 extraThemeData 离散切换已由 #1152 修复并合入 develop。 @@ -83,7 +85,7 @@ - [x] 从主入口 dartdoc 生成 57 页主题配置说明;51 个独立 Theme、3 个复用 Theme、2 个无独立 Theme 与全局 Theme 分别处理。 - [x] 双 SDK 重新生成、内容比对与文档/API 页面回归。 - [x] 同步本轮源码注释与生成产物到文档 PR #1149(源码提交 86e7dbf5;同步远端 autofix 后 e5adcf8b 已普通推送)。 -- [ ] 工具 #29 合入正式 main 后复验正式生成链和最终 CI/autofix。 +- [x] 本阶段“等待工具 #29 正式交付/生成复验”已由下方正式工具交付及 2026-10-15 检查覆盖:main@6bcf065e、57 份 API --check 无差异、当前基线 CI 通过。见 Spec 057。 方案、证据及阻塞原因见 [theme-presentation.md](theme-presentation.md)。 # 全组件 Theme 配置表推广(2026-10-09) @@ -93,7 +95,7 @@ - [x] 校验器和展示测试拦截顺序错误、分类缺失、重复配置表、重复共用方法表及类说明丢失。 - [x] 57 页两 SDK 生成一致,369 个声明、438 个 Theme 配置字段及 6 个专有可调用项保留。 - [x] 完成两 SDK 最终文档回归、页面回归、严格分析与验收记录,见 component-theme-config-presentation.md。 -- [ ] 正式工具交付后复验消费依赖和 autofix;本轮不据候选生成声明正式链路完成。 +- [x] 本阶段“等待工具 #29 正式交付/生成复验”已由下方正式工具交付及 2026-10-15 检查覆盖:main@6bcf065e、57 份 API --check 无差异、当前基线 CI 通过。见 Spec 057。 ## Theme API 与平台描述核查 @@ -112,7 +114,7 @@ - [x] 57 页逐组件移除主入口简介,并保留必要参数和方法契约。 - [x] 逐页生成,核对声明、表格行数、Theme 顺序和直接 API 入口。 - [x] 双 SDK 展示、页面、AST 审计、严格分析、生成一致与浏览器抽查通过,新增门禁经故障注入验证。 -- [ ] 工具 #29 合入正式 ref 后复验最终生成链和 CI/autofix。 +- [x] 本阶段“等待工具 #29 正式交付/生成复验”已由下方正式工具交付及 2026-10-15 检查覆盖:main@6bcf065e、57 份 API --check 无差异、当前基线 CI 通过。见 Spec 057。 当前验收见 [direct-api-presentation.md](direct-api-presentation.md)。 @@ -120,6 +122,6 @@ - [x] 工具 #29 合入 main,消费依赖重新解析到正式提交。 - [x] 正式工具生成与双 SDK --check、AST 审计及展示回归完成。 -- [ ] 本次推送后核对最终 CI/autofix;PullDownRefresh Golden 差异仍待独立处理。 +- [x] 当前基线 CI、正式工具生成 --check 与 Linux 登记 Golden 已通过;历史 PullDownRefresh 登记快照差异不再作为当前失败项。见 Spec 057;不外推未登记场景。 记录见 [formal-tool-delivery.md](formal-tool-delivery.md)。 diff --git a/specs/053-upload-async-picker-state/acceptance.md b/specs/053-upload-async-picker-state/acceptance.md index e0b2181465..7179c49aea 100644 --- a/specs/053-upload-async-picker-state/acceptance.md +++ b/specs/053-upload-async-picker-state/acceptance.md @@ -1,3 +1,5 @@ +> 当前状态(2026-10-15):以下为分阶段历史记录。`develop@30767a55` 的双版本功能与 Linux 3.32.0 已登记 Golden 已通过;正式工具 #29 已合入且 API --check 通过。旧失败数/待推送描述不作为当前结论。未登记场景、跨端像素和真机验收仍须独立核验,见 [Spec 057](../057-release-readiness-audit/acceptance.md)。 + # 验收 2026-10-10 修订检查点:Flutter 3.32.0 / Dart 3.8.0 与 Flutter stable 3.47.6 / Dart 3.13.5。 diff --git a/specs/053-upload-async-picker-state/tasks.md b/specs/053-upload-async-picker-state/tasks.md index f9f8f9881a..212d5d8f6a 100644 --- a/specs/053-upload-async-picker-state/tasks.md +++ b/specs/053-upload-async-picker-state/tasks.md @@ -1,3 +1,5 @@ +> 2026-10-15 发布前核销:当前自动检查与历史阶段记录分开;证据和保留待办见 [Spec 057](../057-release-readiness-audit/acceptance.md)。 + # 任务 - [x] 更新禁用只暂停交互的行为契约与方案 @@ -6,4 +8,4 @@ - [x] 双 SDK Upload 测试、严格分析与覆盖率验证 - [x] 从 dartdoc 重新生成 API 文档 - [x] PR 修订推送 -- [ ] 修订最终 head 的 CI 与 Linux Golden 验证 +- [x] 修订已随 #1153 合入 develop;当前基线双版本 Upload 回归与 Linux 登记 Golden 通过,见 Spec 057。 diff --git a/specs/055-tag-single-line-centering/tasks.md b/specs/055-tag-single-line-centering/tasks.md index 123f534e4d..7fbd34b093 100644 --- a/specs/055-tag-single-line-centering/tasks.md +++ b/specs/055-tag-single-line-centering/tasks.md @@ -1,3 +1,5 @@ +> 2026-10-15 发布前核销:当前自动检查与历史阶段记录分开;证据和保留待办见 [Spec 057](../057-release-readiness-audit/acceptance.md)。 + - [x] 分类检查全部 56 个组件目录的内置单行、多行和自定义内容 - [x] 统一最终单行留白与默认支柱解析,修复遗漏消费路径和显式覆盖 - [x] 补齐双版本、混合字体、缩放、换行、原生编辑与显式配置回归 @@ -6,8 +8,8 @@ - [x] 增加受限高度、组件尺寸与状态下的实际排版测量,修复 Tag / Switch 和显式高度行为 - [x] 既有登记视觉场景追加真实行框与内容槽运行测量 - [ ] 完成各组件全部需要居中的状态覆盖矩阵、实际可见字形与原生操作验收 -- [ ] 核验新增状态图并补最终 Golden 基线(当前仅采集前后实际图) -- [ ] 修复后真机字体与交互核验(设备已连接,已开始逐状态核验) +- [x] 当前基线已登记视觉套件无更新通过;最终 Review 已更新并复跑 6 张 Switch 状态图,见 acceptance.md 与 Spec 057。 +- [ ] 修复后真机字体与交互核验;历史设备连接状态不作为当前证据。acceptance.md 记录最终 Review 时手机未连接,仍须在最终候选重新验收。 - [x] 收敛 Input / Popup / Calendar 的过度保护并完成相关双版本、Golden 和真机回归 - 用户已授权提交与推送;提交前最终候选双版本与登记视觉回归已完成。 diff --git a/specs/057-release-readiness-audit/acceptance.md b/specs/057-release-readiness-audit/acceptance.md new file mode 100644 index 0000000000..b01ccdcdba --- /dev/null +++ b/specs/057-release-readiness-audit/acceptance.md @@ -0,0 +1,45 @@ +> 阶段边界:本页记录上一轮只做审查和 Spec 清理的结果。维护者随后授权实施第1~4项;当前改动及验证见 [Spec 058](../058-release-preparation/acceptance.md)。CI修改继续排除。 + +# 2026-10-15 核销证据 + +## 固定基线 + +- 仓库:Tencent/tdesign-flutter,develop@30767a5521e871b1738040f854adf001e50e4774;本轮 API / 组件 / 依赖 / CI 均未修改。 +- [原始开放任务](baseline-open-tasks.json):87 份 tasks.md(排除模板),32 个目录包含 57 条开放任务。清单保存原始文本与行号,不等同于缺陷数量。 +- 当前 [test-build run 38611030128](https://github.com/Tencent/tdesign-flutter/actions/runs/38611030128) 的 11 个 job 全部 success;逐 step 读取确认关键检查实际执行,非仅依赖 workflow 文字。 +- 3.32.0 test job 116014097130 的日志包含 `All component regression suites passed.`,独立 consumer 的 pub get / analyze / test 均成功。登记工具与共享 Demo 功能步骤均成功。 +- visual job 116014096966 日志确认 Linux Flutter 3.32.0、`All visual regression suites passed.`;未使用更新参数。通过范围严格限定为 visual manifest 实际调度的场景。 +- 本会话上一轮本地 Flutter 3.32.0:严格 analyze 零诊断,57 组组件回归与每组 >=95% 生产行覆盖门禁全过;369 声明 API 审计零问题,370 个代码片段检查通过。生产源码、环境和测试入口未变,本轮复用结果。 +- 本轮新增正式生成验证:锁文件 resolved-ref = 6bcf065e87a2fbd277c9b598205195f0a634414a,`node tool/generate_api.mjs --check` exit 0,57 份资产无差异。 +- 工具 [PR #29](https://github.com/TDesignOteam/tdesign-flutter-tools/pull/29) 已于 2026-10-09 合入 main(6bcf065e);文档 [PR #1149](https://github.com/Tencent/tdesign-flutter/pull/1149) 同日合入 develop(e724cd0c)。 +- [#1027](https://github.com/Tencent/tdesign-flutter/issues/1027) 已关闭,正文列出 Indexes #1081/#1133、NavBar #1082/#1136、SideBar #1083/#1135、Skeleton #1094。关联提交已在本地 develop 历史中;PR 创建/推送待办可核销,CNB Review 不据此核销。 + +## 清理原则与边界 + +1. 将已完成的工具交付、生成检查、CI、GitHub PR 创建/合并等标记完成。 +2. 混合待办拆开:GitHub/CI 完成;CNB Review、真机、设计对照仍保留。 +3. 历史验收数字不删除;在相关记录顶部增加“历史检查点,当前状态见本记录”的说明,避免历史失败数继续误导发布判断。 +4. 主题 677 项消费审查、跨端像素、完整状态矩阵和两张扩展 Popup 消费场景仍未闭环,不因当前登记矩阵通过而核销。 +5. 本轮未读取 CNB Review 结果、未连接真实设备、未重新获取 Figma/小程序目标截图;这些均不是已完成项。 + +## 后续方案 + +- [0.2.7 → 1.0 迁移说明方案](migration-plan.md) +- [依赖检查与处理方案](dependency-plan.md) +- [全部开放 Spec 核验与操作方案](spec-validation-plan.md) +- [CI 正确性审查](ci-review.md) + +所有方案均未修改生产实现或发布配置。 + +## 本轮补充验证 + +- 远端 latest job 116014097473 日志确认 Flutter 3.47.7;组件回归、独立 consumer 与 Demo 步骤实际成功。 +- 展开共享 manifest 后,所有 *_golden_test.dart 文件均有文件级登记,但 Popup consumer 仅选择 drawer,actionSheet/dialog 不在执行集合。配置审查不能替代这两种场景的 Linux 运行。 +- 三份未登记非视觉测试在本地 Flutter 3.32.0 实跑,20 项通过;此结果不代表已修复 CI 清单或已跑 latest。 +- 当前可用设备仅 macOS、Chrome;未连接 Android/iOS 真实设备。 +- 读取 develop classic branch protection 与 effective branch rules:必需状态检查为空、有效分支规则返回空集合;只报告,不修改远端权限或规则。 +- 本轮没有更改生产 Dart、pubspec、Golden、workflow、公开指南或站点导航;所有实现性调整仍为方案。 + +## 文档核验 + +已修正 18 份任务清单,另为相关历史验收/迁移记录增加适用范围说明;原有 Spec 中开放任务由 57 条变为 38 条(含拆分后的真实待办,不代表缺陷数)。修改仅位于 specs/;git diff --check 和修改文档本地引用检查通过。 diff --git a/specs/057-release-readiness-audit/baseline-open-tasks.json b/specs/057-release-readiness-audit/baseline-open-tasks.json new file mode 100644 index 0000000000..b2bab3b50b --- /dev/null +++ b/specs/057-release-readiness-audit/baseline-open-tasks.json @@ -0,0 +1,294 @@ +{ + "commit": "30767a5521e871b1738040f854adf001e50e4774", + "date": "2026-10-15", + "specCount": 87, + "specsWithOpenTasks": 32, + "openTaskCount": 57, + "tasks": [ + { + "spec": "001-tdropdown-menu-anchored-overlay", + "baselineLine": 10, + "baselineTask": "在目标设备上完成窄屏、键盘和视觉动画人工验收" + }, + { + "spec": "003-popover-contract-hardening", + "baselineLine": 21, + "baselineTask": "在目标设备完成窄屏、键盘、四边 placement 和组合 Widget 交互人工验收" + }, + { + "spec": "003-popover-contract-hardening", + "baselineLine": 22, + "baselineTask": "完成最终 Review 后关闭 Spec" + }, + { + "spec": "004-toast-contract-alignment", + "baselineLine": 8, + "baselineTask": "TODO 完成 Review" + }, + { + "spec": "005-notice-bar-review", + "baselineLine": 47, + "baselineTask": "完成真实设备触摸、循环与逐帧验收。" + }, + { + "spec": "005-swipe-cell-theme-review-fixes", + "baselineLine": 5, + "baselineTask": "确认 `flutter analyze` 无告警(本地无环境,依赖后续人工/CI 确认)" + }, + { + "spec": "005-swipe-cell-theme-review-fixes", + "baselineLine": 6, + "baselineTask": "确认新增单元测试与主题验收测试通过(本地无环境,依赖后续验证)" + }, + { + "spec": "007-message-contract-alignment", + "baselineLine": 14, + "baselineTask": "TODO 真机重连后补充实际点击与默认关闭时长验收" + }, + { + "spec": "007-swipe-cell-official-alignment", + "baselineLine": 5, + "baselineTask": "在已启动的 Web Demo 中完成人工滑动与视觉验收" + }, + { + "spec": "008-pull-down-refresh-minimal-api", + "baselineLine": 43, + "baselineTask": "真机 / 同尺寸像素对照(人工项,未完成)" + }, + { + "spec": "009-action-sheet-official-alignment", + "baselineLine": 21, + "baselineTask": "TODO 完成全部入口的真机连续交互验收" + }, + { + "spec": "011-dropdown-menu-official-demos", + "baselineLine": 33, + "baselineTask": "TODO 真机独立验证非仿射 Impeller shader 路径;不从当前仿射测试和 Linux Golden 推断通过" + }, + { + "spec": "011-search-demo-alignment", + "baselineLine": 14, + "baselineTask": "完成小程序模拟器深色截图人工对照" + }, + { + "spec": "011-text-flutter-contract-alignment", + "baselineLine": 9, + "baselineTask": "在 iOS、Android 和 Web 实机完成视觉与交互人工验收" + }, + { + "spec": "012-upload-contract-alignment", + "baselineLine": 9, + "baselineTask": "完成 Review" + }, + { + "spec": "015-checkbox-demo-card-alignment", + "baselineLine": 8, + "baselineTask": "DOING 重新执行 Golden 与真机截图验证" + }, + { + "spec": "015-checkbox-demo-card-alignment", + "baselineLine": 9, + "baselineTask": "TODO 完成 Review" + }, + { + "spec": "019-popup-radius-duration-alignment", + "baselineLine": 5, + "baselineTask": "人工验收:真机确认 left/right 无圆角与动画时长表现" + }, + { + "spec": "019-popup-radius-duration-alignment", + "baselineLine": 9, + "baselineTask": "CI 验证:`flutter analyze --fatal-infos` 与 focused tests 全绿" + }, + { + "spec": "027-component-test-manifest", + "baselineLine": 8, + "baselineTask": "TODO 提交、推送并复核远端 PR" + }, + { + "spec": "027-slider-demo-alignment", + "baselineLine": 7, + "baselineTask": "DOING 提交、推送并远端复核 PR" + }, + { + "spec": "028-backtop-contract-alignment", + "baselineLine": 12, + "baselineTask": "TODO 更新独立 GitHub PR 并完成 CNB CodeBuddy Review" + }, + { + "spec": "028-stepper-demo-alignment", + "baselineLine": 12, + "baselineTask": "推送手机验收修复后验证远端实际 latest 并重新触发 CNB review;Android/iOS 真机键盘、IME 和系统字体仍待验证。" + }, + { + "spec": "028-tabbar-design-alignment", + "baselineLine": 8, + "baselineTask": "TODO:获得可访问的 375px 完整移动端 Demo 节点或导出图,完成当前版本九个公开实例逐项视觉核对;已取得的可访问副本 `5iZtzla34Rz25j4cK7viAz:25529:22098` 是组件展板,不能代替整页验收。" + }, + { + "spec": "028-tabbar-design-alignment", + "baselineLine": 41, + "baselineTask": "TODO 本轮修复推送后,检查新 head CI 并完成新一轮 CNB Review" + }, + { + "spec": "029-drawer-design-alignment", + "baselineLine": 19, + "baselineTask": "TODO 在最终提交上触发并处理 CodeBuddy Review" + }, + { + "spec": "030-indexes-design-alignment", + "baselineLine": 13, + "baselineTask": "独立提交、推送并创建关联 #1027 的 PR。" + }, + { + "spec": "030-steps-design-alignment", + "baselineLine": 15, + "baselineTask": "本轮修复推送后,检查新 head CI 并完成新一轮 CNB Review" + }, + { + "spec": "031-navbar-contract-alignment", + "baselineLine": 13, + "baselineTask": "TODO 独立 GitHub / CNB PR、#1027 NavBar 条目与 CodeBuddy Review" + }, + { + "spec": "032-sidebar-design-alignment", + "baselineLine": 10, + "baselineTask": "创建独立 GitHub/CNB PR并关联 #1027 对应条目" + }, + { + "spec": "032-sidebar-design-alignment", + "baselineLine": 11, + "baselineTask": "完成 CodeBuddy Review 并处理反馈" + }, + { + "spec": "038-skeleton-design-alignment", + "baselineLine": 11, + "baselineTask": "TODO 单提交、创建独立 PR、更新 Issue #1027 正文" + }, + { + "spec": "045-example-code-web-mapping", + "baselineLine": 24, + "baselineTask": "TODO 完成 Review" + }, + { + "spec": "047-miniprogram-token-alignment", + "baselineLine": 3, + "baselineTask": "DOING 已按用户指定的全局 Radius 规范恢复 `radiusSmall/default/large/extraLarge/round = 3/6/9/12/999dp`,移除独有的 `radiusMedium`;受影响组件与 Linux 3.32.0 Golden 的最终验证待完成。" + }, + { + "spec": "047-miniprogram-token-alignment", + "baselineLine": 7, + "baselineTask": "DOING 核对组件变量的真实消费链,按需要开放 Theme 字段,不机械暴露全部变量;BackTop、Indexes、TabBar 的圆角来源已核实并修正,TabBar 胶囊阴影改用小程序的 `shadow-3`;Tag 四种语义色的深浅色回退链已补运行时测试。" + }, + { + "spec": "047-miniprogram-token-alignment", + "baselineLine": 9, + "baselineTask": "TODO 固定设计与 Flutter 的实际字体后,直接核对 Tag 文字排版宽度;确认组件是否应显式解析全局字体族,再判定 38px 设计实例的剩余宽差。不通过增大 Padding 或固定宽度凑单个文案。" + }, + { + "spec": "047-miniprogram-token-alignment", + "baselineLine": 10, + "baselineTask": "TODO 继续逐组件核实 Flutter 的最终消费值与必要的 Theme 覆盖;804 项默认值提取与静态映射不是逐项运行验证。优先处理 2 个回退冲突、1 个未解析暗色值、3 个无回退变量。" + }, + { + "spec": "047-miniprogram-token-alignment", + "baselineLine": 12, + "baselineTask": "DOING 已在 Flutter 3.32.0 Linux 复跑受影响组件及 Demo 的无更新 Golden;固定半径与默认字体缺字已修复,仍有 35 张旧基线差异,需对正确 Token 值、TabBar 设计布局和阴影继续做设计裁定,不直接更新。" + }, + { + "spec": "047-miniprogram-token-alignment", + "baselineLine": 13, + "baselineTask": "TODO 对需设计稿裁定的歧义进行后续比对。" + }, + { + "spec": "048-component-token-theme-ownership", + "baselineLine": 5, + "baselineTask": "DOING 盘点组件 Theme、公开 API 和小程序组件变量的真实消费链;已初筛 116 个同名候选,包导出过滤后的 64 项已降至 0;异名同义及 804 个组件变量最终消费仍未完成。" + }, + { + "spec": "048-component-token-theme-ownership", + "baselineLine": 6, + "baselineTask": "DOING 逐项确定唯一所有者、迁移路径和 breaking 风险;已确认项见 `ownership-table.md`,P0 未裁定项见 `report.md`。" + }, + { + "spec": "048-component-token-theme-ownership", + "baselineLine": 7, + "baselineTask": "DOING 收敛确认重复的公开控制入口与 Token 回退;已处理的 Button、Input、Dialog action、TabsBar、Tag、SideBar、Text、SwipeCellAction 和 Popup 字段见 `migration.md`。仍须逐组件审查尚未裁定的异名同义入口,不能把已处理组件外推为全仓完成。" + }, + { + "spec": "048-component-token-theme-ownership", + "baselineLine": 14, + "baselineTask": "DOING 以最终源码逐类归因 Linux Golden 的文字字形/行盒与尺寸差异;2026-10-03 已修复 Cell/Popup 组件文字插槽、核对 102 张尺寸变化并在隔离 Linux 环境更新 552 张基线、严格无更新复跑全通过。此结果仍不是逐张 Figma 像素验收,后续新视觉缺陷须单独裁定。" + }, + { + "spec": "048-component-token-theme-ownership", + "baselineLine": 18, + "baselineTask": "DOING 更新源码 dartdoc、Demo 用法与组件测试;已迁移范围完成,待全量回归和 breaking 迁移说明。" + }, + { + "spec": "048-component-token-theme-ownership", + "baselineLine": 19, + "baselineTask": "DOING 双版本分析、聚焦功能和固定 Linux 3.32.0 无更新 Golden 比对;`37ce253b` 远端双版本分析、测试、全量 Linux Golden 与构建通过。新增独立消费包已在 3.32/3.47 本地验证,新增 CI 步骤仍待推送后执行。历史 47 张的阶段性结果见 `acceptance.md`,不能当作最终源码状态。" + }, + { + "spec": "048-component-token-theme-ownership", + "baselineLine": 20, + "baselineTask": "DOING 804 项组件变量已按冻结源码逐项建静态证据;纠正 Less 动态消费误判后,10 项未见静态消费者、81 项属于尚无 Flutter 对应组件的已消费变量;Button 12 项、Tag 12 项默认 Widget 值,Tag 7 项及 Switch/Fab/Form/PullDownRefresh/DropdownItem 各 1 项回退路径已裁定,Progress 9 项已另做默认 Widget/Painter 消费链复核(不等于跨端视觉完成),其余项目仍在 677 项待核队列中,不能直接扣减最终视觉待审数。" + }, + { + "spec": "050-public-api-documentation", + "baselineLine": 12, + "baselineTask": "PR 经维护者审核后合入 develop;正式链最新 CI/head 与 autofix 产物 diff 在 PR 描述和检查页记录。" + }, + { + "spec": "050-public-api-documentation", + "baselineLine": 24, + "baselineTask": "工具 #29 合入正式 main 后重新生成/校验,并确认最终 head 的 CI 与 autofix。本轮修复按维护者明确要求先推送,正式验收仍待办。" + }, + { + "spec": "050-public-api-documentation", + "baselineLine": 73, + "baselineTask": "工具 PR #29 合入正式 main 后重新解析 resolved ref、生成/--check 并复验 autofix;当前不将本轮候选结果声明为最终可合并。" + }, + { + "spec": "050-public-api-documentation", + "baselineLine": 86, + "baselineTask": "工具 #29 合入正式 main 后复验正式生成链和最终 CI/autofix。" + }, + { + "spec": "050-public-api-documentation", + "baselineLine": 96, + "baselineTask": "正式工具交付后复验消费依赖和 autofix;本轮不据候选生成声明正式链路完成。" + }, + { + "spec": "050-public-api-documentation", + "baselineLine": 115, + "baselineTask": "工具 #29 合入正式 ref 后复验最终生成链和 CI/autofix。" + }, + { + "spec": "050-public-api-documentation", + "baselineLine": 123, + "baselineTask": "本次推送后核对最终 CI/autofix;PullDownRefresh Golden 差异仍待独立处理。" + }, + { + "spec": "053-upload-async-picker-state", + "baselineLine": 9, + "baselineTask": "修订最终 head 的 CI 与 Linux Golden 验证" + }, + { + "spec": "055-tag-single-line-centering", + "baselineLine": 8, + "baselineTask": "完成各组件全部需要居中的状态覆盖矩阵、实际可见字形与原生操作验收" + }, + { + "spec": "055-tag-single-line-centering", + "baselineLine": 9, + "baselineTask": "核验新增状态图并补最终 Golden 基线(当前仅采集前后实际图)" + }, + { + "spec": "055-tag-single-line-centering", + "baselineLine": 10, + "baselineTask": "修复后真机字体与交互核验(设备已连接,已开始逐状态核验)" + } + ] +} diff --git a/specs/057-release-readiness-audit/ci-review.md b/specs/057-release-readiness-audit/ci-review.md new file mode 100644 index 0000000000..0ac548284f --- /dev/null +++ b/specs/057-release-readiness-audit/ci-review.md @@ -0,0 +1,83 @@ +# CI 正确性审查与修复方案(不实施) + +## 判断 + +当前 test-build 确实执行并通过了双版本分析/组件/Demo/独立消费检查、Linux 3.32.0 已登记 Golden 和六个构建组合,矩阵不是空跑。远端实际 latest 为 Flutter 3.47.7,最低为 3.32.0。通过范围是入口实际调度集合,不能写成“磁盘上全部测试、全部状态与正式发布均有保障”。 + +以下为发布前需要处理的缺口;本次不修改 workflow、测试清单或远端规则。 + +## P1:正式发布未锁定已验收提交 + +位置:[auto-release.yml:82](../../.github/workflows/auto-release.yml#L82)、[tag-push.yml:18](../../.github/workflows/tag-push.yml#L18)。 + +复现顺序:release PR 合并得到 A,随后 develop 又进入 B;merge_tag checkout develop 时可能已经是 B,因此 tag 不一定指向 A。即使 tag 指向 A,TAG_PUSH 随后 git merge origin/develop 仍可能将 B 合到 main。只要期间进入新提交,就可能使 release 版本、tag、main/站点来源不一致。 + +最小修复方案:以已合并 release PR 的 merge_commit_sha 为候选,核对该确切 SHA 的必要检查成功后打 tag;发布构建及同步都只读取该 tag/SHA。main 不能合并执行时最新 develop;若仍需同步,明确保持该已验收提交,或在同步后的确切提交重新验证并保持产物版本一致。增加 release 并发约束、版本/tag 格式过滤、pubspec/tag 一致检查及重复运行的幂等校验。已有同名 tag 指向不同 SHA 时直接失败。 + +验证:用隔离测试仓库模拟 A 后紧跟 B,断言 tag/包/站点/APK 的 provenance 均指向 A;重复运行不重新打错 tag。此次未创建远端 tag。 + +## P1:当前分支规则未要求 CI 必须通过 + +证据:GitHub branches/develop/protection 返回 required_status_checks.contexts=[]、checks=[];repos/.../rules/branches/develop 返回空列表。当前需要 1 人审批,但 enforce_admins=false。当前配置不能证明上述 test-build job 是合并硬门槛。 + +最小修复方案:为 develop/release 流程配置必要的 analyze、test、visual、APK/iOS/Web 检查(或一个必需的汇总 job),要求最终 SHA 成功才允许合并;autofix 改 head 后也必须重新满足。若使用路径跳过,汇总检查须区分合法跳过与失败,避免 required check 永久 pending。管理员绕过范围按团队发布权限单独决定;本次不改远端设置。 + +验证:构造失败测试和旧 head 成功/新 head 未完成两种 PR,均不能通过发布门槛;文档-only 的预期跳过不会意外卡死。 + +## P1:文件已登记,但两种 Golden 场景未运行 + +位置:[component_test_manifest.dart:415](../../tdesign-component/tool/component_test_manifest.dart#L415)、[run_visual_regression_test.dart:180](../../tdesign-component/test/tool/run_visual_regression_test.dart#L180)。 + +t_popup_consumers_golden_test.dart 包含 actionSheet/dialog/drawer 三个场景,唯一登记附带 --plain-name,只执行 drawer。自测只验证该文件在集合中,无法发现文件内部被过滤的两种场景。Spec 055 记录过 actionSheet/dialog 扩展基线差异,尚无当前无更新运行证据;本轮不能断言它们当前仍失败,也不能用已登记 CI 全绿核销。 + +最小修复方案:在 Linux Flutter 3.32.0 对该文件三个场景无更新运行,核对实际/基线/差异并确定是组件缺陷还是需设计裁定的旧图;完成修复后移除过滤或分别登记三个明确场景。自测从文件存在性推进到实际用例/场景集合和过滤白名单,遗漏必须解释。 + +验证:三个场景均出现在 CI 日志;删除其中一个场景登记时门禁失败;不得用直接更新基线或放宽容差替代归因。 + +## P2:三份非视觉功能测试未调度 + +位置:[component_test_manifest.dart:697](../../tdesign-component/tool/component_test_manifest.dart#L697)、[run_component_regression_test.dart:10](../../tdesign-component/test/tool/run_component_regression_test.dart#L10)。 + +未进入组件清单,也未被其他入口或测试文件引用: + +- test/components/loading/t_activity_indicator_test.dart +- test/components/loading/t_circle_indicator_test.dart +- test/components/misc/t_small_files_test.dart + +本轮本地 Flutter 3.32.0 对这三份文件执行 flutter test --no-pub,20 项全部通过(exit 0)。这证明漏调度而非当前已发现的功能失败;此前“全部组件回归通过”仅指已登记集合。 + +最小修复方案:两个 loading 文件加入 loading 套件;misc 文件按 TFabBounds、DateTimePickerSteps 等实际覆盖对象拆回对应组件或登记共享功能入口。加“磁盘非视觉测试与已登记/明确排除集合”核对,避免今后只检查已登记文件存在。 + +验证:双版本实际运行这些测试;新增一个未登记普通测试时调度自测失败。此问题应在 1.0 发布前收口。 + +## P2:build 会覆盖 API 资产,缺少提交内容一致性硬检查 + +位置:[test-build.yml:196](../../.github/workflows/test-build.yml#L196)。 + +build 在检查/构建前执行生成 API,不使用 --check,也没有生成前后 git diff 检查。构建成功只能证明重写后的资产能构建,不能保证提交中的说明与源码完全同步。AST 审计擅长签名契约,不能替代全文生成一致性。当前本地正式工具 --check 已过,说明当前资产没有这个实际差异;问题是配置缺少预防门禁。 + +最小修复方案:依赖解析后运行 node tool/generate_api.mjs --check;autofix 仍负责写入,验证 workflow 只检查最终 head。正式发布记录工具 resolved SHA、SDK 和依赖来源;外部 main 发生变化后不能把旧工具结果当作新产物证明。将生成检查放一个明确 job,可减少六个 build 组合重复生成。 + +验证:只改一行 API 生成文案而不改源码时 CI 失败;autofix 修复并产生新 head 后检查通过。 + +## 正式发布校验仍需补齐 + +仓库当前可见 workflow 没有 pub publish --dry-run/正式包消费门禁;PUBLISH.md 描述 tag 后触发站点/发布,但本仓库配置没有完整展示 pub.dev/CDN 正式上传链,可能由外部系统承接,不能据此声称线上根本没有发布机制。 + +方案:先确认真实发布系统与责任人,再为确切候选执行 dry-run、版本/tag一致、归档内容/字体资源及独立宿主安装验证;发布后检查 pub.dev、站点、APK 的版本与 SHA/资源哈希。实际上传由正式发布流程执行。不要只因 tag 工作流执行就立即关闭发布任务:当前 close-release-issue 与 main 同步是并列 job,即便同步失败也可能关闭 issue;应依赖成功的完整交付和上线验证。 + +## 次要文档同步缺口 + +[autofix.yml:5](../../.github/workflows/autofix.yml#L5) 忽略根目录 *.md;仅修改根 README 的 PR 不会触发其中的 Sync README files。建议把 README 同步检查拆成能响应源 README 的独立检查,或修改过滤规则。验证根 README 单独改动后,包副本和站点副本保持一致。 + +## 已检查且不列为故障 + +- build matrix 的 include 确实生成 Android/iOS/Web × 两版本的六个 job,当前均 success。 +- CNB 与 GitHub 共用功能清单;CNB 3.32 执行视觉、latest 不执行像素对照,符合仓库环境边界。 +- 没有发现容差被放宽或 runner 在失败后吞退出码;真实设备和设计对照本来就不能由 Linux 快照自动证明。 +- 不凭第三方 action 标签较新/较旧推断不可用,当前动作有实际成功记录。 +- merge_tag checkout 使用 PERSONAL_TOKEN;不能仅因为另一个 action 入参是 GITHUB_TOKEN 就断言 git push 不会触发后续事件。触发行为需按实际认证链确认,参见 [GitHub 官方说明](https://docs.github.com/en/actions/how-tos/write-workflows/choose-when-workflows-run/trigger-a-workflow)。 + +## 推荐修复顺序 + +先锁发布 SHA 并设置必需检查,再补两类漏调度与生成 --check;将正式打包/交付验证接入同一发布候选。每项修复作为独立可验证改动,不扩大组件 API 或直接更新 Golden。 diff --git a/specs/057-release-readiness-audit/dependency-plan.md b/specs/057-release-readiness-audit/dependency-plan.md new file mode 100644 index 0000000000..594715cc47 --- /dev/null +++ b/specs/057-release-readiness-audit/dependency-plan.md @@ -0,0 +1,33 @@ +> 2026-10-15 后续实施:依赖调整已实施,双版本及独立消费验证见实施记录,详见 [Spec 058](../058-release-preparation/acceptance.md)。本页原有“未实施”描述为上一轮阶段状态。 + +# 图片选择依赖检查与处理方案(不实施) + +## 检查结果 + +- 当前 pubspec 固定 image_picker: 1.1.2、image_picker_android: 0.8.12+23。上一轮实际 flutter pub publish --dry-run 返回两条“依赖仅允许单一版本”警告,exit 65。它们是校验警告,不应误述为 pub.dev 绝对禁止上传。 +- git 历史 73440511(#976,2026-08-05)在移除 Flutter 适配包、明确 Flutter 3.32 支持时,将 image_picker 从 ^1.1.2 改为精确版本,并加入 Android 实现包精确版本;提交包含“align Flutter 3.32 build pipeline”。这证明锁定有历史背景,但不足以证明具体哪个原生问题必须永久锁定。 +- 生产代码只导入 package:image_picker/image_picker.dart,使用 ImagePicker.pickVideo、pickMultiImage、XFile.readAsBytes;未导入 image_picker_android。image_picker 1.1.2 自身已 endorsed Android 实现包,直接依赖不是当前 Dart 调用的必要条件。 +- 缓存包元数据:image_picker 1.1.2 要求 Flutter >=3.19/Dart ^3.3;Android 0.8.12+23 要求 Flutter >=3.27/Dart ^3.6,当前 3.32 下可解析。 +- [官方变更日志](https://pub.dev/packages/image_picker/changelog):1.2.1 最低 Flutter 3.29;1.2.2 最低 3.35;1.2.3 最低 3.38;1.2.4 最低 3.41。不能把依赖下限直接改为 ^1.2.4,同时继续承诺 Flutter 3.32。 + +## 建议方案 A(优先验证,尚未证明兼容) + +1. 保持本库 Flutter >=3.32.0 / Dart >=3.8.0 的支持范围。 +2. 候选约束:image_picker: ^1.1.2;移除 image_picker_android 直接依赖,让 endorsed 平台包参与 SDK 兼容解析。不在生产 dependency_overrides 中强行覆盖。 +3. 不把“solver 能解析”当成运行通过。检查旧 Android/Gradle 场景,明确应用最低 Android API/iOS 版本;上游实现包升级可能改变平台要求。 +4. 若某个平台实现确有已复现兼容缺陷,再用最小必要版本范围及关联 issue 约束,说明移除条件。仅因过往锁过版本,不保留无解释的永久 pin。 + +## 执行与验收矩阵 + +- Flutter 3.32.0:最低依赖组合、正常可升级组合;记录实际 image_picker 与 Android/iOS/web 实现版本及 SDK/平台下限。 +- 当前 stable:正常解析组合、一个独立业务 consumer 同时声明较新 image_picker 的组合,确认不再被本库 exact pin 阻断。 +- 依赖下限检查可在隔离宿主执行 downgrade,并记录与业务无关的其他依赖下限失败,避免把全仓一次 downgrade 当作目标依赖证据。 +- 双版本 analyze、Upload 组件和 Demo 功能回归;Android/iOS/Web 构建;pub publish --dry-run 无两条单版本警告。 +- Android/iOS 真机:单/多图片、视频、取消、拒绝权限、选择期间禁用/退出、重复选择;Web 检查文件选择与结果读取。包含最低承诺平台,而非只测最新系统。 +- Android 进程回收后的 lost-data 行为按当前库契约确认;若尚未支持,不在本次依赖调整中顺带扩张公开能力,记录业务自定义 picker 或明确限制。 + +## 方案 B(仅当 A 暴露明确原生回归) + +保留能说明原因的最窄范围,关联最小复现及上游 issue;或者经产品决策提高 SDK/平台最低版本,再调整依赖下限及全部文档。提高 Flutter 最低版本不作为本轮默认选择。 + +此次没有修改 pubspec、锁文件或 Upload,没有声称候选范围已通过集成测试;执行方案前须以实际候选完成上述矩阵。 diff --git a/specs/057-release-readiness-audit/migration-plan.md b/specs/057-release-readiness-audit/migration-plan.md new file mode 100644 index 0000000000..22465ff7d2 --- /dev/null +++ b/specs/057-release-readiness-audit/migration-plan.md @@ -0,0 +1,42 @@ +> 2026-10-15 后续实施:迁移说明已按本方案限定为0.2.7 → 1.0并实施,详见 [Spec 058](../058-release-preparation/acceptance.md)。本页原有“未实施”描述为上一轮阶段状态。 + +# 0.2.7 → 1.0 迁移说明方案(不实施) + +## 范围与交付 + +仅覆盖 0.2.7 使用方升级到正式 1.0;不提供 alpha 迁移章节、不要求先升级 alpha。 + +建议正式交付为根目录 MIGRATION_1_0.md(唯一正文),在包 README、站点快速开始和 1.0 发布说明放入口;包发布时包含该正文,站点从唯一正文同步展示,避免复制后分叉。站点导航是否单独增加迁移页按现有文档配置接入。此次仅提出位置与结构,不创建指南或修改导航。 + +比较起点固定本仓库 tag 0.2.7;终点先用 develop@30767a55 盘点,发布时替换为最终 RC/1.0 tag 并重新比对。pub.dev 已发布 0.2.7 的包内容应与 tag 对照,若不一致,使用实际发布包作为用户契约来源。 + +## 编写步骤 + +1. 从两个版本的公开包入口追踪导出,列出类、构造参数、枚举、回调、Controller、Theme 和顶层函数的新增/删除/改名/类型变化;内部文件变化不直接进入用户清单。 +2. 对每项标注:可机械替换、需业务改写、默认行为变化、能力删除无等价替代。分别记录旧调用、新入口、迁移理由、默认值/空值变化和验收用例。 +3. 按组件汇总,优先处理主题与文字、按钮与输入、受控选择、Popup/Dialog/Picker 组合、Controller/Overlay 生命周期和 Upload。先写公共规则,再链接组件具体行,减少重复。 +4. 为高频调用提供前后代码,旧例在 0.2.7 的独立宿主验证,新例只导入公开包入口,在 Flutter 3.32.0 与当前 stable 验证;旧版不兼容最新 SDK 时在其兼容 SDK 留下旧例证据,不将旧版兼容性误算为新版本失败。 +5. 新例复用并扩展现有仓库外 consumer 机制;每组标注覆盖的迁移条目 ID。编译检查之外补受控值、禁用态、回调、打开/关闭与释放等关键行为验证。 +6. 最终 RC 固定后检查指南的每个替代入口仍公开可用;正式包发布后用 pub.dev 依赖安装验证,不只依赖仓库 path。 + +## 建议目录 + +- 升级前准备:Flutter/Dart 最低版本、备份依赖与基线截图。 +- 公共变化:TD 前缀、图标包、单入口 Material 导出、主题/字体与局部覆盖。 +- 组件迁移索引:按基础、导航、输入、展示、反馈分组。 +- 复杂组合:Popup/Picker/DateTimePicker/Dialog、Calendar/Cascader、Swiper。 +- 行为变化:受控状态、禁用条件、回调时机、Controller 释放、Overlay context、深色/字体/安全区。 +- 删除能力与替代组合:明确无等价替代,避免承诺全部旧能力保留。 +- 升级验收清单与常见编译错误索引。 + +## 已确认不能机械改名的示例 + +0.2.7 的 TDButton 有 text、type、theme、disabled、onTap、icon/iconWidget 及分状态 style;当前 TButton 使用 child、variant、colorPreset、onPressed、Widget icon 与 ButtonStyle,onPressed 为 null 表示禁用。只把 TDButton 改成 TButton 无法完成迁移。指南应把相关参数放在同一组迁移,不能独立替换后遗漏禁用和回调语义。 + +主题迁移资料只能作为盘点来源。Spec 011 的旧 migration.md 仍包含 TText.fontFamily、Material Theme/DefaultTextStyle 自动默认等历史用法,已被后续收敛覆盖;Spec 048 的“相对 develop”是阶段性比较,不是完整 0.2.7 → 1.0 证明。编写时必须用当前源码确认每条,不能拼接成最终指南。 + +## 完成标准 + +全部公开 breaking diff 均有迁移条目或明确的“无替代”;所有新代码可通过公开入口编译;关键行为通过双版本 consumer;指南、包和站点同版本;尚未验证的条目不得写成可直接复制的建议。 + +此次未编写最终指南、未增加别名/兼容层、未实施批量替换工具。 diff --git a/specs/057-release-readiness-audit/plan.md b/specs/057-release-readiness-audit/plan.md new file mode 100644 index 0000000000..0464a91f98 --- /dev/null +++ b/specs/057-release-readiness-audit/plan.md @@ -0,0 +1,9 @@ +# 执行计划 + +1. 保存原始开放任务清单,交叉核对当前源码、合并记录、CI 实际步骤和日志,清理确证过时条目。 +2. 设计仅从 0.2.7 到 1.0 的迁移指南结构、生成边界与消费验证方法。 +3. 检查 image_picker 固定版本的历史原因、源码耦合及 SDK 要求,提出候选约束和验收矩阵。 +4. 将未完成 Spec 拆成自动回归、设计对照、真实设备和审查记录四类,给出逐项操作方案。 +5. 检查测试清单到实际执行、产物一致性、发布提交与触发链路,报告具体缺陷及最小修复。 + +运行证据可复用,文档改动不重复执行组件全量/Golden。不更新 Golden,不自动关闭缺少证据的 Review 或人工任务。 diff --git a/specs/057-release-readiness-audit/spec-validation-plan.md b/specs/057-release-readiness-audit/spec-validation-plan.md new file mode 100644 index 0000000000..09603b5812 --- /dev/null +++ b/specs/057-release-readiness-audit/spec-validation-plan.md @@ -0,0 +1,64 @@ +> 2026-10-15 后续实施:本页保留上一轮操作方案;当前实施范围、已完成检查与人工待办见实施记录,详见 [Spec 058](../058-release-preparation/acceptance.md)。本页原有“未实施”描述为上一轮阶段状态。 + +# 未完成 Spec 验证与操作方案 + +## 验证方法与结论 + +对原始 87 份 tasks.md 全部扫描,保存其中 57 条开放记录;逐条按当前代码、实际 CI 调度、日志、工具正式交付和仓库历史核对。结果不把“测试文件存在”或“PR 合并”当成全部验收完成。自动回归复用同一源码检查点的成功结果;本轮仅修改文档,不重跑全部 Golden。 + +`flutter devices --machine` 本轮只列出 macOS 和 Chrome,没有 Android/iOS 设备。未运行真机验收、未取得新的 Figma/小程序设计对照,也未核实 CNB 审查。因此这些项目继续开放。 + +特别确认:t_popup_consumers_golden_test.dart 包含 actionSheet/dialog/drawer 三种场景,manifest 以 --plain-name 只运行 drawer;前两种不在当前绿灯覆盖内。Spec 055 仍记录这两张历史扩展场景差异,不能通过修改登记基线来直接消掉。当前是否仍失败需 Linux 3.32.0 无更新实跑,本轮 macOS 不执行或写回像素基线。 + +## 原始含开放任务的全部 32 个 Spec + +| Spec | 当前开放条数 | 操作或核销结论 | +|---|---:|---| +| [001-tdropdown-menu-anchored-overlay](../001-tdropdown-menu-anchored-overlay/tasks.md) | 1 | 目标设备验证窄屏、键盘、锚点跟随、四边展开/收起;记录遮罩及页面可点击区域。 | +| [003-popover-contract-hardening](../003-popover-contract-hardening/tasks.md) | 2 | 在窄屏/键盘下测试四边 placement、组合 Widget、重复关闭与页面退出;另核对最终 Review。 | +| [004-toast-contract-alignment](../004-toast-contract-alignment/tasks.md) | 1 | 查阅并记录最终 Review;合并不自动代表平台审查通过。 | +| [005-notice-bar-review](../005-notice-bar-review/tasks.md) | 1 | 真机触摸、短/长文本循环及减少动画;逐帧观察跳动和销毁后任务。 | +| [005-swipe-cell-theme-review-fixes](../005-swipe-cell-theme-review-fixes/tasks.md) | 0 | 自动检查/正式工具交付或 GitHub 提交合并待办已核销,证据见 acceptance.md。 | +| [007-message-contract-alignment](../007-message-contract-alignment/tasks.md) | 1 | 真机真实触发、默认时长关闭、重复触发替换、页面退出后不回调。 | +| [007-swipe-cell-official-alignment](../007-swipe-cell-official-alignment/tasks.md) | 1 | 浏览器真实滑动、关闭/确认/滚动联动,并与目标视觉对照。 | +| [008-pull-down-refresh-minimal-api](../008-pull-down-refresh-minimal-api/tasks.md) | 1 | 真机真实拖拽到阈值、释放、刷新完成/失败与连续操作;同尺寸对照。 | +| [009-action-sheet-official-alignment](../009-action-sheet-official-alignment/tasks.md) | 1 | 逐公开入口连续打开/选择/取消,含宫格/长列表、禁用项、安全区。 | +| [011-dropdown-menu-official-demos](../011-dropdown-menu-official-demos/tasks.md) | 1 | 目标 Impeller 设备构造非仿射 transform 后真实操作,保存 shader/渲染日志;普通仿射用例不代替。 | +| [011-search-demo-alignment](../011-search-demo-alignment/tasks.md) | 1 | 取得冻结目标的小程序深色截图,同尺寸核对文字、间距和颜色。 | +| [011-text-flutter-contract-alignment](../011-text-flutter-contract-alignment/tasks.md) | 1 | iOS/Android/Web 验证系统字体、1/1.5/2 倍缩放、混合字体、富文本与复制/选择边界。 | +| [012-upload-contract-alignment](../012-upload-contract-alignment/tasks.md) | 1 | 补最终 Review 的明确结论及反馈处理记录;本轮不以合并状态推定审查完成。 | +| [015-checkbox-demo-card-alignment](../015-checkbox-demo-card-alignment/tasks.md) | 2 | 登记 Golden 已过;补真机截图/设计对照与最终 Review 记录。 | +| [019-popup-radius-duration-alignment](../019-popup-radius-duration-alignment/tasks.md) | 1 | 自动检查已过;真机检查左右面板圆角、240ms 动画和减少动态效果。 | +| [027-component-test-manifest](../027-component-test-manifest/tasks.md) | 0 | 自动检查/正式工具交付或 GitHub 提交合并待办已核销,证据见 acceptance.md。 | +| [027-slider-demo-alignment](../027-slider-demo-alignment/tasks.md) | 0 | 自动检查/正式工具交付或 GitHub 提交合并待办已核销,证据见 acceptance.md。 | +| [028-backtop-contract-alignment](../028-backtop-contract-alignment/tasks.md) | 1 | GitHub/CI 已完成部分已拆出;取得对应 CNB PR 最终 head、Review 结论及反馈关闭记录后再核销。 | +| [028-stepper-demo-alignment](../028-stepper-demo-alignment/tasks.md) | 1 | 当前 latest 实际为 Flutter 3.47.7 已过;Android/iOS 测试键盘、IME、焦点、边界值与系统字号;核对 CNB Review。 | +| [028-tabbar-design-alignment](../028-tabbar-design-alignment/tasks.md) | 2 | 取得完整 375px Demo 目标,逐项核对九个实例;组件展板不作整页替代;核对 CNB Review。 | +| [029-drawer-design-alignment](../029-drawer-design-alignment/tasks.md) | 1 | GitHub/CI 已完成部分已拆出;取得对应 CNB PR 最终 head、Review 结论及反馈关闭记录后再核销。 | +| [030-indexes-design-alignment](../030-indexes-design-alignment/tasks.md) | 0 | 自动检查/正式工具交付或 GitHub 提交合并待办已核销,证据见 acceptance.md。 | +| [030-steps-design-alignment](../030-steps-design-alignment/tasks.md) | 1 | GitHub/CI 已完成部分已拆出;取得对应 CNB PR 最终 head、Review 结论及反馈关闭记录后再核销。 | +| [031-navbar-contract-alignment](../031-navbar-contract-alignment/tasks.md) | 1 | GitHub/CI 已完成部分已拆出;取得对应 CNB PR 最终 head、Review 结论及反馈关闭记录后再核销。 | +| [032-sidebar-design-alignment](../032-sidebar-design-alignment/tasks.md) | 2 | GitHub/CI 已完成部分已拆出;取得对应 CNB PR 最终 head、Review 结论及反馈关闭记录后再核销。 | +| [038-skeleton-design-alignment](../038-skeleton-design-alignment/tasks.md) | 0 | 自动检查/正式工具交付或 GitHub 提交合并待办已核销,证据见 acceptance.md。 | +| [045-example-code-web-mapping](../045-example-code-web-mapping/tasks.md) | 1 | 补最终 Review 的明确结论及反馈处理记录;本轮不以合并状态推定审查完成。 | +| [047-miniprogram-token-alignment](../047-miniprogram-token-alignment/tasks.md) | 4 | 按冻结目标重核真实消费链和设计歧义;旧35张失败数已核销,677队列由048合并跟踪,避免重复计数。 | +| [048-component-token-theme-ownership](../048-component-token-theme-ownership/tasks.md) | 6 | 677为阶段性消费审查队列,按状态/Theme覆盖/最终绘制分批核对并记录设计例外;未审不算缺陷;另完成0.2.7迁移指南。 | +| [050-public-api-documentation](../050-public-api-documentation/tasks.md) | 0 | 自动检查/正式工具交付或 GitHub 提交合并待办已核销,证据见 acceptance.md。 | +| [053-upload-async-picker-state](../053-upload-async-picker-state/tasks.md) | 0 | 自动检查/正式工具交付或 GitHub 提交合并待办已核销,证据见 acceptance.md。 | +| [055-tag-single-line-centering](../055-tag-single-line-centering/tasks.md) | 2 | 登记 Golden 已过;核对全组件状态矩阵与实际字形;先单独验证未执行的 ActionSheet/Dialog Popup消费场景,再补真机最终字体/交互。 | + +## 建议执行顺序 + +1. 先解决 CI 覆盖缺口:三份功能测试漏调度、两种 Popup 消费 Golden 被过滤;先无更新运行,再按失败定位实现或过时基线。修复方案见 ci-review.md。 +2. 收敛 047/048 共用消费队列:为每项记录所属组件、默认/禁用/按压/选中、明暗模式、局部 Theme、最终取值和证据;先核对会导致公开 API 或默认行为变化的项。确认无需对应 Flutter 能力的项目记理由,不能机械补字段。 +3. 设备批次 A:Input/Textarea/Form/Stepper,重点空内容粘贴、中文组合输入、焦点/选择、键盘收起后的值保留。批次 B:Popup/Popover/Dropdown/ActionSheet/Message/Toast,重点连开连关、安全区、键盘、返回键与生命周期。 +4. 设备批次 C:Picker/DateTimePicker/Calendar/Swiper/Refresh/SwipeCell/Upload,重点边界值、惯性、拖动取消、异步结果、权限及离开页面。每批均覆盖正常字号和较大系统字号。 +5. 设计对照单独进行:固定目标版本、viewport、字体、语言和主题,以完整公开场景逐项核对;仅有组件展板或首屏时不标整页通过。 +6. 汇总 CNB/人工 Review 的最终记录;若平台记录确实不可获取,由维护者明确选用当前发布前重新审查来替代,而非篡改历史通过状态。 +7. 最终 RC 冻结后按同一提交复核受影响功能、Linux 3.32.0 无更新 Golden 和设备场景。缺陷修复后只重复受影响的层级。 + +## 单项记录格式 + +场景 ID / Spec / 候选 SHA / 设备及系统 / Flutter 与依赖版本 / 语言、主题、缩放和尺寸 / 触发步骤 / 预期 / 实际 / 截图或日志 / 缺陷或接受差异依据。 + +通过标准是该 Spec 的实际契约得到证据;自动回归、设计与设备证据分别记录。此方案不宣称 677 项、全状态字形或全部设备验收已完成。 diff --git a/specs/057-release-readiness-audit/spec.md b/specs/057-release-readiness-audit/spec.md new file mode 100644 index 0000000000..0f08d04fd7 --- /dev/null +++ b/specs/057-release-readiness-audit/spec.md @@ -0,0 +1,18 @@ +# 1.0 发布前核销与方案审查 + +## 目标与范围 + +按维护者要求依次执行:清理 Spec 过时记录;提供迁移说明方案;检查依赖并提供方案;验证待验收 Spec 并提供操作方案;检查 CI 正确性。 + +仅修改 Spec 记录。迁移指南、依赖、组件实现、Golden 与 CI 的修复均只提出方案,不在本次实施;不创建远端 PR、不发布包。 + +## 证据契约 + +- 冻结基线 develop@30767a5521e871b1738040f854adf001e50e4774(2026-10-15)。 +- 以同一基线的实际 CI 步骤、日志、正式工具解析和本地既有验证为依据;历史记录保留并注明覆盖关系。 +- GitHub 合并不推定 CNB Review 通过,登记 Golden 通过不推定所有磁盘测试或设计/设备验收完成。 +- 未证实的待办保持开放;同一任务中的已完成和未完成部分拆开。 + +## 验收标准 + +87 份 tasks.md 中的 57 条原始开放任务可追溯;已核销项有依据;迁移、依赖、设备/设计验证与 CI 各有可执行方案;无生产代码或基线图片改动。 diff --git a/specs/057-release-readiness-audit/tasks.md b/specs/057-release-readiness-audit/tasks.md new file mode 100644 index 0000000000..8b3b8427db --- /dev/null +++ b/specs/057-release-readiness-audit/tasks.md @@ -0,0 +1,9 @@ +# 本次审查任务 + +- [x] 保存原始 87 Spec / 32 个含开放任务目录 / 57 条开放任务清单。 +- [x] 核销有当前证据的过时记录,保留真实待验收项。 +- [x] 完成仅面向 0.2.7 → 1.0 的迁移说明方案(不实施)。 +- [x] 完成依赖历史、源码耦合、SDK 下限检查与处理方案(候选未实施)。 +- [x] 完成全部原始开放任务的证据核对与操作方案;真实设备/设计/CNB 缺证项明确保留。 +- [x] 完成 CI 配置、实际日志、分支规则和漏调度检查;提出最小修复方案,不修改 CI。 +- [x] 检查最终文档 diff、变更范围与本地引用;仅 Spec 文件改动。 diff --git a/specs/058-release-preparation/acceptance.md b/specs/058-release-preparation/acceptance.md new file mode 100644 index 0000000000..cf4fee9338 --- /dev/null +++ b/specs/058-release-preparation/acceptance.md @@ -0,0 +1,69 @@ +> 最新处置(2026-10-15,Spec060):已实修Ghost语义回退的2个观察项,8项由既有Flutter契约及运行断言支持;21项差异与1项平台几何已有具体方案,524项仍待补运行。当前代码为30767a55上的未提交工作区,本地新指纹验证见 [Spec060](../060-token-difference-resolution/acceptance.md),不沿用旧远端CI作为本次修复通过证据。 + +# 2026-10-15 发布准备实施记录 + +## 交付范围 + +本轮实施第1~4项;保留上一轮Spec核销,新增0.2.7 → 1.0唯一迁移指南、包/站点入口、消费测试、依赖兼容调整和发布验收材料。没有修改CI/工作流、测试调度清单、远端规则或正式发布版本,未上传、打tag、提交或推送。 + +- [迁移指南](../../MIGRATION_1_0.md):57个组件/主题入口、383个旧公开声明处置索引、主要改写示例。 +- [公开声明盘点](public-api-diff.json):由0.2.7真实发布包与当前公开入口提取;声明形状和名称候选不自动证明语义等价。 +- [组件迁移索引](component-migration-index.json):与当前57个API页的组件集合核对一致。 +- [Token现状](token-status.md)与[源码定位证据](current-token-verification.json)。 +- [人工验收表](manual-acceptance.md)、[发布流程](../../PUBLISH.md)、[发布说明草稿](release-notes-draft.md)。 + +## 迁移起点与内容同步 + +本机缓存的pub.dev 0.2.7包与本仓库0.2.7 tag的159个lib文件逐字节一致。对主入口自有公开声明做AST盘点:旧383、新369;不把外部包导出、继承成员和名称对应当成自动迁移证明。 + +根MIGRATION_1_0.md是唯一正文;scripts/sync-readme.mjs从独立消费夹具提取9组新代码,并同步至tdesign-component/MIGRATION_1_0.md及站点migration-1-0.md。README和站点导航有统一入口。后续不直接改副本。 + +新增10项消费测试,和既有11项一起从仓库外宿主运行。覆盖按钮禁用/点击、TD文字局部默认与实例覆盖、受控复选/单选、表单输入/必填、选择器草稿确认取消、Dialog结果、Upload不可变列表、日期公开类型与Toast零时长关闭。选择器草稿协议测试驱动公开候选回调,不替代真机滚轮/IME/GPU路径验收。 + +## 已完成验证 + +Flutter 3.32.0 / Dart 3.8.0 与 Flutter 3.47.7 / Dart 3.13.5 使用隔离的编译缓存。两个版本严格analyze均零问题,Upload组件及Demo功能回归通过,仓库外迁移consumer各21项通过。 + +额外宿主场景:最低image_picker 1.1.2(Flutter3.32)和业务显式依赖image_picker ^1.2.4(Flutter3.47.7),解析、严格分析及各21项消费测试均通过。没有向生产dependency_overrides写入强制覆盖。 + +干净发布副本暴露24条仓库分析配置忽略的unused_import,本轮从17个生产文件移除这些导入;[逐文件证据](import-cleanup.json)确认移除前后所有非导入内容完全一致。没有修改声明、函数体、注释、公开导出或Golden。API审计369声明零问题、现有示例片段370条检查通过。最终导入清理后的全组件回归及干净包结果见下方。 + +## 依赖实际解析 + +| 环境 | image_picker | Android实现 | iOS实现 | +|---|---|---|---| +| Flutter3.32正常升级 | 1.2.1 | 0.8.13+1 | 0.8.13 | +| Flutter3.47.7正常解析 | 1.2.4 | 0.8.13+25 | 0.8.13+12 | + +本库约束为^1.1.2、保留Flutter>=3.32;移除无生产导入的Android实现包直接pin。宿主最低系统版本仍需按实际Flutter/平台插件组合核对,不能由Dart包可解析推定支持任意旧系统。 + +## 设备/设计/审查边界 + +当前只有macOS与Chrome,无Android/iOS真实设备。人工验收表保留未执行;216个全局默认有效值与旧审计一致,不等于677项组件消费队列或跨端像素全部验收。CNB最终Review、完整状态矩阵及两种未调度Popup consumer场景仍未由本轮关闭。 + +## 构建与打包 + +依赖调整后,两套Flutter环境的Android APK、iOS无签名和Web共6次构建通过,Chrome迁移用例10项通过,站点冻结依赖安装及构建通过。6次平台构建发生在最后无用导入清理之前;导入清理不改变声明/函数体,最终正式候选仍须按PUBLISH.md重新构建。 + +仓库外手工组装的运行时文件副本与正式上传归档不是同一个对象;该副本用于检查lib/assets/公开文档等文件是否足以支撑宿主使用,独立consumer的21项测试通过。正式包发布后的pub.dev安装、CDN下载和真机验收仍待发布后执行。 + +源工作区的pub publish --dry-run因存在未提交变更返回65;不通过擅自提交隐藏这项提示。最后清理后的无Git运行时副本默认严格分析与pub publish --dry-run均通过(退出码0),21项独立消费测试通过。该结果不替代最终版本号切换后的真实发布归档预检。 + +## 原生平台下限与构建说明 + +低SDK解析的Android实现minSdk=21、iOS实现最低12.0;高SDK解析的Android实现minSdk=24、iOS实现最低15.0,均从实际包配置读取。Flutter3.47.7在临时示例工程执行了自身的iOS15部署目标迁移,随后无签名构建通过;没有把这个临时平台升级写回低SDK示例源工程。两组原生构建使用示例既有依赖配置,其结果不推广为所有宿主/平台版本组合均已验证。 + +源码示例原有assets/version为1.0.0-alpha.5、组件版本为1.0.0-alpha.1,示例pubspec为1.0.0+1。本轮不把任何版本提前标为正式1.0;PUBLISH.md已明确要求最终版本切换时三者与构建号统一。已构建预览产物不作为正式发布交付。 + +## 最终导入清理后的验证 + +| 检查 | Flutter3.32.0 | Flutter3.47.7 | +|---|---|---| +| 严格静态分析 | 通过,0问题 | 通过,0问题 | +| 清单内组件功能回归 | 57组全部通过 | 57组全部通过 | +| 每组件生产行覆盖率 | 全部≥95%,最低95.06% | 全部≥95%,最低95.06% | +| 仓库外迁移消费测试 | 21项通过 | 21项通过 | + +组件回归运行现有tool/run_component_regression.dart,遵循现有清单、排除demo标签且没有重录Golden;不据此声称已覆盖清单外的真机/视觉路径。低SDK另执行tool/audit_api_docs.dart通过。迁移正文同步幂等、三份正文一致,新文档本地链接有效,git diff --check通过;CI/测试清单/正式版本/CHANGELOG无改动。 + +干净运行时副本最终pub get、默认严格analyze(lib/pubspec.yaml)、pub publish --dry-run全部通过;最终runtime consumer分析与21项测试通过。源工作区dry-run只剩未提交改动提示,未通过提交或忽略Git检查来消除提示。 diff --git a/specs/058-release-preparation/component-migration-index.json b/specs/058-release-preparation/component-migration-index.json new file mode 100644 index 0000000000..2efeabaa44 --- /dev/null +++ b/specs/058-release-preparation/component-migration-index.json @@ -0,0 +1,344 @@ +[ + { + "slug": "button", + "old": "TDButton", + "current": "TButton", + "notes": "text→child;onTap→onPressed;type→variant;theme→colorPreset;状态样式合并为 ButtonStyle。" + }, + { + "slug": "divider", + "old": "TDDivider", + "current": "TDivider", + "notes": "按当前构造及 TDividerThemeData 配置;方向/内容与具体视觉默认值分开。" + }, + { + "slug": "fab", + "old": "TDFab", + "current": "TFab", + "notes": "重新核对尺寸/形态枚举、内容和事件;具体视觉从 TFabThemeData 配置。" + }, + { + "slug": "icon", + "old": "TDIcons / Icon", + "current": "TIcons / TIcon", + "notes": "图标数据来自 tdesign_flutter_icons;TIcon 的默认视觉由 TD 控制,实例 size/color 可覆盖。" + }, + { + "slug": "text", + "old": "TDText / TDTextSpan", + "current": "TText / TTextSpan", + "notes": "删除分散字体、在线加载和 padding 入口;用 style、textScaler、显式父布局,见文字一节。" + }, + { + "slug": "link", + "old": "TDLink", + "current": "TLink", + "notes": "内容改用 Widget child;内置规格与 colorPreset 留实例,具体视觉从 TLinkThemeData 配置。" + }, + { + "slug": "backtop", + "old": "TDBackTop", + "current": "TBackTop", + "notes": "按当前滚动绑定与形态配置;仅提供滚动控制器时按组件契约回顶,不用空回调猜禁用。" + }, + { + "slug": "drawer", + "old": "TDDrawer / TDDrawerWidget", + "current": "TDrawer / showTDrawer", + "notes": "内容与浮层打开分开;宽度/背景移入 TDrawerThemeData,旧内容实现类型不再直接构造。" + }, + { + "slug": "indexes", + "old": "TDIndexes", + "current": "TIndexes", + "notes": "重新核对受控索引及滚动对象;字母列表最大高度在组件 Theme 配置。" + }, + { + "slug": "navbar", + "old": "TDNavBar", + "current": "TNavBar", + "notes": "title/操作保留内容职责,背景、颜色、间距、边框和阴影迁入 TNavBarThemeData。" + }, + { + "slug": "sidebar", + "old": "TDSideBar", + "current": "TSideBar", + "notes": "选择交给 value/onChanged;去掉旧 Controller/数据项样式依赖,视觉使用 TSideBarThemeData。" + }, + { + "slug": "steps", + "old": "TDSteps", + "current": "TSteps.progress / selectable / display", + "notes": "选择进度、可选择或纯展示模式;不把三种状态源混用。" + }, + { + "slug": "tab_bar", + "old": "TDBottomTabBar", + "current": "TTabBar", + "notes": "底部导航:显式 type、navigationTabs、value/onChanged;尺寸/颜色/分隔线迁 Theme。" + }, + { + "slug": "tabs", + "old": "TDTabBar / TDTabBarView", + "current": "TTabsBar / TTabsBarView", + "notes": "顶部页签:共享 TabController 或 DefaultTabController;不是底部 TTabBar。" + }, + { + "slug": "form", + "old": "TDForm / FormController", + "current": "TForm / TFormField / TFormController", + "notes": "从 items/rules/data 配置改为字段 Widget 树;value/onChanged、validator 与控制器职责分开。" + }, + { + "slug": "input", + "old": "TDInput", + "current": "TInput", + "notes": "controller 与 initialValue 互斥;onChanged/hintText/prefix/suffix;不要把 initialValue 当持续受控值。" + }, + { + "slug": "textarea", + "old": "TDTextarea", + "current": "TTextarea", + "notes": "多行输入独立组件;用 minLines/maxLines、controller 与字段回调,核对计数/字符限制。" + }, + { + "slug": "search", + "old": "TDSearchBar", + "current": "TSearchBar", + "notes": "placeHolder→hintText、onTextChanged→onChanged、onActionClick→onActionPressed;不保留旧样式对象。" + }, + { + "slug": "checkbox", + "old": "TDCheckbox / TDCheckboxGroup", + "current": "TCheckbox / TCheckboxGroup", + "notes": "checked/id/controller 方案改为 value/onChanged;组提供 options 和受控选中集合,类型按当前 API。" + }, + { + "slug": "radio", + "old": "TDRadio / TDRadioGroup", + "current": "TRadio / TRadioGroup", + "notes": "单项必须位于同类型组下;组持有 value/onChanged,不再为每项维护选中状态。" + }, + { + "slug": "switch", + "old": "TDSwitch", + "current": "TSwitch", + "notes": "value/onChanged 管开关状态;空回调禁用;规格与具体配色分别从实例/Theme 设置。" + }, + { + "slug": "stepper", + "old": "TDStepper", + "current": "TStepper", + "notes": "required value;回调接受后重建;旧 defaultValue/eventController 不能作为迁移目标。" + }, + { + "slug": "slider", + "old": "TDSlider / TDRangeSlider", + "current": "TSlider / TRangeSlider", + "notes": "按当前值及回调类型迁移;旧 Thumb/Track/Painter 类型不再作为可继承公开入口。" + }, + { + "slug": "rate", + "old": "TDRate", + "current": "TRate", + "notes": "按当前受控数值与回调迁移;重验半星、禁用、只读与自定义指示器。" + }, + { + "slug": "picker", + "old": "TDPicker / TDMultiPicker / TDMultiLinkedPicker", + "current": "TPicker + TPickerColumns / TPickerLinked", + "notes": "列数据改不可变 option 树;选择面板不负责业务确认,使用 TPickerPopup 组合草稿/确认/取消。" + }, + { + "slug": "date_time_picker", + "old": "TDDatePicker", + "current": "TDateTimePicker", + "notes": "DatePickerModel 改为 TDateTimePickerValue + DateTimePickerMode;上下界/步进显式传入,外部管理确认。" + }, + { + "slug": "cascader", + "old": "TDCascader / TDMultiCascader", + "current": "TCascader", + "notes": "使用 TCascaderOption 树与受控路径;旧自定义 Tab/Action/多选控制类型不能机械替换,按当前能力重组。" + }, + { + "slug": "tree_select", + "old": "TDTreeSelect / TDSelectOption", + "current": "TTreeSelect / TTreeSelectOption", + "notes": "树数据、选中集合与 multiple 明确配置;不再复用旧副作用控制器。" + }, + { + "slug": "calendar", + "old": "TDCalendar", + "current": "TCalendar", + "notes": "value 是 List;variant 决定单选/多选/区间;onChanged 回写,时间选择和弹层外部组合。" + }, + { + "slug": "upload", + "old": "TDUpload", + "current": "TUpload", + "notes": "files/onChanged 受控;单一 mediaType,maxFiles/maxFileSize、不可变结果;上传请求由业务执行。" + }, + { + "slug": "avatar", + "old": "TDAvatar", + "current": "TAvatar", + "notes": "形状用 shape,物理大小/颜色迁 TAvatarThemeData;特殊文字用 child: Text(style: ...)。" + }, + { + "slug": "badge", + "old": "TDBadge", + "current": "TBadge", + "notes": "统一 label/size 等当前入口;旧数字/红点/丝带类型按组件 API 重组,不复用旧 BadgeConfig。" + }, + { + "slug": "cell", + "old": "TDCell / TDCellGroup", + "current": "TCell / TCellGroup", + "notes": "以内容槽组合;连续列表用 TCellGroup;统一背景/分隔线由组或 Theme 管理。" + }, + { + "slug": "collapse", + "old": "TDCollapse / TDCollapsePanel", + "current": "TCollapse / TCollapsePanel", + "notes": "受控展开值与内容分开;形态/动画属于实例,具体外观从 TCollapseThemeData 配置。" + }, + { + "slug": "empty", + "old": "TDEmpty", + "current": "TEmpty", + "notes": "旧 type 改为 icon/image/emptyText/operation 组合;不再查找 TDEmptyType,也不导入内部插图。" + }, + { + "slug": "footer", + "old": "TDFooter", + "current": "TFooter", + "notes": "按当前内容/链接数据与组件 Theme 迁移,不继续使用旧 FooterType 作为类型。" + }, + { + "slug": "image", + "old": "TDImage", + "current": "TImage", + "notes": "重验加载/失败/裁剪;尺寸和占位以当前 API 为准,旧 TDImageType 不能仅改前缀。" + }, + { + "slug": "image_viewer", + "old": "TDImageViewer / TDImageDialog", + "current": "TImageViewer.show", + "notes": "images 使用 ImageProvider 列表;initialIndex 与 onIndexChanged,内部 State/Dialog 类型不再直接实例化。" + }, + { + "slug": "progress", + "old": "TDProgress", + "current": "TProgress", + "notes": "variant/status 与主题分开;圆环 circleSize 表示外框边长,不能把旧半径语义套入。" + }, + { + "slug": "result", + "old": "TDResult", + "current": "TResult", + "notes": "重选当前语义状态与内容插槽,背景/文字视觉使用 TResultThemeData。" + }, + { + "slug": "skeleton", + "old": "TDSkeleton / TDSkeletonRowCol*", + "current": "TSkeleton / TSkeleton.custom", + "notes": "标准形态用 variant;自定义布局使用 TSkeletonLayout,不复用旧 RowCol 配置类型。" + }, + { + "slug": "swiper", + "old": "Swiper + TDSwiperPagination", + "current": "TSwiper / TSwiperController", + "notes": "不再用第三方 SwiperController/SwiperPlugin;迁移 children 或 itemBuilder、分页及自有控制器。" + }, + { + "slug": "table", + "old": "TDTable / TDTableCol", + "current": "TTable / TTableColumn", + "notes": "列使用 id/header/cellBuilder,data 必填;排序和选择是受控值,旧列/行选择回调需要改写。" + }, + { + "slug": "tag", + "old": "TDTag / TDSelectTag", + "current": "TTag / TSelectTag", + "notes": "语义色用 colorPreset;选中/关闭遵循当前回调;具体字体和圆角从 Theme 设置。" + }, + { + "slug": "time_counter", + "old": "TDTimeCounter", + "current": "TTimeCounter", + "notes": "time 和 onChanged 均使用毫秒整数;重验自动开始、方向与结束;自建 Controller 由业务释放。" + }, + { + "slug": "action_sheet", + "old": "TDActionSheet", + "current": "TActionSheet", + "notes": "按当前列表/宫格入口及 TActionSheetItem 组合;旧主题枚举不是新 Theme 类型。" + }, + { + "slug": "dialog", + "old": "TDAlertDialog / TDConfirmDialog / TDInputDialog", + "current": "TDialog / TConfirmDialog / TDialogAction", + "notes": "单确认便捷弹窗与多操作槽分开;输入弹窗用 TDialog+TInput 组合,不恢复专用旧类。" + }, + { + "slug": "dropdown_menu", + "old": "TDDropdownMenu / TDDropdownItem", + "current": "TDropdownMenu / TDropdownMenuItem", + "notes": "菜单项描述与 Single/MultiSelectPanel 组合;重验外部值更新、遮罩和 anchor,不直接改名前缀。" + }, + { + "slug": "loading", + "old": "TDLoading", + "current": "TLoading", + "notes": "按当前 icon/内容与 TLoadingController 使用;旧内部指示器/State 不作为公开继承点。" + }, + { + "slug": "message", + "old": "TDMessage", + "current": "TMessage", + "notes": "duration 使用 Duration;status 替代旧 theme;显示由 Widget 树或命令句柄管理,不保留 visible 开关。" + }, + { + "slug": "notice_bar", + "old": "TDNoticeBar", + "current": "TNoticeBar", + "notes": "语义状态/滚动/多行用当前 API;重验循环、点击与关闭,不搬旧样式类。" + }, + { + "slug": "popover", + "old": "TDPopover / TDPopoverWidget", + "current": "TPopover", + "notes": "锚点和一次性命令按当前入口使用;offset/arrowSize/padding/背景/圆角从 TPopoverThemeData 设置。" + }, + { + "slug": "popup", + "old": "TDPopup*Panel / TDSlidePopupRoute", + "current": "TPopup.show + TPopupOptions + TPopupHandle", + "notes": "面板、路由与控制统一;选择方向专属 Options/Inset,关闭结果从 handle.result 获取。" + }, + { + "slug": "refresh", + "old": "TDRefreshHeader", + "current": "TPullDownRefresh", + "notes": "用 wrapper、受控回调和 TPullDownRefreshController 迁移;旧第三方 Header 不能仅改名。" + }, + { + "slug": "swipe_cell", + "old": "TDSwipeCell / TDSwipeCellAction", + "current": "TSwipeCell / TSwipeCellAction", + "notes": "侧滑交互与逐项动作配置使用当前 API;不要依赖旧 Inherited/State,避免重复通知。" + }, + { + "slug": "toast", + "old": "TDToast", + "current": "TToast", + "notes": "duration 为 Duration,加载默认也会超时;持续加载显式 Duration.zero,背景拦截放 TOverlayConfig。" + }, + { + "slug": "theme", + "old": "TDTheme / TDThemeData", + "current": "context.tTheme / TThemeData / TThemeBuilder", + "notes": "全局 Token→TD 组件 Theme→支持的实例配置;Material 外观不再反向影响 TD 默认视觉。" + } +] diff --git a/specs/058-release-preparation/current-token-verification.json b/specs/058-release-preparation/current-token-verification.json new file mode 100644 index 0000000000..3fbab29aa6 --- /dev/null +++ b/specs/058-release-preparation/current-token-verification.json @@ -0,0 +1,12948 @@ +{ + "date": "2026-10-15", + "basis": "30767a55 + release-preparation working diff", + "upstreamCommit": "1a1c5ca135b0e9bf19abc43a59870c4908a28ad5", + "scope": "Current Flutter name locators only. No new upstream source or pixels; not proof of final consumption. Review flags intentionally not promoted.", + "globals": [ + { + "key": "bgColorComponent", + "actual": [ + "#e8e8e8", + "#383838" + ], + "previousFlutter": [ + "#e8e8e8", + "#383838" + ], + "matchesRecorded": true + }, + { + "key": "bgColorComponentActive", + "actual": [ + "#a6a6a6", + "#4b4b4b" + ], + "previousFlutter": [ + "#a6a6a6", + "#4b4b4b" + ], + "matchesRecorded": true + }, + { + "key": "bgColorComponentDisabled", + "actual": [ + "#eeeeee", + "#2c2c2c" + ], + "previousFlutter": [ + "#eeeeee", + "#2c2c2c" + ], + "matchesRecorded": true + }, + { + "key": "bgColorContainer", + "actual": [ + "#ffffff", + "#242424" + ], + "previousFlutter": [ + "#ffffff", + "#242424" + ], + "matchesRecorded": true + }, + { + "key": "bgColorContainerActive", + "actual": [ + "#e8e8e8", + "#2c2c2c" + ], + "previousFlutter": [ + "#e8e8e8", + "#2c2c2c" + ], + "matchesRecorded": true + }, + { + "key": "bgColorPage", + "actual": [ + "#f3f3f3", + "#181818" + ], + "previousFlutter": [ + "#f3f3f3", + "#181818" + ], + "matchesRecorded": true + }, + { + "key": "bgColorSecondaryComponent", + "actual": [ + "#dcdcdc", + "#4b4b4b" + ], + "previousFlutter": [ + "#dcdcdc", + "#4b4b4b" + ], + "matchesRecorded": true + }, + { + "key": "bgColorSecondaryComponentActive", + "actual": [ + "#a6a6a6", + "#777777" + ], + "previousFlutter": [ + "#a6a6a6", + "#777777" + ], + "matchesRecorded": true + }, + { + "key": "bgColorSecondaryContainer", + "actual": [ + "#f3f3f3", + "#2c2c2c" + ], + "previousFlutter": [ + "#f3f3f3", + "#2c2c2c" + ], + "matchesRecorded": true + }, + { + "key": "bgColorSecondaryContainerActive", + "actual": [ + "#dcdcdc", + "#383838" + ], + "previousFlutter": [ + "#dcdcdc", + "#383838" + ], + "matchesRecorded": true + }, + { + "key": "bgColorSpecialComponent", + "actual": [ + "#ffffff", + "transparent" + ], + "previousFlutter": [ + "#ffffff", + "transparent" + ], + "matchesRecorded": true + }, + { + "key": "borderLevel1Color", + "actual": [ + "#e8e8e8", + "#383838" + ], + "previousFlutter": [ + "#e8e8e8", + "#383838" + ], + "matchesRecorded": true + }, + { + "key": "borderLevel2Color", + "actual": [ + "#dcdcdc", + "#5e5e5e" + ], + "previousFlutter": [ + "#dcdcdc", + "#5e5e5e" + ], + "matchesRecorded": true + }, + { + "key": "brandColor", + "actual": [ + "#0052d9", + "#4582e6" + ], + "previousFlutter": [ + "#0052d9", + "#4582e6" + ], + "matchesRecorded": true + }, + { + "key": "brandColor1", + "actual": [ + "#f2f3ff", + "#1b2f51" + ], + "previousFlutter": [ + "#f2f3ff", + "#1b2f51" + ], + "matchesRecorded": true + }, + { + "key": "brandColor10", + "actual": [ + "#001a57", + "#96bbf8" + ], + "previousFlutter": [ + "#001a57", + "#96bbf8" + ], + "matchesRecorded": true + }, + { + "key": "brandColor2", + "actual": [ + "#d9e1ff", + "#173463" + ], + "previousFlutter": [ + "#d9e1ff", + "#173463" + ], + "matchesRecorded": true + }, + { + "key": "brandColor3", + "actual": [ + "#b5c7ff", + "#143975" + ], + "previousFlutter": [ + "#b5c7ff", + "#143975" + ], + "matchesRecorded": true + }, + { + "key": "brandColor4", + "actual": [ + "#8eabff", + "#103d88" + ], + "previousFlutter": [ + "#8eabff", + "#103d88" + ], + "matchesRecorded": true + }, + { + "key": "brandColor5", + "actual": [ + "#618dff", + "#0d429a" + ], + "previousFlutter": [ + "#618dff", + "#0d429a" + ], + "matchesRecorded": true + }, + { + "key": "brandColor6", + "actual": [ + "#366ef4", + "#054bbe" + ], + "previousFlutter": [ + "#366ef4", + "#054bbe" + ], + "matchesRecorded": true + }, + { + "key": "brandColor7", + "actual": [ + "#0052d9", + "#2667d4" + ], + "previousFlutter": [ + "#0052d9", + "#2667d4" + ], + "matchesRecorded": true + }, + { + "key": "brandColor8", + "actual": [ + "#003cab", + "#4582e6" + ], + "previousFlutter": [ + "#003cab", + "#4582e6" + ], + "matchesRecorded": true + }, + { + "key": "brandColor9", + "actual": [ + "#002a7c", + "#699ef5" + ], + "previousFlutter": [ + "#002a7c", + "#699ef5" + ], + "matchesRecorded": true + }, + { + "key": "brandColorActive", + "actual": [ + "#003cab", + "#699ef5" + ], + "previousFlutter": [ + "#003cab", + "#699ef5" + ], + "matchesRecorded": true + }, + { + "key": "brandColorDisabled", + "actual": [ + "#b5c7ff", + "#143975" + ], + "previousFlutter": [ + "#b5c7ff", + "#143975" + ], + "matchesRecorded": true + }, + { + "key": "brandColorFocus", + "actual": [ + "#f2f3ff", + "#1b2f51" + ], + "previousFlutter": [ + "#f2f3ff", + "#1b2f51" + ], + "matchesRecorded": true + }, + { + "key": "brandColorLight", + "actual": [ + "#f2f3ff", + "#1b2f51" + ], + "previousFlutter": [ + "#f2f3ff", + "#1b2f51" + ], + "matchesRecorded": true + }, + { + "key": "brandColorLightActive", + "actual": [ + "#d9e1ff", + "#173463" + ], + "previousFlutter": [ + "#d9e1ff", + "#173463" + ], + "matchesRecorded": true + }, + { + "key": "componentBorder", + "actual": [ + "#dcdcdc", + "#5e5e5e" + ], + "previousFlutter": [ + "#dcdcdc", + "#5e5e5e" + ], + "matchesRecorded": true + }, + { + "key": "componentStroke", + "actual": [ + "#e8e8e8", + "#383838" + ], + "previousFlutter": [ + "#e8e8e8", + "#383838" + ], + "matchesRecorded": true + }, + { + "key": "errorColor", + "actual": [ + "#d54941", + "#c64751" + ], + "previousFlutter": [ + "#d54941", + "#c64751" + ], + "matchesRecorded": true + }, + { + "key": "errorColor1", + "actual": [ + "#fff0ed", + "#472324" + ], + "previousFlutter": [ + "#fff0ed", + "#472324" + ], + "matchesRecorded": true + }, + { + "key": "errorColor10", + "actual": [ + "#490002", + "#eeced0" + ], + "previousFlutter": [ + "#490002", + "#eeced0" + ], + "matchesRecorded": true + }, + { + "key": "errorColor2", + "actual": [ + "#ffd8d2", + "#5e2a2d" + ], + "previousFlutter": [ + "#ffd8d2", + "#5e2a2d" + ], + "matchesRecorded": true + }, + { + "key": "errorColor3", + "actual": [ + "#ffb9b0", + "#703439" + ], + "previousFlutter": [ + "#ffb9b0", + "#703439" + ], + "matchesRecorded": true + }, + { + "key": "errorColor4", + "actual": [ + "#ff9285", + "#83383e" + ], + "previousFlutter": [ + "#ff9285", + "#83383e" + ], + "matchesRecorded": true + }, + { + "key": "errorColor5", + "actual": [ + "#f6685d", + "#a03f46" + ], + "previousFlutter": [ + "#f6685d", + "#a03f46" + ], + "matchesRecorded": true + }, + { + "key": "errorColor6", + "actual": [ + "#d54941", + "#c64751" + ], + "previousFlutter": [ + "#d54941", + "#c64751" + ], + "matchesRecorded": true + }, + { + "key": "errorColor7", + "actual": [ + "#ad352f", + "#de6670" + ], + "previousFlutter": [ + "#ad352f", + "#de6670" + ], + "matchesRecorded": true + }, + { + "key": "errorColor8", + "actual": [ + "#881f1c", + "#ec888e" + ], + "previousFlutter": [ + "#881f1c", + "#ec888e" + ], + "matchesRecorded": true + }, + { + "key": "errorColor9", + "actual": [ + "#68070a", + "#edb1b6" + ], + "previousFlutter": [ + "#68070a", + "#edb1b6" + ], + "matchesRecorded": true + }, + { + "key": "errorColorActive", + "actual": [ + "#ad352f", + "#a03f46" + ], + "previousFlutter": [ + "#ad352f", + "#a03f46" + ], + "matchesRecorded": true + }, + { + "key": "errorColorDisabled", + "actual": [ + "#ffb9b0", + "#703439" + ], + "previousFlutter": [ + "#ffb9b0", + "#703439" + ], + "matchesRecorded": true + }, + { + "key": "errorColorFocus", + "actual": [ + "#ffd8d2", + "#5e2a2d" + ], + "previousFlutter": [ + "#ffd8d2", + "#5e2a2d" + ], + "matchesRecorded": true + }, + { + "key": "errorColorLight", + "actual": [ + "#fff0ed", + "#472324" + ], + "previousFlutter": [ + "#fff0ed", + "#472324" + ], + "matchesRecorded": true + }, + { + "key": "errorColorLightActive", + "actual": [ + "#ffd8d2", + "#5e2a2d" + ], + "previousFlutter": [ + "#ffd8d2", + "#5e2a2d" + ], + "matchesRecorded": true + }, + { + "key": "fontBodyExtraSmall", + "actual": [ + { + "size": 10, + "lineHeight": 16 + }, + { + "size": 10, + "lineHeight": 16 + } + ], + "previousFlutter": [ + { + "size": 10, + "lineHeight": 16 + }, + { + "size": 10, + "lineHeight": 16 + } + ], + "matchesRecorded": true + }, + { + "key": "fontBodyLarge", + "actual": [ + { + "size": 16, + "lineHeight": 24 + }, + { + "size": 16, + "lineHeight": 24 + } + ], + "previousFlutter": [ + { + "size": 16, + "lineHeight": 24 + }, + { + "size": 16, + "lineHeight": 24 + } + ], + "matchesRecorded": true + }, + { + "key": "fontBodyMedium", + "actual": [ + { + "size": 14, + "lineHeight": 22 + }, + { + "size": 14, + "lineHeight": 22 + } + ], + "previousFlutter": [ + { + "size": 14, + "lineHeight": 22 + }, + { + "size": 14, + "lineHeight": 22 + } + ], + "matchesRecorded": true + }, + { + "key": "fontBodySmall", + "actual": [ + { + "size": 12, + "lineHeight": 20 + }, + { + "size": 12, + "lineHeight": 20 + } + ], + "previousFlutter": [ + { + "size": 12, + "lineHeight": 20 + }, + { + "size": 12, + "lineHeight": 20 + } + ], + "matchesRecorded": true + }, + { + "key": "fontDisplayLarge", + "actual": [ + { + "size": 64, + "lineHeight": 72, + "fontWeight": 6 + }, + { + "size": 64, + "lineHeight": 72, + "fontWeight": 6 + } + ], + "previousFlutter": [ + { + "size": 64, + "lineHeight": 72, + "fontWeight": 6 + }, + { + "size": 64, + "lineHeight": 72, + "fontWeight": 6 + } + ], + "matchesRecorded": true + }, + { + "key": "fontDisplayMedium", + "actual": [ + { + "size": 48, + "lineHeight": 56, + "fontWeight": 6 + }, + { + "size": 48, + "lineHeight": 56, + "fontWeight": 6 + } + ], + "previousFlutter": [ + { + "size": 48, + "lineHeight": 56, + "fontWeight": 6 + }, + { + "size": 48, + "lineHeight": 56, + "fontWeight": 6 + } + ], + "matchesRecorded": true + }, + { + "key": "fontFamily", + "actual": [ + { + "fontFamily": "PingFang SC", + "fallback": [ + "Microsoft YaHei", + "Arial Regular" + ] + }, + { + "fontFamily": "PingFang SC", + "fallback": [ + "Microsoft YaHei", + "Arial Regular" + ] + } + ], + "previousFlutter": [ + { + "fontFamily": "PingFang SC", + "fallback": [ + "Microsoft YaHei", + "Arial Regular" + ] + }, + { + "fontFamily": "PingFang SC", + "fallback": [ + "Microsoft YaHei", + "Arial Regular" + ] + } + ], + "matchesRecorded": true + }, + { + "key": "fontFamilyMedium", + "actual": [ + { + "fontFamily": "PingFang SC", + "fallback": [ + "Microsoft YaHei", + "Arial Medium" + ] + }, + { + "fontFamily": "PingFang SC", + "fallback": [ + "Microsoft YaHei", + "Arial Medium" + ] + } + ], + "previousFlutter": [ + { + "fontFamily": "PingFang SC", + "fallback": [ + "Microsoft YaHei", + "Arial Medium" + ] + }, + { + "fontFamily": "PingFang SC", + "fallback": [ + "Microsoft YaHei", + "Arial Medium" + ] + } + ], + "matchesRecorded": true + }, + { + "key": "fontGray1", + "actual": [ + "#E5000000", + "#E5000000" + ], + "previousFlutter": [ + "#E5000000", + "#E5000000" + ], + "matchesRecorded": true + }, + { + "key": "fontGray2", + "actual": [ + "#99000000", + "#99000000" + ], + "previousFlutter": [ + "#99000000", + "#99000000" + ], + "matchesRecorded": true + }, + { + "key": "fontGray3", + "actual": [ + "#66000000", + "#66000000" + ], + "previousFlutter": [ + "#66000000", + "#66000000" + ], + "matchesRecorded": true + }, + { + "key": "fontGray4", + "actual": [ + "#42000000", + "#42000000" + ], + "previousFlutter": [ + "#42000000", + "#42000000" + ], + "matchesRecorded": true + }, + { + "key": "fontHeadlineLarge", + "actual": [ + { + "size": 36, + "lineHeight": 44, + "fontWeight": 6 + }, + { + "size": 36, + "lineHeight": 44, + "fontWeight": 6 + } + ], + "previousFlutter": [ + { + "size": 36, + "lineHeight": 44, + "fontWeight": 6 + }, + { + "size": 36, + "lineHeight": 44, + "fontWeight": 6 + } + ], + "matchesRecorded": true + }, + { + "key": "fontHeadlineMedium", + "actual": [ + { + "size": 28, + "lineHeight": 36, + "fontWeight": 6 + }, + { + "size": 28, + "lineHeight": 36, + "fontWeight": 6 + } + ], + "previousFlutter": [ + { + "size": 28, + "lineHeight": 36, + "fontWeight": 6 + }, + { + "size": 28, + "lineHeight": 36, + "fontWeight": 6 + } + ], + "matchesRecorded": true + }, + { + "key": "fontHeadlineSmall", + "actual": [ + { + "size": 24, + "lineHeight": 32, + "fontWeight": 6 + }, + { + "size": 24, + "lineHeight": 32, + "fontWeight": 6 + } + ], + "previousFlutter": [ + { + "size": 24, + "lineHeight": 32, + "fontWeight": 6 + }, + { + "size": 24, + "lineHeight": 32, + "fontWeight": 6 + } + ], + "matchesRecorded": true + }, + { + "key": "fontLinkLarge", + "actual": [ + { + "size": 16, + "lineHeight": 24 + }, + { + "size": 16, + "lineHeight": 24 + } + ], + "previousFlutter": [ + { + "size": 16, + "lineHeight": 24 + }, + { + "size": 16, + "lineHeight": 24 + } + ], + "matchesRecorded": true + }, + { + "key": "fontLinkMedium", + "actual": [ + { + "size": 14, + "lineHeight": 22 + }, + { + "size": 14, + "lineHeight": 22 + } + ], + "previousFlutter": [ + { + "size": 14, + "lineHeight": 22 + }, + { + "size": 14, + "lineHeight": 22 + } + ], + "matchesRecorded": true + }, + { + "key": "fontLinkSmall", + "actual": [ + { + "size": 12, + "lineHeight": 20 + }, + { + "size": 12, + "lineHeight": 20 + } + ], + "previousFlutter": [ + { + "size": 12, + "lineHeight": 20 + }, + { + "size": 12, + "lineHeight": 20 + } + ], + "matchesRecorded": true + }, + { + "key": "fontMarkExtraSmall", + "actual": [ + { + "size": 10, + "lineHeight": 16, + "fontWeight": 6 + }, + { + "size": 10, + "lineHeight": 16, + "fontWeight": 6 + } + ], + "previousFlutter": [ + { + "size": 10, + "lineHeight": 16, + "fontWeight": 6 + }, + { + "size": 10, + "lineHeight": 16, + "fontWeight": 6 + } + ], + "matchesRecorded": true + }, + { + "key": "fontMarkLarge", + "actual": [ + { + "size": 16, + "lineHeight": 24, + "fontWeight": 6 + }, + { + "size": 16, + "lineHeight": 24, + "fontWeight": 6 + } + ], + "previousFlutter": [ + { + "size": 16, + "lineHeight": 24, + "fontWeight": 6 + }, + { + "size": 16, + "lineHeight": 24, + "fontWeight": 6 + } + ], + "matchesRecorded": true + }, + { + "key": "fontMarkMedium", + "actual": [ + { + "size": 14, + "lineHeight": 22, + "fontWeight": 6 + }, + { + "size": 14, + "lineHeight": 22, + "fontWeight": 6 + } + ], + "previousFlutter": [ + { + "size": 14, + "lineHeight": 22, + "fontWeight": 6 + }, + { + "size": 14, + "lineHeight": 22, + "fontWeight": 6 + } + ], + "matchesRecorded": true + }, + { + "key": "fontMarkSmall", + "actual": [ + { + "size": 12, + "lineHeight": 20, + "fontWeight": 6 + }, + { + "size": 12, + "lineHeight": 20, + "fontWeight": 6 + } + ], + "previousFlutter": [ + { + "size": 12, + "lineHeight": 20, + "fontWeight": 6 + }, + { + "size": 12, + "lineHeight": 20, + "fontWeight": 6 + } + ], + "matchesRecorded": true + }, + { + "key": "fontSize", + "actual": [ + 10, + 10 + ], + "previousFlutter": [ + 10, + 10 + ], + "matchesRecorded": true + }, + { + "key": "fontSizeBase", + "actual": [ + 14, + 14 + ], + "previousFlutter": [ + 14, + 14 + ], + "matchesRecorded": true + }, + { + "key": "fontSizeBodyExtraSmall", + "actual": [ + 10, + 10 + ], + "previousFlutter": [ + 10, + 10 + ], + "matchesRecorded": true + }, + { + "key": "fontSizeBodyLarge", + "actual": [ + 16, + 16 + ], + "previousFlutter": [ + 16, + 16 + ], + "matchesRecorded": true + }, + { + "key": "fontSizeBodyMedium", + "actual": [ + 14, + 14 + ], + "previousFlutter": [ + 14, + 14 + ], + "matchesRecorded": true + }, + { + "key": "fontSizeBodySmall", + "actual": [ + 12, + 12 + ], + "previousFlutter": [ + 12, + 12 + ], + "matchesRecorded": true + }, + { + "key": "fontSizeDisplayLarge", + "actual": [ + 64, + 64 + ], + "previousFlutter": [ + 64, + 64 + ], + "matchesRecorded": true + }, + { + "key": "fontSizeDisplayMedium", + "actual": [ + 48, + 48 + ], + "previousFlutter": [ + 48, + 48 + ], + "matchesRecorded": true + }, + { + "key": "fontSizeHeadlineLarge", + "actual": [ + 36, + 36 + ], + "previousFlutter": [ + 36, + 36 + ], + "matchesRecorded": true + }, + { + "key": "fontSizeHeadlineMedium", + "actual": [ + 28, + 28 + ], + "previousFlutter": [ + 28, + 28 + ], + "matchesRecorded": true + }, + { + "key": "fontSizeHeadlineSmall", + "actual": [ + 24, + 24 + ], + "previousFlutter": [ + 24, + 24 + ], + "matchesRecorded": true + }, + { + "key": "fontSizeL", + "actual": [ + 18, + 18 + ], + "previousFlutter": [ + 18, + 18 + ], + "matchesRecorded": true + }, + { + "key": "fontSizeLinkLarge", + "actual": [ + 16, + 16 + ], + "previousFlutter": [ + 16, + 16 + ], + "matchesRecorded": true + }, + { + "key": "fontSizeLinkMedium", + "actual": [ + 14, + 14 + ], + "previousFlutter": [ + 14, + 14 + ], + "matchesRecorded": true + }, + { + "key": "fontSizeLinkSmall", + "actual": [ + 12, + 12 + ], + "previousFlutter": [ + 12, + 12 + ], + "matchesRecorded": true + }, + { + "key": "fontSizeM", + "actual": [ + 16, + 16 + ], + "previousFlutter": [ + 16, + 16 + ], + "matchesRecorded": true + }, + { + "key": "fontSizeMarkExtraSmall", + "actual": [ + 10, + 10 + ], + "previousFlutter": [ + 10, + 10 + ], + "matchesRecorded": true + }, + { + "key": "fontSizeMarkLarge", + "actual": [ + 16, + 16 + ], + "previousFlutter": [ + 16, + 16 + ], + "matchesRecorded": true + }, + { + "key": "fontSizeMarkMedium", + "actual": [ + 14, + 14 + ], + "previousFlutter": [ + 14, + 14 + ], + "matchesRecorded": true + }, + { + "key": "fontSizeMarkSmall", + "actual": [ + 12, + 12 + ], + "previousFlutter": [ + 12, + 12 + ], + "matchesRecorded": true + }, + { + "key": "fontSizeS", + "actual": [ + 12, + 12 + ], + "previousFlutter": [ + 12, + 12 + ], + "matchesRecorded": true + }, + { + "key": "fontSizeTitleExtraLarge", + "actual": [ + 20, + 20 + ], + "previousFlutter": [ + 20, + 20 + ], + "matchesRecorded": true + }, + { + "key": "fontSizeTitleLarge", + "actual": [ + 18, + 18 + ], + "previousFlutter": [ + 18, + 18 + ], + "matchesRecorded": true + }, + { + "key": "fontSizeTitleMedium", + "actual": [ + 16, + 16 + ], + "previousFlutter": [ + 16, + 16 + ], + "matchesRecorded": true + }, + { + "key": "fontSizeTitleSmall", + "actual": [ + 14, + 14 + ], + "previousFlutter": [ + 14, + 14 + ], + "matchesRecorded": true + }, + { + "key": "fontSizeXl", + "actual": [ + 20, + 20 + ], + "previousFlutter": [ + 20, + 20 + ], + "matchesRecorded": true + }, + { + "key": "fontSizeXs", + "actual": [ + 10, + 10 + ], + "previousFlutter": [ + 10, + 10 + ], + "matchesRecorded": true + }, + { + "key": "fontSizeXxl", + "actual": [ + 36, + 36 + ], + "previousFlutter": [ + 36, + 36 + ], + "matchesRecorded": true + }, + { + "key": "fontTitleExtraLarge", + "actual": [ + { + "size": 20, + "lineHeight": 28, + "fontWeight": 6 + }, + { + "size": 20, + "lineHeight": 28, + "fontWeight": 6 + } + ], + "previousFlutter": [ + { + "size": 20, + "lineHeight": 28, + "fontWeight": 6 + }, + { + "size": 20, + "lineHeight": 28, + "fontWeight": 6 + } + ], + "matchesRecorded": true + }, + { + "key": "fontTitleLarge", + "actual": [ + { + "size": 18, + "lineHeight": 26, + "fontWeight": 6 + }, + { + "size": 18, + "lineHeight": 26, + "fontWeight": 6 + } + ], + "previousFlutter": [ + { + "size": 18, + "lineHeight": 26, + "fontWeight": 6 + }, + { + "size": 18, + "lineHeight": 26, + "fontWeight": 6 + } + ], + "matchesRecorded": true + }, + { + "key": "fontTitleMedium", + "actual": [ + { + "size": 16, + "lineHeight": 24, + "fontWeight": 6 + }, + { + "size": 16, + "lineHeight": 24, + "fontWeight": 6 + } + ], + "previousFlutter": [ + { + "size": 16, + "lineHeight": 24, + "fontWeight": 6 + }, + { + "size": 16, + "lineHeight": 24, + "fontWeight": 6 + } + ], + "matchesRecorded": true + }, + { + "key": "fontTitleSmall", + "actual": [ + { + "size": 14, + "lineHeight": 22, + "fontWeight": 6 + }, + { + "size": 14, + "lineHeight": 22, + "fontWeight": 6 + } + ], + "previousFlutter": [ + { + "size": 14, + "lineHeight": 22, + "fontWeight": 6 + }, + { + "size": 14, + "lineHeight": 22, + "fontWeight": 6 + } + ], + "matchesRecorded": true + }, + { + "key": "fontWhite1", + "actual": [ + "#ffffff", + "#E6FFFFFF" + ], + "previousFlutter": [ + "#ffffff", + "#E6FFFFFF" + ], + "matchesRecorded": true + }, + { + "key": "fontWhite2", + "actual": [ + "#8CFFFFFF", + "#8CFFFFFF" + ], + "previousFlutter": [ + "#8CFFFFFF", + "#8CFFFFFF" + ], + "matchesRecorded": true + }, + { + "key": "fontWhite3", + "actual": [ + "#59FFFFFF", + "#59FFFFFF" + ], + "previousFlutter": [ + "#59FFFFFF", + "#59FFFFFF" + ], + "matchesRecorded": true + }, + { + "key": "fontWhite4", + "actual": [ + "#38FFFFFF", + "#38FFFFFF" + ], + "previousFlutter": [ + "#38FFFFFF", + "#38FFFFFF" + ], + "matchesRecorded": true + }, + { + "key": "grayColor1", + "actual": [ + "#f3f3f3", + "#f3f3f3" + ], + "previousFlutter": [ + "#f3f3f3", + "#f3f3f3" + ], + "matchesRecorded": true + }, + { + "key": "grayColor10", + "actual": [ + "#4b4b4b", + "#4b4b4b" + ], + "previousFlutter": [ + "#4b4b4b", + "#4b4b4b" + ], + "matchesRecorded": true + }, + { + "key": "grayColor11", + "actual": [ + "#383838", + "#383838" + ], + "previousFlutter": [ + "#383838", + "#383838" + ], + "matchesRecorded": true + }, + { + "key": "grayColor12", + "actual": [ + "#2c2c2c", + "#2c2c2c" + ], + "previousFlutter": [ + "#2c2c2c", + "#2c2c2c" + ], + "matchesRecorded": true + }, + { + "key": "grayColor13", + "actual": [ + "#242424", + "#242424" + ], + "previousFlutter": [ + "#242424", + "#242424" + ], + "matchesRecorded": true + }, + { + "key": "grayColor14", + "actual": [ + "#181818", + "#181818" + ], + "previousFlutter": [ + "#181818", + "#181818" + ], + "matchesRecorded": true + }, + { + "key": "grayColor2", + "actual": [ + "#eeeeee", + "#eeeeee" + ], + "previousFlutter": [ + "#eeeeee", + "#eeeeee" + ], + "matchesRecorded": true + }, + { + "key": "grayColor3", + "actual": [ + "#e8e8e8", + "#e8e8e8" + ], + "previousFlutter": [ + "#e8e8e8", + "#e8e8e8" + ], + "matchesRecorded": true + }, + { + "key": "grayColor4", + "actual": [ + "#dcdcdc", + "#dddddd" + ], + "previousFlutter": [ + "#dcdcdc", + "#dddddd" + ], + "matchesRecorded": true + }, + { + "key": "grayColor5", + "actual": [ + "#c5c5c5", + "#c6c6c6" + ], + "previousFlutter": [ + "#c5c5c5", + "#c6c6c6" + ], + "matchesRecorded": true + }, + { + "key": "grayColor6", + "actual": [ + "#a6a6a6", + "#a6a6a6" + ], + "previousFlutter": [ + "#a6a6a6", + "#a6a6a6" + ], + "matchesRecorded": true + }, + { + "key": "grayColor7", + "actual": [ + "#8b8b8b", + "#8b8b8b" + ], + "previousFlutter": [ + "#8b8b8b", + "#8b8b8b" + ], + "matchesRecorded": true + }, + { + "key": "grayColor8", + "actual": [ + "#777777", + "#777777" + ], + "previousFlutter": [ + "#777777", + "#777777" + ], + "matchesRecorded": true + }, + { + "key": "grayColor9", + "actual": [ + "#5e5e5e", + "#5e5e5e" + ], + "previousFlutter": [ + "#5e5e5e", + "#5e5e5e" + ], + "matchesRecorded": true + }, + { + "key": "lineHeightBodyExtraSmall", + "actual": [ + 16, + 16 + ], + "previousFlutter": [ + 16, + 16 + ], + "matchesRecorded": true + }, + { + "key": "lineHeightBodyLarge", + "actual": [ + 24, + 24 + ], + "previousFlutter": [ + 24, + 24 + ], + "matchesRecorded": true + }, + { + "key": "lineHeightBodyMedium", + "actual": [ + 22, + 22 + ], + "previousFlutter": [ + 22, + 22 + ], + "matchesRecorded": true + }, + { + "key": "lineHeightBodySmall", + "actual": [ + 20, + 20 + ], + "previousFlutter": [ + 20, + 20 + ], + "matchesRecorded": true + }, + { + "key": "lineHeightDisplayLarge", + "actual": [ + 72, + 72 + ], + "previousFlutter": [ + 72, + 72 + ], + "matchesRecorded": true + }, + { + "key": "lineHeightDisplayMedium", + "actual": [ + 56, + 56 + ], + "previousFlutter": [ + 56, + 56 + ], + "matchesRecorded": true + }, + { + "key": "lineHeightHeadlineLarge", + "actual": [ + 44, + 44 + ], + "previousFlutter": [ + 44, + 44 + ], + "matchesRecorded": true + }, + { + "key": "lineHeightHeadlineMedium", + "actual": [ + 36, + 36 + ], + "previousFlutter": [ + 36, + 36 + ], + "matchesRecorded": true + }, + { + "key": "lineHeightHeadlineSmall", + "actual": [ + 32, + 32 + ], + "previousFlutter": [ + 32, + 32 + ], + "matchesRecorded": true + }, + { + "key": "lineHeightLinkLarge", + "actual": [ + 24, + 24 + ], + "previousFlutter": [ + 24, + 24 + ], + "matchesRecorded": true + }, + { + "key": "lineHeightLinkMedium", + "actual": [ + 22, + 22 + ], + "previousFlutter": [ + 22, + 22 + ], + "matchesRecorded": true + }, + { + "key": "lineHeightLinkSmall", + "actual": [ + 20, + 20 + ], + "previousFlutter": [ + 20, + 20 + ], + "matchesRecorded": true + }, + { + "key": "lineHeightMarkExtraSmall", + "actual": [ + 16, + 16 + ], + "previousFlutter": [ + 16, + 16 + ], + "matchesRecorded": true + }, + { + "key": "lineHeightMarkLarge", + "actual": [ + 24, + 24 + ], + "previousFlutter": [ + 24, + 24 + ], + "matchesRecorded": true + }, + { + "key": "lineHeightMarkMedium", + "actual": [ + 22, + 22 + ], + "previousFlutter": [ + 22, + 22 + ], + "matchesRecorded": true + }, + { + "key": "lineHeightMarkSmall", + "actual": [ + 20, + 20 + ], + "previousFlutter": [ + 20, + 20 + ], + "matchesRecorded": true + }, + { + "key": "lineHeightTitleExtraLarge", + "actual": [ + 28, + 28 + ], + "previousFlutter": [ + 28, + 28 + ], + "matchesRecorded": true + }, + { + "key": "lineHeightTitleLarge", + "actual": [ + 26, + 26 + ], + "previousFlutter": [ + 26, + 26 + ], + "matchesRecorded": true + }, + { + "key": "lineHeightTitleMedium", + "actual": [ + 24, + 24 + ], + "previousFlutter": [ + 24, + 24 + ], + "matchesRecorded": true + }, + { + "key": "lineHeightTitleSmall", + "actual": [ + 22, + 22 + ], + "previousFlutter": [ + 22, + 22 + ], + "matchesRecorded": true + }, + { + "key": "maskActive", + "actual": [ + "#99000000", + "#66000000" + ], + "previousFlutter": [ + "#99000000", + "#66000000" + ], + "matchesRecorded": true + }, + { + "key": "maskBackground", + "actual": [ + "#F5FFFFFF", + "#F5242424" + ], + "previousFlutter": [ + "#F5FFFFFF", + "#F5242424" + ], + "matchesRecorded": true + }, + { + "key": "maskDisabled", + "actual": [ + "#99FFFFFF", + "#99000000" + ], + "previousFlutter": [ + "#99FFFFFF", + "#99000000" + ], + "matchesRecorded": true + }, + { + "key": "primaryColor1", + "actual": [ + "#f2f3ff", + "#1b2f51" + ], + "previousFlutter": [ + "#f2f3ff", + "#1b2f51" + ], + "matchesRecorded": true + }, + { + "key": "primaryColor10", + "actual": [ + "#001a57", + "#96bbf8" + ], + "previousFlutter": [ + "#001a57", + "#96bbf8" + ], + "matchesRecorded": true + }, + { + "key": "primaryColor2", + "actual": [ + "#d9e1ff", + "#173463" + ], + "previousFlutter": [ + "#d9e1ff", + "#173463" + ], + "matchesRecorded": true + }, + { + "key": "primaryColor3", + "actual": [ + "#b5c7ff", + "#143975" + ], + "previousFlutter": [ + "#b5c7ff", + "#143975" + ], + "matchesRecorded": true + }, + { + "key": "primaryColor4", + "actual": [ + "#8eabff", + "#103d88" + ], + "previousFlutter": [ + "#8eabff", + "#103d88" + ], + "matchesRecorded": true + }, + { + "key": "primaryColor5", + "actual": [ + "#618dff", + "#0d429a" + ], + "previousFlutter": [ + "#618dff", + "#0d429a" + ], + "matchesRecorded": true + }, + { + "key": "primaryColor6", + "actual": [ + "#366ef4", + "#054bbe" + ], + "previousFlutter": [ + "#366ef4", + "#054bbe" + ], + "matchesRecorded": true + }, + { + "key": "primaryColor7", + "actual": [ + "#0052d9", + "#2667d4" + ], + "previousFlutter": [ + "#0052d9", + "#2667d4" + ], + "matchesRecorded": true + }, + { + "key": "primaryColor8", + "actual": [ + "#003cab", + "#4582e6" + ], + "previousFlutter": [ + "#003cab", + "#4582e6" + ], + "matchesRecorded": true + }, + { + "key": "primaryColor9", + "actual": [ + "#002a7c", + "#699ef5" + ], + "previousFlutter": [ + "#002a7c", + "#699ef5" + ], + "matchesRecorded": true + }, + { + "key": "radiusCircle", + "actual": [ + 9999, + 9999 + ], + "previousFlutter": [ + 9999, + 9999 + ], + "matchesRecorded": true + }, + { + "key": "radiusDefault", + "actual": [ + 6, + 6 + ], + "previousFlutter": [ + 6, + 6 + ], + "matchesRecorded": true + }, + { + "key": "radiusExtraLarge", + "actual": [ + 12, + 12 + ], + "previousFlutter": [ + 12, + 12 + ], + "matchesRecorded": true + }, + { + "key": "radiusLarge", + "actual": [ + 9, + 9 + ], + "previousFlutter": [ + 9, + 9 + ], + "matchesRecorded": true + }, + { + "key": "radiusRound", + "actual": [ + 999, + 999 + ], + "previousFlutter": [ + 999, + 999 + ], + "matchesRecorded": true + }, + { + "key": "radiusSmall", + "actual": [ + 3, + 3 + ], + "previousFlutter": [ + 3, + 3 + ], + "matchesRecorded": true + }, + { + "key": "scrollTrackColor", + "actual": [ + "#FFFFFF", + "#333333" + ], + "previousFlutter": [ + "#FFFFFF", + "#333333" + ], + "matchesRecorded": true + }, + { + "key": "scrollbarColor", + "actual": [ + "#1A000000", + "#1AFFFFFF" + ], + "previousFlutter": [ + "#1A000000", + "#1AFFFFFF" + ], + "matchesRecorded": true + }, + { + "key": "scrollbarHoverColor", + "actual": [ + "#4D000000", + "#4D000000" + ], + "previousFlutter": [ + "#4D000000", + "#4D000000" + ], + "matchesRecorded": true, + "jsonOnly": [ + "#4D000000", + "" + ], + "getterFallbackEvidence": "tdesign-component/lib/src/theme/t_colors.dart:505-506: colorMap[key] ?? const Color(0x4D000000)" + }, + { + "key": "shadow1", + "actual": [ + [ + { + "color": "#0D000000", + "blurRadius": 10, + "spreadRadius": 0, + "offset": { + "x": 0, + "y": 1 + } + }, + { + "color": "#14000000", + "blurRadius": 5, + "spreadRadius": 0, + "offset": { + "x": 0, + "y": 4 + } + }, + { + "color": "#1F000000", + "blurRadius": 4, + "spreadRadius": -1, + "offset": { + "x": 0, + "y": 2 + } + } + ], + [ + { + "color": "#0F000000", + "blurRadius": 6, + "spreadRadius": 0, + "offset": { + "x": 0, + "y": 4 + } + }, + { + "color": "#14000000", + "blurRadius": 10, + "spreadRadius": 0, + "offset": { + "x": 0, + "y": 1 + } + }, + { + "color": "#1F000000", + "blurRadius": 4, + "spreadRadius": 0, + "offset": { + "x": 0, + "y": 2 + } + } + ] + ], + "previousFlutter": [ + [ + { + "color": "#0D000000", + "blurRadius": 10, + "spreadRadius": 0, + "offset": { + "x": 0, + "y": 1 + } + }, + { + "color": "#14000000", + "blurRadius": 5, + "spreadRadius": 0, + "offset": { + "x": 0, + "y": 4 + } + }, + { + "color": "#1F000000", + "blurRadius": 4, + "spreadRadius": -1, + "offset": { + "x": 0, + "y": 2 + } + } + ], + [ + { + "color": "#0F000000", + "blurRadius": 6, + "spreadRadius": 0, + "offset": { + "x": 0, + "y": 4 + } + }, + { + "color": "#14000000", + "blurRadius": 10, + "spreadRadius": 0, + "offset": { + "x": 0, + "y": 1 + } + }, + { + "color": "#1F000000", + "blurRadius": 4, + "spreadRadius": 0, + "offset": { + "x": 0, + "y": 2 + } + } + ] + ], + "matchesRecorded": true + }, + { + "key": "shadow2", + "actual": [ + [ + { + "color": "#0D000000", + "blurRadius": 14, + "spreadRadius": 2, + "offset": { + "x": 0, + "y": 3 + } + }, + { + "color": "#0F000000", + "blurRadius": 10, + "spreadRadius": 1, + "offset": { + "x": 0, + "y": 8 + } + }, + { + "color": "#1A000000", + "blurRadius": 5, + "spreadRadius": -3, + "offset": { + "x": 0, + "y": 5 + } + } + ], + [ + { + "color": "#1F000000", + "blurRadius": 10, + "spreadRadius": 0, + "offset": { + "x": 0, + "y": 8 + } + }, + { + "color": "#1A000000", + "blurRadius": 14, + "spreadRadius": 0, + "offset": { + "x": 0, + "y": 3 + } + }, + { + "color": "#29000000", + "blurRadius": 5, + "spreadRadius": 0, + "offset": { + "x": 0, + "y": 5 + } + } + ] + ], + "previousFlutter": [ + [ + { + "color": "#0D000000", + "blurRadius": 14, + "spreadRadius": 2, + "offset": { + "x": 0, + "y": 3 + } + }, + { + "color": "#0F000000", + "blurRadius": 10, + "spreadRadius": 1, + "offset": { + "x": 0, + "y": 8 + } + }, + { + "color": "#1A000000", + "blurRadius": 5, + "spreadRadius": -3, + "offset": { + "x": 0, + "y": 5 + } + } + ], + [ + { + "color": "#1F000000", + "blurRadius": 10, + "spreadRadius": 0, + "offset": { + "x": 0, + "y": 8 + } + }, + { + "color": "#1A000000", + "blurRadius": 14, + "spreadRadius": 0, + "offset": { + "x": 0, + "y": 3 + } + }, + { + "color": "#29000000", + "blurRadius": 5, + "spreadRadius": 0, + "offset": { + "x": 0, + "y": 5 + } + } + ] + ], + "matchesRecorded": true + }, + { + "key": "shadow3", + "actual": [ + [ + { + "color": "#0D000000", + "blurRadius": 30, + "spreadRadius": 5, + "offset": { + "x": 0, + "y": 6 + } + }, + { + "color": "#0A000000", + "blurRadius": 24, + "spreadRadius": 2, + "offset": { + "x": 0, + "y": 16 + } + }, + { + "color": "#14000000", + "blurRadius": 10, + "spreadRadius": -5, + "offset": { + "x": 0, + "y": 8 + } + } + ], + [ + { + "color": "#24000000", + "blurRadius": 24, + "spreadRadius": 0, + "offset": { + "x": 0, + "y": 16 + } + }, + { + "color": "#1F000000", + "blurRadius": 30, + "spreadRadius": 0, + "offset": { + "x": 0, + "y": 6 + } + }, + { + "color": "#33000000", + "blurRadius": 10, + "spreadRadius": 0, + "offset": { + "x": 0, + "y": 8 + } + } + ] + ], + "previousFlutter": [ + [ + { + "color": "#0D000000", + "blurRadius": 30, + "spreadRadius": 5, + "offset": { + "x": 0, + "y": 6 + } + }, + { + "color": "#0A000000", + "blurRadius": 24, + "spreadRadius": 2, + "offset": { + "x": 0, + "y": 16 + } + }, + { + "color": "#14000000", + "blurRadius": 10, + "spreadRadius": -5, + "offset": { + "x": 0, + "y": 8 + } + } + ], + [ + { + "color": "#24000000", + "blurRadius": 24, + "spreadRadius": 0, + "offset": { + "x": 0, + "y": 16 + } + }, + { + "color": "#1F000000", + "blurRadius": 30, + "spreadRadius": 0, + "offset": { + "x": 0, + "y": 6 + } + }, + { + "color": "#33000000", + "blurRadius": 10, + "spreadRadius": 0, + "offset": { + "x": 0, + "y": 8 + } + } + ] + ], + "matchesRecorded": true + }, + { + "key": "shadow4", + "actual": [ + [ + { + "color": "#0F000000", + "blurRadius": 8, + "spreadRadius": 0, + "offset": { + "x": 0, + "y": 2 + } + } + ], + [ + { + "color": "#0F000000", + "blurRadius": 8, + "spreadRadius": 0, + "offset": { + "x": 0, + "y": 2 + } + } + ] + ], + "previousFlutter": [ + [ + { + "color": "#0F000000", + "blurRadius": 8, + "spreadRadius": 0, + "offset": { + "x": 0, + "y": 2 + } + } + ], + [ + { + "color": "#0F000000", + "blurRadius": 8, + "spreadRadius": 0, + "offset": { + "x": 0, + "y": 2 + } + } + ] + ], + "matchesRecorded": true + }, + { + "key": "shadowInsetBottom", + "actual": [ + { + "color": "#dcdcdc", + "width": 0.5 + }, + { + "color": "#5e5e5e", + "width": 0.5 + } + ], + "previousFlutter": [ + { + "color": "#dcdcdc", + "width": 0.5 + }, + { + "color": "#5e5e5e", + "width": 0.5 + } + ], + "matchesRecorded": true + }, + { + "key": "shadowInsetLeft", + "actual": [ + { + "color": "#dcdcdc", + "width": 0.5 + }, + { + "color": "#5e5e5e", + "width": 0.5 + } + ], + "previousFlutter": [ + { + "color": "#dcdcdc", + "width": 0.5 + }, + { + "color": "#5e5e5e", + "width": 0.5 + } + ], + "matchesRecorded": true + }, + { + "key": "shadowInsetRight", + "actual": [ + { + "color": "#dcdcdc", + "width": 0.5 + }, + { + "color": "#5e5e5e", + "width": 0.5 + } + ], + "previousFlutter": [ + { + "color": "#dcdcdc", + "width": 0.5 + }, + { + "color": "#5e5e5e", + "width": 0.5 + } + ], + "matchesRecorded": true + }, + { + "key": "shadowInsetTop", + "actual": [ + { + "color": "#dcdcdc", + "width": 0.5 + }, + { + "color": "#5e5e5e", + "width": 0.5 + } + ], + "previousFlutter": [ + { + "color": "#dcdcdc", + "width": 0.5 + }, + { + "color": "#5e5e5e", + "width": 0.5 + } + ], + "matchesRecorded": true + }, + { + "key": "spacer", + "actual": [ + 8, + 8 + ], + "previousFlutter": [ + 8, + 8 + ], + "matchesRecorded": true + }, + { + "key": "spacer1", + "actual": [ + 12, + 12 + ], + "previousFlutter": [ + 12, + 12 + ], + "matchesRecorded": true + }, + { + "key": "spacer2", + "actual": [ + 16, + 16 + ], + "previousFlutter": [ + 16, + 16 + ], + "matchesRecorded": true + }, + { + "key": "spacer3", + "actual": [ + 24, + 24 + ], + "previousFlutter": [ + 24, + 24 + ], + "matchesRecorded": true + }, + { + "key": "spacer4", + "actual": [ + 32, + 32 + ], + "previousFlutter": [ + 32, + 32 + ], + "matchesRecorded": true + }, + { + "key": "spacer5", + "actual": [ + 48, + 48 + ], + "previousFlutter": [ + 48, + 48 + ], + "matchesRecorded": true + }, + { + "key": "spacer6", + "actual": [ + 80, + 80 + ], + "previousFlutter": [ + 80, + 80 + ], + "matchesRecorded": true + }, + { + "key": "successColor", + "actual": [ + "#2ba471", + "#059465" + ], + "previousFlutter": [ + "#2ba471", + "#059465" + ], + "matchesRecorded": true + }, + { + "key": "successColor1", + "actual": [ + "#e3f9e9", + "#193a2a" + ], + "previousFlutter": [ + "#e3f9e9", + "#193a2a" + ], + "matchesRecorded": true + }, + { + "key": "successColor10", + "actual": [ + "#002515", + "#deede8" + ], + "previousFlutter": [ + "#002515", + "#deede8" + ], + "matchesRecorded": true + }, + { + "key": "successColor2", + "actual": [ + "#c6f3d7", + "#1a4230" + ], + "previousFlutter": [ + "#c6f3d7", + "#1a4230" + ], + "matchesRecorded": true + }, + { + "key": "successColor3", + "actual": [ + "#92dab2", + "#17533d" + ], + "previousFlutter": [ + "#92dab2", + "#17533d" + ], + "matchesRecorded": true + }, + { + "key": "successColor4", + "actual": [ + "#56c08d", + "#0d7a55" + ], + "previousFlutter": [ + "#56c08d", + "#0d7a55" + ], + "matchesRecorded": true + }, + { + "key": "successColor5", + "actual": [ + "#2ba471", + "#059465" + ], + "previousFlutter": [ + "#2ba471", + "#059465" + ], + "matchesRecorded": true + }, + { + "key": "successColor6", + "actual": [ + "#008858", + "#43af8a" + ], + "previousFlutter": [ + "#008858", + "#43af8a" + ], + "matchesRecorded": true + }, + { + "key": "successColor7", + "actual": [ + "#006c45", + "#46bf96" + ], + "previousFlutter": [ + "#006c45", + "#46bf96" + ], + "matchesRecorded": true + }, + { + "key": "successColor8", + "actual": [ + "#005334", + "#80d2b6" + ], + "previousFlutter": [ + "#005334", + "#80d2b6" + ], + "matchesRecorded": true + }, + { + "key": "successColor9", + "actual": [ + "#003b23", + "#b4e1d3" + ], + "previousFlutter": [ + "#003b23", + "#b4e1d3" + ], + "matchesRecorded": true + }, + { + "key": "successColorActive", + "actual": [ + "#008858", + "#0d7a55" + ], + "previousFlutter": [ + "#008858", + "#0d7a55" + ], + "matchesRecorded": true + }, + { + "key": "successColorDisabled", + "actual": [ + "#92dab2", + "#17533d" + ], + "previousFlutter": [ + "#92dab2", + "#17533d" + ], + "matchesRecorded": true + }, + { + "key": "successColorFocus", + "actual": [ + "#c6f3d7", + "#1a4230" + ], + "previousFlutter": [ + "#c6f3d7", + "#1a4230" + ], + "matchesRecorded": true + }, + { + "key": "successColorLight", + "actual": [ + "#e3f9e9", + "#193a2a" + ], + "previousFlutter": [ + "#e3f9e9", + "#193a2a" + ], + "matchesRecorded": true + }, + { + "key": "successColorLightActive", + "actual": [ + "#c6f3d7", + "#1a4230" + ], + "previousFlutter": [ + "#c6f3d7", + "#1a4230" + ], + "matchesRecorded": true + }, + { + "key": "tableShadowColor", + "actual": [ + "#14000000", + "#8C000000" + ], + "previousFlutter": [ + "#14000000", + "#8C000000" + ], + "matchesRecorded": true + }, + { + "key": "textColorAnti", + "actual": [ + "#ffffff", + "#E6FFFFFF" + ], + "previousFlutter": [ + "#ffffff", + "#E6FFFFFF" + ], + "matchesRecorded": true + }, + { + "key": "textColorBrand", + "actual": [ + "#0052d9", + "#4582e6" + ], + "previousFlutter": [ + "#0052d9", + "#4582e6" + ], + "matchesRecorded": true + }, + { + "key": "textColorDisabled", + "actual": [ + "#42000000", + "#38FFFFFF" + ], + "previousFlutter": [ + "#42000000", + "#38FFFFFF" + ], + "matchesRecorded": true + }, + { + "key": "textColorLink", + "actual": [ + "#0052d9", + "#4582e6" + ], + "previousFlutter": [ + "#0052d9", + "#4582e6" + ], + "matchesRecorded": true + }, + { + "key": "textColorPlaceholder", + "actual": [ + "#66000000", + "#59FFFFFF" + ], + "previousFlutter": [ + "#66000000", + "#59FFFFFF" + ], + "matchesRecorded": true + }, + { + "key": "textColorPrimary", + "actual": [ + "#E5000000", + "#E6FFFFFF" + ], + "previousFlutter": [ + "#E5000000", + "#E6FFFFFF" + ], + "matchesRecorded": true + }, + { + "key": "textColorSecondary", + "actual": [ + "#99000000", + "#8CFFFFFF" + ], + "previousFlutter": [ + "#99000000", + "#8CFFFFFF" + ], + "matchesRecorded": true + }, + { + "key": "warningColor", + "actual": [ + "#e37318", + "#cf6e2d" + ], + "previousFlutter": [ + "#e37318", + "#cf6e2d" + ], + "matchesRecorded": true + }, + { + "key": "warningColor1", + "actual": [ + "#fff1e9", + "#4f2a1d" + ], + "previousFlutter": [ + "#fff1e9", + "#4f2a1d" + ], + "matchesRecorded": true + }, + { + "key": "warningColor10", + "actual": [ + "#3b1700", + "#f3e9dc" + ], + "previousFlutter": [ + "#3b1700", + "#f3e9dc" + ], + "matchesRecorded": true + }, + { + "key": "warningColor2", + "actual": [ + "#ffd9c2", + "#582f21" + ], + "previousFlutter": [ + "#ffd9c2", + "#582f21" + ], + "matchesRecorded": true + }, + { + "key": "warningColor3", + "actual": [ + "#ffb98c", + "#733c23" + ], + "previousFlutter": [ + "#ffb98c", + "#733c23" + ], + "matchesRecorded": true + }, + { + "key": "warningColor4", + "actual": [ + "#fa9550", + "#a75d2b" + ], + "previousFlutter": [ + "#fa9550", + "#a75d2b" + ], + "matchesRecorded": true + }, + { + "key": "warningColor5", + "actual": [ + "#e37318", + "#cf6e2d" + ], + "previousFlutter": [ + "#e37318", + "#cf6e2d" + ], + "matchesRecorded": true + }, + { + "key": "warningColor6", + "actual": [ + "#be5a00", + "#dc7633" + ], + "previousFlutter": [ + "#be5a00", + "#dc7633" + ], + "matchesRecorded": true + }, + { + "key": "warningColor7", + "actual": [ + "#954500", + "#e8935c" + ], + "previousFlutter": [ + "#954500", + "#e8935c" + ], + "matchesRecorded": true + }, + { + "key": "warningColor8", + "actual": [ + "#713300", + "#ecbf91" + ], + "previousFlutter": [ + "#713300", + "#ecbf91" + ], + "matchesRecorded": true + }, + { + "key": "warningColor9", + "actual": [ + "#532300", + "#eed7bf" + ], + "previousFlutter": [ + "#532300", + "#eed7bf" + ], + "matchesRecorded": true + }, + { + "key": "warningColorActive", + "actual": [ + "#be5a00", + "#a75d2b" + ], + "previousFlutter": [ + "#be5a00", + "#a75d2b" + ], + "matchesRecorded": true + }, + { + "key": "warningColorDisabled", + "actual": [ + "#ffb98c", + "#733c23" + ], + "previousFlutter": [ + "#ffb98c", + "#733c23" + ], + "matchesRecorded": true + }, + { + "key": "warningColorFocus", + "actual": [ + "#ffd9c2", + "#582f21" + ], + "previousFlutter": [ + "#ffd9c2", + "#582f21" + ], + "matchesRecorded": true + }, + { + "key": "warningColorLight", + "actual": [ + "#fff1e9", + "#4f2a1d" + ], + "previousFlutter": [ + "#fff1e9", + "#4f2a1d" + ], + "matchesRecorded": true + }, + { + "key": "warningColorLightActive", + "actual": [ + "#ffd9c2", + "#582f21" + ], + "previousFlutter": [ + "#ffd9c2", + "#582f21" + ], + "matchesRecorded": true + } + ], + "components": [ + { + "name": "actionSheetBorderColor", + "component": "action-sheet", + "reviewDecision": "pending", + "currentFiles": 7, + "currentNameLocators": { + "componentStroke": [ + "tdesign-component/lib/src/components/action_sheet/t_action_sheet_list.dart:168", + "tdesign-component/lib/src/components/action_sheet/t_action_sheet_list.dart:225", + "tdesign-component/lib/src/components/action_sheet/t_action_sheet_item_widget.dart:183" + ] + }, + "finalPaintVerified": false + }, + { + "name": "actionSheetBorderRadius", + "component": "action-sheet", + "reviewDecision": "pending", + "currentFiles": 7, + "currentNameLocators": { + "radiusExtraLarge": [ + "tdesign-component/lib/src/components/action_sheet/t_action_sheet_list.dart:132", + "tdesign-component/lib/src/components/action_sheet/t_action_sheet_grid.dart:117", + "tdesign-component/lib/src/components/action_sheet/t_action_sheet_grid.dart:408" + ] + }, + "finalPaintVerified": false + }, + { + "name": "actionSheetCancelColor", + "component": "action-sheet", + "reviewDecision": "pending", + "currentFiles": 7, + "currentNameLocators": { + "textColorPrimary": [ + "tdesign-component/lib/src/components/action_sheet/t_action_sheet_list.dart:245", + "tdesign-component/lib/src/components/action_sheet/t_action_sheet_list.dart:297", + "tdesign-component/lib/src/components/action_sheet/t_action_sheet_item_widget.dart:46", + "tdesign-component/lib/src/components/action_sheet/t_action_sheet_item_widget.dart:195", + "tdesign-component/lib/src/components/action_sheet/t_action_sheet_item_widget.dart:210", + "tdesign-component/lib/src/components/action_sheet/t_action_sheet_item_widget.dart:241" + ] + }, + "finalPaintVerified": false + }, + { + "name": "actionSheetColor", + "component": "action-sheet", + "reviewDecision": "pending", + "currentFiles": 7, + "currentNameLocators": { + "textColorPrimary": [ + "tdesign-component/lib/src/components/action_sheet/t_action_sheet_list.dart:245", + "tdesign-component/lib/src/components/action_sheet/t_action_sheet_list.dart:297", + "tdesign-component/lib/src/components/action_sheet/t_action_sheet_item_widget.dart:46", + "tdesign-component/lib/src/components/action_sheet/t_action_sheet_item_widget.dart:195", + "tdesign-component/lib/src/components/action_sheet/t_action_sheet_item_widget.dart:210", + "tdesign-component/lib/src/components/action_sheet/t_action_sheet_item_widget.dart:241" + ] + }, + "finalPaintVerified": false + }, + { + "name": "actionSheetDescriptionColor", + "component": "action-sheet", + "reviewDecision": "pending", + "currentFiles": 7, + "currentNameLocators": { + "textColorPlaceholder": [ + "tdesign-component/lib/src/components/action_sheet/t_action_sheet_list.dart:83", + "tdesign-component/lib/src/components/action_sheet/t_action_sheet_list.dart:119", + "tdesign-component/lib/src/components/action_sheet/t_action_sheet_list.dart:186", + "tdesign-component/lib/src/components/action_sheet/t_action_sheet_list.dart:274", + "tdesign-component/lib/src/components/action_sheet/t_action_sheet_grid.dart:84", + "tdesign-component/lib/src/components/action_sheet/t_action_sheet_grid.dart:176", + "tdesign-component/lib/src/components/action_sheet/t_action_sheet_grid.dart:391", + "tdesign-component/lib/src/components/action_sheet/t_action_sheet_grid.dart:469" + ] + }, + "finalPaintVerified": false + }, + { + "name": "actionSheetDescriptionFont", + "component": "action-sheet", + "reviewDecision": "pending", + "currentFiles": 7, + "currentNameLocators": { + "fontBodyMedium": [ + "tdesign-component/lib/src/components/action_sheet/t_action_sheet_list.dart:82", + "tdesign-component/lib/src/components/action_sheet/t_action_sheet_list.dart:118", + "tdesign-component/lib/src/components/action_sheet/t_action_sheet_list.dart:180", + "tdesign-component/lib/src/components/action_sheet/t_action_sheet_list.dart:270", + "tdesign-component/lib/src/components/action_sheet/t_action_sheet_grid.dart:83", + "tdesign-component/lib/src/components/action_sheet/t_action_sheet_grid.dart:174", + "tdesign-component/lib/src/components/action_sheet/t_action_sheet_grid.dart:390", + "tdesign-component/lib/src/components/action_sheet/t_action_sheet_grid.dart:468" + ] + }, + "finalPaintVerified": false + }, + { + "name": "actionSheetDisabledColor", + "component": "action-sheet", + "reviewDecision": "pending", + "currentFiles": 7, + "currentNameLocators": { + "textColorDisabled": [ + "tdesign-component/lib/src/components/action_sheet/t_action_sheet_list.dart:243", + "tdesign-component/lib/src/components/action_sheet/t_action_sheet_list.dart:296", + "tdesign-component/lib/src/components/action_sheet/t_action_sheet_grid.dart:321", + "tdesign-component/lib/src/components/action_sheet/t_action_sheet_item_widget.dart:45" + ] + }, + "finalPaintVerified": false + }, + { + "name": "actionSheetDotActiveColor", + "component": "action-sheet", + "reviewDecision": "pending", + "currentFiles": 7, + "currentNameLocators": { + "brandColor": [ + "tdesign-component/lib/src/components/action_sheet/t_action_sheet_grid.dart:320" + ] + }, + "finalPaintVerified": false + }, + { + "name": "actionSheetDotColor", + "component": "action-sheet", + "reviewDecision": "pending", + "currentFiles": 7, + "currentNameLocators": { + "textColorDisabled": [ + "tdesign-component/lib/src/components/action_sheet/t_action_sheet_list.dart:243", + "tdesign-component/lib/src/components/action_sheet/t_action_sheet_list.dart:296", + "tdesign-component/lib/src/components/action_sheet/t_action_sheet_grid.dart:321", + "tdesign-component/lib/src/components/action_sheet/t_action_sheet_item_widget.dart:45" + ] + }, + "finalPaintVerified": false + }, + { + "name": "actionSheetDotSize", + "component": "action-sheet", + "reviewDecision": "pending", + "currentFiles": 7, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "actionSheetGapColor", + "component": "action-sheet", + "reviewDecision": "pending", + "currentFiles": 7, + "currentNameLocators": { + "bgColorPage": [ + "tdesign-component/lib/src/components/action_sheet/t_action_sheet_item_widget.dart:170" + ] + }, + "finalPaintVerified": false + }, + { + "name": "avatarBgColor", + "component": "avatar", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": { + "brandColorLightActive": [ + "tdesign-component/lib/src/components/avatar/t_avatar.dart:76" + ] + }, + "finalPaintVerified": false + }, + { + "name": "avatarBorderColor", + "component": "avatar", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "avatarBorderWidthLarge", + "component": "avatar", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "avatarBorderWidthMedium", + "component": "avatar", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "avatarBorderWidthSmall", + "component": "avatar", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "avatarCircleBorderRadius", + "component": "avatar", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": { + "radiusCircle": [ + "tdesign-component/lib/src/components/avatar/t_avatar.dart:54", + "tdesign-component/lib/src/components/avatar/t_avatar.dart:55", + "tdesign-component/lib/src/components/avatar/t_avatar.dart:246", + "tdesign-component/lib/src/components/avatar/t_avatar.dart:247" + ], + "circleBorderRadius": [ + "tdesign-component/lib/src/components/avatar/t_avatar_theme_data.dart:20", + "tdesign-component/lib/src/components/avatar/t_avatar_theme_data.dart:35", + "tdesign-component/lib/src/components/avatar/t_avatar_theme_data.dart:36", + "tdesign-component/lib/src/components/avatar/t_avatar_theme_data.dart:69", + "tdesign-component/lib/src/components/avatar/t_avatar_theme_data.dart:115", + "tdesign-component/lib/src/components/avatar/t_avatar_theme_data.dart:148", + "tdesign-component/lib/src/components/avatar/t_avatar_theme_data.dart:160", + "tdesign-component/lib/src/components/avatar/t_avatar_theme_data.dart:170", + "tdesign-component/lib/src/components/avatar/t_avatar_theme_data.dart:216", + "tdesign-component/lib/src/components/avatar/t_avatar_theme_data.dart:217", + "tdesign-component/lib/src/components/avatar/t_avatar_theme_data.dart:218", + "tdesign-component/lib/src/components/avatar/t_avatar_theme_data.dart:222", + "tdesign-component/lib/src/components/avatar/t_avatar_theme_data.dart:224", + "tdesign-component/lib/src/components/avatar/t_avatar_theme_data.dart:290" + ] + }, + "finalPaintVerified": false + }, + { + "name": "avatarContentColor", + "component": "avatar", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": { + "brandColor": [ + "tdesign-component/lib/src/components/avatar/t_avatar.dart:59" + ] + }, + "finalPaintVerified": false + }, + { + "name": "avatarGroupInitZIndex", + "component": "avatar-group", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "avatarGroupLineSpacing", + "component": "avatar-group", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "avatarGroupMarginLeftLarge", + "component": "avatar-group", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "avatarGroupMarginLeftMedium", + "component": "avatar-group", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "avatarGroupMarginLeftSmall", + "component": "avatar-group", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "avatarIconLargeFontSize", + "component": "avatar", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "avatarIconMediumFontSize", + "component": "avatar", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "avatarIconSmallFontSize", + "component": "avatar", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": { + "fontSizeXl": [] + }, + "finalPaintVerified": false + }, + { + "name": "avatarLargeWidth", + "component": "avatar", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "avatarMarginLeft", + "component": "avatar", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "avatarMediumWidth", + "component": "avatar", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "avatarRoundBorderRadius", + "component": "avatar", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": { + "radiusDefault": [ + "tdesign-component/lib/src/components/avatar/t_avatar.dart:56", + "tdesign-component/lib/src/components/avatar/t_avatar.dart:57", + "tdesign-component/lib/src/components/avatar/t_avatar.dart:243", + "tdesign-component/lib/src/components/avatar/t_avatar.dart:244" + ] + }, + "finalPaintVerified": false + }, + { + "name": "avatarSmallWidth", + "component": "avatar", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "avatarTextLargeFontSize", + "component": "avatar", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": { + "fontSizeXl": [] + }, + "finalPaintVerified": false + }, + { + "name": "avatarTextMediumFontSize", + "component": "avatar", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": { + "fontSizeM": [] + }, + "finalPaintVerified": false + }, + { + "name": "avatarTextSmallFontSize", + "component": "avatar", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": { + "fontSizeBase": [] + }, + "finalPaintVerified": false + }, + { + "name": "backTopRoundBgColor", + "component": "back-top", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": { + "bgColorContainer": [ + "tdesign-component/lib/src/components/backtop/t_backtop.dart:188" + ] + }, + "finalPaintVerified": false + }, + { + "name": "backTopRoundBorderColor", + "component": "back-top", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": { + "componentBorder": [ + "tdesign-component/lib/src/components/backtop/t_backtop.dart:194" + ] + }, + "finalPaintVerified": false + }, + { + "name": "backTopRoundBorderRadius", + "component": "back-top", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": { + "radiusCircle": [ + "tdesign-component/lib/src/components/backtop/t_backtop.dart:241" + ] + }, + "finalPaintVerified": false + }, + { + "name": "backTopRoundColor", + "component": "back-top", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": { + "textColorPrimary": [ + "tdesign-component/lib/src/components/backtop/t_backtop.dart:189" + ] + }, + "finalPaintVerified": false + }, + { + "name": "backTopRoundDarkBgColor", + "component": "back-top", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": { + "grayColor13": [ + "tdesign-component/lib/src/components/backtop/t_backtop.dart:186" + ] + }, + "finalPaintVerified": false + }, + { + "name": "backTopRoundDarkColor", + "component": "back-top", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": { + "textColorAnti": [] + }, + "finalPaintVerified": false + }, + { + "name": "badgeBasicHeight", + "component": "badge", + "reviewDecision": "pending", + "currentFiles": 8, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "badgeBasicPadding", + "component": "badge", + "reviewDecision": "pending", + "currentFiles": 8, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "badgeBasicWidth", + "component": "badge", + "reviewDecision": "pending", + "currentFiles": 8, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "badgeBgColor", + "component": "badge", + "reviewDecision": "pending", + "currentFiles": 8, + "currentNameLocators": { + "errorColor": [ + "tdesign-component/lib/src/components/badge/t_badge_resolved_style.dart:38" + ] + }, + "finalPaintVerified": false + }, + { + "name": "badgeBorderRadius", + "component": "badge", + "reviewDecision": "pending", + "currentFiles": 8, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "badgeBubbleBorderRadius", + "component": "badge", + "reviewDecision": "pending", + "currentFiles": 8, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "badgeContentTextColor", + "component": "badge", + "reviewDecision": "pending", + "currentFiles": 8, + "currentNameLocators": { + "textColorPrimary": [] + }, + "finalPaintVerified": false + }, + { + "name": "badgeContentTextFont", + "component": "badge", + "reviewDecision": "pending", + "currentFiles": 8, + "currentNameLocators": { + "fontBodyLarge": [] + }, + "finalPaintVerified": false + }, + { + "name": "badgeDotSize", + "component": "badge", + "reviewDecision": "pending", + "currentFiles": 8, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "badgeFont", + "component": "badge", + "reviewDecision": "pending", + "currentFiles": 8, + "currentNameLocators": { + "fontMarkExtraSmall": [ + "tdesign-component/lib/src/components/badge/t_badge_resolved_style.dart:41" + ] + }, + "finalPaintVerified": false + }, + { + "name": "badgeLargeFont", + "component": "badge", + "reviewDecision": "pending", + "currentFiles": 8, + "currentNameLocators": { + "fontMarkSmall": [ + "tdesign-component/lib/src/components/badge/t_badge_resolved_style.dart:41" + ] + }, + "finalPaintVerified": false + }, + { + "name": "badgeLargeHeight", + "component": "badge", + "reviewDecision": "pending", + "currentFiles": 8, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "badgeLargePadding", + "component": "badge", + "reviewDecision": "pending", + "currentFiles": 8, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "badgeTextColor", + "component": "badge", + "reviewDecision": "pending", + "currentFiles": 8, + "currentNameLocators": { + "textColorAnti": [ + "tdesign-component/lib/src/components/badge/t_badge_resolved_style.dart:39" + ] + }, + "finalPaintVerified": false + }, + { + "name": "buttonBorderRadius", + "component": "button", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": { + "radiusDefault": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:420", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:423" + ] + }, + "finalPaintVerified": false + }, + { + "name": "buttonBorderWidth", + "component": "button", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "buttonDangerActiveBgColor", + "component": "button", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": { + "errorColorActive": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:299", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:323", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:567" + ] + }, + "finalPaintVerified": false + }, + { + "name": "buttonDangerActiveBorderColor", + "component": "button", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": { + "errorColorActive": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:299", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:323", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:567" + ] + }, + "finalPaintVerified": false + }, + { + "name": "buttonDangerBgColor", + "component": "button", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": { + "errorColor": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:214", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:260", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:261", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:348", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:386" + ] + }, + "finalPaintVerified": false + }, + { + "name": "buttonDangerBorderColor", + "component": "button", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": { + "errorColor": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:214", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:260", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:261", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:348", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:386" + ] + }, + "finalPaintVerified": false + }, + { + "name": "buttonDangerColor", + "component": "button", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": { + "textColorAnti": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:212", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:215", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:542" + ] + }, + "finalPaintVerified": false + }, + { + "name": "buttonDangerDashedBorderColor", + "component": "button", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "buttonDangerDashedColor", + "component": "button", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": { + "errorColor": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:214", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:260", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:261", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:348", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:386" + ] + }, + "finalPaintVerified": false + }, + { + "name": "buttonDangerDashedDisabledColor", + "component": "button", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "buttonDangerDisabledBg", + "component": "button", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": { + "errorColor3": [] + }, + "finalPaintVerified": false + }, + { + "name": "buttonDangerDisabledBorderColor", + "component": "button", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": { + "errorColor3": [] + }, + "finalPaintVerified": false + }, + { + "name": "buttonDangerDisabledColor", + "component": "button", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": { + "fontWhite1": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:390" + ] + }, + "finalPaintVerified": false + }, + { + "name": "buttonDangerOutlineActiveBgColor", + "component": "button", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": { + "bgColorContainerActive": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:280", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:358" + ] + }, + "finalPaintVerified": false + }, + { + "name": "buttonDangerOutlineActiveBorderColor", + "component": "button", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": { + "errorColorActive": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:299", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:323", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:567" + ] + }, + "finalPaintVerified": false + }, + { + "name": "buttonDangerOutlineBorderColor", + "component": "button", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "buttonDangerOutlineColor", + "component": "button", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": { + "errorColor": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:214", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:260", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:261", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:348", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:386" + ] + }, + "finalPaintVerified": false + }, + { + "name": "buttonDangerOutlineDisabledColor", + "component": "button", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": { + "errorColor3": [] + }, + "finalPaintVerified": false + }, + { + "name": "buttonDangerTextActiveBgColor", + "component": "button", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": { + "bgColorContainerActive": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:280", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:358" + ] + }, + "finalPaintVerified": false + }, + { + "name": "buttonDangerTextColor", + "component": "button", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": { + "errorColor": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:214", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:260", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:261", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:348", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:386" + ] + }, + "finalPaintVerified": false + }, + { + "name": "buttonDangerTextDisabledColor", + "component": "button", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "buttonDefaultActiveBgColor", + "component": "button", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": { + "bgColorComponentActive": [] + }, + "finalPaintVerified": false + }, + { + "name": "buttonDefaultActiveBorderColor", + "component": "button", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": { + "bgColorComponentActive": [] + }, + "finalPaintVerified": false + }, + { + "name": "buttonDefaultBgColor", + "component": "button", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": { + "bgColorComponent": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:220", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:569" + ] + }, + "finalPaintVerified": false + }, + { + "name": "buttonDefaultBorderColor", + "component": "button", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": { + "bgColorComponent": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:220", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:569" + ] + }, + "finalPaintVerified": false + }, + { + "name": "buttonDefaultColor", + "component": "button", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": { + "textColorPrimary": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:149", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:221", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:267", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:352" + ] + }, + "finalPaintVerified": false + }, + { + "name": "buttonDefaultDisabledBg", + "component": "button", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": { + "bgColorComponentDisabled": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:531" + ] + }, + "finalPaintVerified": false + }, + { + "name": "buttonDefaultDisabledBorderColor", + "component": "button", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": { + "bgColorComponentDisabled": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:531" + ] + }, + "finalPaintVerified": false + }, + { + "name": "buttonDefaultDisabledColor", + "component": "button", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": { + "textColorDisabled": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:545", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:557" + ] + }, + "finalPaintVerified": false + }, + { + "name": "buttonDefaultOutlineActiveBgColor", + "component": "button", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": { + "bgColorContainerActive": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:280", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:358" + ] + }, + "finalPaintVerified": false + }, + { + "name": "buttonDefaultOutlineActiveBorderColor", + "component": "button", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": { + "componentBorder": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:266", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:289", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:309" + ] + }, + "finalPaintVerified": false + }, + { + "name": "buttonDefaultOutlineBorderColor", + "component": "button", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": { + "componentBorder": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:266", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:289", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:309" + ] + }, + "finalPaintVerified": false + }, + { + "name": "buttonDefaultOutlineColor", + "component": "button", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": { + "textColorPrimary": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:149", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:221", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:267", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:352" + ] + }, + "finalPaintVerified": false + }, + { + "name": "buttonDefaultOutlineDisabledColor", + "component": "button", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": { + "componentBorder": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:266", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:289", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:309" + ] + }, + "finalPaintVerified": false + }, + { + "name": "buttonDefaultTextActiveBgColor", + "component": "button", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": { + "bgColorContainerActive": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:280", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:358" + ] + }, + "finalPaintVerified": false + }, + { + "name": "buttonExtraSmallFont", + "component": "button", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": { + "fontMarkMedium": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:477" + ] + }, + "finalPaintVerified": false + }, + { + "name": "buttonExtraSmallHeight", + "component": "button", + "reviewDecision": "default-widget-value-verified", + "currentFiles": 5, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "buttonExtraSmallIconSize", + "component": "button", + "reviewDecision": "default-widget-value-verified", + "currentFiles": 5, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "buttonExtraSmallPaddingHorizontal", + "component": "button", + "reviewDecision": "default-widget-value-verified", + "currentFiles": 5, + "currentNameLocators": { + "spacer": [] + }, + "finalPaintVerified": false + }, + { + "name": "buttonGhostBorderColor", + "component": "button", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "buttonGhostColor", + "component": "button", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": { + "textColorAnti": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:212", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:215", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:542" + ] + }, + "finalPaintVerified": false + }, + { + "name": "buttonGhostDangerBorderColor", + "component": "button", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": { + "errorColor": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:214", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:260", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:261", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:348", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:386" + ] + }, + "finalPaintVerified": false + }, + { + "name": "buttonGhostDangerColor", + "component": "button", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": { + "errorColor": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:214", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:260", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:261", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:348", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:386" + ] + }, + "finalPaintVerified": false + }, + { + "name": "buttonGhostDangerHoverColor", + "component": "button", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": { + "errorColorActive": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:299", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:323", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:567" + ] + }, + "finalPaintVerified": false + }, + { + "name": "buttonGhostDisabledColor", + "component": "button", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": { + "fontWhite4": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:397", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:403", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:542" + ] + }, + "finalPaintVerified": false + }, + { + "name": "buttonGhostHoverColor", + "component": "button", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": { + "fontWhite2": [] + }, + "finalPaintVerified": false + }, + { + "name": "buttonGhostPrimaryBorderColor", + "component": "button", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": { + "brandColor": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:211", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:218", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:257", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:258", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:263", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:264", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:346", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:350", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:384", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:388" + ] + }, + "finalPaintVerified": false + }, + { + "name": "buttonGhostPrimaryColor", + "component": "button", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": { + "brandColor": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:211", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:218", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:257", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:258", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:263", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:264", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:346", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:350", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:384", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:388" + ] + }, + "finalPaintVerified": false + }, + { + "name": "buttonGhostPrimaryHoverColor", + "component": "button", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": { + "brandColorActive": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:298", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:322", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:566" + ] + }, + "finalPaintVerified": false + }, + { + "name": "buttonIconBorderRadius", + "component": "button", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "buttonIconSpacer", + "component": "button", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": { + "spacer": [] + }, + "finalPaintVerified": false + }, + { + "name": "buttonLargeFont", + "component": "button", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": { + "fontMarkLarge": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:476" + ] + }, + "finalPaintVerified": false + }, + { + "name": "buttonLargeHeight", + "component": "button", + "reviewDecision": "default-widget-value-verified", + "currentFiles": 5, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "buttonLargeIconSize", + "component": "button", + "reviewDecision": "default-widget-value-verified", + "currentFiles": 5, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "buttonLargePaddingHorizontal", + "component": "button", + "reviewDecision": "default-widget-value-verified", + "currentFiles": 5, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "buttonLightActiveBgColor", + "component": "button", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": { + "brandColorLightActive": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:279" + ] + }, + "finalPaintVerified": false + }, + { + "name": "buttonLightActiveBorderColor", + "component": "button", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": { + "brandColorLightActive": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:279" + ] + }, + "finalPaintVerified": false + }, + { + "name": "buttonLightBgColor", + "component": "button", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": { + "brandColorLight": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:217", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:283", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:530" + ] + }, + "finalPaintVerified": false + }, + { + "name": "buttonLightBorderColor", + "component": "button", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": { + "brandColorLight": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:217", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:283", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:530" + ] + }, + "finalPaintVerified": false + }, + { + "name": "buttonLightColor", + "component": "button", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": { + "brandColor": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:211", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:218", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:257", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:258", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:263", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:264", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:346", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:350", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:384", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:388" + ] + }, + "finalPaintVerified": false + }, + { + "name": "buttonLightDisabledBg", + "component": "button", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": { + "brandColorLight": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:217", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:283", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:530" + ] + }, + "finalPaintVerified": false + }, + { + "name": "buttonLightDisabledBorderColor", + "component": "button", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": { + "brandColorLight": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:217", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:283", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:530" + ] + }, + "finalPaintVerified": false + }, + { + "name": "buttonLightDisabledColor", + "component": "button", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": { + "brandColorDisabled": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:291", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:311", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:528", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:543", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:555" + ] + }, + "finalPaintVerified": false + }, + { + "name": "buttonLightOutlineActiveBgColor", + "component": "button", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": { + "brandColorLightActive": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:279" + ] + }, + "finalPaintVerified": false + }, + { + "name": "buttonLightOutlineActiveBorderColor", + "component": "button", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": { + "brandColorActive": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:298", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:322", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:566" + ] + }, + "finalPaintVerified": false + }, + { + "name": "buttonLightOutlineBgColor", + "component": "button", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": { + "brandColorLight": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:217", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:283", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:530" + ] + }, + "finalPaintVerified": false + }, + { + "name": "buttonLightOutlineBorderColor", + "component": "button", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "buttonLightOutlineColor", + "component": "button", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": { + "brandColor": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:211", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:218", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:257", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:258", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:263", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:264", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:346", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:350", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:384", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:388" + ] + }, + "finalPaintVerified": false + }, + { + "name": "buttonLightOutlineDisabledColor", + "component": "button", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": { + "brandColorDisabled": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:291", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:311", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:528", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:543", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:555" + ] + }, + "finalPaintVerified": false + }, + { + "name": "buttonLightTextActiveBgColor", + "component": "button", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": { + "bgColorContainerActive": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:280", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:358" + ] + }, + "finalPaintVerified": false + }, + { + "name": "buttonLightTextColor", + "component": "button", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": { + "brandColor": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:211", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:218", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:257", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:258", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:263", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:264", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:346", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:350", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:384", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:388" + ] + }, + "finalPaintVerified": false + }, + { + "name": "buttonMediumFont", + "component": "button", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": { + "fontMarkLarge": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:476" + ] + }, + "finalPaintVerified": false + }, + { + "name": "buttonMediumHeight", + "component": "button", + "reviewDecision": "default-widget-value-verified", + "currentFiles": 5, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "buttonMediumIconSize", + "component": "button", + "reviewDecision": "default-widget-value-verified", + "currentFiles": 5, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "buttonMediumPaddingHorizontal", + "component": "button", + "reviewDecision": "default-widget-value-verified", + "currentFiles": 5, + "currentNameLocators": { + "spacer2": [] + }, + "finalPaintVerified": false + }, + { + "name": "buttonPrimaryActiveBgColor", + "component": "button", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": { + "brandColorActive": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:298", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:322", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:566" + ] + }, + "finalPaintVerified": false + }, + { + "name": "buttonPrimaryActiveBorderColor", + "component": "button", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": { + "brandColorActive": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:298", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:322", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:566" + ] + }, + "finalPaintVerified": false + }, + { + "name": "buttonPrimaryBgColor", + "component": "button", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": { + "brandColor": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:211", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:218", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:257", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:258", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:263", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:264", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:346", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:350", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:384", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:388" + ] + }, + "finalPaintVerified": false + }, + { + "name": "buttonPrimaryBorderColor", + "component": "button", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": { + "brandColor": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:211", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:218", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:257", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:258", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:263", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:264", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:346", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:350", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:384", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:388" + ] + }, + "finalPaintVerified": false + }, + { + "name": "buttonPrimaryColor", + "component": "button", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": { + "textColorAnti": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:212", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:215", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:542" + ] + }, + "finalPaintVerified": false + }, + { + "name": "buttonPrimaryDashedBorderColor", + "component": "button", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "buttonPrimaryDashedColor", + "component": "button", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": { + "brandColor": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:211", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:218", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:257", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:258", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:263", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:264", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:346", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:350", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:384", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:388" + ] + }, + "finalPaintVerified": false + }, + { + "name": "buttonPrimaryDashedDisabledColor", + "component": "button", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": { + "brandColorDisabled": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:291", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:311", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:528", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:543", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:555" + ] + }, + "finalPaintVerified": false + }, + { + "name": "buttonPrimaryDisabledBg", + "component": "button", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": { + "brandColorDisabled": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:291", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:311", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:528", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:543", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:555" + ] + }, + "finalPaintVerified": false + }, + { + "name": "buttonPrimaryDisabledBorderColor", + "component": "button", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": { + "brandColorDisabled": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:291", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:311", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:528", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:543", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:555" + ] + }, + "finalPaintVerified": false + }, + { + "name": "buttonPrimaryDisabledColor", + "component": "button", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": { + "textColorAnti": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:212", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:215", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:542" + ] + }, + "finalPaintVerified": false + }, + { + "name": "buttonPrimaryOutlineActiveBgColor", + "component": "button", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": { + "bgColorContainerActive": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:280", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:358" + ] + }, + "finalPaintVerified": false + }, + { + "name": "buttonPrimaryOutlineActiveBorderColor", + "component": "button", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": { + "brandColorActive": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:298", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:322", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:566" + ] + }, + "finalPaintVerified": false + }, + { + "name": "buttonPrimaryOutlineBorderColor", + "component": "button", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "buttonPrimaryOutlineColor", + "component": "button", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": { + "brandColor": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:211", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:218", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:257", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:258", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:263", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:264", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:346", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:350", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:384", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:388" + ] + }, + "finalPaintVerified": false + }, + { + "name": "buttonPrimaryOutlineDisabledColor", + "component": "button", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": { + "brandColorDisabled": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:291", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:311", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:528", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:543", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:555" + ] + }, + "finalPaintVerified": false + }, + { + "name": "buttonPrimaryTextActiveBgColor", + "component": "button", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": { + "bgColorContainerActive": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:280", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:358" + ] + }, + "finalPaintVerified": false + }, + { + "name": "buttonPrimaryTextColor", + "component": "button", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": { + "brandColor": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:211", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:218", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:257", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:258", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:263", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:264", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:346", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:350", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:384", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:388" + ] + }, + "finalPaintVerified": false + }, + { + "name": "buttonPrimaryTextDisabledColor", + "component": "button", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": { + "brandColorDisabled": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:291", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:311", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:528", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:543", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:555" + ] + }, + "finalPaintVerified": false + }, + { + "name": "buttonSmallFont", + "component": "button", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": { + "fontMarkMedium": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:477" + ] + }, + "finalPaintVerified": false + }, + { + "name": "buttonSmallHeight", + "component": "button", + "reviewDecision": "default-widget-value-verified", + "currentFiles": 5, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "buttonSmallIconSize", + "component": "button", + "reviewDecision": "default-widget-value-verified", + "currentFiles": 5, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "buttonSmallPaddingHorizontal", + "component": "button", + "reviewDecision": "default-widget-value-verified", + "currentFiles": 5, + "currentNameLocators": { + "spacer1": [] + }, + "finalPaintVerified": false + }, + { + "name": "calendarActiveColor", + "component": "calendar", + "reviewDecision": "pending", + "currentFiles": 7, + "currentNameLocators": { + "brandColor": [ + "tdesign-component/lib/src/components/calendar/t_calendar_style.dart:109", + "tdesign-component/lib/src/components/calendar/t_calendar_style.dart:127", + "tdesign-component/lib/src/components/calendar/t_calendar_style.dart:160", + "tdesign-component/lib/src/components/calendar/t_calendar_style.dart:166" + ] + }, + "finalPaintVerified": false + }, + { + "name": "calendarBgColor", + "component": "calendar", + "reviewDecision": "pending", + "currentFiles": 7, + "currentNameLocators": { + "bgColorContainer": [ + "tdesign-component/lib/src/components/calendar/t_calendar_style.dart:84" + ] + }, + "finalPaintVerified": false + }, + { + "name": "calendarDaysColor", + "component": "calendar", + "reviewDecision": "pending", + "currentFiles": 7, + "currentNameLocators": { + "textColorSecondary": [ + "tdesign-component/lib/src/components/calendar/t_calendar_style.dart:91" + ] + }, + "finalPaintVerified": false + }, + { + "name": "calendarItemCentreColor", + "component": "calendar", + "reviewDecision": "pending", + "currentFiles": 7, + "currentNameLocators": { + "brandColorLight": [ + "tdesign-component/lib/src/components/calendar/t_calendar_style.dart:138", + "tdesign-component/lib/src/components/calendar/t_calendar_cell.dart:211" + ] + }, + "finalPaintVerified": false + }, + { + "name": "calendarItemDisabledColor", + "component": "calendar", + "reviewDecision": "pending", + "currentFiles": 7, + "currentNameLocators": { + "textColorDisabled": [ + "tdesign-component/lib/src/components/calendar/t_calendar_style.dart:189", + "tdesign-component/lib/src/components/calendar/t_calendar_style.dart:195" + ] + }, + "finalPaintVerified": false + }, + { + "name": "calendarItemSuffixColor", + "component": "calendar", + "reviewDecision": "pending", + "currentFiles": 7, + "currentNameLocators": { + "textColorPlaceholder": [ + "tdesign-component/lib/src/components/calendar/t_calendar_style.dart:133" + ] + }, + "finalPaintVerified": false + }, + { + "name": "calendarRadius", + "component": "calendar", + "reviewDecision": "pending", + "currentFiles": 7, + "currentNameLocators": { + "radiusExtraLarge": [ + "tdesign-component/lib/src/components/calendar/t_calendar_style.dart:86" + ] + }, + "finalPaintVerified": false + }, + { + "name": "calendarSelectedBorderRadius", + "component": "calendar", + "reviewDecision": "pending", + "currentFiles": 7, + "currentNameLocators": { + "radiusDefault": [ + "tdesign-component/lib/src/components/calendar/t_calendar_style.dart:119" + ] + }, + "finalPaintVerified": false + }, + { + "name": "calendarSelectedColor", + "component": "calendar", + "reviewDecision": "pending", + "currentFiles": 7, + "currentNameLocators": { + "textColorAnti": [ + "tdesign-component/lib/src/components/calendar/t_calendar_style.dart:200", + "tdesign-component/lib/src/components/calendar/t_calendar_style.dart:206", + "tdesign-component/lib/src/components/calendar/t_calendar_style.dart:219", + "tdesign-component/lib/src/components/calendar/t_calendar_style.dart:225", + "tdesign-component/lib/src/components/calendar/t_calendar_style.dart:233", + "tdesign-component/lib/src/components/calendar/t_calendar_style.dart:239" + ] + }, + "finalPaintVerified": false + }, + { + "name": "calendarSwitchModeIconColor", + "component": "calendar", + "reviewDecision": "pending", + "currentFiles": 7, + "currentNameLocators": { + "textColorSecondary": [ + "tdesign-component/lib/src/components/calendar/t_calendar_style.dart:91" + ] + }, + "finalPaintVerified": false + }, + { + "name": "calendarSwitchModeIconDisabledColor", + "component": "calendar", + "reviewDecision": "pending", + "currentFiles": 7, + "currentNameLocators": { + "textColorDisabled": [ + "tdesign-component/lib/src/components/calendar/t_calendar_style.dart:189", + "tdesign-component/lib/src/components/calendar/t_calendar_style.dart:195" + ] + }, + "finalPaintVerified": false + }, + { + "name": "calendarTitleColor", + "component": "calendar", + "reviewDecision": "pending", + "currentFiles": 7, + "currentNameLocators": { + "textColorPrimary": [ + "tdesign-component/lib/src/components/calendar/t_calendar_style.dart:97", + "tdesign-component/lib/src/components/calendar/t_calendar_style.dart:103", + "tdesign-component/lib/src/components/calendar/t_calendar_style.dart:124" + ] + }, + "finalPaintVerified": false + }, + { + "name": "calendarTitleFont", + "component": "calendar", + "reviewDecision": "pending", + "currentFiles": 7, + "currentNameLocators": { + "fontTitleLarge": [] + }, + "finalPaintVerified": false + }, + { + "name": "cascaderActiveColor", + "component": "cascader", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "brandColor": [ + "tdesign-component/lib/src/components/cascader/t_cascader.dart:295", + "tdesign-component/lib/src/components/cascader/t_cascader.dart:503", + "tdesign-component/lib/src/components/cascader/t_cascader.dart:564" + ] + }, + "finalPaintVerified": false + }, + { + "name": "cascaderBgColor", + "component": "cascader", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "bgColorContainer": [ + "tdesign-component/lib/src/components/cascader/t_cascader.dart:155", + "tdesign-component/lib/src/components/cascader/t_cascader.dart:406" + ] + }, + "finalPaintVerified": false + }, + { + "name": "cascaderBorderColor", + "component": "cascader", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "componentStroke": [ + "tdesign-component/lib/src/components/cascader/t_cascader.dart:255" + ] + }, + "finalPaintVerified": false + }, + { + "name": "cascaderContentHeight", + "component": "cascader", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "cascaderDisabledColor", + "component": "cascader", + "reviewDecision": "no-frozen-source-consumer-found", + "currentFiles": 3, + "currentNameLocators": { + "textColorDisabled": [ + "tdesign-component/lib/src/components/cascader/t_cascader.dart:567" + ] + }, + "finalPaintVerified": false + }, + { + "name": "cascaderFilterEmptyColor", + "component": "cascader", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "textColorPlaceholder": [ + "tdesign-component/lib/src/components/cascader/t_cascader.dart:429", + "tdesign-component/lib/src/components/cascader/t_cascader.dart:484", + "tdesign-component/lib/src/components/cascader/t_cascader.dart:542" + ] + }, + "finalPaintVerified": false + }, + { + "name": "cascaderFilterEmptyPadding", + "component": "cascader", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "cascaderFilterHighlightColor", + "component": "cascader", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "brandColor": [ + "tdesign-component/lib/src/components/cascader/t_cascader.dart:295", + "tdesign-component/lib/src/components/cascader/t_cascader.dart:503", + "tdesign-component/lib/src/components/cascader/t_cascader.dart:564" + ] + }, + "finalPaintVerified": false + }, + { + "name": "cascaderFilterItemColor", + "component": "cascader", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "textColorPrimary": [ + "tdesign-component/lib/src/components/cascader/t_cascader.dart:558" + ] + }, + "finalPaintVerified": false + }, + { + "name": "cascaderFilterItemDisabledColor", + "component": "cascader", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "textColorDisabled": [ + "tdesign-component/lib/src/components/cascader/t_cascader.dart:567" + ] + }, + "finalPaintVerified": false + }, + { + "name": "cascaderFilterItemHoverBg", + "component": "cascader", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "bgColorSecondaryContainer": [] + }, + "finalPaintVerified": false + }, + { + "name": "cascaderFilterItemPadding", + "component": "cascader", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "cascaderFilterPadding", + "component": "cascader", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "cascaderOptionsHeight", + "component": "cascader", + "reviewDecision": "no-frozen-source-consumer-found", + "currentFiles": 3, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "cascaderOptionsTitleColor", + "component": "cascader", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "textColorPlaceholder": [ + "tdesign-component/lib/src/components/cascader/t_cascader.dart:429", + "tdesign-component/lib/src/components/cascader/t_cascader.dart:484", + "tdesign-component/lib/src/components/cascader/t_cascader.dart:542" + ] + }, + "finalPaintVerified": false + }, + { + "name": "cascaderStepArrowColor", + "component": "cascader", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "textColorPlaceholder": [ + "tdesign-component/lib/src/components/cascader/t_cascader.dart:429", + "tdesign-component/lib/src/components/cascader/t_cascader.dart:484", + "tdesign-component/lib/src/components/cascader/t_cascader.dart:542" + ] + }, + "finalPaintVerified": false + }, + { + "name": "cascaderStepDotSize", + "component": "cascader", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "cascaderStepHeight", + "component": "cascader", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "cascaderTitleColor", + "component": "cascader", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "textColorPrimary": [ + "tdesign-component/lib/src/components/cascader/t_cascader.dart:558" + ] + }, + "finalPaintVerified": false + }, + { + "name": "cascaderTitleFont", + "component": "cascader", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "fontTitleLarge": [] + }, + "finalPaintVerified": false + }, + { + "name": "cascaderTitlePadding", + "component": "cascader", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "spacer2": [ + "tdesign-component/lib/src/components/cascader/t_cascader.dart:221", + "tdesign-component/lib/src/components/cascader/t_cascader.dart:319", + "tdesign-component/lib/src/components/cascader/t_cascader.dart:321", + "tdesign-component/lib/src/components/cascader/t_cascader.dart:414", + "tdesign-component/lib/src/components/cascader/t_cascader.dart:451", + "tdesign-component/lib/src/components/cascader/t_cascader.dart:475", + "tdesign-component/lib/src/components/cascader/t_cascader.dart:477", + "tdesign-component/lib/src/components/cascader/t_cascader.dart:522" + ] + }, + "finalPaintVerified": false + }, + { + "name": "cellBgColor", + "component": "cell", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "bgColorContainer": [ + "tdesign-component/lib/src/components/cell/t_cell.dart:125" + ] + }, + "finalPaintVerified": false + }, + { + "name": "cellBorderColor", + "component": "cell", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "componentStroke": [ + "tdesign-component/lib/src/components/cell/t_cell_group.dart:73", + "tdesign-component/lib/src/components/cell/t_cell_group.dart:130", + "tdesign-component/lib/src/components/cell/t_cell.dart:130" + ], + "borderColor": [ + "tdesign-component/lib/src/components/cell/t_cell_group.dart:130", + "tdesign-component/lib/src/components/cell/t_cell_theme_data.dart:28", + "tdesign-component/lib/src/components/cell/t_cell_theme_data.dart:67", + "tdesign-component/lib/src/components/cell/t_cell_theme_data.dart:125", + "tdesign-component/lib/src/components/cell/t_cell_theme_data.dart:145", + "tdesign-component/lib/src/components/cell/t_cell_theme_data.dart:187", + "tdesign-component/lib/src/components/cell/t_cell.dart:130" + ] + }, + "finalPaintVerified": false + }, + { + "name": "cellBorderLeftSpace", + "component": "cell", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "cellBorderRightSpace", + "component": "cell", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "cellBorderWidth", + "component": "cell", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "cellDescriptionColor", + "component": "cell", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "textColorSecondary": [ + "tdesign-component/lib/src/components/cell/t_cell.dart:96" + ] + }, + "finalPaintVerified": false + }, + { + "name": "cellDescriptionFont", + "component": "cell", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "fontBodyMedium": [ + "tdesign-component/lib/src/components/cell/t_cell_group.dart:98", + "tdesign-component/lib/src/components/cell/t_cell_group.dart:99", + "tdesign-component/lib/src/components/cell/t_cell_group.dart:101", + "tdesign-component/lib/src/components/cell/t_cell.dart:97", + "tdesign-component/lib/src/components/cell/t_cell.dart:98", + "tdesign-component/lib/src/components/cell/t_cell.dart:99" + ] + }, + "finalPaintVerified": false + }, + { + "name": "cellGroupBorderColor", + "component": "cell-group", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "componentStroke": [ + "tdesign-component/lib/src/components/cell/t_cell_group.dart:73", + "tdesign-component/lib/src/components/cell/t_cell_group.dart:130", + "tdesign-component/lib/src/components/cell/t_cell.dart:130" + ] + }, + "finalPaintVerified": false + }, + { + "name": "cellGroupTitleBgColor", + "component": "cell-group", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "bgColorSecondaryContainer": [ + "tdesign-component/lib/src/components/cell/t_cell.dart:124" + ] + }, + "finalPaintVerified": false + }, + { + "name": "cellGroupTitleColor", + "component": "cell-group", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "textColorPlaceholder": [ + "tdesign-component/lib/src/components/cell/t_cell.dart:102", + "tdesign-component/lib/src/components/cell/t_cell.dart:225" + ] + }, + "finalPaintVerified": false + }, + { + "name": "cellGroupTitleFontSize", + "component": "cell-group", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "fontSizeBase": [] + }, + "finalPaintVerified": false + }, + { + "name": "cellGroupTitleLineHeight", + "component": "cell-group", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "cellGroupTitlePaddingLeft", + "component": "cell-group", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "spacer2": [ + "tdesign-component/lib/src/components/cell/t_cell.dart:121" + ] + }, + "finalPaintVerified": false + }, + { + "name": "cellHeight", + "component": "cell", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "height": [ + "tdesign-component/lib/src/components/cell/t_cell_group.dart:99", + "tdesign-component/lib/src/components/cell/t_cell_group.dart:127", + "tdesign-component/lib/src/components/cell/t_cell_theme_data.dart:37", + "tdesign-component/lib/src/components/cell/t_cell_theme_data.dart:103", + "tdesign-component/lib/src/components/cell/t_cell_theme_data.dart:134", + "tdesign-component/lib/src/components/cell/t_cell_theme_data.dart:154", + "tdesign-component/lib/src/components/cell/t_cell_theme_data.dart:204", + "tdesign-component/lib/src/components/cell/t_cell.dart:92", + "tdesign-component/lib/src/components/cell/t_cell.dart:98", + "tdesign-component/lib/src/components/cell/t_cell.dart:104", + "tdesign-component/lib/src/components/cell/t_cell.dart:120", + "tdesign-component/lib/src/components/cell/t_cell.dart:176" + ] + }, + "finalPaintVerified": false + }, + { + "name": "cellHorizontalPadding", + "component": "cell", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "spacer2": [ + "tdesign-component/lib/src/components/cell/t_cell.dart:121" + ] + }, + "finalPaintVerified": false + }, + { + "name": "cellHoverColor", + "component": "cell", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "bgColorSecondaryContainer": [ + "tdesign-component/lib/src/components/cell/t_cell.dart:124" + ] + }, + "finalPaintVerified": false + }, + { + "name": "cellImageHeight", + "component": "cell", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "cellImageWidth", + "component": "cell", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "cellLeftIconColor", + "component": "cell", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "brandColor": [] + }, + "finalPaintVerified": false + }, + { + "name": "cellLeftIconSize", + "component": "cell", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "cellNoteColor", + "component": "cell", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "textColorPlaceholder": [ + "tdesign-component/lib/src/components/cell/t_cell.dart:102", + "tdesign-component/lib/src/components/cell/t_cell.dart:225" + ] + }, + "finalPaintVerified": false + }, + { + "name": "cellNoteFontSize", + "component": "cell", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "fontSizeM": [] + }, + "finalPaintVerified": false + }, + { + "name": "cellRequiredColor", + "component": "cell", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "errorColor": [ + "tdesign-component/lib/src/components/cell/t_cell.dart:170" + ] + }, + "finalPaintVerified": false + }, + { + "name": "cellRequiredFontSize", + "component": "cell", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "fontSizeM": [] + }, + "finalPaintVerified": false + }, + { + "name": "cellRightIconColor", + "component": "cell", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "textColorPlaceholder": [ + "tdesign-component/lib/src/components/cell/t_cell.dart:102", + "tdesign-component/lib/src/components/cell/t_cell.dart:225" + ] + }, + "finalPaintVerified": false + }, + { + "name": "cellRightIconSize", + "component": "cell", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "cellTitleColor", + "component": "cell", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "textColorPrimary": [ + "tdesign-component/lib/src/components/cell/t_cell_group.dart:97", + "tdesign-component/lib/src/components/cell/t_cell.dart:90" + ] + }, + "finalPaintVerified": false + }, + { + "name": "cellTitleFont", + "component": "cell", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "fontBodyLarge": [ + "tdesign-component/lib/src/components/cell/t_cell.dart:91", + "tdesign-component/lib/src/components/cell/t_cell.dart:92", + "tdesign-component/lib/src/components/cell/t_cell.dart:93", + "tdesign-component/lib/src/components/cell/t_cell.dart:103", + "tdesign-component/lib/src/components/cell/t_cell.dart:104", + "tdesign-component/lib/src/components/cell/t_cell.dart:105" + ] + }, + "finalPaintVerified": false + }, + { + "name": "cellVerticalPadding", + "component": "cell", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "spacer2": [ + "tdesign-component/lib/src/components/cell/t_cell.dart:121" + ] + }, + "finalPaintVerified": false + }, + { + "name": "checkboxBgColor", + "component": "checkbox", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": { + "bgColorContainer": [ + "tdesign-component/lib/src/components/checkbox/t_check_box.dart:168", + "tdesign-component/lib/src/components/checkbox/t_check_box.dart:196", + "tdesign-component/lib/src/components/checkbox/t_check_box.dart:220" + ] + }, + "finalPaintVerified": false + }, + { + "name": "checkboxBorderColor", + "component": "checkbox", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": { + "componentStroke": [] + }, + "finalPaintVerified": false + }, + { + "name": "checkboxDescriptionColor", + "component": "checkbox", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": { + "textColorSecondary": [ + "tdesign-component/lib/src/components/checkbox/t_check_box.dart:459" + ] + }, + "finalPaintVerified": false + }, + { + "name": "checkboxDescriptionDisabledColor", + "component": "checkbox", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": { + "textColorDisabled": [ + "tdesign-component/lib/src/components/checkbox/t_check_box.dart:446", + "tdesign-component/lib/src/components/checkbox/t_check_box.dart:458" + ] + }, + "finalPaintVerified": false + }, + { + "name": "checkboxDescriptionFont", + "component": "checkbox", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": { + "fontBodyMedium": [ + "tdesign-component/lib/src/components/checkbox/t_selection_card.dart:24", + "tdesign-component/lib/src/components/checkbox/t_check_box.dart:421" + ] + }, + "finalPaintVerified": false + }, + { + "name": "checkboxIconCheckedColor", + "component": "checkbox", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": { + "brandColor": [ + "tdesign-component/lib/src/components/checkbox/t_check_box.dart:192", + "tdesign-component/lib/src/components/checkbox/t_check_box.dart:302" + ] + }, + "finalPaintVerified": false + }, + { + "name": "checkboxIconColor", + "component": "checkbox", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": { + "componentBorder": [ + "tdesign-component/lib/src/components/checkbox/t_check_box.dart:303", + "tdesign-component/lib/src/components/checkbox/t_check_box.dart:319", + "tdesign-component/lib/src/components/checkbox/t_check_box.dart:360", + "tdesign-component/lib/src/components/checkbox/t_check_box.dart:363" + ] + }, + "finalPaintVerified": false + }, + { + "name": "checkboxIconDisabledBgColor", + "component": "checkbox", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": { + "bgColorComponentDisabled": [ + "tdesign-component/lib/src/components/checkbox/t_check_box.dart:324", + "tdesign-component/lib/src/components/checkbox/t_check_box.dart:355" + ] + }, + "finalPaintVerified": false + }, + { + "name": "checkboxIconDisabledColor", + "component": "checkbox", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": { + "brandColorDisabled": [ + "tdesign-component/lib/src/components/checkbox/t_check_box.dart:194", + "tdesign-component/lib/src/components/checkbox/t_check_box.dart:300" + ] + }, + "finalPaintVerified": false + }, + { + "name": "checkboxIconSize", + "component": "checkbox", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "checkboxTagActiveBgColor", + "component": "checkbox", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": { + "brandColorLight": [] + }, + "finalPaintVerified": false + }, + { + "name": "checkboxTagActiveColor", + "component": "checkbox", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": { + "brandColor": [ + "tdesign-component/lib/src/components/checkbox/t_check_box.dart:192", + "tdesign-component/lib/src/components/checkbox/t_check_box.dart:302" + ] + }, + "finalPaintVerified": false + }, + { + "name": "checkboxTitleColor", + "component": "checkbox", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": { + "textColorPrimary": [ + "tdesign-component/lib/src/components/checkbox/t_check_box.dart:447" + ], + "titleColor": [ + "tdesign-component/lib/src/components/checkbox/t_checkbox_theme_data.dart:24", + "tdesign-component/lib/src/components/checkbox/t_checkbox_theme_data.dart:50", + "tdesign-component/lib/src/components/checkbox/t_checkbox_theme_data.dart:67", + "tdesign-component/lib/src/components/checkbox/t_checkbox_theme_data.dart:77", + "tdesign-component/lib/src/components/checkbox/t_checkbox_theme_data.dart:87", + "tdesign-component/lib/src/components/checkbox/t_checkbox_theme_data.dart:122", + "tdesign-component/lib/src/components/checkbox/t_check_box.dart:447" + ] + }, + "finalPaintVerified": false + }, + { + "name": "checkboxTitleDisabledColor", + "component": "checkbox", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": { + "textColorDisabled": [ + "tdesign-component/lib/src/components/checkbox/t_check_box.dart:446", + "tdesign-component/lib/src/components/checkbox/t_check_box.dart:458" + ] + }, + "finalPaintVerified": false + }, + { + "name": "checkboxTitleFont", + "component": "checkbox", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": { + "fontBodyLarge": [ + "tdesign-component/lib/src/components/checkbox/t_selection_card.dart:22", + "tdesign-component/lib/src/components/checkbox/t_check_box.dart:412" + ] + }, + "finalPaintVerified": false + }, + { + "name": "checkboxTitleLineHeight", + "component": "checkbox", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "checkboxVerticalPadding", + "component": "checkbox", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": { + "spacer2": [ + "tdesign-component/lib/src/components/checkbox/t_selection_card.dart:26", + "tdesign-component/lib/src/components/checkbox/t_selection_card.dart:112", + "tdesign-component/lib/src/components/checkbox/t_selection_card.dart:138", + "tdesign-component/lib/src/components/checkbox/t_check_box.dart:131", + "tdesign-component/lib/src/components/checkbox/t_check_box.dart:133", + "tdesign-component/lib/src/components/checkbox/t_check_box.dart:227", + "tdesign-component/lib/src/components/checkbox/t_check_box.dart:230", + "tdesign-component/lib/src/components/checkbox/t_check_box.dart:252", + "tdesign-component/lib/src/components/checkbox/t_check_box.dart:262" + ] + }, + "finalPaintVerified": false + }, + { + "name": "collapseBorderColor", + "component": "collapse-panel", + "reviewDecision": "pending", + "currentFiles": 6, + "currentNameLocators": { + "borderLevel1Color": [] + }, + "finalPaintVerified": false + }, + { + "name": "collapseContentFont", + "component": "collapse-panel", + "reviewDecision": "pending", + "currentFiles": 6, + "currentNameLocators": { + "fontBodyMedium": [ + "tdesign-component/lib/src/components/collapse/t_collapse.dart:412" + ] + }, + "finalPaintVerified": false + }, + { + "name": "collapseContentPadding", + "component": "collapse-panel", + "reviewDecision": "pending", + "currentFiles": 6, + "currentNameLocators": { + "spacer2": [ + "tdesign-component/lib/src/components/collapse/t_inset_divider.dart:24", + "tdesign-component/lib/src/components/collapse/t_collapse.dart:156", + "tdesign-component/lib/src/components/collapse/t_collapse.dart:276", + "tdesign-component/lib/src/components/collapse/t_collapse.dart:368", + "tdesign-component/lib/src/components/collapse/t_collapse.dart:377", + "tdesign-component/lib/src/components/collapse/t_collapse.dart:378", + "tdesign-component/lib/src/components/collapse/t_collapse.dart:379", + "tdesign-component/lib/src/components/collapse/t_collapse.dart:381" + ] + }, + "finalPaintVerified": false + }, + { + "name": "collapseContentTextColor", + "component": "collapse-panel", + "reviewDecision": "pending", + "currentFiles": 6, + "currentNameLocators": { + "textColorPrimary": [ + "tdesign-component/lib/src/components/collapse/t_collapse.dart:392", + "tdesign-component/lib/src/components/collapse/t_collapse.dart:414" + ] + }, + "finalPaintVerified": false + }, + { + "name": "collapseDisabledColor", + "component": "collapse-panel", + "reviewDecision": "pending", + "currentFiles": 6, + "currentNameLocators": { + "textColorDisabled": [ + "tdesign-component/lib/src/components/collapse/t_collapse.dart:314", + "tdesign-component/lib/src/components/collapse/t_collapse.dart:342", + "tdesign-component/lib/src/components/collapse/t_collapse.dart:372", + "tdesign-component/lib/src/components/collapse/t_collapse.dart:407" + ] + }, + "finalPaintVerified": false + }, + { + "name": "collapseExtraFont", + "component": "collapse-panel", + "reviewDecision": "pending", + "currentFiles": 6, + "currentNameLocators": { + "fontBodyLarge": [ + "tdesign-component/lib/src/components/collapse/t_collapse.dart:390" + ] + }, + "finalPaintVerified": false + }, + { + "name": "collapseHeaderHeight", + "component": "collapse-panel", + "reviewDecision": "pending", + "currentFiles": 6, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "collapseHeaderTextColor", + "component": "collapse-panel", + "reviewDecision": "pending", + "currentFiles": 6, + "currentNameLocators": { + "textColorPrimary": [ + "tdesign-component/lib/src/components/collapse/t_collapse.dart:392", + "tdesign-component/lib/src/components/collapse/t_collapse.dart:414" + ] + }, + "finalPaintVerified": false + }, + { + "name": "collapseHeaderTextDisabledColor", + "component": "collapse-panel", + "reviewDecision": "no-frozen-source-consumer-found", + "currentFiles": 6, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "collapseHorizontalPadding", + "component": "collapse-panel", + "reviewDecision": "pending", + "currentFiles": 6, + "currentNameLocators": { + "spacer2": [ + "tdesign-component/lib/src/components/collapse/t_inset_divider.dart:24", + "tdesign-component/lib/src/components/collapse/t_collapse.dart:156", + "tdesign-component/lib/src/components/collapse/t_collapse.dart:276", + "tdesign-component/lib/src/components/collapse/t_collapse.dart:368", + "tdesign-component/lib/src/components/collapse/t_collapse.dart:377", + "tdesign-component/lib/src/components/collapse/t_collapse.dart:378", + "tdesign-component/lib/src/components/collapse/t_collapse.dart:379", + "tdesign-component/lib/src/components/collapse/t_collapse.dart:381" + ] + }, + "finalPaintVerified": false + }, + { + "name": "collapseIconColor", + "component": "collapse-panel", + "reviewDecision": "pending", + "currentFiles": 6, + "currentNameLocators": { + "textColorPlaceholder": [ + "tdesign-component/lib/src/components/collapse/t_collapse.dart:315", + "tdesign-component/lib/src/components/collapse/t_collapse.dart:343", + "tdesign-component/lib/src/components/collapse/t_collapse.dart:373" + ] + }, + "finalPaintVerified": false + }, + { + "name": "collapseLeftIconColor", + "component": "collapse-panel", + "reviewDecision": "pending", + "currentFiles": 6, + "currentNameLocators": { + "brandColor": [] + }, + "finalPaintVerified": false + }, + { + "name": "collapsePanelBgColor", + "component": "collapse-panel", + "reviewDecision": "pending", + "currentFiles": 6, + "currentNameLocators": { + "bgColorContainer": [ + "tdesign-component/lib/src/components/collapse/t_collapse.dart:104", + "tdesign-component/lib/src/components/collapse/t_collapse.dart:146" + ] + }, + "finalPaintVerified": false + }, + { + "name": "collapseTitleFont", + "component": "collapse-panel", + "reviewDecision": "pending", + "currentFiles": 6, + "currentNameLocators": { + "fontBodyLarge": [ + "tdesign-component/lib/src/components/collapse/t_collapse.dart:390" + ] + }, + "finalPaintVerified": false + }, + { + "name": "colorPickerGradientPreviewHeight", + "component": "color-picker", + "reviewDecision": "outside-current-flutter-component-surface", + "currentFiles": 0, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "colorPickerGradientPreviewRadius", + "component": "color-picker", + "reviewDecision": "outside-current-flutter-component-surface", + "currentFiles": 0, + "currentNameLocators": { + "radiusSmall": [] + }, + "finalPaintVerified": false + }, + { + "name": "colorPickerGradientPreviewWidth", + "component": "color-picker", + "reviewDecision": "outside-current-flutter-component-surface", + "currentFiles": 0, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "colorPickerInputFormatMarginLeft", + "component": "color-picker", + "reviewDecision": "no-frozen-source-consumer-found", + "currentFiles": 0, + "currentNameLocators": { + "spacer3": [] + }, + "finalPaintVerified": false + }, + { + "name": "colorPickerPanelBackground", + "component": "color-picker", + "reviewDecision": "outside-current-flutter-component-surface", + "currentFiles": 0, + "currentNameLocators": { + "bgColorContainer": [] + }, + "finalPaintVerified": false + }, + { + "name": "colorPickerPanelPadding", + "component": "color-picker", + "reviewDecision": "outside-current-flutter-component-surface", + "currentFiles": 0, + "currentNameLocators": { + "spacer2": [] + }, + "finalPaintVerified": false + }, + { + "name": "colorPickerPanelRadius", + "component": "color-picker", + "reviewDecision": "outside-current-flutter-component-surface", + "currentFiles": 0, + "currentNameLocators": { + "radiusExtraLarge": [] + }, + "finalPaintVerified": false + }, + { + "name": "colorPickerPanelWidth", + "component": "color-picker", + "reviewDecision": "outside-current-flutter-component-surface", + "currentFiles": 0, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "colorPickerSaturationHeight", + "component": "color-picker", + "reviewDecision": "outside-current-flutter-component-surface", + "currentFiles": 0, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "colorPickerSaturationRadius", + "component": "color-picker", + "reviewDecision": "outside-current-flutter-component-surface", + "currentFiles": 0, + "currentNameLocators": { + "radiusDefault": [] + }, + "finalPaintVerified": false + }, + { + "name": "colorPickerSaturationThumbSize", + "component": "color-picker", + "reviewDecision": "outside-current-flutter-component-surface", + "currentFiles": 0, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "colorPickerSliderHeight", + "component": "color-picker", + "reviewDecision": "outside-current-flutter-component-surface", + "currentFiles": 0, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "colorPickerSliderThumbPadding", + "component": "color-picker", + "reviewDecision": "outside-current-flutter-component-surface", + "currentFiles": 0, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "colorPickerSliderThumbSize", + "component": "color-picker", + "reviewDecision": "outside-current-flutter-component-surface", + "currentFiles": 0, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "colorPickerSliderThumbTransformX", + "component": "color-picker", + "reviewDecision": "outside-current-flutter-component-surface", + "currentFiles": 0, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "colorPickerSliderWrapperPadding", + "component": "color-picker", + "reviewDecision": "outside-current-flutter-component-surface", + "currentFiles": 0, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "colorPickerSwatchBorderRadius", + "component": "color-picker", + "reviewDecision": "outside-current-flutter-component-surface", + "currentFiles": 0, + "currentNameLocators": { + "radiusSmall": [] + }, + "finalPaintVerified": false + }, + { + "name": "colorPickerSwatchesTitleFont", + "component": "color-picker", + "reviewDecision": "outside-current-flutter-component-surface", + "currentFiles": 0, + "currentNameLocators": { + "fontTitleMedium": [] + }, + "finalPaintVerified": false + }, + { + "name": "colorPickerSwatchHeight", + "component": "color-picker", + "reviewDecision": "outside-current-flutter-component-surface", + "currentFiles": 0, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "colorPickerSwatchPadding", + "component": "color-picker", + "reviewDecision": "outside-current-flutter-component-surface", + "currentFiles": 0, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "colorPickerSwatchWidth", + "component": "color-picker", + "reviewDecision": "outside-current-flutter-component-surface", + "currentFiles": 0, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "countdownBgColor", + "component": "count-down", + "reviewDecision": "outside-current-flutter-component-surface", + "currentFiles": 0, + "currentNameLocators": { + "errorColor": [] + }, + "finalPaintVerified": false + }, + { + "name": "countdownDefaultColor", + "component": "count-down", + "reviewDecision": "outside-current-flutter-component-surface", + "currentFiles": 0, + "currentNameLocators": { + "textColorPrimary": [] + }, + "finalPaintVerified": false + }, + { + "name": "countdownRoundBorderRadius", + "component": "count-down", + "reviewDecision": "outside-current-flutter-component-surface", + "currentFiles": 0, + "currentNameLocators": { + "radiusCircle": [] + }, + "finalPaintVerified": false + }, + { + "name": "countdownRoundColor", + "component": "count-down", + "reviewDecision": "outside-current-flutter-component-surface", + "currentFiles": 0, + "currentNameLocators": { + "textColorAnti": [] + }, + "finalPaintVerified": false + }, + { + "name": "countdownSquareBorderRadius", + "component": "count-down", + "reviewDecision": "outside-current-flutter-component-surface", + "currentFiles": 0, + "currentNameLocators": { + "radiusSmall": [] + }, + "finalPaintVerified": false + }, + { + "name": "dataTimePickerYearWidth", + "component": "date-time-picker", + "reviewDecision": "pending", + "currentFiles": 9, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "dialogBodyMaxHeight", + "component": "dialog", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "dialogBorderRadius", + "component": "dialog", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "radiusExtraLarge": [ + "tdesign-component/lib/src/components/dialog/t_dialog.dart:246" + ] + }, + "finalPaintVerified": false + }, + { + "name": "dialogCloseColor", + "component": "dialog", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "textColorPlaceholder": [ + "tdesign-component/lib/src/components/dialog/t_dialog.dart:386" + ] + }, + "finalPaintVerified": false + }, + { + "name": "dialogContentColor", + "component": "dialog", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "textColorSecondary": [ + "tdesign-component/lib/src/components/dialog/t_dialog.dart:279" + ] + }, + "finalPaintVerified": false + }, + { + "name": "dialogContentFont", + "component": "dialog", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "fontBodyLarge": [ + "tdesign-component/lib/src/components/dialog/t_dialog.dart:280", + "tdesign-component/lib/src/components/dialog/t_dialog.dart:281", + "tdesign-component/lib/src/components/dialog/t_dialog.dart:282" + ] + }, + "finalPaintVerified": false + }, + { + "name": "dialogTitleColor", + "component": "dialog", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "textColorPrimary": [ + "tdesign-component/lib/src/components/dialog/t_dialog.dart:271" + ] + }, + "finalPaintVerified": false + }, + { + "name": "dialogTitleFont", + "component": "dialog", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "fontTitleLarge": [ + "tdesign-component/lib/src/components/dialog/t_dialog.dart:272", + "tdesign-component/lib/src/components/dialog/t_dialog.dart:273", + "tdesign-component/lib/src/components/dialog/t_dialog.dart:274" + ] + }, + "finalPaintVerified": false + }, + { + "name": "dialogWidth", + "component": "dialog", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "width": [ + "tdesign-component/lib/src/components/dialog/t_dialog_theme_data.dart:41", + "tdesign-component/lib/src/components/dialog/t_dialog_theme_data.dart:51", + "tdesign-component/lib/src/components/dialog/t_dialog_theme_data.dart:73", + "tdesign-component/lib/src/components/dialog/t_dialog_theme_data.dart:90", + "tdesign-component/lib/src/components/dialog/t_dialog_theme_data.dart:100", + "tdesign-component/lib/src/components/dialog/t_dialog_theme_data.dart:136", + "tdesign-component/lib/src/components/dialog/t_dialog.dart:249", + "tdesign-component/lib/src/components/dialog/t_dialog.dart:262", + "tdesign-component/lib/src/components/dialog/t_dialog.dart:369", + "tdesign-component/lib/src/components/dialog/t_dialog.dart:626", + "tdesign-component/lib/src/components/dialog/t_dialog.dart:638", + "tdesign-component/lib/src/components/dialog/t_dialog.dart:653" + ] + }, + "finalPaintVerified": false + }, + { + "name": "dividerBorderWidth", + "component": "divider", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "dividerColor", + "component": "divider", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "bgColorComponent": [ + "tdesign-component/lib/src/components/divider/t_divider.dart:61" + ], + "color": [ + "tdesign-component/lib/src/components/divider/t_divider_theme_data.dart:14", + "tdesign-component/lib/src/components/divider/t_divider_theme_data.dart:35", + "tdesign-component/lib/src/components/divider/t_divider_theme_data.dart:50", + "tdesign-component/lib/src/components/divider/t_divider_theme_data.dart:59", + "tdesign-component/lib/src/components/divider/t_divider_theme_data.dart:86", + "tdesign-component/lib/src/components/divider/t_divider_painter.dart:10", + "tdesign-component/lib/src/components/divider/t_divider_painter.dart:17", + "tdesign-component/lib/src/components/divider/t_divider_painter.dart:31", + "tdesign-component/lib/src/components/divider/t_divider_painter.dart:60", + "tdesign-component/lib/src/components/divider/t_divider.dart:61", + "tdesign-component/lib/src/components/divider/t_divider.dart:74", + "tdesign-component/lib/src/components/divider/t_divider.dart:115", + "tdesign-component/lib/src/components/divider/t_divider.dart:126", + "tdesign-component/lib/src/components/divider/t_divider.dart:130", + "tdesign-component/lib/src/components/divider/t_divider.dart:148", + "tdesign-component/lib/src/components/divider/t_divider.dart:152", + "tdesign-component/lib/src/components/divider/t_divider.dart:158", + "tdesign-component/lib/src/components/divider/t_divider.dart:192", + "tdesign-component/lib/src/components/divider/t_divider.dart:194", + "tdesign-component/lib/src/components/divider/t_divider.dart:203", + "tdesign-component/lib/src/components/divider/t_divider.dart:207" + ] + }, + "finalPaintVerified": false + }, + { + "name": "dividerContentColor", + "component": "divider", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "textColorPlaceholder": [ + "tdesign-component/lib/src/components/divider/t_divider.dart:74" + ] + }, + "finalPaintVerified": false + }, + { + "name": "dividerContentFont", + "component": "divider", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "fontBodySmall": [ + "tdesign-component/lib/src/components/divider/t_divider.dart:69" + ] + }, + "finalPaintVerified": false + }, + { + "name": "dividerContentLineStyle", + "component": "divider", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "dividerContentMargin", + "component": "divider", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "spacer1": [ + "tdesign-component/lib/src/components/divider/t_divider.dart:66" + ] + }, + "finalPaintVerified": false + }, + { + "name": "dividerHorizontalMargin", + "component": "divider", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "dividerVerticalMargin", + "component": "divider", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "spacer": [] + }, + "finalPaintVerified": false + }, + { + "name": "drawerBgColor", + "component": "drawer", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "bgColorContainer": [ + "tdesign-component/lib/src/components/drawer/t_drawer_content.dart:58" + ] + }, + "finalPaintVerified": false + }, + { + "name": "drawerBorderColor", + "component": "drawer", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "borderLevel1Color": [] + }, + "finalPaintVerified": false + }, + { + "name": "drawerFooterPaddingBottom", + "component": "drawer", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "drawerHoverColor", + "component": "drawer", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "bgColorSecondaryContainer": [ + "tdesign-component/lib/src/components/drawer/t_drawer_content.dart:104" + ] + }, + "finalPaintVerified": false + }, + { + "name": "drawerItemIconColor", + "component": "drawer", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "itemIconColor": [ + "tdesign-component/lib/src/components/drawer/t_drawer_theme_data.dart:40", + "tdesign-component/lib/src/components/drawer/t_drawer_theme_data.dart:70", + "tdesign-component/lib/src/components/drawer/t_drawer_theme_data.dart:97", + "tdesign-component/lib/src/components/drawer/t_drawer_theme_data.dart:114", + "tdesign-component/lib/src/components/drawer/t_drawer_theme_data.dart:163", + "tdesign-component/lib/src/components/drawer/t_drawer_content.dart:109" + ] + }, + "finalPaintVerified": false + }, + { + "name": "drawerItemIconSize", + "component": "drawer", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "itemIconSize": [ + "tdesign-component/lib/src/components/drawer/t_drawer_theme_data.dart:43", + "tdesign-component/lib/src/components/drawer/t_drawer_theme_data.dart:71", + "tdesign-component/lib/src/components/drawer/t_drawer_theme_data.dart:78", + "tdesign-component/lib/src/components/drawer/t_drawer_theme_data.dart:98", + "tdesign-component/lib/src/components/drawer/t_drawer_theme_data.dart:115", + "tdesign-component/lib/src/components/drawer/t_drawer_theme_data.dart:164", + "tdesign-component/lib/src/components/drawer/t_drawer_theme_data.dart:165", + "tdesign-component/lib/src/components/drawer/t_drawer_theme_data.dart:166", + "tdesign-component/lib/src/components/drawer/t_drawer_content.dart:111" + ] + }, + "finalPaintVerified": false + }, + { + "name": "drawerItemPadding", + "component": "drawer", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "spacer2": [], + "itemPadding": [ + "tdesign-component/lib/src/components/drawer/t_drawer_theme_data.dart:36", + "tdesign-component/lib/src/components/drawer/t_drawer_theme_data.dart:69", + "tdesign-component/lib/src/components/drawer/t_drawer_theme_data.dart:96", + "tdesign-component/lib/src/components/drawer/t_drawer_theme_data.dart:113", + "tdesign-component/lib/src/components/drawer/t_drawer_theme_data.dart:157", + "tdesign-component/lib/src/components/drawer/t_drawer_theme_data.dart:158", + "tdesign-component/lib/src/components/drawer/t_drawer_theme_data.dart:159", + "tdesign-component/lib/src/components/drawer/t_drawer_content.dart:106" + ] + }, + "finalPaintVerified": false + }, + { + "name": "drawerSidebarHeight", + "component": "drawer", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "drawerTitleColor", + "component": "drawer", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "textColorPrimary": [ + "tdesign-component/lib/src/components/drawer/t_drawer_content.dart:110", + "tdesign-component/lib/src/components/drawer/t_drawer_content.dart:156", + "tdesign-component/lib/src/components/drawer/t_drawer_content.dart:170" + ] + }, + "finalPaintVerified": false + }, + { + "name": "drawerTitleFont", + "component": "drawer", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "fontTitleLarge": [ + "tdesign-component/lib/src/components/drawer/t_drawer_content.dart:168" + ] + }, + "finalPaintVerified": false + }, + { + "name": "drawerTitlePadding", + "component": "drawer", + "reviewDecision": "no-frozen-source-consumer-found", + "currentFiles": 3, + "currentNameLocators": { + "titlePadding": [ + "tdesign-component/lib/src/components/drawer/t_drawer_theme_data.dart:22", + "tdesign-component/lib/src/components/drawer/t_drawer_theme_data.dart:65", + "tdesign-component/lib/src/components/drawer/t_drawer_theme_data.dart:92", + "tdesign-component/lib/src/components/drawer/t_drawer_theme_data.dart:109", + "tdesign-component/lib/src/components/drawer/t_drawer_theme_data.dart:144", + "tdesign-component/lib/src/components/drawer/t_drawer_theme_data.dart:145", + "tdesign-component/lib/src/components/drawer/t_drawer_theme_data.dart:146", + "tdesign-component/lib/src/components/drawer/t_drawer_content.dart:66" + ] + }, + "finalPaintVerified": false + }, + { + "name": "drawerWidth", + "component": "drawer", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "width": [ + "tdesign-component/lib/src/components/drawer/t_drawer_theme_data.dart:13", + "tdesign-component/lib/src/components/drawer/t_drawer_theme_data.dart:62", + "tdesign-component/lib/src/components/drawer/t_drawer_theme_data.dart:77", + "tdesign-component/lib/src/components/drawer/t_drawer_theme_data.dart:89", + "tdesign-component/lib/src/components/drawer/t_drawer_theme_data.dart:106", + "tdesign-component/lib/src/components/drawer/t_drawer_theme_data.dart:141", + "tdesign-component/lib/src/components/drawer/t_drawer_content.dart:56", + "tdesign-component/lib/src/components/drawer/t_drawer_content.dart:141", + "tdesign-component/lib/src/components/drawer/t_drawer_content.dart:234", + "tdesign-component/lib/src/components/drawer/t_drawer.dart:120" + ] + }, + "finalPaintVerified": false + }, + { + "name": "dropdownBodyMaxHeight", + "component": "dropdown-item", + "reviewDecision": "fallback-widget-verified-visual-pending", + "currentFiles": 3, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "dropdownMenuActiveColor", + "component": "dropdown-menu", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "brandColor": [ + "tdesign-component/lib/src/components/dropdown_menu/t_dropdown_menu.dart:745", + "tdesign-component/lib/src/components/dropdown_menu/t_dropdown_menu.dart:754", + "tdesign-component/lib/src/components/dropdown_menu/t_dropdown_item.dart:313", + "tdesign-component/lib/src/components/dropdown_menu/t_dropdown_item.dart:331", + "tdesign-component/lib/src/components/dropdown_menu/t_dropdown_item.dart:437", + "tdesign-component/lib/src/components/dropdown_menu/t_dropdown_item.dart:485" + ] + }, + "finalPaintVerified": false + }, + { + "name": "dropdownMenuBgColor", + "component": "dropdown-menu", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "bgColorContainer": [ + "tdesign-component/lib/src/components/dropdown_menu/t_dropdown_menu.dart:689", + "tdesign-component/lib/src/components/dropdown_menu/t_dropdown_menu.dart:1146", + "tdesign-component/lib/src/components/dropdown_menu/t_dropdown_item.dart:297" + ] + }, + "finalPaintVerified": false + }, + { + "name": "dropdownMenuBorderWidth", + "component": "dropdown-menu", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "dropdownMenuColor", + "component": "dropdown-menu", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "textColorPrimary": [ + "tdesign-component/lib/src/components/dropdown_menu/t_dropdown_menu.dart:734", + "tdesign-component/lib/src/components/dropdown_menu/t_dropdown_menu.dart:749", + "tdesign-component/lib/src/components/dropdown_menu/t_dropdown_menu.dart:755", + "tdesign-component/lib/src/components/dropdown_menu/t_dropdown_item.dart:219", + "tdesign-component/lib/src/components/dropdown_menu/t_dropdown_item.dart:390", + "tdesign-component/lib/src/components/dropdown_menu/t_dropdown_item.dart:475" + ] + }, + "finalPaintVerified": false + }, + { + "name": "dropdownMenuDisabledColor", + "component": "dropdown-menu", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "textColorDisabled": [ + "tdesign-component/lib/src/components/dropdown_menu/t_dropdown_menu.dart:741", + "tdesign-component/lib/src/components/dropdown_menu/t_dropdown_menu.dart:752", + "tdesign-component/lib/src/components/dropdown_menu/t_dropdown_item.dart:397", + "tdesign-component/lib/src/components/dropdown_menu/t_dropdown_item.dart:482" + ] + }, + "finalPaintVerified": false + }, + { + "name": "dropdownMenuFontSize", + "component": "dropdown-menu", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "fontSizeBase": [] + }, + "finalPaintVerified": false + }, + { + "name": "dropdownMenuHeight", + "component": "dropdown-menu", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "dropdownMenuIconSize", + "component": "dropdown-menu", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "iconSize": [ + "tdesign-component/lib/src/components/dropdown_menu/t_dropdown_menu.dart:789", + "tdesign-component/lib/src/components/dropdown_menu/t_dropdown_theme_data.dart:17", + "tdesign-component/lib/src/components/dropdown_menu/t_dropdown_theme_data.dart:61", + "tdesign-component/lib/src/components/dropdown_menu/t_dropdown_theme_data.dart:123", + "tdesign-component/lib/src/components/dropdown_menu/t_dropdown_theme_data.dart:155", + "tdesign-component/lib/src/components/dropdown_menu/t_dropdown_theme_data.dart:180", + "tdesign-component/lib/src/components/dropdown_menu/t_dropdown_theme_data.dart:241" + ] + }, + "finalPaintVerified": false + }, + { + "name": "emptyActionMarginTop", + "component": "empty", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": { + "spacer4": [] + }, + "finalPaintVerified": false + }, + { + "name": "emptyDescriptionColor", + "component": "empty", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": { + "textColorPlaceholder": [ + "tdesign-component/lib/src/components/empty/t_empty.dart:50", + "tdesign-component/lib/src/components/empty/t_empty.dart:58" + ] + }, + "finalPaintVerified": false + }, + { + "name": "emptyDescriptionFont", + "component": "empty", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": { + "fontBodyMedium": [ + "tdesign-component/lib/src/components/empty/t_empty.dart:55" + ] + }, + "finalPaintVerified": false + }, + { + "name": "emptyDescriptionMarginTop", + "component": "empty", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": { + "spacer2": [] + }, + "finalPaintVerified": false + }, + { + "name": "emptyIconColor", + "component": "empty", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": { + "textColorPlaceholder": [ + "tdesign-component/lib/src/components/empty/t_empty.dart:50", + "tdesign-component/lib/src/components/empty/t_empty.dart:58" + ] + }, + "finalPaintVerified": false + }, + { + "name": "fabShadow", + "component": "fab", + "reviewDecision": "fallback-widget-verified-visual-pending", + "currentFiles": 6, + "currentNameLocators": { + "shadow2": [ + "tdesign-component/lib/src/components/fab/t_fab_resolve.dart:105" + ] + }, + "finalPaintVerified": false + }, + { + "name": "footerLinkColor", + "component": "footer", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": { + "brandColor": [] + }, + "finalPaintVerified": false + }, + { + "name": "footerLinkDividingLineColor", + "component": "footer", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": { + "textColorPlaceholder": [ + "tdesign-component/lib/src/components/footer/t_footer.dart:108" + ] + }, + "finalPaintVerified": false + }, + { + "name": "footerLinkDividingLinePadding", + "component": "footer", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": { + "spacer1": [ + "tdesign-component/lib/src/components/footer/t_footer.dart:73" + ] + }, + "finalPaintVerified": false + }, + { + "name": "footerLinkFont", + "component": "footer", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": { + "fontBodyMedium": [] + }, + "finalPaintVerified": false + }, + { + "name": "footerLogoIconHeight", + "component": "footer", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "footerLogoIconMarginRight", + "component": "footer", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": { + "spacer": [ + "tdesign-component/lib/src/components/footer/t_footer.dart:29" + ] + }, + "finalPaintVerified": false + }, + { + "name": "footerLogoIconWidth", + "component": "footer", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "footerLogoTitleFont", + "component": "footer", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": { + "fontTitleMedium": [] + }, + "finalPaintVerified": false + }, + { + "name": "footerLogoTitleUrlWidth", + "component": "footer", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "footerTextColor", + "component": "footer", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": { + "textColorPlaceholder": [ + "tdesign-component/lib/src/components/footer/t_footer.dart:108" + ] + }, + "finalPaintVerified": false + }, + { + "name": "footerTextFont", + "component": "footer", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": { + "fontBodySmall": [ + "tdesign-component/lib/src/components/footer/t_footer.dart:106", + "tdesign-component/lib/src/components/footer/t_footer.dart:107" + ] + }, + "finalPaintVerified": false + }, + { + "name": "footerTextMarginTop", + "component": "footer", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "formBgColor", + "component": "form", + "reviewDecision": "fallback-widget-verified-visual-pending", + "currentFiles": 5, + "currentNameLocators": { + "bgColorContainer": [ + "tdesign-component/lib/src/components/form/t_form_item.dart:219", + "tdesign-component/lib/src/components/form/t_form.dart:266" + ] + }, + "finalPaintVerified": false + }, + { + "name": "formItemBorderColor", + "component": "form-item", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": { + "componentStroke": [ + "tdesign-component/lib/src/components/form/t_form_item.dart:227" + ] + }, + "finalPaintVerified": false + }, + { + "name": "formItemBorderLeftSpace", + "component": "form-item", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "formItemBorderRightSpace", + "component": "form-item", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "formItemHorizontalPadding", + "component": "form-item", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": { + "spacer2": [ + "tdesign-component/lib/src/components/form/t_form_item.dart:251" + ] + }, + "finalPaintVerified": false + }, + { + "name": "formItemVerticalPadding", + "component": "form-item", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": { + "spacer2": [ + "tdesign-component/lib/src/components/form/t_form_item.dart:251" + ] + }, + "finalPaintVerified": false + }, + { + "name": "gridBgColor", + "component": "grid", + "reviewDecision": "outside-current-flutter-component-surface", + "currentFiles": 0, + "currentNameLocators": { + "bgColorContainer": [] + }, + "finalPaintVerified": false + }, + { + "name": "gridCardRadius", + "component": "grid", + "reviewDecision": "outside-current-flutter-component-surface", + "currentFiles": 0, + "currentNameLocators": { + "radiusLarge": [] + }, + "finalPaintVerified": false + }, + { + "name": "gridItemBgColor", + "component": "grid-item", + "reviewDecision": "outside-current-flutter-component-surface", + "currentFiles": 0, + "currentNameLocators": { + "bgColorContainer": [] + }, + "finalPaintVerified": false + }, + { + "name": "gridItemDescriptionColor", + "component": "grid-item", + "reviewDecision": "outside-current-flutter-component-surface", + "currentFiles": 0, + "currentNameLocators": { + "textColorPlaceholder": [] + }, + "finalPaintVerified": false + }, + { + "name": "gridItemDescriptionFont", + "component": "grid-item", + "reviewDecision": "outside-current-flutter-component-surface", + "currentFiles": 0, + "currentNameLocators": { + "fontBodySmall": [] + }, + "finalPaintVerified": false + }, + { + "name": "gridItemDescriptionPaddingTop", + "component": "grid-item", + "reviewDecision": "outside-current-flutter-component-surface", + "currentFiles": 0, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "gridItemHorizontalTextDescriptionTop", + "component": "grid-item", + "reviewDecision": "outside-current-flutter-component-surface", + "currentFiles": 0, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "gridItemHorizontalTextPaddingLeft", + "component": "grid-item", + "reviewDecision": "outside-current-flutter-component-surface", + "currentFiles": 0, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "gridItemHoverBgColor", + "component": "grid-item", + "reviewDecision": "outside-current-flutter-component-surface", + "currentFiles": 0, + "currentNameLocators": { + "bgColorSecondaryContainer": [] + }, + "finalPaintVerified": false + }, + { + "name": "gridItemImageMiddleWidth", + "component": "grid-item", + "reviewDecision": "outside-current-flutter-component-surface", + "currentFiles": 0, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "gridItemImageSmallWidth", + "component": "grid-item", + "reviewDecision": "outside-current-flutter-component-surface", + "currentFiles": 0, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "gridItemImageWidth", + "component": "grid-item", + "reviewDecision": "outside-current-flutter-component-surface", + "currentFiles": 0, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "gridItemPadding", + "component": "grid-item", + "reviewDecision": "outside-current-flutter-component-surface", + "currentFiles": 0, + "currentNameLocators": { + "spacer2": [] + }, + "finalPaintVerified": false + }, + { + "name": "gridItemTextColor", + "component": "grid-item", + "reviewDecision": "outside-current-flutter-component-surface", + "currentFiles": 0, + "currentNameLocators": { + "textColorPrimary": [] + }, + "finalPaintVerified": false + }, + { + "name": "gridItemTextFont", + "component": "grid-item", + "reviewDecision": "outside-current-flutter-component-surface", + "currentFiles": 0, + "currentNameLocators": { + "fontBodyMedium": [] + }, + "finalPaintVerified": false + }, + { + "name": "gridItemTextMiddleFont", + "component": "grid-item", + "reviewDecision": "outside-current-flutter-component-surface", + "currentFiles": 0, + "currentNameLocators": { + "fontBodySmall": [] + }, + "finalPaintVerified": false + }, + { + "name": "gridItemTextPaddingTop", + "component": "grid-item", + "reviewDecision": "outside-current-flutter-component-surface", + "currentFiles": 0, + "currentNameLocators": { + "spacer": [] + }, + "finalPaintVerified": false + }, + { + "name": "gridItemTextSmallFont", + "component": "grid-item", + "reviewDecision": "outside-current-flutter-component-surface", + "currentFiles": 0, + "currentNameLocators": { + "fontBodyExtraSmall": [] + }, + "finalPaintVerified": false + }, + { + "name": "guideBodyColor", + "component": "guide", + "reviewDecision": "outside-current-flutter-component-surface", + "currentFiles": 0, + "currentNameLocators": { + "textColorSecondary": [] + }, + "finalPaintVerified": false + }, + { + "name": "guideDialogBodyFont", + "component": "guide", + "reviewDecision": "outside-current-flutter-component-surface", + "currentFiles": 0, + "currentNameLocators": { + "fontBodyLarge": [] + }, + "finalPaintVerified": false + }, + { + "name": "guideDialogBodyMarginTop", + "component": "guide", + "reviewDecision": "outside-current-flutter-component-surface", + "currentFiles": 0, + "currentNameLocators": { + "spacer": [] + }, + "finalPaintVerified": false + }, + { + "name": "guideDialogBodyTextAlign", + "component": "guide", + "reviewDecision": "outside-current-flutter-component-surface", + "currentFiles": 0, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "guideDialogBorderRadius", + "component": "guide", + "reviewDecision": "outside-current-flutter-component-surface", + "currentFiles": 0, + "currentNameLocators": { + "radiusExtraLarge": [] + }, + "finalPaintVerified": false + }, + { + "name": "guideDialogFooterButtonPadding", + "component": "guide", + "reviewDecision": "outside-current-flutter-component-surface", + "currentFiles": 0, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "guideDialogPadding", + "component": "guide", + "reviewDecision": "outside-current-flutter-component-surface", + "currentFiles": 0, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "guideDialogTitleFont", + "component": "guide", + "reviewDecision": "outside-current-flutter-component-surface", + "currentFiles": 0, + "currentNameLocators": { + "fontTitleLarge": [] + }, + "finalPaintVerified": false + }, + { + "name": "guideDialogTitleTextAlign", + "component": "guide", + "reviewDecision": "outside-current-flutter-component-surface", + "currentFiles": 0, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "guideDialogWidth", + "component": "guide", + "reviewDecision": "outside-current-flutter-component-surface", + "currentFiles": 0, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "guideFooterButtonSpace", + "component": "guide", + "reviewDecision": "outside-current-flutter-component-surface", + "currentFiles": 0, + "currentNameLocators": { + "spacer1": [] + }, + "finalPaintVerified": false + }, + { + "name": "guideFooterMarginTop", + "component": "guide", + "reviewDecision": "outside-current-flutter-component-surface", + "currentFiles": 0, + "currentNameLocators": { + "spacer3": [] + }, + "finalPaintVerified": false + }, + { + "name": "guideFooterTextAlign", + "component": "guide", + "reviewDecision": "outside-current-flutter-component-surface", + "currentFiles": 0, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "guidePopoverBgColor", + "component": "guide", + "reviewDecision": "outside-current-flutter-component-surface", + "currentFiles": 0, + "currentNameLocators": { + "bgColorContainer": [] + }, + "finalPaintVerified": false + }, + { + "name": "guidePopoverBodyFont", + "component": "guide", + "reviewDecision": "outside-current-flutter-component-surface", + "currentFiles": 0, + "currentNameLocators": { + "fontBodyMedium": [] + }, + "finalPaintVerified": false + }, + { + "name": "guidePopoverBodyMarginTop", + "component": "guide", + "reviewDecision": "outside-current-flutter-component-surface", + "currentFiles": 0, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "guidePopoverBodyTextAlign", + "component": "guide", + "reviewDecision": "outside-current-flutter-component-surface", + "currentFiles": 0, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "guidePopoverBorder", + "component": "guide", + "reviewDecision": "outside-current-flutter-component-surface", + "currentFiles": 0, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "guidePopoverBorderRadius", + "component": "guide", + "reviewDecision": "outside-current-flutter-component-surface", + "currentFiles": 0, + "currentNameLocators": { + "radiusLarge": [] + }, + "finalPaintVerified": false + }, + { + "name": "guidePopoverMaxWidth", + "component": "guide", + "reviewDecision": "outside-current-flutter-component-surface", + "currentFiles": 0, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "guidePopoverMinWidth", + "component": "guide", + "reviewDecision": "outside-current-flutter-component-surface", + "currentFiles": 0, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "guidePopoverPadding", + "component": "guide", + "reviewDecision": "outside-current-flutter-component-surface", + "currentFiles": 0, + "currentNameLocators": { + "spacer2": [] + }, + "finalPaintVerified": false + }, + { + "name": "guidePopoverShadow", + "component": "guide", + "reviewDecision": "outside-current-flutter-component-surface", + "currentFiles": 0, + "currentNameLocators": { + "shadow3": [] + }, + "finalPaintVerified": false + }, + { + "name": "guidePopoverTitleFont", + "component": "guide", + "reviewDecision": "outside-current-flutter-component-surface", + "currentFiles": 0, + "currentNameLocators": { + "fontTitleMedium": [] + }, + "finalPaintVerified": false + }, + { + "name": "guidePopoverTitleTextAlign", + "component": "guide", + "reviewDecision": "outside-current-flutter-component-surface", + "currentFiles": 0, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "guideReferenceBorder", + "component": "guide", + "reviewDecision": "outside-current-flutter-component-surface", + "currentFiles": 0, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "guideReferenceBorderRadius", + "component": "guide", + "reviewDecision": "outside-current-flutter-component-surface", + "currentFiles": 0, + "currentNameLocators": { + "radiusDefault": [] + }, + "finalPaintVerified": false + }, + { + "name": "guideReferenceMaskColor", + "component": "guide", + "reviewDecision": "outside-current-flutter-component-surface", + "currentFiles": 0, + "currentNameLocators": { + "fontGray2": [] + }, + "finalPaintVerified": false + }, + { + "name": "guideTitleColor", + "component": "guide", + "reviewDecision": "outside-current-flutter-component-surface", + "currentFiles": 0, + "currentNameLocators": { + "textColorPrimary": [] + }, + "finalPaintVerified": false + }, + { + "name": "imageColor", + "component": "image", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": { + "textColorPlaceholder": [ + "tdesign-component/lib/src/components/image/t_image.dart:205", + "tdesign-component/lib/src/components/image/t_image.dart:240", + "tdesign-component/lib/src/components/image/t_image.dart:298", + "tdesign-component/lib/src/components/image/t_image.dart:387" + ], + "color": [ + "tdesign-component/lib/src/components/image/t_image_theme_data.dart:9", + "tdesign-component/lib/src/components/image/t_image_theme_data.dart:18", + "tdesign-component/lib/src/components/image/t_image_theme_data.dart:44", + "tdesign-component/lib/src/components/image/t_image_theme_data.dart:52", + "tdesign-component/lib/src/components/image/t_image_theme_data.dart:78", + "tdesign-component/lib/src/components/image/t_image.dart:167", + "tdesign-component/lib/src/components/image/t_image.dart:183", + "tdesign-component/lib/src/components/image/t_image.dart:205", + "tdesign-component/lib/src/components/image/t_image.dart:240", + "tdesign-component/lib/src/components/image/t_image.dart:248", + "tdesign-component/lib/src/components/image/t_image.dart:271", + "tdesign-component/lib/src/components/image/t_image.dart:295", + "tdesign-component/lib/src/components/image/t_image.dart:298", + "tdesign-component/lib/src/components/image/t_image.dart:387" + ] + }, + "finalPaintVerified": false + }, + { + "name": "imageLoadingBgColor", + "component": "image", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": { + "bgColorSecondaryContainer": [] + }, + "finalPaintVerified": false + }, + { + "name": "imageLoadingColor", + "component": "image", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": { + "textColorPlaceholder": [ + "tdesign-component/lib/src/components/image/t_image.dart:205", + "tdesign-component/lib/src/components/image/t_image.dart:240", + "tdesign-component/lib/src/components/image/t_image.dart:298", + "tdesign-component/lib/src/components/image/t_image.dart:387" + ] + }, + "finalPaintVerified": false + }, + { + "name": "imageRoundRadius", + "component": "image", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": { + "radiusDefault": [ + "tdesign-component/lib/src/components/image/t_image.dart:312" + ] + }, + "finalPaintVerified": false + }, + { + "name": "imageViewerCloseMarginLeft", + "component": "image-viewer", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": { + "spacer1": [] + }, + "finalPaintVerified": false + }, + { + "name": "imageViewerDeleteMarginRight", + "component": "image-viewer", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": { + "spacer1": [] + }, + "finalPaintVerified": false + }, + { + "name": "imageViewerMaskBgColor", + "component": "image-viewer", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": { + "maskActive": [] + }, + "finalPaintVerified": false + }, + { + "name": "imageViewerNavBgColor", + "component": "image-viewer", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "imageViewerNavColor", + "component": "image-viewer", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": { + "textColorAnti": [ + "tdesign-component/lib/src/components/image_viewer/t_image_viewer.dart:274", + "tdesign-component/lib/src/components/image_viewer/t_image_viewer.dart:286", + "tdesign-component/lib/src/components/image_viewer/t_image_viewer.dart:441", + "tdesign-component/lib/src/components/image_viewer/t_image_viewer.dart:450", + "tdesign-component/lib/src/components/image_viewer/t_image_viewer.dart:491", + "tdesign-component/lib/src/components/image_viewer/t_image_viewer.dart:603" + ] + }, + "finalPaintVerified": false + }, + { + "name": "imageViewerNavHeight", + "component": "image-viewer", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "imageViewerNavIndexFontSize", + "component": "image-viewer", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": { + "fontSizeBase": [] + }, + "finalPaintVerified": false + }, + { + "name": "imageViewerTop", + "component": "image-viewer", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "indexesAnchorActiveBgColor", + "component": "indexes-anchor", + "reviewDecision": "pending", + "currentFiles": 8, + "currentNameLocators": { + "bgColorContainer": [ + "tdesign-component/lib/src/components/indexes/t_indexes_anchor.dart:54", + "tdesign-component/lib/src/components/indexes/t_indexes.dart:227" + ] + }, + "finalPaintVerified": false + }, + { + "name": "indexesAnchorActiveColor", + "component": "indexes-anchor", + "reviewDecision": "pending", + "currentFiles": 8, + "currentNameLocators": { + "brandColor": [ + "tdesign-component/lib/src/components/indexes/t_indexes_anchor.dart:101", + "tdesign-component/lib/src/components/indexes/t_indexes_list.dart:240", + "tdesign-component/lib/src/components/indexes/t_indexes_list.dart:266" + ] + }, + "finalPaintVerified": false + }, + { + "name": "indexesAnchorActiveFontWeight", + "component": "indexes-anchor", + "reviewDecision": "pending", + "currentFiles": 8, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "indexesAnchorBgColor", + "component": "indexes-anchor", + "reviewDecision": "pending", + "currentFiles": 8, + "currentNameLocators": { + "bgColorSecondaryContainer": [ + "tdesign-component/lib/src/components/indexes/t_indexes_anchor.dart:56" + ] + }, + "finalPaintVerified": false + }, + { + "name": "indexesAnchorBorderColor", + "component": "indexes-anchor", + "reviewDecision": "pending", + "currentFiles": 8, + "currentNameLocators": { + "componentBorder": [] + }, + "finalPaintVerified": false + }, + { + "name": "indexesAnchorColor", + "component": "indexes-anchor", + "reviewDecision": "pending", + "currentFiles": 8, + "currentNameLocators": { + "textColorPrimary": [ + "tdesign-component/lib/src/components/indexes/t_indexes_anchor.dart:102", + "tdesign-component/lib/src/components/indexes/t_indexes_list.dart:285" + ] + }, + "finalPaintVerified": false + }, + { + "name": "indexesAnchorFont", + "component": "indexes-anchor", + "reviewDecision": "pending", + "currentFiles": 8, + "currentNameLocators": { + "fontBodyMedium": [ + "tdesign-component/lib/src/components/indexes/t_indexes_anchor.dart:98" + ] + }, + "finalPaintVerified": false + }, + { + "name": "indexesAnchorPadding", + "component": "indexes-anchor", + "reviewDecision": "pending", + "currentFiles": 8, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "indexesAnchorTop", + "component": "indexes-anchor", + "reviewDecision": "pending", + "currentFiles": 8, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "indexesSidebarActiveBgColor", + "component": "indexes", + "reviewDecision": "pending", + "currentFiles": 8, + "currentNameLocators": { + "brandColor": [ + "tdesign-component/lib/src/components/indexes/t_indexes_anchor.dart:101", + "tdesign-component/lib/src/components/indexes/t_indexes_list.dart:240", + "tdesign-component/lib/src/components/indexes/t_indexes_list.dart:266" + ] + }, + "finalPaintVerified": false + }, + { + "name": "indexesSidebarActiveColor", + "component": "indexes", + "reviewDecision": "pending", + "currentFiles": 8, + "currentNameLocators": { + "textColorAnti": [ + "tdesign-component/lib/src/components/indexes/t_indexes_list.dart:281" + ] + }, + "finalPaintVerified": false + }, + { + "name": "indexesSidebarColor", + "component": "indexes", + "reviewDecision": "pending", + "currentFiles": 8, + "currentNameLocators": { + "textColorPrimary": [ + "tdesign-component/lib/src/components/indexes/t_indexes_anchor.dart:102", + "tdesign-component/lib/src/components/indexes/t_indexes_list.dart:285" + ] + }, + "finalPaintVerified": false + }, + { + "name": "indexesSidebarFont", + "component": "indexes", + "reviewDecision": "pending", + "currentFiles": 8, + "currentNameLocators": { + "fontBodySmall": [ + "tdesign-component/lib/src/components/indexes/t_indexes_list.dart:116", + "tdesign-component/lib/src/components/indexes/t_indexes_list.dart:118", + "tdesign-component/lib/src/components/indexes/t_indexes_list.dart:275", + "tdesign-component/lib/src/components/indexes/t_indexes_list.dart:277" + ] + }, + "finalPaintVerified": false + }, + { + "name": "indexesSidebarItemSize", + "component": "indexes", + "reviewDecision": "pending", + "currentFiles": 8, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "indexesSidebarRight", + "component": "indexes", + "reviewDecision": "pending", + "currentFiles": 8, + "currentNameLocators": { + "sidebarRight": [ + "tdesign-component/lib/src/components/indexes/t_indexes_list.dart:132", + "tdesign-component/lib/src/components/indexes/t_indexes_theme_data.dart:15", + "tdesign-component/lib/src/components/indexes/t_indexes_theme_data.dart:52", + "tdesign-component/lib/src/components/indexes/t_indexes_theme_data.dart:130", + "tdesign-component/lib/src/components/indexes/t_indexes_theme_data.dart:157", + "tdesign-component/lib/src/components/indexes/t_indexes_theme_data.dart:212" + ] + }, + "finalPaintVerified": false + }, + { + "name": "indexesSidebarTipsBgColor", + "component": "indexes", + "reviewDecision": "pending", + "currentFiles": 8, + "currentNameLocators": { + "brandColorLight": [ + "tdesign-component/lib/src/components/indexes/t_indexes_list.dart:226" + ] + }, + "finalPaintVerified": false + }, + { + "name": "indexesSidebarTipsColor", + "component": "indexes", + "reviewDecision": "pending", + "currentFiles": 8, + "currentNameLocators": { + "brandColor": [ + "tdesign-component/lib/src/components/indexes/t_indexes_anchor.dart:101", + "tdesign-component/lib/src/components/indexes/t_indexes_list.dart:240", + "tdesign-component/lib/src/components/indexes/t_indexes_list.dart:266" + ] + }, + "finalPaintVerified": false + }, + { + "name": "indexesSidebarTipsFont", + "component": "indexes", + "reviewDecision": "pending", + "currentFiles": 8, + "currentNameLocators": { + "fontTitleExtraLarge": [ + "tdesign-component/lib/src/components/indexes/t_indexes_list.dart:127", + "tdesign-component/lib/src/components/indexes/t_indexes_list.dart:234" + ] + }, + "finalPaintVerified": false + }, + { + "name": "indexesSidebarTipsRight", + "component": "indexes", + "reviewDecision": "pending", + "currentFiles": 8, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "indexesSidebarTipsSize", + "component": "indexes", + "reviewDecision": "pending", + "currentFiles": 8, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "inputAlignItems", + "component": "input", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "inputBgColor", + "component": "input", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "bgColorContainer": [ + "tdesign-component/lib/src/components/input/t_input.dart:376" + ] + }, + "finalPaintVerified": false + }, + { + "name": "inputBorderColor", + "component": "input", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "componentStroke": [ + "tdesign-component/lib/src/components/input/t_input.dart:331" + ], + "borderColor": [ + "tdesign-component/lib/src/components/input/t_input.dart:331", + "tdesign-component/lib/src/components/input/t_input.dart:332", + "tdesign-component/lib/src/components/input/t_input.dart:380", + "tdesign-component/lib/src/components/input/t_input_theme_data.dart:20", + "tdesign-component/lib/src/components/input/t_input_theme_data.dart:53", + "tdesign-component/lib/src/components/input/t_input_theme_data.dart:71", + "tdesign-component/lib/src/components/input/t_input_theme_data.dart:81", + "tdesign-component/lib/src/components/input/t_input_theme_data.dart:113" + ] + }, + "finalPaintVerified": false + }, + { + "name": "inputBorderLeftSpace", + "component": "input", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "spacer2": [ + "tdesign-component/lib/src/components/input/t_input.dart:645" + ] + }, + "finalPaintVerified": false + }, + { + "name": "inputBorderRightSpace", + "component": "input", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "inputDefaultTextColor", + "component": "input", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "textColorPrimary": [ + "tdesign-component/lib/src/components/input/t_input.dart:440", + "tdesign-component/lib/src/components/input/t_input.dart:641" + ] + }, + "finalPaintVerified": false + }, + { + "name": "inputDefaultTipsColor", + "component": "input", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "textColorPlaceholder": [ + "tdesign-component/lib/src/components/input/t_input.dart:257", + "tdesign-component/lib/src/components/input/t_input.dart:266", + "tdesign-component/lib/src/components/input/t_input.dart:355", + "tdesign-component/lib/src/components/input/t_input.dart:366", + "tdesign-component/lib/src/components/input/t_input.dart:607", + "tdesign-component/lib/src/components/input/t_input.dart:659" + ] + }, + "finalPaintVerified": false + }, + { + "name": "inputDisabledTextColor", + "component": "input", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "textColorDisabled": [ + "tdesign-component/lib/src/components/input/t_input.dart:245", + "tdesign-component/lib/src/components/input/t_input.dart:258", + "tdesign-component/lib/src/components/input/t_input.dart:267", + "tdesign-component/lib/src/components/input/t_input.dart:440", + "tdesign-component/lib/src/components/input/t_input.dart:608", + "tdesign-component/lib/src/components/input/t_input.dart:642", + "tdesign-component/lib/src/components/input/t_input.dart:660" + ] + }, + "finalPaintVerified": false + }, + { + "name": "inputErrorTextColor", + "component": "input", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "errorColor": [ + "tdesign-component/lib/src/components/input/t_input.dart:354", + "tdesign-component/lib/src/components/input/t_input.dart:364", + "tdesign-component/lib/src/components/input/t_input.dart:396", + "tdesign-component/lib/src/components/input/t_input.dart:446", + "tdesign-component/lib/src/components/input/t_input.dart:453" + ] + }, + "finalPaintVerified": false + }, + { + "name": "inputErrorTipsColor", + "component": "input", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "errorColor": [ + "tdesign-component/lib/src/components/input/t_input.dart:354", + "tdesign-component/lib/src/components/input/t_input.dart:364", + "tdesign-component/lib/src/components/input/t_input.dart:396", + "tdesign-component/lib/src/components/input/t_input.dart:446", + "tdesign-component/lib/src/components/input/t_input.dart:453" + ] + }, + "finalPaintVerified": false + }, + { + "name": "inputLabelMaxWidth", + "component": "input", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "inputLabelMinWidth", + "component": "input", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "inputLabelTextColor", + "component": "input", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "textColorPrimary": [ + "tdesign-component/lib/src/components/input/t_input.dart:440", + "tdesign-component/lib/src/components/input/t_input.dart:641" + ] + }, + "finalPaintVerified": false + }, + { + "name": "inputLabelTextFont", + "component": "input", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "fontBodyLarge": [ + "tdesign-component/lib/src/components/input/t_input.dart:234", + "tdesign-component/lib/src/components/input/t_input.dart:252" + ] + }, + "finalPaintVerified": false + }, + { + "name": "inputPlaceholderTextColor", + "component": "input", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "textColorPlaceholder": [ + "tdesign-component/lib/src/components/input/t_input.dart:257", + "tdesign-component/lib/src/components/input/t_input.dart:266", + "tdesign-component/lib/src/components/input/t_input.dart:355", + "tdesign-component/lib/src/components/input/t_input.dart:366", + "tdesign-component/lib/src/components/input/t_input.dart:607", + "tdesign-component/lib/src/components/input/t_input.dart:659" + ] + }, + "finalPaintVerified": false + }, + { + "name": "inputPlaceholderTextFont", + "component": "input", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "fontBodyLarge": [ + "tdesign-component/lib/src/components/input/t_input.dart:234", + "tdesign-component/lib/src/components/input/t_input.dart:252" + ] + }, + "finalPaintVerified": false + }, + { + "name": "inputPrefixIconColor", + "component": "input", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "textColorPrimary": [ + "tdesign-component/lib/src/components/input/t_input.dart:440", + "tdesign-component/lib/src/components/input/t_input.dart:641" + ] + }, + "finalPaintVerified": false + }, + { + "name": "inputSuccessTextColor", + "component": "input", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "successColor": [ + "tdesign-component/lib/src/components/input/t_input.dart:444", + "tdesign-component/lib/src/components/input/t_input.dart:451" + ] + }, + "finalPaintVerified": false + }, + { + "name": "inputSuccessTipsColor", + "component": "input", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "successColor": [ + "tdesign-component/lib/src/components/input/t_input.dart:444", + "tdesign-component/lib/src/components/input/t_input.dart:451" + ] + }, + "finalPaintVerified": false + }, + { + "name": "inputSuffixIconColor", + "component": "input", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "textColorPlaceholder": [ + "tdesign-component/lib/src/components/input/t_input.dart:257", + "tdesign-component/lib/src/components/input/t_input.dart:266", + "tdesign-component/lib/src/components/input/t_input.dart:355", + "tdesign-component/lib/src/components/input/t_input.dart:366", + "tdesign-component/lib/src/components/input/t_input.dart:607", + "tdesign-component/lib/src/components/input/t_input.dart:659" + ] + }, + "finalPaintVerified": false + }, + { + "name": "inputSuffixTextColor", + "component": "input", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "textColorPrimary": [ + "tdesign-component/lib/src/components/input/t_input.dart:440", + "tdesign-component/lib/src/components/input/t_input.dart:641" + ] + }, + "finalPaintVerified": false + }, + { + "name": "inputVerticalPadding", + "component": "input", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "spacer2": [ + "tdesign-component/lib/src/components/input/t_input.dart:645" + ] + }, + "finalPaintVerified": false + }, + { + "name": "inputWarningTextColor", + "component": "input", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "warningColor": [ + "tdesign-component/lib/src/components/input/t_input.dart:445", + "tdesign-component/lib/src/components/input/t_input.dart:452" + ] + }, + "finalPaintVerified": false + }, + { + "name": "inputWarningTipsColor", + "component": "input", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "warningColor": [ + "tdesign-component/lib/src/components/input/t_input.dart:445", + "tdesign-component/lib/src/components/input/t_input.dart:452" + ] + }, + "finalPaintVerified": false + }, + { + "name": "linkDangerActiveColor", + "component": "link", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": { + "errorColorActive": [ + "tdesign-component/lib/src/components/link/t_link_resolve.dart:38" + ] + }, + "finalPaintVerified": false + }, + { + "name": "linkDangerColor", + "component": "link", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": { + "errorColor": [ + "tdesign-component/lib/src/components/link/t_link_resolve.dart:51" + ] + }, + "finalPaintVerified": false + }, + { + "name": "linkDangerDisabledColor", + "component": "link", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": { + "errorColorDisabled": [ + "tdesign-component/lib/src/components/link/t_link_resolve.dart:28" + ] + }, + "finalPaintVerified": false + }, + { + "name": "linkDefaultActiveColor", + "component": "link", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": { + "brandColorActive": [ + "tdesign-component/lib/src/components/link/t_link_resolve.dart:37" + ] + }, + "finalPaintVerified": false + }, + { + "name": "linkDefaultColor", + "component": "link", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": { + "textColorPrimary": [ + "tdesign-component/lib/src/components/link/t_link_resolve.dart:50" + ] + }, + "finalPaintVerified": false + }, + { + "name": "linkDefaultDisabledColor", + "component": "link", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": { + "textColorDisabled": [ + "tdesign-component/lib/src/components/link/t_link_resolve.dart:27" + ] + }, + "finalPaintVerified": false + }, + { + "name": "linkPrimaryActiveColor", + "component": "link", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": { + "brandColorActive": [ + "tdesign-component/lib/src/components/link/t_link_resolve.dart:37" + ] + }, + "finalPaintVerified": false + }, + { + "name": "linkPrimaryColor", + "component": "link", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": { + "brandColor": [ + "tdesign-component/lib/src/components/link/t_link_resolve.dart:49" + ] + }, + "finalPaintVerified": false + }, + { + "name": "linkPrimaryDisabledColor", + "component": "link", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": { + "brandColorDisabled": [ + "tdesign-component/lib/src/components/link/t_link_resolve.dart:26" + ] + }, + "finalPaintVerified": false + }, + { + "name": "linkSuccessActiveColor", + "component": "link", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": { + "successColorActive": [ + "tdesign-component/lib/src/components/link/t_link_resolve.dart:40" + ] + }, + "finalPaintVerified": false + }, + { + "name": "linkSuccessColor", + "component": "link", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": { + "successColor": [ + "tdesign-component/lib/src/components/link/t_link_resolve.dart:53" + ] + }, + "finalPaintVerified": false + }, + { + "name": "linkSuccessDisabledColor", + "component": "link", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": { + "successColorDisabled": [ + "tdesign-component/lib/src/components/link/t_link_resolve.dart:30" + ] + }, + "finalPaintVerified": false + }, + { + "name": "linkWarningActiveColor", + "component": "link", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": { + "warningColorActive": [ + "tdesign-component/lib/src/components/link/t_link_resolve.dart:39" + ] + }, + "finalPaintVerified": false + }, + { + "name": "linkWarningColor", + "component": "link", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": { + "warningColor": [ + "tdesign-component/lib/src/components/link/t_link_resolve.dart:52" + ] + }, + "finalPaintVerified": false + }, + { + "name": "linkWarningDisabledColor", + "component": "link", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": { + "warningColorDisabled": [ + "tdesign-component/lib/src/components/link/t_link_resolve.dart:29" + ] + }, + "finalPaintVerified": false + }, + { + "name": "loadingColor", + "component": "loading", + "reviewDecision": "pending", + "currentFiles": 6, + "currentNameLocators": { + "brandColor": [ + "tdesign-component/lib/src/components/loading/t_loading.dart:78", + "tdesign-component/lib/src/components/loading/t_circle_indicator.dart:75" + ] + }, + "finalPaintVerified": false + }, + { + "name": "loadingFullBgColor", + "component": "loading", + "reviewDecision": "pending", + "currentFiles": 6, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "loadingTextColor", + "component": "loading", + "reviewDecision": "pending", + "currentFiles": 6, + "currentNameLocators": { + "textColorPrimary": [ + "tdesign-component/lib/src/components/loading/t_loading.dart:77", + "tdesign-component/lib/src/components/loading/t_loading.dart:153" + ], + "textColor": [ + "tdesign-component/lib/src/components/loading/t_loading_theme_data.dart:17", + "tdesign-component/lib/src/components/loading/t_loading_theme_data.dart:30", + "tdesign-component/lib/src/components/loading/t_loading_theme_data.dart:48", + "tdesign-component/lib/src/components/loading/t_loading_theme_data.dart:61", + "tdesign-component/lib/src/components/loading/t_loading_theme_data.dart:67", + "tdesign-component/lib/src/components/loading/t_loading_theme_data.dart:91", + "tdesign-component/lib/src/components/loading/t_loading.dart:153" + ] + }, + "finalPaintVerified": false + }, + { + "name": "loadingTextFont", + "component": "loading", + "reviewDecision": "pending", + "currentFiles": 6, + "currentNameLocators": { + "fontBodySmall": [] + }, + "finalPaintVerified": false + }, + { + "name": "loadingZIndex", + "component": "loading", + "reviewDecision": "pending", + "currentFiles": 6, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "messageBgColor", + "component": "message-item", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "bgColorContainer": [ + "tdesign-component/lib/src/components/message/t_message.dart:579" + ] + }, + "finalPaintVerified": false + }, + { + "name": "messageBorderRadius", + "component": "message-item", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "radiusDefault": [ + "tdesign-component/lib/src/components/message/t_message.dart:583" + ] + }, + "finalPaintVerified": false + }, + { + "name": "messageBoxShadow", + "component": "message-item", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "shadow1": [ + "tdesign-component/lib/src/components/message/t_message.dart:621" + ] + }, + "finalPaintVerified": false + }, + { + "name": "messageCloseIconColor", + "component": "message-item", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "textColorPlaceholder": [ + "tdesign-component/lib/src/components/message/t_message.dart:569" + ] + }, + "finalPaintVerified": false + }, + { + "name": "messageContentColor", + "component": "message-item", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "textColorPrimary": [ + "tdesign-component/lib/src/components/message/t_message.dart:457" + ] + }, + "finalPaintVerified": false + }, + { + "name": "messageErrorColor", + "component": "message-item", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "errorColor": [ + "tdesign-component/lib/src/components/message/t_message.dart:553" + ] + }, + "finalPaintVerified": false + }, + { + "name": "messageInfoColor", + "component": "message-item", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "brandColor": [ + "tdesign-component/lib/src/components/message/t_message.dart:541" + ] + }, + "finalPaintVerified": false + }, + { + "name": "messageSuccessColor", + "component": "message-item", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "successColor": [ + "tdesign-component/lib/src/components/message/t_message.dart:545" + ] + }, + "finalPaintVerified": false + }, + { + "name": "messageWarningColor", + "component": "message-item", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "warningColor": [ + "tdesign-component/lib/src/components/message/t_message.dart:549" + ] + }, + "finalPaintVerified": false + }, + { + "name": "navbarBackground", + "component": "navbar", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "navbarBgColor", + "component": "navbar", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": { + "bgColorContainer": [ + "tdesign-component/lib/src/components/navbar/t_nav_bar.dart:95" + ] + }, + "finalPaintVerified": false + }, + { + "name": "navbarCapsuleBorderColor", + "component": "navbar", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": { + "borderLevel1Color": [] + }, + "finalPaintVerified": false + }, + { + "name": "navbarCapsuleBorderRadius", + "component": "navbar", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "navbarCapsuleHeight", + "component": "navbar", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "navbarCapsuleWidth", + "component": "navbar", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "navbarCenterLeft", + "component": "navbar", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "navbarCenterWidth", + "component": "navbar", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "navbarColor", + "component": "navbar", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": { + "textColorPrimary": [ + "tdesign-component/lib/src/components/navbar/t_nav_bar.dart:89", + "tdesign-component/lib/src/components/navbar/t_nav_bar.dart:92" + ], + "color": [ + "tdesign-component/lib/src/components/navbar/t_nav_bar.dart:117", + "tdesign-component/lib/src/components/navbar/t_nav_bar.dart:123", + "tdesign-component/lib/src/components/navbar/t_nav_bar.dart:131", + "tdesign-component/lib/src/components/navbar/t_nav_bar.dart:175", + "tdesign-component/lib/src/components/navbar/t_nav_bar.dart:214", + "tdesign-component/lib/src/components/navbar/t_nav_bar.dart:268", + "tdesign-component/lib/src/components/navbar/t_nav_bar_theme_data.dart:14", + "tdesign-component/lib/src/components/navbar/t_nav_bar_theme_data.dart:22", + "tdesign-component/lib/src/components/navbar/t_nav_bar_theme_data.dart:192" + ] + }, + "finalPaintVerified": false + }, + { + "name": "navbarHeight", + "component": "navbar", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "navbarLeftArrowSize", + "component": "navbar", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "navbarLeftMaxWidth", + "component": "navbar", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "navbarTitleFont", + "component": "navbar", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": { + "fontTitleLarge": [ + "tdesign-component/lib/src/components/navbar/t_nav_bar.dart:209" + ] + }, + "finalPaintVerified": false + }, + { + "name": "noticeBarErrorBgColor", + "component": "notice-bar", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "errorColor1": [] + }, + "finalPaintVerified": false + }, + { + "name": "noticeBarErrorColor", + "component": "notice-bar", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "errorColor": [ + "tdesign-component/lib/src/components/notice_bar/t_notice_bar_theme_data.dart:95" + ] + }, + "finalPaintVerified": false + }, + { + "name": "noticeBarFontColor", + "component": "notice-bar", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "textColorPrimary": [ + "tdesign-component/lib/src/components/notice_bar/t_notice_bar_theme_data.dart:115" + ] + }, + "finalPaintVerified": false + }, + { + "name": "noticeBarInfoBgColor", + "component": "notice-bar", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "brandColorLight": [ + "tdesign-component/lib/src/components/notice_bar/t_notice_bar_theme_data.dart:104" + ] + }, + "finalPaintVerified": false + }, + { + "name": "noticeBarInfoColor", + "component": "notice-bar", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "brandColor": [ + "tdesign-component/lib/src/components/notice_bar/t_notice_bar_theme_data.dart:103" + ] + }, + "finalPaintVerified": false + }, + { + "name": "noticeBarOperationFontColor", + "component": "notice-bar", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "brandColor": [ + "tdesign-component/lib/src/components/notice_bar/t_notice_bar_theme_data.dart:103" + ] + }, + "finalPaintVerified": false + }, + { + "name": "noticeBarSuccessBgColor", + "component": "notice-bar", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "successColor1": [] + }, + "finalPaintVerified": false + }, + { + "name": "noticeBarSuccessColor", + "component": "notice-bar", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "successColor": [ + "tdesign-component/lib/src/components/notice_bar/t_notice_bar_theme_data.dart:99" + ] + }, + "finalPaintVerified": false + }, + { + "name": "noticeBarSuffixIconColor", + "component": "notice-bar", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "textColorPlaceholder": [] + }, + "finalPaintVerified": false + }, + { + "name": "noticeBarWarningBgColor", + "component": "notice-bar", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "warningColor1": [] + }, + "finalPaintVerified": false + }, + { + "name": "noticeBarWarningColor", + "component": "notice-bar", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "warningColor": [ + "tdesign-component/lib/src/components/notice_bar/t_notice_bar_theme_data.dart:91" + ] + }, + "finalPaintVerified": false + }, + { + "name": "overlayBgColor", + "component": "overlay", + "reviewDecision": "outside-current-flutter-component-surface", + "currentFiles": 0, + "currentNameLocators": { + "maskActive": [] + }, + "finalPaintVerified": false + }, + { + "name": "overlayTransitionDuration", + "component": "overlay", + "reviewDecision": "outside-current-flutter-component-surface", + "currentFiles": 0, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "pickerBgColor", + "component": "picker", + "reviewDecision": "pending", + "currentFiles": 9, + "currentNameLocators": { + "bgColorContainer": [ + "tdesign-component/lib/src/components/picker/multi_wheel_layout.dart:36", + "tdesign-component/lib/src/components/picker/multi_wheel_layout.dart:79", + "tdesign-component/lib/src/components/picker/multi_wheel_layout.dart:80" + ] + }, + "finalPaintVerified": false + }, + { + "name": "pickerBorderRadius", + "component": "picker", + "reviewDecision": "pending", + "currentFiles": 9, + "currentNameLocators": { + "radiusExtraLarge": [] + }, + "finalPaintVerified": false + }, + { + "name": "pickerButtonFont", + "component": "picker", + "reviewDecision": "pending", + "currentFiles": 9, + "currentNameLocators": { + "fontBodyLarge": [ + "tdesign-component/lib/src/components/picker/picker_item.dart:59", + "tdesign-component/lib/src/components/picker/picker_defaults.dart:26" + ] + }, + "finalPaintVerified": false + }, + { + "name": "pickerCancelColor", + "component": "picker", + "reviewDecision": "pending", + "currentFiles": 9, + "currentNameLocators": { + "textColorSecondary": [ + "tdesign-component/lib/src/components/picker/picker_item.dart:71" + ] + }, + "finalPaintVerified": false + }, + { + "name": "pickerConfirmColor", + "component": "picker", + "reviewDecision": "pending", + "currentFiles": 9, + "currentNameLocators": { + "brandColor": [] + }, + "finalPaintVerified": false + }, + { + "name": "pickerIndicatorBgColor", + "component": "picker", + "reviewDecision": "pending", + "currentFiles": 9, + "currentNameLocators": { + "bgColorSecondaryContainer": [ + "tdesign-component/lib/src/components/picker/multi_wheel_layout.dart:50" + ] + }, + "finalPaintVerified": false + }, + { + "name": "pickerIndicatorBorderRadius", + "component": "picker", + "reviewDecision": "pending", + "currentFiles": 9, + "currentNameLocators": { + "radiusDefault": [ + "tdesign-component/lib/src/components/picker/multi_wheel_layout.dart:51" + ] + }, + "finalPaintVerified": false + }, + { + "name": "pickerItemActiveColor", + "component": "picker-item", + "reviewDecision": "pending", + "currentFiles": 9, + "currentNameLocators": { + "textColorPrimary": [ + "tdesign-component/lib/src/components/picker/picker_item.dart:70" + ] + }, + "finalPaintVerified": false + }, + { + "name": "pickerItemColor", + "component": "picker-item", + "reviewDecision": "pending", + "currentFiles": 9, + "currentNameLocators": { + "textColorSecondary": [ + "tdesign-component/lib/src/components/picker/picker_item.dart:71" + ] + }, + "finalPaintVerified": false + }, + { + "name": "pickerItemFontSize", + "component": "picker-item", + "reviewDecision": "pending", + "currentFiles": 9, + "currentNameLocators": { + "fontSizeM": [] + }, + "finalPaintVerified": false + }, + { + "name": "pickerTitleColor", + "component": "picker", + "reviewDecision": "pending", + "currentFiles": 9, + "currentNameLocators": { + "textColorPrimary": [ + "tdesign-component/lib/src/components/picker/picker_item.dart:70" + ] + }, + "finalPaintVerified": false + }, + { + "name": "pickerTitleFont", + "component": "picker", + "reviewDecision": "pending", + "currentFiles": 9, + "currentNameLocators": { + "fontTitleLarge": [] + }, + "finalPaintVerified": false + }, + { + "name": "pickerToolbarHeight", + "component": "picker", + "reviewDecision": "pending", + "currentFiles": 9, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "pickerTransparentColor", + "component": "picker", + "reviewDecision": "pending", + "currentFiles": 9, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "popoverBrandBgColor", + "component": "popover", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": { + "primaryColor1": [] + }, + "finalPaintVerified": false + }, + { + "name": "popoverBrandColor", + "component": "popover", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": { + "primaryColor7": [] + }, + "finalPaintVerified": false + }, + { + "name": "popoverDarkBgColor", + "component": "popover", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": { + "fontGray1": [] + }, + "finalPaintVerified": false + }, + { + "name": "popoverDarkColor", + "component": "popover", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": { + "textColorAnti": [ + "tdesign-component/lib/src/components/popover/t_popover_widget.dart:265" + ] + }, + "finalPaintVerified": false + }, + { + "name": "popoverErrorBgColor", + "component": "popover", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": { + "errorColor1": [] + }, + "finalPaintVerified": false + }, + { + "name": "popoverErrorColor", + "component": "popover", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": { + "errorColor6": [] + }, + "finalPaintVerified": false + }, + { + "name": "popoverLightBgColor", + "component": "popover", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": { + "bgColorContainer": [] + }, + "finalPaintVerified": false + }, + { + "name": "popoverLightColor", + "component": "popover", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": { + "textColorPrimary": [] + }, + "finalPaintVerified": false + }, + { + "name": "popoverPadding", + "component": "popover", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": { + "spacer1": [], + "padding": [ + "tdesign-component/lib/src/components/popover/t_popover_theme_data.dart:13", + "tdesign-component/lib/src/components/popover/t_popover_theme_data.dart:41", + "tdesign-component/lib/src/components/popover/t_popover_theme_data.dart:65", + "tdesign-component/lib/src/components/popover/t_popover_theme_data.dart:84", + "tdesign-component/lib/src/components/popover/t_popover_theme_data.dart:96", + "tdesign-component/lib/src/components/popover/t_popover_theme_data.dart:131", + "tdesign-component/lib/src/components/popover/t_popover_theme_data.dart:132", + "tdesign-component/lib/src/components/popover/t_popover_theme_data.dart:133", + "tdesign-component/lib/src/components/popover/t_popover.dart:515", + "tdesign-component/lib/src/components/popover/t_popover_widget.dart:30", + "tdesign-component/lib/src/components/popover/t_popover_widget.dart:61", + "tdesign-component/lib/src/components/popover/t_popover_widget.dart:134", + "tdesign-component/lib/src/components/popover/t_popover_widget.dart:399", + "tdesign-component/lib/src/components/popover/t_popover_widget.dart:716", + "tdesign-component/lib/src/components/popover/t_popover_widget.dart:717", + "tdesign-component/lib/src/components/popover/t_popover_widget.dart:719", + "tdesign-component/lib/src/components/popover/t_popover_widget.dart:725", + "tdesign-component/lib/src/components/popover/t_popover_widget.dart:748" + ] + }, + "finalPaintVerified": false + }, + { + "name": "popoverSuccessBgColor", + "component": "popover", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": { + "successColor1": [] + }, + "finalPaintVerified": false + }, + { + "name": "popoverSuccessColor", + "component": "popover", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": { + "successColor5": [] + }, + "finalPaintVerified": false + }, + { + "name": "popoverWarningBgColor", + "component": "popover", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": { + "warningColor1": [] + }, + "finalPaintVerified": false + }, + { + "name": "popoverWarningColor", + "component": "popover", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": { + "warningColor5": [] + }, + "finalPaintVerified": false + }, + { + "name": "popupBgColor", + "component": "popup", + "reviewDecision": "pending", + "currentFiles": 12, + "currentNameLocators": { + "bgColorContainer": [ + "tdesign-component/lib/src/components/popup/_popup_shell.dart:27" + ] + }, + "finalPaintVerified": false + }, + { + "name": "popupBorderRadius", + "component": "popup", + "reviewDecision": "pending", + "currentFiles": 12, + "currentNameLocators": { + "radiusExtraLarge": [ + "tdesign-component/lib/src/components/popup/_popup_shell.dart:26" + ] + }, + "finalPaintVerified": false + }, + { + "name": "popupCloseBtnColor", + "component": "popup", + "reviewDecision": "pending", + "currentFiles": 12, + "currentNameLocators": { + "textColorPrimary": [ + "tdesign-component/lib/src/components/popup/_popup_header.dart:64" + ] + }, + "finalPaintVerified": false + }, + { + "name": "popupDistanceTop", + "component": "popup", + "reviewDecision": "pending", + "currentFiles": 12, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "popupTransition", + "component": "popup", + "reviewDecision": "pending", + "currentFiles": 12, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "progressCircleIconSize", + "component": "progress", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "progressCircleInnerBgColor", + "component": "progress", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": { + "bgColorContainer": [ + "tdesign-component/lib/src/components/progress/t_progress.dart:272" + ] + }, + "finalPaintVerified": false + }, + { + "name": "progressCircleLabelFont", + "component": "progress", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": { + "fontTitleExtraLarge": [ + "tdesign-component/lib/src/components/progress/t_progress.dart:283", + "tdesign-component/lib/src/components/progress/t_progress.dart:900" + ] + }, + "finalPaintVerified": false + }, + { + "name": "progressCircleWidth", + "component": "progress", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "progressInnerBgColor", + "component": "progress", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": { + "brandColor": [ + "tdesign-component/lib/src/components/progress/t_progress.dart:406", + "tdesign-component/lib/src/components/progress/t_progress.dart:417", + "tdesign-component/lib/src/components/progress/t_progress.dart:571" + ] + }, + "finalPaintVerified": false + }, + { + "name": "progressLineStrokeWidth", + "component": "progress", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "progressStrokeCircleWidth", + "component": "progress", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "progressStrokePlumpWidth", + "component": "progress", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "progressTrackBgColor", + "component": "progress", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": { + "bgColorComponent": [ + "tdesign-component/lib/src/components/progress/t_progress.dart:377", + "tdesign-component/lib/src/components/progress/t_progress.dart:384", + "tdesign-component/lib/src/components/progress/t_progress.dart:391", + "tdesign-component/lib/src/components/progress/t_progress.dart:399" + ] + }, + "finalPaintVerified": false + }, + { + "name": "pullDownRefreshColor", + "component": "pull-down-refresh", + "reviewDecision": "fallback-widget-verified-visual-pending", + "currentFiles": 3, + "currentNameLocators": { + "textColorPlaceholder": [ + "tdesign-component/lib/src/components/refresh/t_pull_down_refresh.dart:531" + ] + }, + "finalPaintVerified": false + }, + { + "name": "radioBgColor", + "component": "radio", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": { + "bgColorContainer": [ + "tdesign-component/lib/src/components/radio/t_radio.dart:219", + "tdesign-component/lib/src/components/radio/t_radio.dart:249", + "tdesign-component/lib/src/components/radio/t_radio.dart:706" + ] + }, + "finalPaintVerified": false + }, + { + "name": "radioBorderColor", + "component": "radio", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": { + "componentStroke": [] + }, + "finalPaintVerified": false + }, + { + "name": "radioContentCheckedColor", + "component": "radio", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": { + "textColorSecondary": [ + "tdesign-component/lib/src/components/radio/t_radio.dart:410" + ] + }, + "finalPaintVerified": false + }, + { + "name": "radioContentColor", + "component": "radio", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": { + "textColorSecondary": [ + "tdesign-component/lib/src/components/radio/t_radio.dart:410" + ] + }, + "finalPaintVerified": false + }, + { + "name": "radioContentDisabledColor", + "component": "radio", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": { + "textColorDisabled": [ + "tdesign-component/lib/src/components/radio/t_radio.dart:397", + "tdesign-component/lib/src/components/radio/t_radio.dart:409" + ] + }, + "finalPaintVerified": false + }, + { + "name": "radioContentFont", + "component": "radio", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": { + "fontBodyMedium": [ + "tdesign-component/lib/src/components/radio/t_radio.dart:368" + ] + }, + "finalPaintVerified": false + }, + { + "name": "radioFont", + "component": "radio", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": { + "fontBodyLarge": [ + "tdesign-component/lib/src/components/radio/t_radio.dart:359" + ] + }, + "finalPaintVerified": false + }, + { + "name": "radioIconCheckedColor", + "component": "radio", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": { + "brandColor": [ + "tdesign-component/lib/src/components/radio/t_radio.dart:245", + "tdesign-component/lib/src/components/radio/t_radio.dart:328" + ] + }, + "finalPaintVerified": false + }, + { + "name": "radioIconColor", + "component": "radio", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": { + "componentBorder": [ + "tdesign-component/lib/src/components/radio/t_radio.dart:326", + "tdesign-component/lib/src/components/radio/t_radio.dart:329" + ] + }, + "finalPaintVerified": false + }, + { + "name": "radioIconDisabledBgColor", + "component": "radio", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": { + "bgColorComponentDisabled": [ + "tdesign-component/lib/src/components/radio/t_radio.dart:351" + ] + }, + "finalPaintVerified": false + }, + { + "name": "radioIconDisabledColor", + "component": "radio", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": { + "brandColorDisabled": [ + "tdesign-component/lib/src/components/radio/t_radio.dart:247", + "tdesign-component/lib/src/components/radio/t_radio.dart:325" + ] + }, + "finalPaintVerified": false + }, + { + "name": "radioIconSize", + "component": "radio", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "radioLabelCheckedColor", + "component": "radio", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": { + "textColorPrimary": [ + "tdesign-component/lib/src/components/radio/t_radio.dart:398" + ] + }, + "finalPaintVerified": false + }, + { + "name": "radioLabelColor", + "component": "radio", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": { + "textColorPrimary": [ + "tdesign-component/lib/src/components/radio/t_radio.dart:398" + ] + }, + "finalPaintVerified": false + }, + { + "name": "radioLabelDisabledColor", + "component": "radio", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": { + "textColorDisabled": [ + "tdesign-component/lib/src/components/radio/t_radio.dart:397", + "tdesign-component/lib/src/components/radio/t_radio.dart:409" + ] + }, + "finalPaintVerified": false + }, + { + "name": "radioLabelLineHeight", + "component": "radio", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "radioVerticalPadding", + "component": "radio", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": { + "spacer2": [ + "tdesign-component/lib/src/components/radio/t_radio.dart:207", + "tdesign-component/lib/src/components/radio/t_radio.dart:284", + "tdesign-component/lib/src/components/radio/t_radio.dart:290", + "tdesign-component/lib/src/components/radio/t_radio.dart:312", + "tdesign-component/lib/src/components/radio/t_radio.dart:609", + "tdesign-component/lib/src/components/radio/t_radio.dart:695", + "tdesign-component/lib/src/components/radio/t_radio.dart:698" + ] + }, + "finalPaintVerified": false + }, + { + "name": "rateIconScale", + "component": "rate", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "rateSelectedColor", + "component": "rate", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": { + "warningColor": [] + }, + "finalPaintVerified": false + }, + { + "name": "rateTextActiveColor", + "component": "rate", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": { + "textColorPrimary": [ + "tdesign-component/lib/src/components/rate/t_rate.dart:317" + ] + }, + "finalPaintVerified": false + }, + { + "name": "rateTextActiveFontWeight", + "component": "rate", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "rateTextColor", + "component": "rate", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": { + "textColorDisabled": [ + "tdesign-component/lib/src/components/rate/t_rate.dart:312", + "tdesign-component/lib/src/components/rate/t_rate.dart:318", + "tdesign-component/lib/src/components/rate/t_rate.dart:335" + ] + }, + "finalPaintVerified": false + }, + { + "name": "rateTextFontSize", + "component": "rate", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": { + "fontSizeM": [] + }, + "finalPaintVerified": false + }, + { + "name": "rateUnselectedColor", + "component": "rate", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": { + "componentBorder": [] + }, + "finalPaintVerified": false + }, + { + "name": "resultDescriptionColor", + "component": "result", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": { + "textColorSecondary": [ + "tdesign-component/lib/src/components/result/t_result.dart:72" + ] + }, + "finalPaintVerified": false + }, + { + "name": "resultDescriptionFont", + "component": "result", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": { + "fontBodyMedium": [ + "tdesign-component/lib/src/components/result/t_result.dart:73" + ] + }, + "finalPaintVerified": false + }, + { + "name": "resultDescriptionMarginTop", + "component": "result", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": { + "spacer": [] + }, + "finalPaintVerified": false + }, + { + "name": "resultIconDefaultColor", + "component": "result", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": { + "brandColor": [ + "tdesign-component/lib/src/components/result/t_result.dart:131" + ] + }, + "finalPaintVerified": false + }, + { + "name": "resultIconErrorColor", + "component": "result", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": { + "errorColor": [ + "tdesign-component/lib/src/components/result/t_result.dart:125" + ] + }, + "finalPaintVerified": false + }, + { + "name": "resultIconSuccessColor", + "component": "result", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": { + "successColor": [ + "tdesign-component/lib/src/components/result/t_result.dart:113" + ] + }, + "finalPaintVerified": false + }, + { + "name": "resultIconWarningColor", + "component": "result", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": { + "warningColor": [ + "tdesign-component/lib/src/components/result/t_result.dart:119" + ] + }, + "finalPaintVerified": false + }, + { + "name": "resultTitleColor", + "component": "result", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": { + "textColorPrimary": [ + "tdesign-component/lib/src/components/result/t_result.dart:63" + ] + }, + "finalPaintVerified": false + }, + { + "name": "resultTitleFont", + "component": "result", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": { + "fontTitleExtraLarge": [] + }, + "finalPaintVerified": false + }, + { + "name": "resultTitleMarginTop", + "component": "result", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": { + "spacer1": [ + "tdesign-component/lib/src/components/result/t_result.dart:88" + ] + }, + "finalPaintVerified": false + }, + { + "name": "searchActionColor", + "component": "search", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": { + "brandColor": [ + "tdesign-component/lib/src/components/search/t_search_bar.dart:205", + "tdesign-component/lib/src/components/search/t_search_bar.dart:209", + "tdesign-component/lib/src/components/search/t_search_bar.dart:320" + ] + }, + "finalPaintVerified": false + }, + { + "name": "searchBgColor", + "component": "search", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": { + "bgColorSecondaryContainer": [ + "tdesign-component/lib/src/components/search/t_search_bar.dart:175" + ] + }, + "finalPaintVerified": false + }, + { + "name": "searchClearIconColor", + "component": "search", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": { + "textColorPlaceholder": [ + "tdesign-component/lib/src/components/search/t_search_bar.dart:188", + "tdesign-component/lib/src/components/search/t_search_bar.dart:201", + "tdesign-component/lib/src/components/search/t_search_bar.dart:214", + "tdesign-component/lib/src/components/search/t_search_bar.dart:218" + ] + }, + "finalPaintVerified": false + }, + { + "name": "searchClearIconSize", + "component": "search", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "searchDisabledTextColor", + "component": "search", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": { + "textColorDisabled": [ + "tdesign-component/lib/src/components/search/t_search_bar.dart:195", + "tdesign-component/lib/src/components/search/t_search_bar.dart:202", + "tdesign-component/lib/src/components/search/t_search_bar.dart:210", + "tdesign-component/lib/src/components/search/t_search_bar.dart:222", + "tdesign-component/lib/src/components/search/t_search_bar.dart:224" + ] + }, + "finalPaintVerified": false + }, + { + "name": "searchFont", + "component": "search", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": { + "fontBodyLarge": [ + "tdesign-component/lib/src/components/search/t_search_bar.dart:180" + ] + }, + "finalPaintVerified": false + }, + { + "name": "searchHeight", + "component": "search", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": { + "height": [ + "tdesign-component/lib/src/components/search/t_search_bar_theme_data.dart:10", + "tdesign-component/lib/src/components/search/t_search_bar_theme_data.dart:24", + "tdesign-component/lib/src/components/search/t_search_bar_theme_data.dart:59", + "tdesign-component/lib/src/components/search/t_search_bar_theme_data.dart:71", + "tdesign-component/lib/src/components/search/t_search_bar_theme_data.dart:101", + "tdesign-component/lib/src/components/search/t_search_bar.dart:173", + "tdesign-component/lib/src/components/search/t_search_bar.dart:183", + "tdesign-component/lib/src/components/search/t_search_bar.dart:227", + "tdesign-component/lib/src/components/search/t_search_bar.dart:229", + "tdesign-component/lib/src/components/search/t_search_bar.dart:230", + "tdesign-component/lib/src/components/search/t_search_bar.dart:235", + "tdesign-component/lib/src/components/search/t_search_bar.dart:240", + "tdesign-component/lib/src/components/search/t_search_bar.dart:241", + "tdesign-component/lib/src/components/search/t_search_bar.dart:245", + "tdesign-component/lib/src/components/search/t_search_bar.dart:248", + "tdesign-component/lib/src/components/search/t_search_bar.dart:249", + "tdesign-component/lib/src/components/search/t_search_bar.dart:258", + "tdesign-component/lib/src/components/search/t_search_bar.dart:268", + "tdesign-component/lib/src/components/search/t_search_bar.dart:359", + "tdesign-component/lib/src/components/search/t_search_bar.dart:382" + ] + }, + "finalPaintVerified": false + }, + { + "name": "searchIconColor", + "component": "search", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": { + "textColorPlaceholder": [ + "tdesign-component/lib/src/components/search/t_search_bar.dart:188", + "tdesign-component/lib/src/components/search/t_search_bar.dart:201", + "tdesign-component/lib/src/components/search/t_search_bar.dart:214", + "tdesign-component/lib/src/components/search/t_search_bar.dart:218" + ] + }, + "finalPaintVerified": false + }, + { + "name": "searchIconSize", + "component": "search", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "searchLabelColor", + "component": "search", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": { + "textColorPrimary": [ + "tdesign-component/lib/src/components/search/t_search_bar.dart:185", + "tdesign-component/lib/src/components/search/t_search_bar.dart:194" + ] + }, + "finalPaintVerified": false + }, + { + "name": "searchPadding", + "component": "search", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "searchPlaceholderColor", + "component": "search", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": { + "textColorPlaceholder": [ + "tdesign-component/lib/src/components/search/t_search_bar.dart:188", + "tdesign-component/lib/src/components/search/t_search_bar.dart:201", + "tdesign-component/lib/src/components/search/t_search_bar.dart:214", + "tdesign-component/lib/src/components/search/t_search_bar.dart:218" + ] + }, + "finalPaintVerified": false + }, + { + "name": "searchResultHighLightColor", + "component": "search", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": { + "brandColor": [ + "tdesign-component/lib/src/components/search/t_search_bar.dart:205", + "tdesign-component/lib/src/components/search/t_search_bar.dart:209", + "tdesign-component/lib/src/components/search/t_search_bar.dart:320" + ] + }, + "finalPaintVerified": false + }, + { + "name": "searchSquareRadius", + "component": "search", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": { + "radiusDefault": [ + "tdesign-component/lib/src/components/search/t_search_bar.dart:269" + ] + }, + "finalPaintVerified": false + }, + { + "name": "searchTextColor", + "component": "search", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": { + "textColorPrimary": [ + "tdesign-component/lib/src/components/search/t_search_bar.dart:185", + "tdesign-component/lib/src/components/search/t_search_bar.dart:194" + ] + }, + "finalPaintVerified": false + }, + { + "name": "segmentedBgColor", + "component": "segmented", + "reviewDecision": "outside-current-flutter-component-surface", + "currentFiles": 0, + "currentNameLocators": { + "bgColorComponentDisabled": [] + }, + "finalPaintVerified": false + }, + { + "name": "segmentedItemActiveBg", + "component": "segmented", + "reviewDecision": "outside-current-flutter-component-surface", + "currentFiles": 0, + "currentNameLocators": { + "bgColorContainer": [] + }, + "finalPaintVerified": false + }, + { + "name": "segmentedItemActiveColor", + "component": "segmented", + "reviewDecision": "outside-current-flutter-component-surface", + "currentFiles": 0, + "currentNameLocators": { + "brandColor": [] + }, + "finalPaintVerified": false + }, + { + "name": "segmentedItemColor", + "component": "segmented", + "reviewDecision": "outside-current-flutter-component-surface", + "currentFiles": 0, + "currentNameLocators": { + "textColorPrimary": [] + }, + "finalPaintVerified": false + }, + { + "name": "segmentedItemDisabledColor", + "component": "segmented", + "reviewDecision": "outside-current-flutter-component-surface", + "currentFiles": 0, + "currentNameLocators": { + "textColorDisabled": [] + }, + "finalPaintVerified": false + }, + { + "name": "segmentedItemLabelFont", + "component": "segmented", + "reviewDecision": "outside-current-flutter-component-surface", + "currentFiles": 0, + "currentNameLocators": { + "fontBodyMedium": [] + }, + "finalPaintVerified": false + }, + { + "name": "segmentedTransition", + "component": "segmented", + "reviewDecision": "outside-current-flutter-component-surface", + "currentFiles": 0, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "sideBarActiveColor", + "component": "side-bar-item", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": { + "brandColor": [ + "tdesign-component/lib/src/components/sidebar/t_wrap_sidebar_item.dart:181" + ] + }, + "finalPaintVerified": false + }, + { + "name": "sideBarBgColor", + "component": "side-bar", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": { + "bgColorSecondaryContainer": [ + "tdesign-component/lib/src/components/sidebar/t_wrap_sidebar_item.dart:82", + "tdesign-component/lib/src/components/sidebar/t_wrap_sidebar_item.dart:108", + "tdesign-component/lib/src/components/sidebar/t_sidebar.dart:267" + ] + }, + "finalPaintVerified": false + }, + { + "name": "sideBarBorderRadius", + "component": "side-bar-item", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": { + "radiusLarge": [] + }, + "finalPaintVerified": false + }, + { + "name": "sideBarColor", + "component": "side-bar-item", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": { + "textColorPrimary": [ + "tdesign-component/lib/src/components/sidebar/t_wrap_sidebar_item.dart:183" + ] + }, + "finalPaintVerified": false + }, + { + "name": "sideBarDisabledColor", + "component": "side-bar-item", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": { + "textColorDisabled": [ + "tdesign-component/lib/src/components/sidebar/t_wrap_sidebar_item.dart:178" + ] + }, + "finalPaintVerified": false + }, + { + "name": "sideBarFont", + "component": "side-bar-item", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": { + "fontBodyLarge": [ + "tdesign-component/lib/src/components/sidebar/t_wrap_sidebar_item.dart:192" + ] + }, + "finalPaintVerified": false + }, + { + "name": "sideBarHeight", + "component": "side-bar", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "sideBarIconSize", + "component": "side-bar-item", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "sideBarItemHeight", + "component": "side-bar-item", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "sideBarWidth", + "component": "side-bar", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "skeletonAnimationFlashed", + "component": "skeleton", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "skeletonAnimationGradient", + "component": "skeleton", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "skeletonBgColor", + "component": "skeleton", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "bgColorSecondaryContainer": [ + "tdesign-component/lib/src/components/skeleton/t_skeleton.dart:251" + ] + }, + "finalPaintVerified": false + }, + { + "name": "skeletonCircleBorderRadius", + "component": "skeleton", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "radiusCircle": [ + "tdesign-component/lib/src/components/skeleton/t_skeleton.dart:244" + ] + }, + "finalPaintVerified": false + }, + { + "name": "skeletonCircleHeight", + "component": "skeleton", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "skeletonRectBorderRadius", + "component": "skeleton", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "radiusDefault": [ + "tdesign-component/lib/src/components/skeleton/t_skeleton.dart:169" + ] + }, + "finalPaintVerified": false + }, + { + "name": "skeletonRectHeight", + "component": "skeleton", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "skeletonRowSpacing", + "component": "skeleton", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "spacer2": [ + "tdesign-component/lib/src/components/skeleton/t_skeleton.dart:205" + ], + "rowSpacing": [ + "tdesign-component/lib/src/components/skeleton/t_skeleton_layout.dart:19", + "tdesign-component/lib/src/components/skeleton/t_skeleton_layout.dart:26", + "tdesign-component/lib/src/components/skeleton/t_skeleton_theme_data.dart:13", + "tdesign-component/lib/src/components/skeleton/t_skeleton_theme_data.dart:15", + "tdesign-component/lib/src/components/skeleton/t_skeleton_theme_data.dart:31", + "tdesign-component/lib/src/components/skeleton/t_skeleton_theme_data.dart:42", + "tdesign-component/lib/src/components/skeleton/t_skeleton_theme_data.dart:48", + "tdesign-component/lib/src/components/skeleton/t_skeleton_theme_data.dart:72", + "tdesign-component/lib/src/components/skeleton/t_skeleton.dart:204", + "tdesign-component/lib/src/components/skeleton/t_skeleton.dart:205", + "tdesign-component/lib/src/components/skeleton/t_skeleton.dart:225", + "tdesign-component/lib/src/components/skeleton/t_skeleton.dart:226" + ] + }, + "finalPaintVerified": false + }, + { + "name": "skeletonTextBorderRadius", + "component": "skeleton", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "radiusSmall": [ + "tdesign-component/lib/src/components/skeleton/t_skeleton.dart:243" + ] + }, + "finalPaintVerified": false + }, + { + "name": "skeletonTextHeight", + "component": "skeleton", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "sliderActiveColor", + "component": "slider", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": { + "brandColor": [ + "tdesign-component/lib/src/components/slider/t_slider.dart:37" + ] + }, + "finalPaintVerified": false + }, + { + "name": "sliderBarHeight", + "component": "slider", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "sliderBarWidth", + "component": "slider", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "sliderCapsuleBarColor", + "component": "slider", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": { + "bgColorComponent": [ + "tdesign-component/lib/src/components/slider/t_slider.dart:119", + "tdesign-component/lib/src/components/slider/t_slider.dart:125" + ] + }, + "finalPaintVerified": false + }, + { + "name": "sliderCapsuleBarHeihgt", + "component": "slider", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "sliderCapsuleBarWidth", + "component": "slider", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "sliderCapsuleLineHeihgt", + "component": "slider", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "sliderDefaultColor", + "component": "slider", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "sliderDisabledColor", + "component": "slider", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": { + "brandColorDisabled": [ + "tdesign-component/lib/src/components/slider/t_slider.dart:41" + ] + }, + "finalPaintVerified": false + }, + { + "name": "sliderDisabledTextColor", + "component": "slider", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": { + "textColorDisabled": [ + "tdesign-component/lib/src/components/slider/t_slider.dart:136" + ] + }, + "finalPaintVerified": false + }, + { + "name": "sliderDotBgColor", + "component": "slider", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "sliderDotColor", + "component": "slider", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": { + "componentBorder": [ + "tdesign-component/lib/src/components/slider/t_slider.dart:39", + "tdesign-component/lib/src/components/slider/t_slider.dart:46", + "tdesign-component/lib/src/components/slider/t_slider.dart:118", + "tdesign-component/lib/src/components/slider/t_slider.dart:124" + ] + }, + "finalPaintVerified": false + }, + { + "name": "sliderDotDisabledBgColor", + "component": "slider", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "sliderDotDisabledBorderColor", + "component": "slider", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "sliderDotSize", + "component": "slider", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "sliderTextColor", + "component": "slider", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": { + "textColorPrimary": [ + "tdesign-component/lib/src/components/slider/t_slider.dart:88" + ] + }, + "finalPaintVerified": false + }, + { + "name": "stepItemCircleSize", + "component": "step-item", + "reviewDecision": "pending", + "currentFiles": 6, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "stepItemCircleTextFont", + "component": "step-item", + "reviewDecision": "pending", + "currentFiles": 6, + "currentNameLocators": { + "fontBodyMedium": [ + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:108", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:265", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:108", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:275", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:276" + ] + }, + "finalPaintVerified": false + }, + { + "name": "stepItemDefaultCircleBg", + "component": "step-item", + "reviewDecision": "pending", + "currentFiles": 6, + "currentNameLocators": { + "bgColorSecondaryContainer": [] + }, + "finalPaintVerified": false + }, + { + "name": "stepItemDefaultCircleColor", + "component": "step-item", + "reviewDecision": "pending", + "currentFiles": 6, + "currentNameLocators": { + "textColorPlaceholder": [ + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:91", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:92", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:93", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:331", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:91", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:92", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:93", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:298" + ] + }, + "finalPaintVerified": false + }, + { + "name": "stepItemDefaultDotBorderColor", + "component": "step-item", + "reviewDecision": "pending", + "currentFiles": 6, + "currentNameLocators": { + "componentBorder": [ + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:94", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:311", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:94", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:194", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:197" + ] + }, + "finalPaintVerified": false + }, + { + "name": "stepItemDefaultIconColor", + "component": "step-item", + "reviewDecision": "pending", + "currentFiles": 6, + "currentNameLocators": { + "textColorPlaceholder": [ + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:91", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:92", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:93", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:331", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:91", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:92", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:93", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:298" + ] + }, + "finalPaintVerified": false + }, + { + "name": "stepItemDefaultTitleColor", + "component": "step-item", + "reviewDecision": "pending", + "currentFiles": 6, + "currentNameLocators": { + "textColorPlaceholder": [ + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:91", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:92", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:93", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:331", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:91", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:92", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:93", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:298" + ] + }, + "finalPaintVerified": false + }, + { + "name": "stepItemDescriptionColor", + "component": "step-item", + "reviewDecision": "pending", + "currentFiles": 6, + "currentNameLocators": { + "textColorPlaceholder": [ + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:91", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:92", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:93", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:331", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:91", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:92", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:93", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:298" + ] + }, + "finalPaintVerified": false + }, + { + "name": "stepItemDotSize", + "component": "step-item", + "reviewDecision": "pending", + "currentFiles": 6, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "stepItemErrorCircleBg", + "component": "step-item", + "reviewDecision": "pending", + "currentFiles": 6, + "currentNameLocators": { + "errorColor1": [] + }, + "finalPaintVerified": false + }, + { + "name": "stepItemErrorCircleColor", + "component": "step-item", + "reviewDecision": "pending", + "currentFiles": 6, + "currentNameLocators": { + "errorColor": [ + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:136", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:139", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:144", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:136", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:139", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:144" + ] + }, + "finalPaintVerified": false + }, + { + "name": "stepItemErrorDotBorderColor", + "component": "step-item", + "reviewDecision": "pending", + "currentFiles": 6, + "currentNameLocators": { + "errorColor": [ + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:136", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:139", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:144", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:136", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:139", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:144" + ] + }, + "finalPaintVerified": false + }, + { + "name": "stepItemErrorIconColor", + "component": "step-item", + "reviewDecision": "pending", + "currentFiles": 6, + "currentNameLocators": { + "errorColor": [ + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:136", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:139", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:144", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:136", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:139", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:144" + ] + }, + "finalPaintVerified": false + }, + { + "name": "stepItemErrorTitleColor", + "component": "step-item", + "reviewDecision": "pending", + "currentFiles": 6, + "currentNameLocators": { + "errorColor": [ + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:136", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:139", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:144", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:136", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:139", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:144" + ] + }, + "finalPaintVerified": false + }, + { + "name": "stepItemFinishCircleBg", + "component": "step-item", + "reviewDecision": "pending", + "currentFiles": 6, + "currentNameLocators": { + "brandColorLight": [ + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:79", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:79" + ] + }, + "finalPaintVerified": false + }, + { + "name": "stepItemFinishCircleColor", + "component": "step-item", + "reviewDecision": "pending", + "currentFiles": 6, + "currentNameLocators": { + "brandColor": [ + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:58", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:64", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:67", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:70", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:80", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:85", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:101", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:174", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:310", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:58", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:64", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:67", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:70", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:80", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:85", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:101", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:171", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:193", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:196" + ] + }, + "finalPaintVerified": false + }, + { + "name": "stepItemFinishDotBorderColor", + "component": "step-item", + "reviewDecision": "pending", + "currentFiles": 6, + "currentNameLocators": { + "brandColor": [ + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:58", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:64", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:67", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:70", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:80", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:85", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:101", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:174", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:310", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:58", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:64", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:67", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:70", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:80", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:85", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:101", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:171", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:193", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:196" + ] + }, + "finalPaintVerified": false + }, + { + "name": "stepItemFinishIconColor", + "component": "step-item", + "reviewDecision": "pending", + "currentFiles": 6, + "currentNameLocators": { + "brandColor": [ + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:58", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:64", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:67", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:70", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:80", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:85", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:101", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:174", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:310", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:58", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:64", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:67", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:70", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:80", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:85", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:101", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:171", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:193", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:196" + ] + }, + "finalPaintVerified": false + }, + { + "name": "stepItemFinishLineColor", + "component": "step-item", + "reviewDecision": "pending", + "currentFiles": 6, + "currentNameLocators": { + "brandColor": [ + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:58", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:64", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:67", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:70", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:80", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:85", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:101", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:174", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:310", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:58", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:64", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:67", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:70", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:80", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:85", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:101", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:171", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:193", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:196" + ] + }, + "finalPaintVerified": false + }, + { + "name": "stepItemFinishTitleColor", + "component": "step-item", + "reviewDecision": "pending", + "currentFiles": 6, + "currentNameLocators": { + "textColorPrimary": [ + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:81", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:175", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:278", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:81", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:172" + ] + }, + "finalPaintVerified": false + }, + { + "name": "stepItemLineColor", + "component": "step-item", + "reviewDecision": "pending", + "currentFiles": 6, + "currentNameLocators": { + "componentBorder": [ + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:94", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:311", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:94", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:194", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:197" + ] + }, + "finalPaintVerified": false + }, + { + "name": "stepItemProcessCircleBg", + "component": "step-item", + "reviewDecision": "pending", + "currentFiles": 6, + "currentNameLocators": { + "brandColor": [ + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:58", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:64", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:67", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:70", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:80", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:85", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:101", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:174", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:310", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:58", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:64", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:67", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:70", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:80", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:85", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:101", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:171", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:193", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:196" + ] + }, + "finalPaintVerified": false + }, + { + "name": "stepItemProcessCircleColor", + "component": "step-item", + "reviewDecision": "pending", + "currentFiles": 6, + "currentNameLocators": { + "textColorAnti": [ + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:61", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:61" + ] + }, + "finalPaintVerified": false + }, + { + "name": "stepItemProcessDotBorderColor", + "component": "step-item", + "reviewDecision": "pending", + "currentFiles": 6, + "currentNameLocators": { + "brandColor": [ + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:58", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:64", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:67", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:70", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:80", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:85", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:101", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:174", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:310", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:58", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:64", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:67", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:70", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:80", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:85", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:101", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:171", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:193", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:196" + ] + }, + "finalPaintVerified": false + }, + { + "name": "stepItemProcessIconColor", + "component": "step-item", + "reviewDecision": "pending", + "currentFiles": 6, + "currentNameLocators": { + "brandColor": [ + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:58", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:64", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:67", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:70", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:80", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:85", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:101", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:174", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:310", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:58", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:64", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:67", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:70", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:80", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:85", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:101", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:171", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:193", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:196" + ] + }, + "finalPaintVerified": false + }, + { + "name": "stepItemProcessTitleColor", + "component": "step-item", + "reviewDecision": "pending", + "currentFiles": 6, + "currentNameLocators": { + "brandColor": [ + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:58", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:64", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:67", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:70", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:80", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:85", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:101", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:174", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:310", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:58", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:64", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:67", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:70", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:80", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:85", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:101", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:171", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:193", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:196" + ] + }, + "finalPaintVerified": false + }, + { + "name": "stepperBorderColor", + "component": "stepper", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": { + "componentBorder": [ + "tdesign-component/lib/src/components/stepper/t_stepper.dart:596" + ], + "borderColor": [ + "tdesign-component/lib/src/components/stepper/t_stepper_theme_data.dart:27", + "tdesign-component/lib/src/components/stepper/t_stepper_theme_data.dart:80", + "tdesign-component/lib/src/components/stepper/t_stepper_theme_data.dart:106", + "tdesign-component/lib/src/components/stepper/t_stepper_theme_data.dart:122", + "tdesign-component/lib/src/components/stepper/t_stepper_theme_interpolation.dart:80", + "tdesign-component/lib/src/components/stepper/t_stepper_theme_interpolation.dart:81", + "tdesign-component/lib/src/components/stepper/t_stepper_theme_interpolation.dart:82", + "tdesign-component/lib/src/components/stepper/t_stepper_theme_interpolation.dart:110", + "tdesign-component/lib/src/components/stepper/t_stepper_theme_interpolation.dart:124", + "tdesign-component/lib/src/components/stepper/t_stepper.dart:169", + "tdesign-component/lib/src/components/stepper/t_stepper.dart:171", + "tdesign-component/lib/src/components/stepper/t_stepper.dart:350", + "tdesign-component/lib/src/components/stepper/t_stepper.dart:423", + "tdesign-component/lib/src/components/stepper/t_stepper.dart:446", + "tdesign-component/lib/src/components/stepper/t_stepper.dart:463", + "tdesign-component/lib/src/components/stepper/t_stepper.dart:596", + "tdesign-component/lib/src/components/stepper/t_stepper.dart:617" + ] + }, + "finalPaintVerified": false + }, + { + "name": "stepperBorderRadius", + "component": "stepper", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": { + "radiusSmall": [ + "tdesign-component/lib/src/components/stepper/t_stepper.dart:607" + ], + "borderRadius": [ + "tdesign-component/lib/src/components/stepper/t_stepper_theme_data.dart:21", + "tdesign-component/lib/src/components/stepper/t_stepper_theme_data.dart:59", + "tdesign-component/lib/src/components/stepper/t_stepper_theme_data.dart:100", + "tdesign-component/lib/src/components/stepper/t_stepper_theme_data.dart:114", + "tdesign-component/lib/src/components/stepper/t_stepper_theme_interpolation.dart:43", + "tdesign-component/lib/src/components/stepper/t_stepper_theme_interpolation.dart:44", + "tdesign-component/lib/src/components/stepper/t_stepper_theme_interpolation.dart:45", + "tdesign-component/lib/src/components/stepper/t_stepper_theme_interpolation.dart:104", + "tdesign-component/lib/src/components/stepper/t_stepper_theme_interpolation.dart:118", + "tdesign-component/lib/src/components/stepper/t_stepper.dart:184", + "tdesign-component/lib/src/components/stepper/t_stepper.dart:186", + "tdesign-component/lib/src/components/stepper/t_stepper.dart:352", + "tdesign-component/lib/src/components/stepper/t_stepper.dart:355", + "tdesign-component/lib/src/components/stepper/t_stepper.dart:358", + "tdesign-component/lib/src/components/stepper/t_stepper.dart:361", + "tdesign-component/lib/src/components/stepper/t_stepper.dart:364", + "tdesign-component/lib/src/components/stepper/t_stepper.dart:367", + "tdesign-component/lib/src/components/stepper/t_stepper.dart:382", + "tdesign-component/lib/src/components/stepper/t_stepper.dart:409", + "tdesign-component/lib/src/components/stepper/t_stepper.dart:439", + "tdesign-component/lib/src/components/stepper/t_stepper.dart:456", + "tdesign-component/lib/src/components/stepper/t_stepper.dart:605", + "tdesign-component/lib/src/components/stepper/t_stepper.dart:606" + ] + }, + "finalPaintVerified": false + }, + { + "name": "stepperInputColor", + "component": "stepper", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": { + "textColorPrimary": [ + "tdesign-component/lib/src/components/stepper/t_stepper.dart:551" + ] + }, + "finalPaintVerified": false + }, + { + "name": "strokeColor", + "component": "paragraph", + "reviewDecision": "pending", + "currentFiles": 6, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "swiperItemPadding", + "component": "swiper", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "swiperNavBtnBgColor", + "component": "swiper-nav", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "fontGray3": [ + "tdesign-component/lib/src/components/swiper/t_swiper.dart:873", + "tdesign-component/lib/src/components/swiper/t_swiper.dart:875" + ] + }, + "finalPaintVerified": false + }, + { + "name": "swiperNavBtnColor", + "component": "swiper-nav", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "textColorAnti": [ + "tdesign-component/lib/src/components/swiper/t_swiper.dart:800", + "tdesign-component/lib/src/components/swiper/t_swiper.dart:802", + "tdesign-component/lib/src/components/swiper/t_swiper.dart:823", + "tdesign-component/lib/src/components/swiper/t_swiper.dart:874", + "tdesign-component/lib/src/components/swiper/t_swiper.dart:876" + ] + }, + "finalPaintVerified": false + }, + { + "name": "swiperNavBtnSize", + "component": "swiper-nav", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "swiperNavDotActiveColor", + "component": "swiper-nav", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "textColorAnti": [ + "tdesign-component/lib/src/components/swiper/t_swiper.dart:800", + "tdesign-component/lib/src/components/swiper/t_swiper.dart:802", + "tdesign-component/lib/src/components/swiper/t_swiper.dart:823", + "tdesign-component/lib/src/components/swiper/t_swiper.dart:874", + "tdesign-component/lib/src/components/swiper/t_swiper.dart:876" + ] + }, + "finalPaintVerified": false + }, + { + "name": "swiperNavDotColor", + "component": "swiper-nav", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "fontWhite2": [] + }, + "finalPaintVerified": false + }, + { + "name": "swiperNavDotsBarActiveWidth", + "component": "swiper-nav", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "swiperNavDotSize", + "component": "swiper-nav", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "swiperNavFractionBgColor", + "component": "swiper-nav", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "fontGray3": [ + "tdesign-component/lib/src/components/swiper/t_swiper.dart:873", + "tdesign-component/lib/src/components/swiper/t_swiper.dart:875" + ] + }, + "finalPaintVerified": false + }, + { + "name": "swiperNavFractionColor", + "component": "swiper-nav", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "textColorAnti": [ + "tdesign-component/lib/src/components/swiper/t_swiper.dart:800", + "tdesign-component/lib/src/components/swiper/t_swiper.dart:802", + "tdesign-component/lib/src/components/swiper/t_swiper.dart:823", + "tdesign-component/lib/src/components/swiper/t_swiper.dart:874", + "tdesign-component/lib/src/components/swiper/t_swiper.dart:876" + ] + }, + "finalPaintVerified": false + }, + { + "name": "swiperNavFractionFont", + "component": "swiper-nav", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "fontBodySmall": [ + "tdesign-component/lib/src/components/swiper/t_swiper.dart:821" + ] + }, + "finalPaintVerified": false + }, + { + "name": "swiperNavFractionHeight", + "component": "swiper-nav", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "swiperRadius", + "component": "swiper", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "radiusLarge": [ + "tdesign-component/lib/src/components/swiper/t_swiper.dart:582" + ] + }, + "finalPaintVerified": false + }, + { + "name": "switchCheckedColor", + "component": "switch", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": { + "brandColor": [ + "tdesign-component/lib/src/components/switch/t_switch_resolve.dart:60", + "tdesign-component/lib/src/components/switch/t_switch_resolve.dart:72", + "tdesign-component/lib/src/components/switch/t_switch_resolve.dart:73" + ] + }, + "finalPaintVerified": false + }, + { + "name": "switchCheckedDisabledColor", + "component": "switch", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": { + "brandColorDisabled": [ + "tdesign-component/lib/src/components/switch/t_switch_resolve.dart:64" + ] + }, + "finalPaintVerified": false + }, + { + "name": "switchDotDisabledColor", + "component": "switch", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": { + "fontWhite1": [ + "tdesign-component/lib/src/components/switch/t_switch_resolve.dart:70", + "tdesign-component/lib/src/components/switch/t_switch_resolve.dart:72" + ] + }, + "finalPaintVerified": false + }, + { + "name": "switchDotHorizontalMargin", + "component": "switch", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "switchDotLargeSize", + "component": "switch", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "switchDotPlainHorizontalMargin", + "component": "switch", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "switchDotPlainLargeSize", + "component": "switch", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "switchDotPlainSize", + "component": "switch", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "switchDotPlainSmallSize", + "component": "switch", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "switchDotShadow", + "component": "switch", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": { + "shadow1": [] + }, + "finalPaintVerified": false + }, + { + "name": "switchDotSize", + "component": "switch", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "switchDotSmallSize", + "component": "switch", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "switchHeight", + "component": "switch", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "switchIconLargeSize", + "component": "switch", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "switchIconSize", + "component": "switch", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "switchIconSmallSize", + "component": "switch", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "switchLabelCheckedColor", + "component": "switch", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "switchLabelColor", + "component": "switch", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": { + "bgColorSecondaryContainerActive": [ + "tdesign-component/lib/src/components/switch/t_switch_resolve.dart:62" + ] + }, + "finalPaintVerified": false + }, + { + "name": "switchLabelFontSize", + "component": "switch", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": { + "fontSizeBase": [] + }, + "finalPaintVerified": false + }, + { + "name": "switchLabelLargeFontSize", + "component": "switch", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": { + "fontSizeM": [] + }, + "finalPaintVerified": false + }, + { + "name": "switchLabelSmallFontSize", + "component": "switch", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": { + "fontSizeS": [] + }, + "finalPaintVerified": false + }, + { + "name": "switchLargeHeight", + "component": "switch", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "switchLargeRadius", + "component": "switch", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "switchLargeWidth", + "component": "switch", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "switchLoadingColor", + "component": "switch", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": { + "brandColor": [ + "tdesign-component/lib/src/components/switch/t_switch_resolve.dart:60", + "tdesign-component/lib/src/components/switch/t_switch_resolve.dart:72", + "tdesign-component/lib/src/components/switch/t_switch_resolve.dart:73" + ] + }, + "finalPaintVerified": false + }, + { + "name": "switchRadius", + "component": "switch", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "switchSmallHeight", + "component": "switch", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "switchSmallRadius", + "component": "switch", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "switchSmallWidth", + "component": "switch", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "switchUncheckedColor", + "component": "switch", + "reviewDecision": "fallback-widget-verified-visual-pending", + "currentFiles": 5, + "currentNameLocators": { + "bgColorSecondaryContainerActive": [ + "tdesign-component/lib/src/components/switch/t_switch_resolve.dart:62" + ] + }, + "finalPaintVerified": false + }, + { + "name": "switchUncheckedDisabledColor", + "component": "switch", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": { + "bgColorComponentDisabled": [ + "tdesign-component/lib/src/components/switch/t_switch_resolve.dart:66" + ] + }, + "finalPaintVerified": false + }, + { + "name": "switchWidth", + "component": "switch", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "tabBarActiveBg", + "component": "tab-bar-item", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": { + "brandColorLight": [ + "tdesign-component/lib/src/components/tabbar/t_tab_bar.dart:387", + "tdesign-component/lib/src/components/tabbar/t_tab_bar.dart:866", + "tdesign-component/lib/src/components/tabbar/t_tab_bar.dart:1070", + "tdesign-component/lib/src/components/tabbar/t_tab_bar.dart:1071" + ] + }, + "finalPaintVerified": false + }, + { + "name": "tabBarActiveColor", + "component": "tab-bar-item", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": { + "brandColor": [ + "tdesign-component/lib/src/components/tabbar/t_tab_bar.dart:900", + "tdesign-component/lib/src/components/tabbar/t_tab_bar.dart:930", + "tdesign-component/lib/src/components/tabbar/t_tab_bar.dart:944", + "tdesign-component/lib/src/components/tabbar/t_tab_bar.dart:1032" + ] + }, + "finalPaintVerified": false + }, + { + "name": "tabBarBgColor", + "component": "tab-bar", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": { + "bgColorContainer": [ + "tdesign-component/lib/src/components/tabbar/t_tab_bar.dart:390", + "tdesign-component/lib/src/components/tabbar/t_tab_bar.dart:1413" + ] + }, + "finalPaintVerified": false + }, + { + "name": "tabBarBorderColor", + "component": "tab-bar", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "tabBarColor", + "component": "tab-bar-item", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": { + "textColorPrimary": [ + "tdesign-component/lib/src/components/tabbar/t_tab_bar.dart:901", + "tdesign-component/lib/src/components/tabbar/t_tab_bar.dart:931", + "tdesign-component/lib/src/components/tabbar/t_tab_bar.dart:945", + "tdesign-component/lib/src/components/tabbar/t_tab_bar.dart:1033" + ] + }, + "finalPaintVerified": false + }, + { + "name": "tabBarHeight", + "component": "tab-bar-item", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "tabBarHoverBgColor", + "component": "tab-bar-item", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "tabBarRoundShadow", + "component": "tab-bar", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": { + "shadow3": [ + "tdesign-component/lib/src/components/tabbar/t_tab_bar.dart:512", + "tdesign-component/lib/src/components/tabbar/t_tab_bar.dart:1407" + ] + }, + "finalPaintVerified": false + }, + { + "name": "tabBarSpreadBorderColor", + "component": "tab-bar-item", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "tabBarSpreadShadow", + "component": "tab-bar-item", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": { + "shadow3": [ + "tdesign-component/lib/src/components/tabbar/t_tab_bar.dart:512", + "tdesign-component/lib/src/components/tabbar/t_tab_bar.dart:1407" + ] + }, + "finalPaintVerified": false + }, + { + "name": "tabBorderColor", + "component": "tabs", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": { + "componentStroke": [ + "tdesign-component/lib/src/components/tabs/t_tab_bar.dart:77" + ] + }, + "finalPaintVerified": false + }, + { + "name": "tabFont", + "component": "tabs", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": { + "fontBodyMedium": [ + "tdesign-component/lib/src/components/tabs/t_tab_bar.dart:124", + "tdesign-component/lib/src/components/tabs/t_tab_bar.dart:141", + "tdesign-component/lib/src/components/tabs/t_horizontal_tab_bar.dart:58", + "tdesign-component/lib/src/components/tabs/t_horizontal_tab_bar.dart:59", + "tdesign-component/lib/src/components/tabs/t_horizontal_tab_bar.dart:66", + "tdesign-component/lib/src/components/tabs/t_horizontal_tab_bar.dart:67" + ] + }, + "finalPaintVerified": false + }, + { + "name": "tabIconSize", + "component": "tabs", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "tabItemActiveColor", + "component": "tabs", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": { + "brandColor": [ + "tdesign-component/lib/src/components/tabs/t_tab_bar.dart:86", + "tdesign-component/lib/src/components/tabs/t_tab_bar.dart:118", + "tdesign-component/lib/src/components/tabs/t_tab_bar.dart:149", + "tdesign-component/lib/src/components/tabs/t_horizontal_tab_bar.dart:79", + "tdesign-component/lib/src/components/tabs/t_horizontal_tab_bar.dart:569", + "tdesign-component/lib/src/components/tabs/t_horizontal_tab_bar.dart:1665" + ] + }, + "finalPaintVerified": false + }, + { + "name": "tabItemColor", + "component": "tabs", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": { + "textColorPrimary": [ + "tdesign-component/lib/src/components/tabs/t_tab_bar.dart:96", + "tdesign-component/lib/src/components/tabs/t_tab_bar.dart:134", + "tdesign-component/lib/src/components/tabs/t_horizontal_tab_bar.dart:83" + ] + }, + "finalPaintVerified": false + }, + { + "name": "tabItemDisabledColor", + "component": "tabs", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": { + "textColorDisabled": [ + "tdesign-component/lib/src/components/tabs/t_tab.dart:70" + ] + }, + "finalPaintVerified": false + }, + { + "name": "tabItemHeight", + "component": "tabs", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "tabItemTagActiveBg", + "component": "tabs", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": { + "brandColorLight": [] + }, + "finalPaintVerified": false + }, + { + "name": "tabItemTagBg", + "component": "tabs", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": { + "bgColorSecondaryContainer": [ + "tdesign-component/lib/src/components/tabs/t_tab_bar.dart:106", + "tdesign-component/lib/src/components/tabs/t_horizontal_tab_bar.dart:826", + "tdesign-component/lib/src/components/tabs/t_horizontal_tab_bar.dart:844" + ] + }, + "finalPaintVerified": false + }, + { + "name": "tabItemTagHeight", + "component": "tabs", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "tabItemVerticalHeight", + "component": "tabs", + "reviewDecision": "no-frozen-source-consumer-found", + "currentFiles": 5, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "tabItemVerticalWidth", + "component": "tabs", + "reviewDecision": "no-frozen-source-consumer-found", + "currentFiles": 5, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "tableBodyTextColor", + "component": "table", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": { + "textColorPrimary": [ + "tdesign-component/lib/src/components/table/t_table.dart:851" + ] + }, + "finalPaintVerified": false + }, + { + "name": "tableBorderColor", + "component": "table", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": { + "componentBorder": [], + "borderColor": [ + "tdesign-component/lib/src/components/table/t_table_theme_data.dart:18", + "tdesign-component/lib/src/components/table/t_table_theme_data.dart:47", + "tdesign-component/lib/src/components/table/t_table_theme_data.dart:65", + "tdesign-component/lib/src/components/table/t_table_theme_data.dart:75", + "tdesign-component/lib/src/components/table/t_table_theme_data.dart:103", + "tdesign-component/lib/src/components/table/t_table.dart:867" + ] + }, + "finalPaintVerified": false + }, + { + "name": "tableFixedCellBorderColor", + "component": "table", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": { + "componentBorder": [] + }, + "finalPaintVerified": false + }, + { + "name": "tableFontSize", + "component": "table", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": { + "fontBodyMedium": [ + "tdesign-component/lib/src/components/table/t_table.dart:847" + ] + }, + "finalPaintVerified": false + }, + { + "name": "tableHeaderBgColor", + "component": "table", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": { + "bgColorContainer": [ + "tdesign-component/lib/src/components/table/t_table.dart:459", + "tdesign-component/lib/src/components/table/t_table.dart:527", + "tdesign-component/lib/src/components/table/t_table.dart:782" + ] + }, + "finalPaintVerified": false + }, + { + "name": "tableHeaderTextColor", + "component": "table", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": { + "textColorPlaceholder": [ + "tdesign-component/lib/src/components/table/t_table.dart:850", + "tdesign-component/lib/src/components/table/t_table.dart:938" + ] + }, + "finalPaintVerified": false + }, + { + "name": "tableLoadingBgColor", + "component": "table", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "tableRowHeight", + "component": "table", + "reviewDecision": "no-frozen-source-consumer-found", + "currentFiles": 4, + "currentNameLocators": { + "rowHeight": [ + "tdesign-component/lib/src/components/table/t_table_theme_data.dart:12", + "tdesign-component/lib/src/components/table/t_table_theme_data.dart:24", + "tdesign-component/lib/src/components/table/t_table_theme_data.dart:59", + "tdesign-component/lib/src/components/table/t_table_theme_data.dart:69", + "tdesign-component/lib/src/components/table/t_table_theme_data.dart:97", + "tdesign-component/lib/src/components/table/t_table.dart:550", + "tdesign-component/lib/src/components/table/t_table.dart:552", + "tdesign-component/lib/src/components/table/t_table.dart:567", + "tdesign-component/lib/src/components/table/t_table.dart:576", + "tdesign-component/lib/src/components/table/t_table.dart:581", + "tdesign-component/lib/src/components/table/t_table.dart:584", + "tdesign-component/lib/src/components/table/t_table.dart:612", + "tdesign-component/lib/src/components/table/t_table.dart:626", + "tdesign-component/lib/src/components/table/t_table.dart:637", + "tdesign-component/lib/src/components/table/t_table.dart:638", + "tdesign-component/lib/src/components/table/t_table.dart:683", + "tdesign-component/lib/src/components/table/t_table.dart:708" + ] + }, + "finalPaintVerified": false + }, + { + "name": "tableStripeBgColor", + "component": "table", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": { + "bgColorSecondaryContainer": [ + "tdesign-component/lib/src/components/table/t_table.dart:781" + ] + }, + "finalPaintVerified": false + }, + { + "name": "tableTdPadding", + "component": "table", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "tableThPadding", + "component": "table", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "tabNavBgColor", + "component": "tabs", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": { + "bgColorContainer": [ + "tdesign-component/lib/src/components/tabs/t_tab_bar.dart:61", + "tdesign-component/lib/src/components/tabs/t_horizontal_tab_bar.dart:809", + "tdesign-component/lib/src/components/tabs/t_horizontal_tab_bar.dart:814" + ] + }, + "finalPaintVerified": false + }, + { + "name": "tabTrackColor", + "component": "tabs", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": { + "brandColor": [ + "tdesign-component/lib/src/components/tabs/t_tab_bar.dart:86", + "tdesign-component/lib/src/components/tabs/t_tab_bar.dart:118", + "tdesign-component/lib/src/components/tabs/t_tab_bar.dart:149", + "tdesign-component/lib/src/components/tabs/t_horizontal_tab_bar.dart:79", + "tdesign-component/lib/src/components/tabs/t_horizontal_tab_bar.dart:569", + "tdesign-component/lib/src/components/tabs/t_horizontal_tab_bar.dart:1665" + ] + }, + "finalPaintVerified": false + }, + { + "name": "tabTrackRadius", + "component": "tabs", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "tabTrackThickness", + "component": "tabs", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "tabTrackWidth", + "component": "tabs", + "reviewDecision": "pending", + "currentFiles": 5, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "tagCloseIconColor", + "component": "tag", + "reviewDecision": "fallback-widget-verified-visual-pending", + "currentFiles": 4, + "currentNameLocators": { + "textColorPlaceholder": [ + "tdesign-component/lib/src/components/tag/t_tag.dart:219", + "tdesign-component/lib/src/components/tag/t_tag.dart:311" + ] + }, + "finalPaintVerified": false + }, + { + "name": "tagDangerColor", + "component": "tag", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": { + "errorColor": [ + "tdesign-component/lib/src/components/tag/t_tag.dart:255" + ] + }, + "finalPaintVerified": false + }, + { + "name": "tagDangerLightColor", + "component": "tag", + "reviewDecision": "fallback-widget-verified-visual-pending", + "currentFiles": 4, + "currentNameLocators": { + "errorColor1": [ + "tdesign-component/lib/src/components/tag/t_tag.dart:262", + "tdesign-component/lib/src/components/tag/t_tag.dart:266" + ] + }, + "finalPaintVerified": false + }, + { + "name": "tagDefaultColor", + "component": "tag", + "reviewDecision": "fallback-widget-verified-visual-pending", + "currentFiles": 4, + "currentNameLocators": { + "bgColorComponent": [ + "tdesign-component/lib/src/components/tag/t_tag.dart:293", + "tdesign-component/lib/src/components/tag/t_tag.dart:302" + ] + }, + "finalPaintVerified": false + }, + { + "name": "tagDefaultFontColor", + "component": "tag", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": { + "textColorPrimary": [ + "tdesign-component/lib/src/components/tag/t_tag.dart:294", + "tdesign-component/lib/src/components/tag/t_tag.dart:299" + ] + }, + "finalPaintVerified": false + }, + { + "name": "tagDefaultLightColor", + "component": "tag", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": { + "bgColorSecondaryContainer": [ + "tdesign-component/lib/src/components/tag/t_tag.dart:296", + "tdesign-component/lib/src/components/tag/t_tag.dart:301" + ] + }, + "finalPaintVerified": false + }, + { + "name": "tagDisabledBackgroundColor", + "component": "tag", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": { + "bgColorComponentDisabled": [ + "tdesign-component/lib/src/components/tag/t_tag.dart:217" + ] + }, + "finalPaintVerified": false + }, + { + "name": "tagDisabledBorderColor", + "component": "tag", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": { + "componentBorder": [ + "tdesign-component/lib/src/components/tag/t_tag.dart:218", + "tdesign-component/lib/src/components/tag/t_tag.dart:292" + ] + }, + "finalPaintVerified": false + }, + { + "name": "tagDisabledColor", + "component": "tag", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": { + "textColorDisabled": [ + "tdesign-component/lib/src/components/tag/t_tag.dart:216" + ] + }, + "finalPaintVerified": false + }, + { + "name": "tagExtraLargeFont", + "component": "tag", + "reviewDecision": "default-widget-value-verified", + "currentFiles": 4, + "currentNameLocators": { + "fontBodyMedium": [ + "tdesign-component/lib/src/components/tag/t_tag.dart:347", + "tdesign-component/lib/src/components/tag/t_tag.dart:349" + ] + }, + "finalPaintVerified": false + }, + { + "name": "tagExtraLargeIconSize", + "component": "tag", + "reviewDecision": "default-widget-value-verified", + "currentFiles": 4, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "tagExtraLargePadding", + "component": "tag", + "reviewDecision": "default-widget-value-verified", + "currentFiles": 4, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "tagLargeFont", + "component": "tag", + "reviewDecision": "default-widget-value-verified", + "currentFiles": 4, + "currentNameLocators": { + "fontBodyMedium": [ + "tdesign-component/lib/src/components/tag/t_tag.dart:347", + "tdesign-component/lib/src/components/tag/t_tag.dart:349" + ] + }, + "finalPaintVerified": false + }, + { + "name": "tagLargeIconSize", + "component": "tag", + "reviewDecision": "default-widget-value-verified", + "currentFiles": 4, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "tagLargePadding", + "component": "tag", + "reviewDecision": "default-widget-value-verified", + "currentFiles": 4, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "tagMarkBorderRadius", + "component": "tag", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "tagMediumFont", + "component": "tag", + "reviewDecision": "default-widget-value-verified", + "currentFiles": 4, + "currentNameLocators": { + "fontBodySmall": [ + "tdesign-component/lib/src/components/tag/t_tag.dart:353" + ] + }, + "finalPaintVerified": false + }, + { + "name": "tagMediumIconSize", + "component": "tag", + "reviewDecision": "default-widget-value-verified", + "currentFiles": 4, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "tagMediumPadding", + "component": "tag", + "reviewDecision": "default-widget-value-verified", + "currentFiles": 4, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "tagOutlineBgColor", + "component": "tag", + "reviewDecision": "fallback-widget-verified-visual-pending", + "currentFiles": 4, + "currentNameLocators": { + "bgColorContainer": [ + "tdesign-component/lib/src/components/tag/t_tag.dart:234", + "tdesign-component/lib/src/components/tag/t_tag.dart:247", + "tdesign-component/lib/src/components/tag/t_tag.dart:263", + "tdesign-component/lib/src/components/tag/t_tag.dart:280", + "tdesign-component/lib/src/components/tag/t_tag.dart:297" + ] + }, + "finalPaintVerified": false + }, + { + "name": "tagPrimaryColor", + "component": "tag", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": { + "brandColor": [ + "tdesign-component/lib/src/components/tag/t_tag.dart:230", + "tdesign-component/lib/src/components/tag/t_tag.dart:231", + "tdesign-component/lib/src/components/tag/t_tag.dart:236", + "tdesign-component/lib/src/components/tag/t_tag.dart:237" + ] + }, + "finalPaintVerified": false + }, + { + "name": "tagPrimaryLightColor", + "component": "tag", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": { + "brandColorLight": [ + "tdesign-component/lib/src/components/tag/t_tag.dart:233", + "tdesign-component/lib/src/components/tag/t_tag.dart:237" + ] + }, + "finalPaintVerified": false + }, + { + "name": "tagRoundBorderRadius", + "component": "tag", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": { + "radiusRound": [ + "tdesign-component/lib/src/components/tag/t_tag.dart:327", + "tdesign-component/lib/src/components/tag/t_tag.dart:330", + "tdesign-component/lib/src/components/tag/t_tag.dart:331" + ] + }, + "finalPaintVerified": false + }, + { + "name": "tagSmallFont", + "component": "tag", + "reviewDecision": "default-widget-value-verified", + "currentFiles": 4, + "currentNameLocators": { + "fontBodyExtraSmall": [ + "tdesign-component/lib/src/components/tag/t_tag.dart:351" + ] + }, + "finalPaintVerified": false + }, + { + "name": "tagSmallIconSize", + "component": "tag", + "reviewDecision": "default-widget-value-verified", + "currentFiles": 4, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "tagSmallPadding", + "component": "tag", + "reviewDecision": "default-widget-value-verified", + "currentFiles": 4, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "tagSquareBorderRadius", + "component": "tag", + "reviewDecision": "fallback-widget-verified-visual-pending", + "currentFiles": 4, + "currentNameLocators": { + "squareBorderRadius": [ + "tdesign-component/lib/src/components/tag/t_tag_theme_data.dart:39", + "tdesign-component/lib/src/components/tag/t_tag_theme_data.dart:60", + "tdesign-component/lib/src/components/tag/t_tag_theme_data.dart:64", + "tdesign-component/lib/src/components/tag/t_tag_theme_data.dart:101", + "tdesign-component/lib/src/components/tag/t_tag_theme_data.dart:117", + "tdesign-component/lib/src/components/tag/t_tag_theme_data.dart:130", + "tdesign-component/lib/src/components/tag/t_tag_theme_data.dart:139", + "tdesign-component/lib/src/components/tag/t_tag_theme_data.dart:226", + "tdesign-component/lib/src/components/tag/t_tag_theme_data.dart:227", + "tdesign-component/lib/src/components/tag/t_tag_theme_data.dart:228", + "tdesign-component/lib/src/components/tag/t_tag_theme_data.dart:232", + "tdesign-component/lib/src/components/tag/t_tag_theme_data.dart:234", + "tdesign-component/lib/src/components/tag/t_tag_theme_data.dart:257" + ] + }, + "finalPaintVerified": false + }, + { + "name": "tagSuccessColor", + "component": "tag", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": { + "successColor": [ + "tdesign-component/lib/src/components/tag/t_tag_theme_data.dart:26", + "tdesign-component/lib/src/components/tag/t_tag_theme_data.dart:56", + "tdesign-component/lib/src/components/tag/t_tag_theme_data.dart:92", + "tdesign-component/lib/src/components/tag/t_tag_theme_data.dart:113", + "tdesign-component/lib/src/components/tag/t_tag_theme_data.dart:126", + "tdesign-component/lib/src/components/tag/t_tag_theme_data.dart:135", + "tdesign-component/lib/src/components/tag/t_tag_theme_data.dart:195", + "tdesign-component/lib/src/components/tag/t_tag_theme_data.dart:197", + "tdesign-component/lib/src/components/tag/t_tag_theme_data.dart:199", + "tdesign-component/lib/src/components/tag/t_tag_theme_data.dart:253", + "tdesign-component/lib/src/components/tag/t_tag.dart:272", + "tdesign-component/lib/src/components/tag/t_tag.dart:273" + ] + }, + "finalPaintVerified": false + }, + { + "name": "tagSuccessLightColor", + "component": "tag", + "reviewDecision": "fallback-widget-verified-visual-pending", + "currentFiles": 4, + "currentNameLocators": { + "successColor1": [ + "tdesign-component/lib/src/components/tag/t_tag.dart:275", + "tdesign-component/lib/src/components/tag/t_tag.dart:276" + ] + }, + "finalPaintVerified": false + }, + { + "name": "tagWarningColor", + "component": "tag", + "reviewDecision": "pending", + "currentFiles": 4, + "currentNameLocators": { + "warningColor": [ + "tdesign-component/lib/src/components/tag/t_tag.dart:243", + "tdesign-component/lib/src/components/tag/t_tag.dart:244", + "tdesign-component/lib/src/components/tag/t_tag.dart:249", + "tdesign-component/lib/src/components/tag/t_tag.dart:250" + ] + }, + "finalPaintVerified": false + }, + { + "name": "tagWarningLightColor", + "component": "tag", + "reviewDecision": "fallback-widget-verified-visual-pending", + "currentFiles": 4, + "currentNameLocators": { + "warningColor1": [ + "tdesign-component/lib/src/components/tag/t_tag.dart:246", + "tdesign-component/lib/src/components/tag/t_tag.dart:250" + ] + }, + "finalPaintVerified": false + }, + { + "name": "textareaBackgroundColor", + "component": "textarea", + "reviewDecision": "pending", + "currentFiles": 1, + "currentNameLocators": { + "bgColorContainer": [ + "tdesign-component/lib/src/components/textarea/t_textarea.dart:255" + ] + }, + "finalPaintVerified": false + }, + { + "name": "textareaBorderColor", + "component": "textarea", + "reviewDecision": "pending", + "currentFiles": 1, + "currentNameLocators": { + "componentBorder": [ + "tdesign-component/lib/src/components/textarea/t_textarea.dart:202" + ] + }, + "finalPaintVerified": false + }, + { + "name": "textareaBorderRadius", + "component": "textarea", + "reviewDecision": "pending", + "currentFiles": 1, + "currentNameLocators": { + "radiusDefault": [ + "tdesign-component/lib/src/components/textarea/t_textarea.dart:260" + ] + }, + "finalPaintVerified": false + }, + { + "name": "textareaDisabledTextColor", + "component": "textarea", + "reviewDecision": "pending", + "currentFiles": 1, + "currentNameLocators": { + "textColorDisabled": [ + "tdesign-component/lib/src/components/textarea/t_textarea.dart:220" + ] + }, + "finalPaintVerified": false + }, + { + "name": "textareaIndicatorTextColor", + "component": "textarea", + "reviewDecision": "pending", + "currentFiles": 1, + "currentNameLocators": { + "textColorPlaceholder": [] + }, + "finalPaintVerified": false + }, + { + "name": "textareaLabelColor", + "component": "textarea", + "reviewDecision": "pending", + "currentFiles": 1, + "currentNameLocators": { + "textColorPrimary": [ + "tdesign-component/lib/src/components/textarea/t_textarea.dart:219" + ] + }, + "finalPaintVerified": false + }, + { + "name": "textareaPadding", + "component": "textarea", + "reviewDecision": "pending", + "currentFiles": 1, + "currentNameLocators": { + "spacer2": [ + "tdesign-component/lib/src/components/textarea/t_textarea.dart:277" + ] + }, + "finalPaintVerified": false + }, + { + "name": "textareaPlaceholderColor", + "component": "textarea", + "reviewDecision": "pending", + "currentFiles": 1, + "currentNameLocators": { + "textColorPlaceholder": [] + }, + "finalPaintVerified": false + }, + { + "name": "textareaTextColor", + "component": "textarea", + "reviewDecision": "pending", + "currentFiles": 1, + "currentNameLocators": { + "textColorPrimary": [ + "tdesign-component/lib/src/components/textarea/t_textarea.dart:219" + ] + }, + "finalPaintVerified": false + }, + { + "name": "toastBgColor", + "component": "toast", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": { + "maskActive": [] + }, + "finalPaintVerified": false + }, + { + "name": "toastColor", + "component": "toast", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": { + "textColorAnti": [ + "tdesign-component/lib/src/components/toast/t_toast.dart:683", + "tdesign-component/lib/src/components/toast/t_toast.dart:695", + "tdesign-component/lib/src/components/toast/t_toast.dart:727", + "tdesign-component/lib/src/components/toast/t_toast.dart:736", + "tdesign-component/lib/src/components/toast/t_toast.dart:787", + "tdesign-component/lib/src/components/toast/t_toast.dart:801", + "tdesign-component/lib/src/components/toast/t_toast.dart:833", + "tdesign-component/lib/src/components/toast/t_toast.dart:884" + ] + }, + "finalPaintVerified": false + }, + { + "name": "toastColumnIconSize", + "component": "toast", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "toastMaxWidth", + "component": "toast", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": { + "maxWidth": [ + "tdesign-component/lib/src/components/toast/t_toast.dart:664", + "tdesign-component/lib/src/components/toast/t_toast.dart:711", + "tdesign-component/lib/src/components/toast/t_toast.dart:766", + "tdesign-component/lib/src/components/toast/t_toast.dart:771", + "tdesign-component/lib/src/components/toast/t_toast.dart:866", + "tdesign-component/lib/src/components/toast/t_toast_theme_data.dart:26", + "tdesign-component/lib/src/components/toast/t_toast_theme_data.dart:35", + "tdesign-component/lib/src/components/toast/t_toast_theme_data.dart:56", + "tdesign-component/lib/src/components/toast/t_toast_theme_data.dart:72", + "tdesign-component/lib/src/components/toast/t_toast_theme_data.dart:81", + "tdesign-component/lib/src/components/toast/t_toast_theme_data.dart:108" + ] + }, + "finalPaintVerified": false + }, + { + "name": "toastRadius", + "component": "toast", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": { + "radiusDefault": [ + "tdesign-component/lib/src/components/toast/t_toast.dart:673", + "tdesign-component/lib/src/components/toast/t_toast.dart:717", + "tdesign-component/lib/src/components/toast/t_toast.dart:779", + "tdesign-component/lib/src/components/toast/t_toast.dart:829", + "tdesign-component/lib/src/components/toast/t_toast.dart:873" + ] + }, + "finalPaintVerified": false + }, + { + "name": "toastRowIconSize", + "component": "toast", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "treeBgColor", + "component": "tree-select", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": { + "bgColorContainer": [ + "tdesign-component/lib/src/components/tree/t_tree_select.dart:199", + "tdesign-component/lib/src/components/tree/t_tree_select.dart:309", + "tdesign-component/lib/src/components/tree/t_tree_select.dart:385" + ] + }, + "finalPaintVerified": false + }, + { + "name": "treeColumTextColor", + "component": "tree-select", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": { + "textColorPrimary": [ + "tdesign-component/lib/src/components/tree/t_tree_select.dart:388" + ] + }, + "finalPaintVerified": false + }, + { + "name": "treeColumWidth", + "component": "tree-select", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "treeItemActiveColor", + "component": "tree-select", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": { + "brandColor": [ + "tdesign-component/lib/src/components/tree/t_tree_select.dart:386", + "tdesign-component/lib/src/components/tree/t_tree_select.dart:393" + ] + }, + "finalPaintVerified": false + }, + { + "name": "treeItemDisabledColor", + "component": "tree-select", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": { + "textColorDisabled": [ + "tdesign-component/lib/src/components/tree/t_tree_select.dart:398" + ] + }, + "finalPaintVerified": false + }, + { + "name": "treeItemFontSize", + "component": "tree-select", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": { + "fontSizeM": [] + }, + "finalPaintVerified": false + }, + { + "name": "treeItemHeight", + "component": "tree-select", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "treeRootBgColor", + "component": "tree-select", + "reviewDecision": "pending", + "currentFiles": 2, + "currentNameLocators": { + "bgColorSecondaryContainer": [ + "tdesign-component/lib/src/components/tree/t_tree_select.dart:308" + ] + }, + "finalPaintVerified": false + }, + { + "name": "uploadAddBgColor", + "component": "upload", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "bgColorSecondaryContainer": [ + "tdesign-component/lib/src/components/upload/t_upload.dart:280", + "tdesign-component/lib/src/components/upload/t_upload.dart:403", + "tdesign-component/lib/src/components/upload/t_upload.dart:444", + "tdesign-component/lib/src/components/upload/t_upload.dart:670" + ] + }, + "finalPaintVerified": false + }, + { + "name": "uploadAddColor", + "component": "upload", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "textColorPlaceholder": [ + "tdesign-component/lib/src/components/upload/t_upload.dart:284", + "tdesign-component/lib/src/components/upload/t_upload.dart:447", + "tdesign-component/lib/src/components/upload/t_upload.dart:548", + "tdesign-component/lib/src/components/upload/t_upload.dart:663" + ] + }, + "finalPaintVerified": false + }, + { + "name": "uploadAddDisabledBgColor", + "component": "upload", + "reviewDecision": "no-frozen-source-consumer-found", + "currentFiles": 3, + "currentNameLocators": { + "bgColorComponentDisabled": [ + "tdesign-component/lib/src/components/upload/t_upload.dart:282" + ] + }, + "finalPaintVerified": false + }, + { + "name": "uploadAddIconDisabledColor", + "component": "upload", + "reviewDecision": "no-frozen-source-consumer-found", + "currentFiles": 3, + "currentNameLocators": { + "textColorDisabled": [ + "tdesign-component/lib/src/components/upload/t_upload.dart:285", + "tdesign-component/lib/src/components/upload/t_upload.dart:355", + "tdesign-component/lib/src/components/upload/t_upload.dart:432", + "tdesign-component/lib/src/components/upload/t_upload.dart:658", + "tdesign-component/lib/src/components/upload/t_upload.dart:664", + "tdesign-component/lib/src/components/upload/t_upload.dart:728" + ] + }, + "finalPaintVerified": false + }, + { + "name": "uploadAddIconSize", + "component": "upload", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "addIconSize": [ + "tdesign-component/lib/src/components/upload/t_upload_theme_data.dart:31", + "tdesign-component/lib/src/components/upload/t_upload_theme_data.dart:76", + "tdesign-component/lib/src/components/upload/t_upload_theme_data.dart:111", + "tdesign-component/lib/src/components/upload/t_upload_theme_data.dart:133", + "tdesign-component/lib/src/components/upload/t_upload_theme_data.dart:183", + "tdesign-component/lib/src/components/upload/t_upload.dart:300" + ] + }, + "finalPaintVerified": false + }, + { + "name": "uploadBackground", + "component": "upload", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "uploadDisabledMask", + "component": "upload", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "maskDisabled": [] + }, + "finalPaintVerified": false + }, + { + "name": "uploadDragTransitionDuration", + "component": "upload", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "uploadDragTransitionTimingFunction", + "component": "upload", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "uploadDragZIndex", + "component": "upload", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": {}, + "finalPaintVerified": false + }, + { + "name": "uploadRadius", + "component": "upload", + "reviewDecision": "pending", + "currentFiles": 3, + "currentNameLocators": { + "radiusDefault": [ + "tdesign-component/lib/src/components/upload/t_upload.dart:671", + "tdesign-component/lib/src/components/upload/t_upload.dart:838" + ] + }, + "finalPaintVerified": false + } + ] +} diff --git a/specs/058-release-preparation/import-cleanup.json b/specs/058-release-preparation/import-cleanup.json new file mode 100644 index 0000000000..fe8a519b8f --- /dev/null +++ b/specs/058-release-preparation/import-cleanup.json @@ -0,0 +1,162 @@ +[ + { + "file": "lib/src/components/badge/t_badge.dart", + "removedImports": [ + "../../theme/t_colors.dart", + "../../theme/t_fonts.dart", + "../../theme/t_theme.dart", + "../text/t_text.dart" + ], + "beforeSha256": "5e27a955339f9d3c6dbfc5545d8b1bc19749f2244710d50bb83c41d4787369c3", + "afterSha256": "12d782a548187bfdcbaef3cd2601183d1b702ab11ca8be9509cc20fe70473d03", + "nonImportContentIdentical": true + }, + { + "file": "lib/src/components/button/t_button.dart", + "removedImports": [ + "../../theme/t_radius.dart" + ], + "beforeSha256": "6ece9c3983858206086600f864fe2618e191e4a7a905953761caf8c51a7e475d", + "afterSha256": "44c74c64a84b70a4b2f0f3f816a6cab98843c42d7d43136cc25c91108e49e465", + "nonImportContentIdentical": true + }, + { + "file": "lib/src/components/calendar/t_calendar_body.dart", + "removedImports": [ + "../text/t_text.dart" + ], + "beforeSha256": "c421ec23581a83f1a4735f6190c1172dddba158dc283b688c942d87df3956f8d", + "afterSha256": "61a542f48bd16504562b47646c1c23564c4f280a63caf9e70bd4cd975d0a3d34", + "nonImportContentIdentical": true + }, + { + "file": "lib/src/components/calendar/t_calendar_header.dart", + "removedImports": [ + "../text/t_text.dart" + ], + "beforeSha256": "86d3e18f5f7eadecb5a3d7f946c95886ba47883565b7ad043ec0244b7b675ba0", + "afterSha256": "302e20b572330fa69a8658232d0667e75a4da1786b8557255471b88adb3fdd22", + "nonImportContentIdentical": true + }, + { + "file": "lib/src/components/date_time_picker/t_date_time_picker_model.dart", + "removedImports": [ + "t_date_time_picker_internal.dart" + ], + "beforeSha256": "9c17e31a5229662366ebebfbfdc2489ee942f07992d9f4a7f6e6958b199b922b", + "afterSha256": "86d94cca286a468120acce851eb04d79b4ec7d5a1116d2abd262c93e82ddd448", + "nonImportContentIdentical": true + }, + { + "file": "lib/src/components/dialog/t_confirm_dialog.dart", + "removedImports": [ + "../button/t_button_types.dart" + ], + "beforeSha256": "2d47dcdce46695dbc2f1b387e75f346a3b0d7af2eec3534b3e31b33739b0e13f", + "afterSha256": "0f76e26085aaf1efe34935643ec037c1ec658b244a9822f698eec2b5f2e6a280", + "nonImportContentIdentical": true + }, + { + "file": "lib/src/components/indexes/t_indexes_list.dart", + "removedImports": [ + "package:flutter/scheduler.dart", + "../../util/iterable_ext.dart", + "sticky_header/sticky_header_widget.dart", + "t_indexes_anchor.dart" + ], + "beforeSha256": "487368d50ad8d0af108b41538c78577cca3e872a29064e21a0659e0c7f247c1f", + "afterSha256": "54bb80bd2e0859d6ada864a104971ef4ee993409c36369d8480a6e30591767ed", + "nonImportContentIdentical": true + }, + { + "file": "lib/src/components/link/t_link_resolve.dart", + "removedImports": [ + "../../theme/t_spacers.dart" + ], + "beforeSha256": "96b4b12425fef1fb489fc60c59121fcf5a95aeaa76456e2c5a93df1a2e4f99bd", + "afterSha256": "19186939ee93f09d6c32e2612889ea1077cd9daf867decd4dde54c344b4aafb5", + "nonImportContentIdentical": true + }, + { + "file": "lib/src/components/loading/t_activity_indicator.dart", + "removedImports": [ + "../../util/context_extension.dart" + ], + "beforeSha256": "677fcbebf230e7f1348b3360e82376446977621f04b0ccb3f61e08736f6835c8", + "afterSha256": "58275f4985736435b0198a09c1865a2bb60d0f21468b3e7024004a00a69cf385", + "nonImportContentIdentical": true + }, + { + "file": "lib/src/components/loading/t_circle_indicator.dart", + "removedImports": [ + "../../util/context_extension.dart" + ], + "beforeSha256": "2b4bb519ad3cba2686623e6caf31e379721183b3a40ac7cfe9930dc2121faec8", + "afterSha256": "ca0eb207f4a10b369697f8b7de2f2d903349e6f85dcaace87754c50fe5378273", + "nonImportContentIdentical": true + }, + { + "file": "lib/src/components/loading/t_loading.dart", + "removedImports": [ + "../../util/context_extension.dart" + ], + "beforeSha256": "d1ce3f460fb022955ef663aefaf99d78568e35b0e3f762dcbf5fcc16f37faaca", + "afterSha256": "e1062a9a87b051fdcca2a0891e3dbdf300392b12d77765f3296f5e48e6c2d13f", + "nonImportContentIdentical": true + }, + { + "file": "lib/src/components/popup/t_popup.dart", + "removedImports": [ + "../../util/context_extension.dart" + ], + "beforeSha256": "346efd50af783b281e8822b4f91ca760742e3b5fd88a7768bacc0b67b58a8455", + "afterSha256": "0b428c76d216ab79f6e401574a740b1fa45ef40a93dcb854bcd23fe77be08514", + "nonImportContentIdentical": true + }, + { + "file": "lib/src/components/refresh/t_pull_down_refresh_texts.dart", + "removedImports": [ + "package:flutter/widgets.dart" + ], + "beforeSha256": "1e9158e0525a568dfa87b5cfc5eacb38dfb5d59a148836cfc8e4e3ca25aee8e8", + "afterSha256": "577ce6b831a12205e2b141471dd7dff8d4c93318bebf2e36e06eb0ca4a631a7f", + "nonImportContentIdentical": true + }, + { + "file": "lib/src/components/swiper/t_swiper_theme_data.dart", + "removedImports": [ + "t_swiper_types.dart" + ], + "beforeSha256": "fa6dfc65397570d6b846ae5822aefb648d60155fd086e65cca0eea12427f750b", + "afterSha256": "16d92386a189a411d7a380ac5108b7f93d6fc42110260aaf47100a3e10f88f89", + "nonImportContentIdentical": true + }, + { + "file": "lib/src/components/time_counter/t_time_counter.dart", + "removedImports": [ + "../../theme/t_font_family.dart", + "../text/t_text.dart" + ], + "beforeSha256": "98f1d6f1c09f35c03f464ee7de83be0e47b5407f4023a17b49fb7b88cd520ee8", + "afterSha256": "304cbe0b7c084ff44f02a402067fd4f5460fc678f816656a9109ee6c4ac8eda4", + "nonImportContentIdentical": true + }, + { + "file": "lib/src/util/auto_size.dart", + "removedImports": [ + "package:flutter/widgets.dart" + ], + "beforeSha256": "074dfdbe9914016d4ce4da5c096d308f6d861cc3da1fe3aefa664ffe2a7f6fc5", + "afterSha256": "92e8d364c9c679faa4b8c41b065e7fb30980a45a50009d49655a43ad12d250b9", + "nonImportContentIdentical": true + }, + { + "file": "lib/src/util/string_util.dart", + "removedImports": [ + "log.dart" + ], + "beforeSha256": "e07d39dd852fa1536792165feded12d001e92f62c62b2c7c3cc7dc7b863c6d31", + "afterSha256": "332a04e28162425c7b3aa59cc1a733457ff0e47bfc80034945e18c454047e2ce", + "nonImportContentIdentical": true + } +] diff --git a/specs/058-release-preparation/manual-acceptance.md b/specs/058-release-preparation/manual-acceptance.md new file mode 100644 index 0000000000..f50d07b8a4 --- /dev/null +++ b/specs/058-release-preparation/manual-acceptance.md @@ -0,0 +1,31 @@ +# 最终发布候选人工验收表 + +本表是待执行记录,不是已通过声明。先填写候选完整 SHA、构建哈希、Flutter/依赖版本,再在 Android/iOS 真实设备及目标浏览器执行。每批同时覆盖正常与较大系统字号、浅/深色;不是每个场景都能用模拟器或 Widget 测试替代。 + +- 候选 SHA:待最终冻结 +- 构建与依赖记录:见 acceptance.md;源代码/资源/依赖变化后复验受影响场景 +- 设备型号/OS/浏览器:待填写 +- 设计参考版本与字体:待填写 + +| ID | 范围 | 真实操作与预期 | 关联 Spec | Android | iOS | Web | 证据/缺陷 | +|---|---|---|---|---|---|---|---| +| A01 | Input/Textarea | 空内容长按粘贴、中文组合输入、选区、清空、焦点与键盘收起后值保留 | 011-text / 028-stepper / 055 | 未执行 | 未执行 | 未执行 | 待设备/设计/审查证据 | +| A02 | Form/Stepper | 必填和自定义校验、父级接受/拒绝变更、键盘/IME、边界及 disabled | 028-stepper / 039-form / 055 | 未执行 | 未执行 | 未执行 | 待设备/设计/审查证据 | +| B01 | Popup/Popover | 五方向、窄屏、键盘、重复开关、返回键、安全区、卸载后回调 | 001 / 003 / 019 | 未执行 | 未执行 | 未执行 | 待设备/设计/审查证据 | +| B02 | DropdownMenu | 真实滚动锚点跟随、单/多选确认取消、遮罩、非仿射 Impeller 路径 | 001 / 011-dropdown | 未执行 | 未执行 | 未执行 | 待设备/设计/审查证据 | +| B03 | ActionSheet/Dialog | 每个列表/宫格入口、禁用项、连续开关及两个 Popup consumer 扩展场景 | 009 / 055 | 未执行 | 未执行 | 未执行 | 待设备/设计/审查证据 | +| B04 | Message/Toast/NoticeBar | 真实触发、默认/零时长关闭、并发替换、跑马灯循环、触摸/拦截与销毁 | 004 / 005 / 007 | 未执行 | 未执行 | 未执行 | 待设备/设计/审查证据 | +| C01 | Picker/DateTimePicker/Calendar | 日期边界/闰日、拖动和惯性、renderLabel 更新、草稿确认取消与重新打开 | 025 / 026 / 056 | 未执行 | 未执行 | 未执行 | 待设备/设计/审查证据 | +| C02 | Swiper/Refresh/SwipeCell | 翻页索引、后台恢复、拖拽阈值、刷新结束、侧滑确认及页面滚动联动 | 007 / 008 / 039-swiper | 未执行 | 未执行 | 未执行 | 待设备/设计/审查证据 | +| C03 | Upload | 图片/视频、取消、权限拒绝、选择期间禁用和离开页面、结果保留和错误通知 | 012 / 053 | 未执行 | 未执行 | 未执行 | 待设备/设计/审查证据 | +| D01 | 全组件字体/主题 | 正常与1.5/2倍字号、深浅色、混合字体、局部TD主题与显式样式、裁切/布局 | 047 / 048 / 055 | 未执行 | 未执行 | 未执行 | 待设备/设计/审查证据 | +| D02 | 设计对照 | 冻结目标版本、完整375px页签Demo、Search深色与Checkbox卡片逐项对照 | 011-search / 015 / 028-tabbar | 未执行 | 未执行 | 未执行 | 待设备/设计/审查证据 | +| R01 | Review | 取得剩余CNB/人工Review最终head、结论及反馈关闭记录 | 003 / 004 / 012 / 028 / 029 / 030 / 031 / 032 / 045 | 未执行 | 未执行 | 未执行 | 待设备/设计/审查证据 | + +## 记录要求 + +每项填写设备/系统、语言、主题、文字缩放、视口、操作步骤、预期/实际、截图或日志位置。运行通过写明对应候选,不沿用“设备已连接”等历史状态。设计截图与普通回归快照分开;同一场景接受差异须记录裁定依据,不能直接改快照遮蔽问题。 + +当前自动消费测试可证明按钮禁用、局部主题、受控选中、表单校验、选择器草稿协议、Dialog结果、上传列表与Toast生命周期;不证明系统相册权限、真实IME、GPU shader或逐状态设计像素。 + +CI改造不在本轮范围;手工执行受影响检查也不会把未修改的远端门禁自动变成发布保障。 diff --git a/specs/058-release-preparation/plan.md b/specs/058-release-preparation/plan.md new file mode 100644 index 0000000000..ae7461eb28 --- /dev/null +++ b/specs/058-release-preparation/plan.md @@ -0,0 +1,7 @@ +# 计划 + +1. 复核 0.2.7 发布包与 tag,盘点公开导出、构造/成员差异和复杂组件替代方向。 +2. 撰写统一迁移指南、包/站点入口及独立消费用例。 +3. 在最低与较新稳定 SDK 的隔离副本中验证依赖解析、Upload、消费代码和分析;检查原生最低平台要求并构建可用平台。 +4. 跑发布 dry-run、文档同步/站点构建,补充打包后独立消费验证。 +5. 更新当前 Spec 核销和发布验收记录;保持无法取得的人工证据待办,明确第5项不在实施范围。 diff --git a/specs/058-release-preparation/pr-validation.md b/specs/058-release-preparation/pr-validation.md new file mode 100644 index 0000000000..847cf9b27b --- /dev/null +++ b/specs/058-release-preparation/pr-validation.md @@ -0,0 +1,24 @@ +# PR 提交前复核 + +日期:2026-10-15。提交基线:30767a5521e871b1738040f854adf001e50e4774,与本次获取的 origin/develop 一致。 + +## 本次重新执行 + +- 站点主题桥接测试:6项通过。 +- 站点示例/API/页面契约测试:15项通过;57个组件页面映射360个生成示例。 +- `npm run site`:通过。构建有输出目录、上游注解、历史二维码资源引用和大体积 chunk 警告,未据此声明资源逐页浏览通过。 +- 对Spec060机器报告的270个源码/资源/测试/清单/pubspec指纹逐项重算,全部一致;证据校验工具指纹一致。 +- 根、包内和站点三份迁移指南逐字节一致。 +- Spec060未应用候选补丁的 `git apply --check` 通过,仍未应用。 +- 三个新增审计/证据工具语法检查通过;暂存差异排除原始 `.patch` 证据文件后空白检查通过(补丁中空行的上下文前缀为空格,保留原始补丁及其指纹)。 +- CI、集中测试清单和自动CHANGELOG没有修改。 + +## 历史证据的使用边界 + +Spec058~060保留此前各阶段真实执行的验证记录。本次没有重新执行Flutter双版本回归、迁移消费测试、原生构建或Linux Golden;对应270个输入文件与Spec060记录一致。 + +尝试重跑 `node tool/verify_token_difference_resolutions.mjs /private/tmp/tdesign-token-resolution` 时,原临时日志目录已经不存在,因缺少source-low-before.json退出1。此失败不影响已保存的机器报告与源文件,但无法在当前环境重新核验原始日志,不能把它记作本次汇总验证成功。保留该限制供审查,完整重现需按validation-commands.json重新生成双SDK日志和快照。 + +PR为发布准备阶段的草稿:仍有524项运行证据待补、21项实现方案与1项平台几何处置待执行;自定义Ghost视觉及其他适用Linux Golden仍未完成;Spec061仅交付文档结构设计,57个独立迁移章节和自动组件入口尚未实施。此PR不代表正式1.0放行。 + +原始coverage临时目录不加入提交。此前Spec中的“未提交/未推送”是当时验收快照,不改写其历史结论;本轮提交、分支与PR信息以Git记录及PR为准。 diff --git a/specs/058-release-preparation/public-api-diff.json b/specs/058-release-preparation/public-api-diff.json new file mode 100644 index 0000000000..50bec460eb --- /dev/null +++ b/specs/058-release-preparation/public-api-diff.json @@ -0,0 +1,16195 @@ +{ + "oldVersion": "0.2.7", + "candidateCommit": "30767a55 + release preparation", + "scope": "Own explicitly exported declarations and declared public members; inherited APIs and semantic equivalence require manual review. Material/external package exports excluded. candidate is a name-based suggestion, never an automatic replacement.", + "oldCount": 383, + "currentCount": 369, + "currentDeclarations": { + "TActionSheet": { + "kind": "class", + "members": { + "method:showList": "static TPopupHandle showList (BuildContext context, {required List> items, TActionSheetAlign align = TActionSheetAlign.center, String? cancelText, String? subtitle, bool showCancel = true, bool showOverlay = true, bool closeOnOverlayClick = true, bool useSafeArea = true, VoidCallback? onCancel, VoidCallback? onClosed, TActionSheetOnSelected? onSelected})", + "method:showGrid": "static TPopupHandle showGrid (BuildContext context, {required List> items, TActionSheetGridLayout layout = const TActionSheetGridLayout.fixed(), String? cancelText, String? subtitle, bool showCancel = true, bool showOverlay = true, bool closeOnOverlayClick = true, bool useSafeArea = true, double? itemHeight, VoidCallback? onCancel, VoidCallback? onClosed, TActionSheetOnSelected? onSelected})", + "method:showGridSections": "static TPopupHandle showGridSections (BuildContext context, {required List> sections, String? cancelText, bool showCancel = true, bool showOverlay = true, bool closeOnOverlayClick = true, bool useSafeArea = true, double itemWidth = 80, double? itemHeight, VoidCallback? onCancel, VoidCallback? onClosed, TActionSheetOnSelected? onSelected})" + } + }, + "TActionSheetItem": { + "kind": "class", + "members": { + "constructor:new": "const ({required this.value, required this.label, this.textStyle, this.icon, this.badge, this.subtitle, this.disabled = false})", + "field:value": "final T", + "field:label": "final String", + "field:textStyle": "final TextStyle?", + "field:icon": "final Widget?", + "field:badge": "final TBadgeConfig?", + "field:disabled": "final bool", + "field:subtitle": "final String?" + } + }, + "TActionSheetOnSelected": { + "kind": "typedef", + "members": { + "signature": "typedef TActionSheetOnSelected = void Function(TActionSheetItem item);" + } + }, + "TActionSheetGridSection": { + "kind": "class", + "members": { + "constructor:new": "const ({required this.title, required this.items})", + "field:title": "final String", + "field:items": "final List>" + } + }, + "TActionSheetGridMode": { + "kind": "enum", + "members": { + "value:fixed": "fixed", + "value:paged": "paged", + "value:scroll": "scroll" + } + }, + "TActionSheetGridLayout": { + "kind": "class", + "members": { + "constructor:fixed": "const factory ({int count, int rows})", + "constructor:paged": "const factory ({int count, int rows})", + "constructor:scroll": "const factory ({int count, int rows, double? itemMinWidth})", + "field:mode": "final TActionSheetGridMode", + "field:count": "final int", + "field:rows": "final int", + "get:itemMinWidth": "double? itemMinWidth" + } + }, + "TActionSheetAlign": { + "kind": "enum", + "members": { + "value:center": "center", + "value:left": "left", + "value:right": "right" + } + }, + "TActionSheetThemeData": { + "kind": "class", + "members": { + "field:gridItemHeight": "final double?", + "field:barrierColor": "final Color?", + "field:panelRadius": "final double?", + "field:iconSize": "final double?", + "field:gridIconExtent": "final double?", + "field:iconColor": "final Color?", + "constructor:new": "const ({this.gridItemHeight, this.barrierColor, this.panelRadius, this.iconSize, this.gridIconExtent, this.iconColor})", + "method:merge": "TActionSheetThemeData merge (TActionSheetThemeData? other)", + "method:copyWith": "TActionSheetThemeData copyWith ({double? gridItemHeight, Color? barrierColor, double? panelRadius, double? iconSize, double? gridIconExtent, Color? iconColor})", + "method:lerp": "TActionSheetThemeData lerp (ThemeExtension? other, double t)" + } + }, + "TAvatar": { + "kind": "class", + "members": { + "constructor:new": "const ({this.image, this.child, this.size, this.shape, this.fit = BoxFit.cover, this.onTap, super.key})", + "field:image": "final ImageProvider?", + "field:child": "final Widget?", + "field:size": "final TAvatarSize?", + "field:shape": "final TAvatarShape?", + "field:fit": "final BoxFit", + "field:onTap": "final GestureTapCallback?", + "method:build": "Widget build (BuildContext context)" + } + }, + "TAvatarGroup": { + "kind": "class", + "members": { + "constructor:new": "const ({required this.children, this.maxCount, this.overflow, this.spacing, this.cascading = TAvatarGroupCascading.endUp, super.key})", + "field:children": "final List", + "field:maxCount": "final int?", + "field:overflow": "final Widget?", + "field:spacing": "final double?", + "field:cascading": "final TAvatarGroupCascading", + "method:build": "Widget build (BuildContext context)" + } + }, + "TAvatarThemeData": { + "kind": "class", + "members": { + "constructor:new": "const ({this.dimension, this.iconSize, this.circleBorderRadius, this.squareBorderRadius, this.backgroundColor, this.foregroundColor, this.groupSpacing, this.groupBorderWidth, this.groupBorderColor, this.groupShadow})", + "field:dimension": "final double?", + "field:iconSize": "final double?", + "field:squareBorderRadius": "final double?", + "field:circleBorderRadius": "final double?", + "field:backgroundColor": "final Color?", + "field:foregroundColor": "final Color?", + "field:groupSpacing": "final double?", + "field:groupBorderWidth": "final double?", + "field:groupBorderColor": "final Color?", + "field:groupShadow": "final BoxShadow?", + "method:resolveDimension": "double resolveDimension (TAvatarSize size)", + "method:resolveIconSize": "double resolveIconSize (TAvatarSize size)", + "method:resolveCircleBorderRadius": "double resolveCircleBorderRadius (double tokenRadius)", + "method:resolveSquareBorderRadius": "double resolveSquareBorderRadius (double tokenRadius)", + "method:resolveGroupBorderWidth": "double resolveGroupBorderWidth (TAvatarSize size)", + "method:resolveGroupSpacing": "double resolveGroupSpacing (double dimension)", + "method:copyWith": "TAvatarThemeData copyWith ({double? dimension, double? iconSize, double? circleBorderRadius, double? squareBorderRadius, Color? backgroundColor, Color? foregroundColor, double? groupSpacing, double? groupBorderWidth, Color? groupBorderColor, BoxShadow? groupShadow})", + "method:lerp": "TAvatarThemeData lerp (TAvatarThemeData? other, double t)" + } + }, + "TAvatarSize": { + "kind": "enum", + "members": { + "value:large": "large", + "value:medium": "medium", + "value:small": "small" + } + }, + "TAvatarShape": { + "kind": "enum", + "members": { + "value:circle": "circle", + "value:square": "square" + } + }, + "TAvatarGroupCascading": { + "kind": "enum", + "members": { + "value:startUp": "startUp", + "value:endUp": "endUp" + } + }, + "TBackTop": { + "kind": "class", + "members": { + "constructor:new": "const ({Key? key, this.controller, this.onPressed, this.showText = false, this.visibilityOffset = 200, this.tooltip, this.shape = TBackTopShape.circle, this.colorPreset = TBackTopColorPreset.light})", + "field:controller": "final ScrollController?", + "field:onPressed": "final VoidCallback?", + "field:showText": "final bool", + "field:visibilityOffset": "final double", + "field:tooltip": "final String?", + "field:shape": "final TBackTopShape", + "field:colorPreset": "final TBackTopColorPreset", + "method:createState": "State createState ()" + } + }, + "TBackTopShape": { + "kind": "enum", + "members": { + "value:circle": "circle", + "value:halfCircle": "halfCircle" + } + }, + "TBackTopColorPreset": { + "kind": "enum", + "members": { + "value:light": "light", + "value:dark": "dark" + } + }, + "TBackTopThemeData": { + "kind": "class", + "members": { + "field:backgroundColor": "final Color?", + "field:borderColor": "final Color?", + "field:contentColor": "final Color?", + "field:roundSize": "final double?", + "field:halfCircleHeight": "final double?", + "field:halfCircleMinWidth": "final double?", + "field:iconSize": "final double?", + "field:borderWidth": "final double?", + "field:halfCircleHorizontalPadding": "final double?", + "field:contentGap": "final double?", + "field:textStyle": "final TextStyle?", + "constructor:new": "const ({this.backgroundColor, this.borderColor, this.contentColor, this.roundSize, this.halfCircleHeight, this.halfCircleMinWidth, this.iconSize, this.borderWidth, this.halfCircleHorizontalPadding, this.contentGap, this.textStyle})", + "method:copyWith": "TBackTopThemeData copyWith ({Color? backgroundColor, Color? borderColor, Color? contentColor, double? roundSize, double? halfCircleHeight, double? halfCircleMinWidth, double? iconSize, double? borderWidth, double? halfCircleHorizontalPadding, double? contentGap, TextStyle? textStyle})", + "method:lerp": "TBackTopThemeData lerp (ThemeExtension? other, double t)" + } + }, + "TBadgeVariant": { + "kind": "enum", + "members": { + "value:circle": "circle", + "value:dot": "dot", + "value:square": "square", + "value:bubble": "bubble", + "value:ribbonRight": "ribbonRight", + "value:ribbonLeft": "ribbonLeft", + "value:triangleRight": "triangleRight", + "value:triangleLeft": "triangleLeft" + } + }, + "TBadgeSize": { + "kind": "enum", + "members": { + "value:medium": "medium", + "value:large": "large" + } + }, + "TBadgeConfig": { + "kind": "class", + "members": { + "constructor:new": "const ({this.label = '0', this.variant = TBadgeVariant.circle, this.size = TBadgeSize.medium, this.border = false, this.showZero = true, this.alignment, this.offset})", + "constructor:custom": "const ({required this.badge, this.alignment, this.offset})", + "field:label": "final String?", + "field:variant": "final TBadgeVariant", + "field:size": "final TBadgeSize", + "field:border": "final bool", + "field:showZero": "final bool", + "field:alignment": "final AlignmentGeometry?", + "field:offset": "final Offset?", + "field:badge": "final Widget?", + "get:isCustom": "bool isCustom" + } + }, + "TBadge": { + "kind": "class", + "members": { + "constructor:new": "const ({super.key, this.label = '0', this.variant = TBadgeVariant.circle, this.size = TBadgeSize.medium, this.border = false, this.showZero = true, this.alignment, this.offset, this.child, this.onTap})", + "constructor:custom": "const ({super.key, required this.badge, this.alignment, this.offset, this.child, this.onTap})", + "field:label": "final String?", + "field:variant": "final TBadgeVariant", + "field:size": "final TBadgeSize", + "field:border": "final bool", + "field:showZero": "final bool", + "field:alignment": "final AlignmentGeometry?", + "field:offset": "final Offset?", + "field:child": "final Widget?", + "field:badge": "final Widget?", + "field:onTap": "final GestureTapCallback?", + "method:build": "Widget build (BuildContext context)" + } + }, + "TBadgeThemeData": { + "kind": "class", + "members": { + "constructor:new": "const ({this.backgroundColor, this.dotSize, this.labelHeight, this.textStyle, this.padding, this.borderColor, this.borderWidth})", + "field:backgroundColor": "final Color?", + "field:dotSize": "final double?", + "field:labelHeight": "final double?", + "field:textStyle": "final TextStyle?", + "field:padding": "final EdgeInsetsGeometry?", + "field:borderColor": "final Color?", + "field:borderWidth": "final double?", + "method:copyWith": "TBadgeThemeData copyWith ({Color? backgroundColor, double? dotSize, double? labelHeight, TextStyle? textStyle, EdgeInsetsGeometry? padding, Color? borderColor, double? borderWidth})", + "method:lerp": "TBadgeThemeData lerp (ThemeExtension? other, double t)" + } + }, + "TButton": { + "kind": "class", + "members": { + "constructor:new": "const ({Key? key, this.child, this.size, this.variant, this.shape = TButtonShape.rectangle, this.colorPreset, this.icon, this.iconPosition = TButtonIconPosition.left, this.onPressed, this.onLongPress, this.style})", + "field:child": "final Widget?", + "field:size": "final TButtonSize?", + "field:variant": "final TButtonVariant?", + "field:shape": "final TButtonShape", + "field:colorPreset": "final TButtonColorPreset?", + "field:icon": "final Widget?", + "field:iconPosition": "final TButtonIconPosition", + "field:onPressed": "final VoidCallback?", + "field:onLongPress": "final VoidCallback?", + "field:style": "final ButtonStyle?", + "method:createState": "State createState ()" + } + }, + "TButtonThemeData": { + "kind": "class", + "members": { + "field:iconTextSpacing": "final double?", + "field:gradient": "final Gradient?", + "constructor:new": "const ({this.iconTextSpacing, this.gradient})", + "method:copyWith": "TButtonThemeData copyWith ({double? iconTextSpacing, Gradient? gradient})", + "method:lerp": "TButtonThemeData lerp (ThemeExtension? other, double t)" + } + }, + "TButtonSize": { + "kind": "enum", + "members": { + "value:large": "large", + "value:medium": "medium", + "value:small": "small", + "value:extraSmall": "extraSmall" + } + }, + "TButtonVariant": { + "kind": "enum", + "members": { + "value:fill": "fill", + "value:outline": "outline", + "value:text": "text", + "value:ghost": "ghost" + } + }, + "TButtonColorPreset": { + "kind": "enum", + "members": { + "value:defaultTheme": "defaultTheme", + "value:primary": "primary", + "value:danger": "danger", + "value:light": "light" + } + }, + "TButtonIconPosition": { + "kind": "enum", + "members": { + "value:left": "left", + "value:right": "right" + } + }, + "TButtonShape": { + "kind": "enum", + "members": { + "value:rectangle": "rectangle", + "value:round": "round", + "value:square": "square", + "value:circle": "circle" + } + }, + "TCalendar": { + "kind": "class", + "members": { + "constructor:new": "({super.key, required this.value, this.firstDayOfWeek = TCalendarFirstDayOfWeek.sunday, DateTime? minDate, DateTime? maxDate, this.variant = TCalendarVariant.single, this.onChanged, this.onMonthChanged, TCalendarMonthTitleBuilder? monthTitleBuilder, this.weekdayNames, this.cellBuilder, this.subtitleBuilder, this.animateTo = false, this.anchorDate})", + "field:firstDayOfWeek": "final TCalendarFirstDayOfWeek", + "field:minDate": "final DateTime", + "field:maxDate": "final DateTime", + "field:variant": "final TCalendarVariant", + "field:value": "final List", + "field:onChanged": "final ValueChanged>?", + "field:onMonthChanged": "final ValueChanged?", + "field:monthTitleBuilder": "final TCalendarMonthTitleBuilder", + "field:weekdayNames": "final List?", + "field:cellBuilder": "final TCalendarCellBuilder?", + "field:subtitleBuilder": "final TCalendarSubtitleBuilder?", + "field:animateTo": "final bool", + "field:anchorDate": "final DateTime?", + "method:createState": "_TCalendarState createState ()" + } + }, + "TCalendarSubtitleContext": { + "kind": "class", + "members": { + "constructor:new": "const ({required this.date, required this.selectType})", + "field:date": "final DateTime", + "field:selectType": "final DateSelectType" + } + }, + "TCalendarSubtitleBuilder": { + "kind": "typedef", + "members": { + "signature": "typedef TCalendarSubtitleBuilder = Widget? Function(BuildContext context, TCalendarSubtitleContext subtitleContext);" + } + }, + "TCalendarCellBuilder": { + "kind": "typedef", + "members": { + "signature": "typedef TCalendarCellBuilder = Widget? Function(BuildContext context, TCalendarCellModel cell);" + } + }, + "TCalendarMonthTitleBuilder": { + "kind": "typedef", + "members": { + "signature": "typedef TCalendarMonthTitleBuilder = Widget Function(BuildContext context, DateTime monthDate);" + } + }, + "TCalendarCellModel": { + "kind": "class", + "members": { + "constructor:new": "const ({required this.date, required this.selectType, required this.isLastDayOfMonth})", + "field:date": "final DateTime", + "field:selectType": "final DateSelectType", + "field:isLastDayOfMonth": "final bool" + } + }, + "DateSelectType": { + "kind": "enum", + "members": { + "value:selected": "selected", + "value:disabled": "disabled", + "value:start": "start", + "value:centre": "centre", + "value:end": "end", + "value:empty": "empty" + } + }, + "TCalendarFirstDayOfWeek": { + "kind": "enum", + "members": { + "value:sunday": "sunday", + "value:monday": "monday", + "value:tuesday": "tuesday", + "value:wednesday": "wednesday", + "value:thursday": "thursday", + "value:friday": "friday", + "value:saturday": "saturday" + } + }, + "TCalendarThemeData": { + "kind": "class", + "members": { + "field:height": "final double?", + "field:decoration": "final BoxDecoration?", + "field:weekdayStyle": "final TextStyle?", + "field:monthTitleStyle": "final TextStyle?", + "field:dayStyle": "final TextStyle?", + "field:todayDayStyle": "final TextStyle?", + "field:cellDecoration": "final BoxDecoration?", + "field:subtitleStyle": "final TextStyle?", + "field:cellHeight": "final double?", + "field:monthTitleHeight": "final double?", + "field:verticalGap": "final double?", + "field:bodyPadding": "final double?", + "field:weekdayGap": "final double?", + "field:centreColor": "final Color?", + "constructor:new": "const ({this.height, this.decoration, this.weekdayStyle, this.monthTitleStyle, this.dayStyle, this.todayDayStyle, this.cellDecoration, this.subtitleStyle, this.cellHeight, this.monthTitleHeight, this.verticalGap, this.bodyPadding, this.weekdayGap, this.centreColor})", + "method:copyWith": "TCalendarThemeData copyWith ({double? height, BoxDecoration? decoration, TextStyle? weekdayStyle, TextStyle? monthTitleStyle, TextStyle? dayStyle, TextStyle? todayDayStyle, BoxDecoration? cellDecoration, TextStyle? subtitleStyle, double? cellHeight, double? monthTitleHeight, double? verticalGap, double? bodyPadding, double? weekdayGap, Color? centreColor})", + "method:lerp": "TCalendarThemeData lerp (ThemeExtension? other, double t)" + } + }, + "TCalendarVariant": { + "kind": "enum", + "members": { + "value:single": "single", + "value:multiple": "multiple", + "value:range": "range" + } + }, + "TCascaderOption": { + "kind": "class", + "members": { + "constructor:new": "const ({required this.label, required this.value, this.children = const [], this.disabled = false})", + "field:label": "final String", + "field:value": "final Object?", + "field:children": "final List", + "field:disabled": "final bool" + } + }, + "TCascader": { + "kind": "class", + "members": { + "constructor:new": "const ({super.key, required this.options, required this.value, this.onChanged, this.variant = TCascaderVariant.tab, this.placeholder = '请选择', this.subtitles = const []})", + "field:options": "final List", + "field:value": "final List", + "field:onChanged": "final ValueChanged>?", + "field:variant": "final TCascaderVariant", + "field:placeholder": "final String", + "field:subtitles": "final List", + "method:createState": "State createState ()" + } + }, + "TCascaderVariant": { + "kind": "enum", + "members": { + "value:step": "step", + "value:tab": "tab" + } + }, + "TCascaderThemeData": { + "kind": "class", + "members": { + "constructor:new": "const ({this.height, this.backgroundColor, this.borderRadius, this.textStyle, this.activeTextStyle, this.disabledTextStyle, this.indicatorColor, this.navigationPadding, this.dividerColor})", + "field:height": "final double?", + "field:backgroundColor": "final Color?", + "field:borderRadius": "final double?", + "field:textStyle": "final TextStyle?", + "field:activeTextStyle": "final TextStyle?", + "field:disabledTextStyle": "final TextStyle?", + "field:indicatorColor": "final Color?", + "field:navigationPadding": "final EdgeInsetsGeometry?", + "field:dividerColor": "final Color?", + "method:copyWith": "TCascaderThemeData copyWith ({double? height, Color? backgroundColor, double? borderRadius, TextStyle? textStyle, TextStyle? activeTextStyle, TextStyle? disabledTextStyle, Color? indicatorColor, EdgeInsetsGeometry? navigationPadding, Color? dividerColor})", + "method:lerp": "TCascaderThemeData lerp (ThemeExtension? other, double t)" + } + }, + "TCellAlign": { + "kind": "enum", + "members": { + "value:top": "top", + "value:center": "center", + "value:bottom": "bottom" + } + }, + "TCell": { + "kind": "class", + "members": { + "constructor:new": "const ({this.title, this.subtitle, this.prefix, this.image, this.note, this.trailing, this.arrow = false, this.required = false, this.align, this.enableFeedback = true, this.onTap, this.onLongPress, super.key})", + "field:title": "final Widget?", + "field:subtitle": "final Widget?", + "field:prefix": "final Widget?", + "field:image": "final Widget?", + "field:note": "final Widget?", + "field:trailing": "final Widget?", + "field:arrow": "final bool", + "field:required": "final bool", + "field:align": "final TCellAlign?", + "field:enableFeedback": "final bool", + "field:onTap": "final GestureTapCallback?", + "field:onLongPress": "final GestureLongPressCallback?", + "method:createState": "State createState ()" + } + }, + "TCellGroupBuilder": { + "kind": "typedef", + "members": { + "signature": "typedef TCellGroupBuilder = Widget Function(BuildContext context, TCell cell, int index);" + } + }, + "TCellGroup": { + "kind": "class", + "members": { + "constructor:new": "const ({required this.cells, this.title, this.variant, this.builder, this.scrollable = false, super.key})", + "field:cells": "final List", + "field:title": "final Widget?", + "field:variant": "final TCellGroupVariant?", + "field:builder": "final TCellGroupBuilder?", + "field:scrollable": "final bool", + "method:build": "Widget build (BuildContext context)" + } + }, + "TCellGroupVariant": { + "kind": "enum", + "members": { + "value:standard": "standard", + "value:card": "card" + } + }, + "TCellThemeData": { + "kind": "class", + "members": { + "constructor:new": "const ({this.titleStyle, this.requiredStyle, this.subtitleStyle, this.noteStyle, this.groupTitleStyle, this.arrowColor, this.borderColor, this.groupBorderColor, this.backgroundColor, this.pressedColor, this.padding, this.cardBorderRadius, this.cardPadding, this.titlePadding, this.showBottomBorder, this.height, this.groupBordered, this.showLastDivider})", + "field:titleStyle": "final TextStyle?", + "field:requiredStyle": "final TextStyle?", + "field:subtitleStyle": "final TextStyle?", + "field:noteStyle": "final TextStyle?", + "field:groupTitleStyle": "final TextStyle?", + "field:arrowColor": "final Color?", + "field:borderColor": "final Color?", + "field:groupBorderColor": "final Color?", + "field:backgroundColor": "final Color?", + "field:pressedColor": "final Color?", + "field:padding": "final EdgeInsetsGeometry?", + "field:cardBorderRadius": "final BorderRadius?", + "field:cardPadding": "final EdgeInsetsGeometry?", + "field:titlePadding": "final EdgeInsetsGeometry?", + "field:showBottomBorder": "final bool?", + "field:height": "final double?", + "field:groupBordered": "final bool?", + "field:showLastDivider": "final bool?", + "method:copyWith": "TCellThemeData copyWith ({TextStyle? titleStyle, TextStyle? requiredStyle, TextStyle? subtitleStyle, TextStyle? noteStyle, TextStyle? groupTitleStyle, Color? arrowColor, Color? borderColor, Color? groupBorderColor, Color? backgroundColor, Color? pressedColor, EdgeInsetsGeometry? padding, BorderRadius? cardBorderRadius, EdgeInsetsGeometry? cardPadding, EdgeInsetsGeometry? titlePadding, bool? showBottomBorder, double? height, bool? groupBordered, bool? showLastDivider})", + "method:lerp": "TCellThemeData lerp (TCellThemeData? other, double t)" + } + }, + "TContentDirection": { + "kind": "enum", + "members": { + "value:left": "left", + "value:right": "right" + } + }, + "TCheckboxSize": { + "kind": "enum", + "members": { + "value:small": "small", + "value:medium": "medium", + "value:large": "large" + } + }, + "TCheckboxIconBuilder": { + "kind": "typedef", + "members": { + "signature": "typedef TCheckboxIconBuilder = Widget Function(BuildContext context, bool? value, bool disabled);" + } + }, + "TCheckbox": { + "kind": "class", + "members": { + "constructor:new": "const ({super.key, required this.value, this.onChanged, this.title, this.subTitle, this.size = TCheckboxSize.medium, this.cardMode = false, this.showDivider = true, this.contentDirection = TContentDirection.right, this.titleMaxLines = 3, this.subTitleMaxLines = 5, this.customIconBuilder})", + "field:value": "final bool?", + "field:onChanged": "final ValueChanged?", + "field:title": "final String?", + "field:subTitle": "final String?", + "field:size": "final TCheckboxSize", + "field:cardMode": "final bool", + "field:showDivider": "final bool", + "field:contentDirection": "final TContentDirection", + "field:titleMaxLines": "final int", + "field:subTitleMaxLines": "final int", + "field:customIconBuilder": "final TCheckboxIconBuilder?", + "method:build": "Widget build (BuildContext context)" + } + }, + "TCheckboxOption": { + "kind": "class", + "members": { + "constructor:new": "const ({required this.value, required this.label, this.subTitle, this.disabled = false})", + "field:value": "final T", + "field:label": "final String", + "field:subTitle": "final String?", + "field:disabled": "final bool" + } + }, + "TCheckboxOptionBuilder": { + "kind": "typedef", + "members": { + "signature": "typedef TCheckboxOptionBuilder = Widget Function(BuildContext context, TCheckboxOption option, bool selected, bool disabled);" + } + }, + "TCheckboxGroup": { + "kind": "class", + "members": { + "constructor:new": "const ({super.key, required this.value, required this.options, this.onChanged, this.direction = Axis.vertical, this.columns = 1, this.cardMode = false, this.showDivider = true, this.contentDirection = TContentDirection.right, this.size = TCheckboxSize.medium, this.maxSelected, this.onMaxSelected, this.itemBuilder})", + "field:value": "final List", + "field:options": "final List>", + "field:onChanged": "final ValueChanged>?", + "field:direction": "final Axis", + "field:columns": "final int", + "field:cardMode": "final bool", + "field:showDivider": "final bool", + "field:contentDirection": "final TContentDirection", + "field:size": "final TCheckboxSize", + "field:maxSelected": "final int?", + "field:onMaxSelected": "final VoidCallback?", + "field:itemBuilder": "final TCheckboxOptionBuilder?", + "method:build": "Widget build (BuildContext context)" + } + }, + "TCheckboxThemeData": { + "kind": "class", + "members": { + "field:variant": "final TCheckboxVariant?", + "field:selectColor": "final Color?", + "field:disableColor": "final Color?", + "field:titleColor": "final Color?", + "field:subTitleColor": "final Color?", + "field:backgroundColor": "final Color?", + "field:spacing": "final double?", + "field:insetSpacing": "final double?", + "field:customSpace": "final EdgeInsetsGeometry?", + "constructor:new": "const ({this.variant, this.selectColor, this.disableColor, this.titleColor, this.subTitleColor, this.backgroundColor, this.spacing, this.insetSpacing, this.customSpace})", + "method:copyWith": "TCheckboxThemeData copyWith ({TCheckboxVariant? variant, Color? selectColor, Color? disableColor, Color? titleColor, Color? subTitleColor, Color? backgroundColor, double? spacing, double? insetSpacing, EdgeInsetsGeometry? customSpace})", + "method:lerp": "TCheckboxThemeData lerp (ThemeExtension? other, double t)" + } + }, + "TCheckboxVariant": { + "kind": "enum", + "members": { + "value:circle": "circle", + "value:square": "square", + "value:check": "check" + } + }, + "TCollapse": { + "kind": "class", + "members": { + "constructor:new": "const ({required this.children, required this.value, this.mode = TCollapseMode.multiple, this.variant, this.animationDuration, this.onChanged, Key? key})", + "field:children": "final List>", + "field:mode": "final TCollapseMode", + "field:variant": "final TCollapseVariant?", + "field:animationDuration": "final Duration?", + "field:value": "final List", + "field:onChanged": "final ValueChanged>?", + "method:createState": "State> createState ()" + } + }, + "TCollapsePanelBuilder": { + "kind": "typedef", + "members": { + "signature": "typedef TCollapsePanelBuilder = Widget Function(BuildContext context, bool isExpanded);" + } + }, + "TCollapsePanel": { + "kind": "class", + "members": { + "constructor:new": "const ({required this.value, required this.headerBuilder, required this.body, this.bodyHeight, this.key, this.disabled = false, this.placement = TCollapsePlacement.bottom, this.semanticsLabel, this.leadingBuilder, this.trailingBuilder, this.expandIconBuilder = _defaultExpandIconBuilder, this.backgroundColor})", + "field:key": "final Key?", + "field:headerBuilder": "final ExpansionPanelHeaderBuilder", + "field:body": "final Widget", + "field:bodyHeight": "final double?", + "field:disabled": "final bool", + "field:placement": "final TCollapsePlacement", + "field:semanticsLabel": "final String?", + "field:backgroundColor": "final Color?", + "field:value": "final T", + "field:leadingBuilder": "final TCollapsePanelBuilder?", + "field:trailingBuilder": "final TCollapsePanelBuilder?", + "field:expandIconBuilder": "final TCollapsePanelBuilder?" + } + }, + "TCollapseThemeData": { + "kind": "class", + "members": { + "field:backgroundColor": "final Color?", + "field:elevation": "final double?", + "field:headerTextStyle": "final TextStyle?", + "field:contentTextStyle": "final TextStyle?", + "field:disabledHeaderTextStyle": "final TextStyle?", + "field:iconColor": "final Color?", + "field:disabledIconColor": "final Color?", + "field:dividerColor": "final Color?", + "field:contentPadding": "final EdgeInsetsGeometry?", + "field:cardMargin": "final EdgeInsetsGeometry?", + "field:cardBorderRadius": "final BorderRadius?", + "constructor:new": "const ({this.backgroundColor, this.elevation, this.headerTextStyle, this.contentTextStyle, this.disabledHeaderTextStyle, this.iconColor, this.disabledIconColor, this.dividerColor, this.contentPadding, this.cardMargin, this.cardBorderRadius})", + "method:copyWith": "TCollapseThemeData copyWith ({Color? backgroundColor, double? elevation, TextStyle? headerTextStyle, TextStyle? contentTextStyle, TextStyle? disabledHeaderTextStyle, Color? iconColor, Color? disabledIconColor, Color? dividerColor, EdgeInsetsGeometry? contentPadding, EdgeInsetsGeometry? cardMargin, BorderRadius? cardBorderRadius})", + "method:lerp": "TCollapseThemeData lerp (ThemeExtension? other, double t)" + } + }, + "TCollapseMode": { + "kind": "enum", + "members": { + "value:multiple": "multiple", + "value:accordion": "accordion" + } + }, + "TCollapseVariant": { + "kind": "enum", + "members": { + "value:block": "block", + "value:card": "card" + } + }, + "TCollapsePlacement": { + "kind": "enum", + "members": { + "value:bottom": "bottom", + "value:top": "top" + } + }, + "TDateTimePicker": { + "kind": "class", + "members": { + "constructor:new": "({super.key, required this.value, DateTimePickerMode? mode, this.renderLabel, this.start, this.end, this.steps, this.showWeek = false, this.onChanged})", + "field:value": "final TDateTimePickerValue", + "field:mode": "final DateTimePickerMode", + "field:renderLabel": "final DateTimePickerRenderLabel?", + "field:start": "final TDateTimePickerValue?", + "field:end": "final TDateTimePickerValue?", + "field:steps": "final DateTimePickerSteps?", + "field:showWeek": "final bool", + "field:onChanged": "final void Function(TDateTimePickerValue result)?", + "method:createState": "State createState ()" + } + }, + "DateTimeColumn": { + "kind": "enum", + "members": { + "value:year": "year", + "value:month": "month", + "value:day": "day", + "value:hour": "hour", + "value:minute": "minute", + "value:second": "second" + } + }, + "DateMode": { + "kind": "enum", + "members": { + "value:year": "year", + "value:month": "month", + "value:date": "date", + "value:monthDay": "monthDay" + } + }, + "TimeMode": { + "kind": "enum", + "members": { + "value:hour": "hour", + "value:minute": "minute", + "value:second": "second" + } + }, + "DateTimePickerSteps": { + "kind": "class", + "members": { + "constructor:new": "const ({this.year, this.month, this.day, this.hour, this.minute, this.second})", + "field:year": "final int?", + "field:month": "final int?", + "field:day": "final int?", + "field:hour": "final int?", + "field:minute": "final int?", + "field:second": "final int?", + "method:forColumn": "int forColumn (DateTimeColumn column)", + "method:==": "bool == (Object other)", + "get:hashCode": "int hashCode" + } + }, + "DateTimePickerRenderLabel": { + "kind": "typedef", + "members": { + "signature": "typedef DateTimePickerRenderLabel = String? Function(DateTimeColumn column, int value);" + } + }, + "DateTimePickerMode": { + "kind": "class", + "members": { + "constructor:new": "factory ({DateMode? dateMode, TimeMode? timeMode})", + "field:dateMode": "final DateMode?", + "field:timeMode": "final TimeMode?", + "method:==": "bool == (Object other)", + "get:hashCode": "int hashCode" + } + }, + "TDateTimePickerValue": { + "kind": "class", + "members": { + "constructor:new": "const ({this.year, this.month, this.day, this.hour, this.minute, this.second})", + "field:year": "final int?", + "field:month": "final int?", + "field:day": "final int?", + "field:hour": "final int?", + "field:minute": "final int?", + "field:second": "final int?", + "method:toDateTime": "DateTime toDateTime ({DateTime? fallback})", + "method:==": "bool == (Object other)", + "get:hashCode": "int hashCode", + "method:toString": "String toString ()" + } + }, + "TDialogActionRole": { + "kind": "enum", + "members": { + "value:normal": "normal", + "value:primary": "primary", + "value:destructive": "destructive" + } + }, + "TDialogAction": { + "kind": "class", + "members": { + "constructor:new": "const ({required this.child, this.result, this.onPressed, this.role = TDialogActionRole.normal, this.closeOnPressed = true, this.disabled = false, this.variant, this.colorPreset, this.style})", + "field:child": "final Widget", + "field:result": "final Object?", + "field:onPressed": "final VoidCallback?", + "field:role": "final TDialogActionRole", + "field:closeOnPressed": "final bool", + "field:disabled": "final bool", + "field:variant": "final TButtonVariant?", + "field:colorPreset": "final TButtonColorPreset?", + "field:style": "final ButtonStyle?" + } + }, + "TDialog": { + "kind": "class", + "members": { + "constructor:new": "const ({super.key, this.title, this.content, this.actions = const [], this.actionsWidget, this.showCloseButton = false, this.closeButtonResult, this.semanticLabel, EdgeInsetsGeometry? actionsPadding, double? actionSpacing})", + "field:title": "final Widget?", + "field:content": "final Widget?", + "field:actions": "final List", + "field:actionsWidget": "final Widget?", + "field:showCloseButton": "final bool", + "field:closeButtonResult": "final Object?", + "field:semanticLabel": "final String?", + "field:actionsPadding": "final EdgeInsetsGeometry?", + "field:actionSpacing": "final double?", + "method:show": "static Future show (BuildContext context, {required Widget dialog, bool barrierDismissible = false, T? barrierResult, Color? barrierColor, bool useRootNavigator = true, bool useSafeArea = true})", + "method:build": "Widget build (BuildContext context)" + } + }, + "TConfirmDialog": { + "kind": "class", + "members": { + "constructor:new": "const ({super.key, this.title, this.content, this.contentWidget, this.buttonText, this.onPressed, this.result = true, this.closeOnPressed = true, this.showCloseButton = false, this.closeButtonResult, this.semanticLabel, this.buttonStyle})", + "field:title": "final String?", + "field:content": "final String?", + "field:contentWidget": "final Widget?", + "field:buttonText": "final String?", + "field:onPressed": "final VoidCallback?", + "field:result": "final Object?", + "field:closeOnPressed": "final bool", + "field:showCloseButton": "final bool", + "field:closeButtonResult": "final Object?", + "field:semanticLabel": "final String?", + "field:buttonStyle": "final ButtonStyle?", + "method:build": "Widget build (BuildContext context)" + } + }, + "TDialogThemeData": { + "kind": "class", + "members": { + "field:backgroundColor": "final Color?", + "field:shape": "final ShapeBorder?", + "field:elevation": "final double?", + "field:titleTextStyle": "final TextStyle?", + "field:contentTextStyle": "final TextStyle?", + "field:contentPadding": "final EdgeInsetsGeometry?", + "field:maxHeight": "final double?", + "field:width": "final double?", + "constructor:new": "const ({this.backgroundColor, this.shape, this.elevation, this.titleTextStyle, this.contentTextStyle, this.contentPadding, this.maxHeight, this.width})", + "method:merge": "TDialogThemeData merge (TDialogThemeData? other)", + "method:copyWith": "TDialogThemeData copyWith ({Color? backgroundColor, ShapeBorder? shape, double? elevation, TextStyle? titleTextStyle, TextStyle? contentTextStyle, EdgeInsetsGeometry? contentPadding, double? maxHeight, double? width})", + "method:lerp": "TDialogThemeData lerp (ThemeExtension? other, double t)", + "method:lerpDouble": "static double? lerpDouble (double? a, double? b, double t)" + } + }, + "TDividerLayout": { + "kind": "enum", + "members": { + "value:horizontal": "horizontal", + "value:vertical": "vertical" + } + }, + "TDividerAlign": { + "kind": "enum", + "members": { + "value:left": "left", + "value:center": "center", + "value:right": "right" + } + }, + "TDivider": { + "kind": "class", + "members": { + "constructor:new": "const ({super.key, this.layout, this.align, this.dashed, this.child})", + "field:layout": "final TDividerLayout?", + "field:align": "final TDividerAlign?", + "field:dashed": "final bool?", + "field:child": "final Widget?", + "method:build": "Widget build (BuildContext context)" + } + }, + "TDividerThemeData": { + "kind": "class", + "members": { + "field:color": "final Color?", + "field:thickness": "final double?", + "field:margin": "final EdgeInsetsGeometry?", + "field:gapPadding": "final EdgeInsetsGeometry?", + "field:textStyle": "final TextStyle?", + "field:indent": "final double?", + "field:endIndent": "final double?", + "constructor:new": "const ({this.color, this.thickness, this.margin, this.gapPadding, this.textStyle, this.indent, this.endIndent})", + "method:copyWith": "TDividerThemeData copyWith ({Color? color, double? thickness, EdgeInsetsGeometry? margin, EdgeInsetsGeometry? gapPadding, TextStyle? textStyle, double? indent, double? endIndent})", + "method:lerp": "TDividerThemeData lerp (ThemeExtension? other, double t)" + } + }, + "TDrawerPlacement": { + "kind": "enum", + "members": { + "value:left": "left", + "value:right": "right" + } + }, + "TDrawer": { + "kind": "class", + "members": { + "constructor:new": "const ({super.key, this.showDivider = true, this.footer, this.items, this.enableFeedback = true, this.showLastDivider = true, this.title, this.onItemClick, this.child})", + "field:showDivider": "final bool", + "field:footer": "final Widget?", + "field:items": "final List?", + "field:enableFeedback": "final bool", + "field:showLastDivider": "final bool", + "field:child": "final Widget?", + "field:title": "final Widget?", + "field:onItemClick": "final TDrawerItemClickCallback?", + "method:build": "Widget build (BuildContext context)" + } + }, + "showTDrawer": { + "kind": "function", + "members": { + "signature": "TDrawerHandle showTDrawer (BuildContext context, {required TDrawer drawer, TDrawerPlacement placement = TDrawerPlacement.right, bool showOverlay = true, bool closeOnOverlayClick = true, VoidCallback? onOverlayClick, double? topInset, bool useSafeArea = true, bool destroyOnClose = false, VoidCallback? onClose})" + } + }, + "TDrawerHandle": { + "kind": "class", + "members": { + "get:isShowing": "bool isShowing", + "method:close": "void close ()" + } + }, + "TDrawerItemClickCallback": { + "kind": "typedef", + "members": { + "signature": "typedef TDrawerItemClickCallback = void Function(int index, TDrawerItem item);" + } + }, + "TDrawerItem": { + "kind": "class", + "members": { + "constructor:new": "const ({this.title, this.icon, this.content})", + "field:title": "final String?", + "field:icon": "final Widget?", + "field:content": "final Widget?" + } + }, + "TDrawerThemeData": { + "kind": "class", + "members": { + "field:width": "final double?", + "field:backgroundColor": "final Color?", + "field:titleStyle": "final TextStyle?", + "field:titlePadding": "final EdgeInsetsGeometry?", + "field:itemTextStyle": "final TextStyle?", + "field:itemBackgroundColor": "final Color?", + "field:itemPressedColor": "final Color?", + "field:itemPadding": "final EdgeInsetsGeometry?", + "field:itemIconColor": "final Color?", + "field:itemIconSize": "final double?", + "field:itemIconGap": "final double?", + "field:dividerColor": "final Color?", + "field:dividerIndent": "final double?", + "field:dividerThickness": "final double?", + "field:footerPadding": "final EdgeInsetsGeometry?", + "constructor:new": "const ({this.width, this.backgroundColor, this.titleStyle, this.titlePadding, this.itemTextStyle, this.itemBackgroundColor, this.itemPressedColor, this.itemPadding, this.itemIconColor, this.itemIconSize, this.itemIconGap, this.dividerColor, this.dividerIndent, this.dividerThickness, this.footerPadding})", + "method:copyWith": "TDrawerThemeData copyWith ({double? width, Color? backgroundColor, TextStyle? titleStyle, EdgeInsetsGeometry? titlePadding, TextStyle? itemTextStyle, Color? itemBackgroundColor, Color? itemPressedColor, EdgeInsetsGeometry? itemPadding, Color? itemIconColor, double? itemIconSize, double? itemIconGap, Color? dividerColor, double? dividerIndent, double? dividerThickness, EdgeInsetsGeometry? footerPadding})", + "method:lerp": "TDrawerThemeData lerp (ThemeExtension? other, double t)" + } + }, + "TDropdownMenuOption": { + "kind": "class", + "members": { + "constructor:new": "const ({required this.value, required this.label, this.disabled = false, this.group})", + "field:value": "final T", + "field:label": "final String", + "field:disabled": "final bool", + "field:group": "final String?" + } + }, + "TDropdownSingleSelectPanel": { + "kind": "class", + "members": { + "constructor:new": "const ({super.key, required this.controller, required this.options, required this.value, required this.onChanged, this.maxHeight})", + "field:controller": "final TDropdownMenuPanelController", + "field:options": "final List>", + "field:value": "final T?", + "field:onChanged": "final ValueChanged", + "field:maxHeight": "final double?", + "method:build": "Widget build (BuildContext context)" + } + }, + "TDropdownMultiSelectPanel": { + "kind": "class", + "members": { + "constructor:new": "const ({super.key, required this.controller, required this.options, required this.values, required this.onConfirm, this.columns = 1, this.maxHeight})", + "field:controller": "final TDropdownMenuPanelController", + "field:options": "final List>", + "field:values": "final Set", + "field:onConfirm": "final ValueChanged>", + "field:columns": "final int", + "field:maxHeight": "final double?", + "method:createState": "State> createState ()" + } + }, + "TDropdownMenuPlacement": { + "kind": "enum", + "members": { + "value:auto": "auto", + "value:below": "below", + "value:above": "above" + } + }, + "TDropdownMenuCloseReason": { + "kind": "enum", + "members": { + "value:selection": "selection", + "value:confirm": "confirm", + "value:cancel": "cancel", + "value:overlay": "overlay", + "value:back": "back", + "value:trigger": "trigger", + "value:controller": "controller", + "value:switchItem": "switchItem" + } + }, + "TDropdownMenuClosedCallback": { + "kind": "typedef", + "members": { + "signature": "typedef TDropdownMenuClosedCallback = void Function(int index, TDropdownMenuCloseReason reason);" + } + }, + "TDropdownMenuPanelBuilder": { + "kind": "typedef", + "members": { + "signature": "typedef TDropdownMenuPanelBuilder = Widget Function(BuildContext context, TDropdownMenuPanelController controller);" + } + }, + "TDropdownMenuTriggerBuilder": { + "kind": "typedef", + "members": { + "signature": "typedef TDropdownMenuTriggerBuilder = Widget Function(BuildContext context, TDropdownMenuTriggerState state);" + } + }, + "TDropdownMenuTriggerState": { + "kind": "class", + "members": { + "constructor:new": "const ({required this.index, required this.isOpen, required this.enabled, required this.toggle})", + "field:index": "final int", + "field:isOpen": "final bool", + "field:enabled": "final bool", + "field:toggle": "final VoidCallback" + } + }, + "TDropdownMenuPanelController": { + "kind": "class", + "members": { + "field:index": "final int", + "method:close": "Future close ([TDropdownMenuCloseReason reason = TDropdownMenuCloseReason.cancel])" + } + }, + "TDropdownMenuItem": { + "kind": "class", + "members": { + "constructor:new": "const ({required this.label, required this.panelBuilder, this.enabled = true, this.flex = 1, this.width})", + "constructor:custom": "const ({required this.triggerBuilder, required this.panelBuilder, this.enabled = true, this.flex = 1, this.width})", + "field:label": "final String?", + "field:triggerBuilder": "final TDropdownMenuTriggerBuilder?", + "field:panelBuilder": "final TDropdownMenuPanelBuilder", + "field:enabled": "final bool", + "field:flex": "final int", + "field:width": "final double?" + } + }, + "TDropdownMenuController": { + "kind": "class", + "members": { + "get:openIndex": "int? openIndex", + "get:isOpen": "bool isOpen", + "method:open": "Future open (int index)", + "method:close": "Future close ()", + "method:toggle": "Future toggle (int index)" + } + }, + "TDropdownMenu": { + "kind": "class", + "members": { + "constructor:new": "const ({super.key, required this.items, this.controller, this.placement = TDropdownMenuPlacement.auto, this.scrollable = false, this.showOverlay = true, this.closeOnOverlayTap = true, this.useRootOverlay = false, this.animationDuration, this.onOpened, this.onClosed})", + "field:items": "final List", + "field:controller": "final TDropdownMenuController?", + "field:placement": "final TDropdownMenuPlacement", + "field:scrollable": "final bool", + "field:showOverlay": "final bool", + "field:closeOnOverlayTap": "final bool", + "field:useRootOverlay": "final bool", + "field:animationDuration": "final Duration?", + "field:onOpened": "final ValueChanged?", + "field:onClosed": "final TDropdownMenuClosedCallback?", + "method:createState": "State createState ()" + } + }, + "TDropdownThemeData": { + "kind": "class", + "members": { + "constructor:new": "const ({this.barHeight, this.barBackgroundColor, this.dividerColor, this.textStyle, this.activeTextStyle, this.disabledTextStyle, this.iconColor, this.activeIconColor, this.disabledIconColor, this.iconSize, this.panelBackgroundColor, this.overlayColor, this.optionHeight, this.optionPadding, this.optionTextStyle, this.selectedOptionTextStyle, this.disabledOptionTextStyle, this.optionColor, this.selectedOptionColor, this.disabledOptionColor, this.optionBorderRadius, this.actionAreaPadding, this.actionGap})", + "field:barHeight": "final double?", + "field:barBackgroundColor": "final Color?", + "field:dividerColor": "final Color?", + "field:textStyle": "final TextStyle?", + "field:activeTextStyle": "final TextStyle?", + "field:disabledTextStyle": "final TextStyle?", + "field:iconColor": "final Color?", + "field:activeIconColor": "final Color?", + "field:disabledIconColor": "final Color?", + "field:iconSize": "final double?", + "field:panelBackgroundColor": "final Color?", + "field:overlayColor": "final Color?", + "field:optionHeight": "final double?", + "field:optionPadding": "final EdgeInsetsGeometry?", + "field:optionTextStyle": "final TextStyle?", + "field:selectedOptionTextStyle": "final TextStyle?", + "field:disabledOptionTextStyle": "final TextStyle?", + "field:optionColor": "final Color?", + "field:selectedOptionColor": "final Color?", + "field:disabledOptionColor": "final Color?", + "field:optionBorderRadius": "final BorderRadius?", + "field:actionAreaPadding": "final EdgeInsetsGeometry?", + "field:actionGap": "final double?", + "method:merge": "TDropdownThemeData merge (TDropdownThemeData? other)", + "method:copyWith": "TDropdownThemeData copyWith ({double? barHeight, Color? barBackgroundColor, Color? dividerColor, TextStyle? textStyle, TextStyle? activeTextStyle, TextStyle? disabledTextStyle, Color? iconColor, Color? activeIconColor, Color? disabledIconColor, double? iconSize, Color? panelBackgroundColor, Color? overlayColor, double? optionHeight, EdgeInsetsGeometry? optionPadding, TextStyle? optionTextStyle, TextStyle? selectedOptionTextStyle, TextStyle? disabledOptionTextStyle, Color? optionColor, Color? selectedOptionColor, Color? disabledOptionColor, BorderRadius? optionBorderRadius, EdgeInsetsGeometry? actionAreaPadding, double? actionGap})", + "method:lerp": "TDropdownThemeData lerp (covariant ThemeExtension? other, double t)" + } + }, + "TEmpty": { + "kind": "class", + "members": { + "constructor:new": "const ({this.icon = TIcons.info_circle_filled, this.image, this.emptyText, this.operation, Key? key})", + "field:icon": "final IconData?", + "field:image": "final Widget?", + "field:emptyText": "final String?", + "field:operation": "final Widget?", + "method:build": "Widget build (BuildContext context)" + } + }, + "TEmptyThemeData": { + "kind": "class", + "members": { + "field:emptyTextColor": "final Color?", + "field:emptyTextFont": "final Font?", + "constructor:new": "const ({this.emptyTextColor, this.emptyTextFont})", + "method:copyWith": "TEmptyThemeData copyWith ({Color? emptyTextColor, Font? emptyTextFont})", + "method:lerp": "TEmptyThemeData lerp (ThemeExtension? other, double t)" + } + }, + "TFab": { + "kind": "class", + "members": { + "constructor:new": "const ({super.key, this.text = '', this.icon, this.child, this.onPressed, this.tooltip, this.semanticLabel, this.right, this.bottom, this.draggable, this.magnet, this.xBounds, this.yBounds, this.onDragStart, this.onDragEnd, this.useSafeArea = true})", + "field:text": "final String", + "field:icon": "final Widget?", + "field:child": "final Widget?", + "field:onPressed": "final VoidCallback?", + "field:tooltip": "final String?", + "field:semanticLabel": "final String?", + "field:right": "final double?", + "field:bottom": "final double?", + "field:draggable": "final TFabDragAxis?", + "field:magnet": "final TFabMagnet?", + "field:xBounds": "final TFabBounds?", + "field:yBounds": "final TFabBounds?", + "field:onDragStart": "final TFabDragCallback?", + "field:onDragEnd": "final TFabDragCallback?", + "field:useSafeArea": "final bool", + "method:build": "Widget build (BuildContext context)" + } + }, + "TFabDragAxis": { + "kind": "enum", + "members": { + "value:all": "all", + "value:vertical": "vertical", + "value:horizontal": "horizontal" + } + }, + "TFabMagnet": { + "kind": "enum", + "members": { + "value:left": "left", + "value:right": "right" + } + }, + "TFabBounds": { + "kind": "class", + "members": { + "field:start": "final double", + "field:end": "final double", + "constructor:new": "const ({required this.start, required this.end})" + } + }, + "TFabDragDetails": { + "kind": "class", + "members": { + "field:position": "final Offset", + "field:start": "final DragStartDetails?", + "field:end": "final DragEndDetails?", + "constructor:new": "const ({required this.position, this.start, this.end})" + } + }, + "TFabDragCallback": { + "kind": "typedef", + "members": { + "signature": "typedef TFabDragCallback = void Function(TFabDragDetails details);" + } + }, + "TFabThemeData": { + "kind": "class", + "members": { + "field:defaultRight": "final double?", + "field:defaultBottom": "final double?", + "field:defaultXBounds": "final TFabBounds?", + "field:defaultYBounds": "final TFabBounds?", + "field:magnetAnimationDuration": "final Duration?", + "field:dragTapSlop": "final double?", + "constructor:new": "const ({this.defaultRight, this.defaultBottom, this.defaultXBounds, this.defaultYBounds, this.magnetAnimationDuration, this.dragTapSlop})", + "method:copyWith": "TFabThemeData copyWith ({double? defaultRight, double? defaultBottom, TFabBounds? defaultXBounds, TFabBounds? defaultYBounds, Duration? magnetAnimationDuration, double? dragTapSlop})", + "method:lerp": "TFabThemeData lerp (ThemeExtension? other, double t)" + } + }, + "TFooter": { + "kind": "class", + "members": { + "constructor:new": "const ({Key? key, this.logo, this.text = '', this.links = const []})", + "field:logo": "final Widget?", + "field:text": "final String", + "field:links": "final List", + "method:build": "Widget build (BuildContext context)" + } + }, + "TFooterThemeData": { + "kind": "class", + "members": { + "field:height": "final double?", + "constructor:new": "const ({this.height})", + "method:copyWith": "TFooterThemeData copyWith ({double? height})", + "method:lerp": "TFooterThemeData lerp (ThemeExtension? other, double t)" + } + }, + "TForm": { + "kind": "class", + "members": { + "constructor:new": "const ({super.key, required this.child, this.controller, this.autovalidateMode, this.onChanged, this.onSubmit, this.showErrorMessage = true})", + "field:child": "final Widget", + "field:controller": "final TFormController?", + "field:autovalidateMode": "final AutovalidateMode?", + "field:onChanged": "final VoidCallback?", + "field:onSubmit": "final ValueChanged>?", + "field:showErrorMessage": "final bool", + "method:createState": "TFormState createState ()" + } + }, + "TFormState": { + "kind": "class", + "members": { + "get:values": "Map values", + "method:validate": "bool validate ({Iterable? fields})", + "method:submit": "bool submit ()", + "method:reset": "void reset ()", + "method:clearValidate": "void clearValidate ({Iterable? fields})", + "method:setValidateMessage": "void setValidateMessage (Map messages)", + "method:initState": "void initState ()", + "method:didUpdateWidget": "void didUpdateWidget (covariant TForm oldWidget)", + "method:dispose": "void dispose ()", + "method:build": "Widget build (BuildContext context)" + } + }, + "TFormController": { + "kind": "class", + "members": { + "get:values": "Map values", + "method:validate": "bool validate ({Iterable? fields})", + "method:submit": "bool submit ()", + "method:reset": "void reset ()", + "method:clearValidate": "void clearValidate ({Iterable? fields})", + "method:setValidateMessage": "void setValidateMessage (Map messages)" + } + }, + "TFormFieldBuilder": { + "kind": "typedef", + "members": { + "signature": "typedef TFormFieldBuilder = Widget Function(BuildContext context, T value, ValueChanged? onChanged, String? errorText);" + } + }, + "TFormField": { + "kind": "class", + "members": { + "constructor:new": "const ({super.key, required this.name, required this.value, required this.builder, this.onChanged, this.required = false, this.requiredMessage = '此项不能为空', this.validator, this.onSaved, this.autovalidateMode})", + "field:name": "final String", + "field:value": "final T", + "field:onChanged": "final ValueChanged?", + "field:required": "final bool", + "field:requiredMessage": "final String", + "field:builder": "final TFormFieldBuilder", + "field:validator": "final FormFieldValidator?", + "field:onSaved": "final FormFieldSetter?", + "field:autovalidateMode": "final AutovalidateMode?", + "method:createState": "State> createState ()" + } + }, + "TFormItem": { + "kind": "class", + "members": { + "constructor:new": "const ({super.key, required this.child, this.label, this.leading, this.required, this.help, this.errorText, this.extra, this.verticalAlignment, this.contentAlignment, this.showErrorMessage = true})", + "field:child": "final Widget", + "field:label": "final String?", + "field:leading": "final Widget?", + "field:required": "final bool?", + "field:help": "final String?", + "field:errorText": "final String?", + "field:extra": "final Widget?", + "field:verticalAlignment": "final TFormItemVerticalAlignment?", + "field:contentAlignment": "final TFormItemContentAlignment?", + "field:showErrorMessage": "final bool", + "method:build": "Widget build (BuildContext context)" + } + }, + "TFormLayout": { + "kind": "enum", + "members": { + "value:horizontal": "horizontal", + "value:vertical": "vertical" + } + }, + "TFormRequiredMarkPosition": { + "kind": "enum", + "members": { + "value:left": "left", + "value:right": "right" + } + }, + "TFormItemVerticalAlignment": { + "kind": "enum", + "members": { + "value:start": "start", + "value:center": "center" + } + }, + "TFormItemContentAlignment": { + "kind": "enum", + "members": { + "value:start": "start", + "value:end": "end" + } + }, + "TFormThemeData": { + "kind": "class", + "members": { + "constructor:new": "const ({this.showColon, this.labelWidth, this.layout, this.labelAlign, this.requiredMarkPosition, this.labelStyle, this.requiredMarkStyle, this.helpStyle, this.errorStyle, this.backgroundColor, this.borderColor, this.itemPadding, this.itemSpacing, this.labelGap, this.leadingGap, this.messageGap})", + "field:showColon": "final bool?", + "field:labelWidth": "final double?", + "field:layout": "final TFormLayout?", + "field:labelAlign": "final TextAlign?", + "field:requiredMarkPosition": "final TFormRequiredMarkPosition?", + "field:labelStyle": "final TextStyle?", + "field:requiredMarkStyle": "final TextStyle?", + "field:helpStyle": "final TextStyle?", + "field:errorStyle": "final TextStyle?", + "field:backgroundColor": "final Color?", + "field:borderColor": "final Color?", + "field:itemPadding": "final EdgeInsetsGeometry?", + "field:itemSpacing": "final double?", + "field:labelGap": "final double?", + "field:leadingGap": "final double?", + "field:messageGap": "final double?", + "method:copyWith": "TFormThemeData copyWith ({bool? showColon, double? labelWidth, TFormLayout? layout, TextAlign? labelAlign, TFormRequiredMarkPosition? requiredMarkPosition, TextStyle? labelStyle, TextStyle? requiredMarkStyle, TextStyle? helpStyle, TextStyle? errorStyle, Color? backgroundColor, Color? borderColor, EdgeInsetsGeometry? itemPadding, double? itemSpacing, double? labelGap, double? leadingGap, double? messageGap})", + "method:lerp": "TFormThemeData lerp (ThemeExtension? other, double t)" + } + }, + "TIcon": { + "kind": "class", + "members": { + "field:icon": "final IconData", + "field:size": "final double?", + "field:color": "final Color?", + "field:semanticLabel": "final String?", + "constructor:new": "const (this.icon, {super.key, this.size, this.color, this.semanticLabel})", + "constructor:fromName": "factory (String name, {Key? key, double? size, Color? color, String? semanticLabel})", + "method:build": "Widget build (BuildContext context)" + } + }, + "TImageShape": { + "kind": "enum", + "members": { + "value:square": "square", + "value:roundedSquare": "roundedSquare", + "value:circle": "circle" + } + }, + "TImage": { + "kind": "class", + "members": { + "constructor:new": "const ({super.key, this.src, this.imageFile, this.shape = TImageShape.square, this.errorWidget, this.loadingWidget, this.width, this.height, this.fit = BoxFit.fill, this.frameBuilder, this.loadingBuilder, this.errorBuilder, this.onLoad, this.onError, this.semanticLabel, this.excludeFromSemantics = false, this.cacheWidth, this.cacheHeight, this.filterQuality = FilterQuality.low, this.alignment = Alignment.center, this.repeat = ImageRepeat.noRepeat, this.onTap})", + "field:src": "final String?", + "field:imageFile": "final File?", + "field:shape": "final TImageShape", + "field:errorWidget": "final Widget?", + "field:loadingWidget": "final Widget?", + "field:width": "final double?", + "field:height": "final double?", + "field:fit": "final BoxFit", + "field:frameBuilder": "final ImageFrameBuilder?", + "field:loadingBuilder": "final ImageLoadingBuilder?", + "field:errorBuilder": "final ImageErrorWidgetBuilder?", + "field:onLoad": "final VoidCallback?", + "field:onError": "final ImageErrorListener?", + "field:semanticLabel": "final String?", + "field:excludeFromSemantics": "final bool", + "field:cacheWidth": "final int?", + "field:cacheHeight": "final int?", + "field:filterQuality": "final FilterQuality", + "field:alignment": "final AlignmentGeometry", + "field:repeat": "final ImageRepeat", + "field:onTap": "final GestureTapCallback?", + "method:build": "Widget build (BuildContext context)" + } + }, + "TImageThemeData": { + "kind": "class", + "members": { + "constructor:new": "const ({this.color, this.colorBlendMode, this.centerSlice, this.matchTextDirection, this.gaplessPlayback, this.isAntiAlias})", + "field:color": "final Color?", + "field:colorBlendMode": "final BlendMode?", + "field:centerSlice": "final Rect?", + "field:matchTextDirection": "final bool?", + "field:gaplessPlayback": "final bool?", + "field:isAntiAlias": "final bool?", + "method:copyWith": "TImageThemeData copyWith ({Color? color, BlendMode? colorBlendMode, Rect? centerSlice, bool? matchTextDirection, bool? gaplessPlayback, bool? isAntiAlias})", + "method:lerp": "TImageThemeData lerp (ThemeExtension? other, double t)" + } + }, + "TImageViewerItemBuilder": { + "kind": "typedef", + "members": { + "signature": "typedef TImageViewerItemBuilder = Widget Function(BuildContext context, int index);" + } + }, + "TImageViewer": { + "kind": "class", + "members": { + "method:show": "static Future show ({required BuildContext context, required List> images, List? labels, int initialIndex = 0, bool showClose = true, bool showDelete = false, bool showIndex = true, bool loop = false, bool autoplay = false, Duration autoplayInterval = const Duration(seconds: 3), ValueChanged? onIndexChanged, ValueChanged? onDelete, ValueChanged? onTap, ValueChanged? onLongPress, TImageViewerItemBuilder? leadingBuilder, TImageViewerItemBuilder? trailingBuilder})" + } + }, + "TImageViewerThemeData": { + "kind": "class", + "members": { + "field:backgroundColor": "final Color?", + "field:appBarBackgroundColor": "final Color?", + "field:iconColor": "final Color?", + "field:labelStyle": "final TextStyle?", + "field:indexStyle": "final TextStyle?", + "field:viewerWidth": "final double?", + "field:viewerHeight": "final double?", + "constructor:new": "const ({this.backgroundColor, this.appBarBackgroundColor, this.iconColor, this.labelStyle, this.indexStyle, this.viewerWidth, this.viewerHeight})", + "method:copyWith": "TImageViewerThemeData copyWith ({Color? backgroundColor, Color? appBarBackgroundColor, Color? iconColor, TextStyle? labelStyle, TextStyle? indexStyle, double? viewerWidth, double? viewerHeight})", + "method:lerp": "TImageViewerThemeData lerp (ThemeExtension? other, double t)" + } + }, + "TIndexes": { + "kind": "class", + "members": { + "constructor:new": "const ({Key? key, this.indexList, this.initialIndex, this.useSafeArea = false, this.sticky = true, this.stickyOffset = 0, this.capsuleTheme = false, this.reverse = false, this.scrollController, this.onChanged, this.onSelect, required this.builderContent, this.builderAnchor, this.builderIndex})", + "field:indexList": "final List?", + "field:initialIndex": "final String?", + "field:useSafeArea": "final bool", + "field:sticky": "final bool", + "field:stickyOffset": "final double", + "field:capsuleTheme": "final bool", + "field:reverse": "final bool", + "field:scrollController": "final ScrollController?", + "field:onChanged": "final void Function(String index)?", + "field:onSelect": "final void Function(String index)?", + "field:builderContent": "final Widget? Function(BuildContext context, String index)", + "field:builderAnchor": "final Widget? Function(BuildContext context, String index, bool isPinnedToTop)?", + "field:builderIndex": "final Widget Function(BuildContext context, String index, bool isActive)?", + "method:createState": "_TIndexesState createState ()" + } + }, + "SliverStickyHeaderWidgetBuilder": { + "kind": "typedef", + "members": { + "signature": "typedef SliverStickyHeaderWidgetBuilder = Widget Function(BuildContext context, SliverStickyHeaderState state);" + } + }, + "StickyHeaderController": { + "kind": "class", + "members": { + "get:stickyHeaderScrollOffset": "double stickyHeaderScrollOffset", + "set:stickyHeaderScrollOffset": "stickyHeaderScrollOffset (double value)" + } + }, + "DefaultStickyHeaderController": { + "kind": "class", + "members": { + "constructor:new": "const ({Key? key, required this.child})", + "field:child": "final Widget", + "method:of": "static StickyHeaderController? of (BuildContext context)", + "method:createState": "_DefaultStickyHeaderControllerState createState ()" + } + }, + "SliverStickyHeaderState": { + "kind": "class", + "members": { + "constructor:new": "const (this.scrollPercentage, this.isPinned)", + "field:scrollPercentage": "final double", + "field:isPinned": "final bool", + "method:==": "bool == (Object other)", + "get:hashCode": "int hashCode" + } + }, + "SliverStickyHeader": { + "kind": "class", + "members": { + "constructor:new": "const ({Key? key, this.header, this.sliver, this.overlapsContent = false, this.sticky = true, this.pinnedOffset = 0.0, this.controller})", + "constructor:builder": "({Key? key, required SliverStickyHeaderWidgetBuilder builder, Widget? sliver, bool overlapsContent = false, bool sticky = true, double pinnedOffset = 0.0, StickyHeaderController? controller})", + "field:header": "final Widget?", + "field:sliver": "final Widget?", + "field:overlapsContent": "final bool", + "field:sticky": "final bool", + "field:pinnedOffset": "final double", + "field:controller": "final StickyHeaderController?", + "method:createRenderObject": "RenderSliverStickyHeader createRenderObject (BuildContext context)", + "method:createElement": "SliverStickyHeaderRenderObjectElement createElement ()", + "method:updateRenderObject": "void updateRenderObject (BuildContext context, RenderSliverStickyHeader renderObject)" + } + }, + "SliverStickyHeaderRenderObjectElement": { + "kind": "class", + "members": { + "constructor:new": "(SliverStickyHeader widget)", + "get:widget": "SliverStickyHeader widget", + "method:visitChildren": "void visitChildren (ElementVisitor visitor)", + "method:forgetChild": "void forgetChild (Element child)", + "method:mount": "void mount (Element? parent, dynamic newSlot)", + "method:update": "void update (SliverStickyHeader newWidget)", + "method:insertRenderObjectChild": "void insertRenderObjectChild (RenderObject child, int? slot)", + "method:moveRenderObjectChild": "void moveRenderObjectChild (RenderObject child, slot, newSlot)", + "method:removeRenderObjectChild": "void removeRenderObjectChild (RenderObject child, slot)" + } + }, + "TIndexesAnchor": { + "kind": "class", + "members": { + "constructor:new": "const ({Key? key, required this.sticky, required this.text, required this.capsuleTheme, this.builderAnchor, required this.activeIndex})", + "field:sticky": "final bool", + "field:text": "final String", + "field:capsuleTheme": "final bool", + "field:activeIndex": "final ValueNotifier", + "field:builderAnchor": "final Widget? Function(BuildContext context, String index, bool isPinnedToTop)?", + "method:build": "Widget build (BuildContext context)" + } + }, + "TIndexesList": { + "kind": "class", + "members": { + "constructor:new": "const ({Key? key, required this.indexList, this.indexListMaxHeight = 0.8, required this.activeIndex, required this.onSelect, this.builderIndex})", + "field:indexList": "final List", + "field:indexListMaxHeight": "final double", + "field:activeIndex": "final ValueNotifier", + "field:onSelect": "final void Function(String newIndex, String oldIndex)", + "field:builderIndex": "final Widget Function(BuildContext context, String index, bool isActive)?", + "method:createState": "State createState ()" + } + }, + "TIndexesThemeData": { + "kind": "class", + "members": { + "constructor:new": "const ({this.indexListMaxHeight, this.sidebarRight, this.indexItemSize, this.indexItemSpacing, this.tipSize, this.tipMaxWidth, this.tipGap, this.indexColor, this.activeIndexColor, this.activeIndexBackgroundColor, this.tipColor, this.tipBackgroundColor, this.indexFont, this.activeIndexFont, this.tipFont, this.anchorColor, this.activeAnchorColor, this.anchorBackgroundColor, this.activeAnchorBackgroundColor, this.anchorBorderColor, this.anchorFont, this.activeAnchorFont, this.anchorVerticalPadding, this.anchorHorizontalPadding, this.capsuleMargin})", + "field:indexListMaxHeight": "final double?", + "field:sidebarRight": "final double?", + "field:indexItemSize": "final double?", + "field:indexItemSpacing": "final double?", + "field:tipSize": "final double?", + "field:tipMaxWidth": "final double?", + "field:tipGap": "final double?", + "field:indexColor": "final Color?", + "field:activeIndexColor": "final Color?", + "field:activeIndexBackgroundColor": "final Color?", + "field:tipColor": "final Color?", + "field:tipBackgroundColor": "final Color?", + "field:indexFont": "final Font?", + "field:activeIndexFont": "final Font?", + "field:tipFont": "final Font?", + "field:anchorColor": "final Color?", + "field:activeAnchorColor": "final Color?", + "field:anchorBackgroundColor": "final Color?", + "field:activeAnchorBackgroundColor": "final Color?", + "field:anchorBorderColor": "final Color?", + "field:anchorFont": "final Font?", + "field:activeAnchorFont": "final Font?", + "field:anchorVerticalPadding": "final double?", + "field:anchorHorizontalPadding": "final double?", + "field:capsuleMargin": "final double?", + "method:copyWith": "TIndexesThemeData copyWith ({double? indexListMaxHeight, double? sidebarRight, double? indexItemSize, double? indexItemSpacing, double? tipSize, double? tipMaxWidth, double? tipGap, Color? indexColor, Color? activeIndexColor, Color? activeIndexBackgroundColor, Color? tipColor, Color? tipBackgroundColor, Font? indexFont, Font? activeIndexFont, Font? tipFont, Color? anchorColor, Color? activeAnchorColor, Color? anchorBackgroundColor, Color? activeAnchorBackgroundColor, Color? anchorBorderColor, Font? anchorFont, Font? activeAnchorFont, double? anchorVerticalPadding, double? anchorHorizontalPadding, double? capsuleMargin})", + "method:lerp": "TIndexesThemeData lerp (ThemeExtension? other, double t)" + } + }, + "TInput": { + "kind": "class", + "members": { + "constructor:new": "const ({super.key, this.controller, this.initialValue, this.onChanged, this.onSubmitted, this.onEditingComplete, this.enabled = true, this.readOnly = false, this.hintText, this.prefix, this.suffix, this.clearButtonMode, this.status = TInputStatus.normal, this.borderless = false, this.maxLines = 1, this.minLines, this.maxLength, this.maxCharacter, this.indicator = false, this.autofocus = false, this.focusNode, this.inputType = TextInputType.text, this.inputAction, this.textAlign = TextAlign.start, this.obscureText = false, this.showPasswordToggle = false, this.inputFormatters, this.style, this.cursorColor})", + "field:controller": "final TextEditingController?", + "field:initialValue": "final String?", + "field:onChanged": "final ValueChanged?", + "field:onSubmitted": "final ValueChanged?", + "field:onEditingComplete": "final VoidCallback?", + "field:enabled": "final bool", + "field:readOnly": "final bool", + "field:hintText": "final String?", + "field:prefix": "final Widget?", + "field:suffix": "final Widget?", + "field:clearButtonMode": "final TInputClearButtonMode?", + "field:status": "final TInputStatus", + "field:borderless": "final bool", + "field:maxLines": "final int?", + "field:minLines": "final int?", + "field:maxLength": "final int?", + "field:maxCharacter": "final int?", + "field:indicator": "final bool", + "field:autofocus": "final bool", + "field:focusNode": "final FocusNode?", + "field:inputType": "final TextInputType", + "field:inputAction": "final TextInputAction?", + "field:textAlign": "final TextAlign", + "field:obscureText": "final bool", + "field:showPasswordToggle": "final bool", + "field:inputFormatters": "final List?", + "field:style": "final TextStyle?", + "field:cursorColor": "final Color?", + "method:createState": "State createState ()" + } + }, + "TInputThemeData": { + "kind": "class", + "members": { + "constructor:new": "const ({this.clearIconSize, this.hintStyle, this.clearIconColor, this.contentPadding, this.borderRadius, this.backgroundColor, this.borderColor, this.borderWidth})", + "field:clearIconSize": "final double?", + "field:hintStyle": "final TextStyle?", + "field:clearIconColor": "final Color?", + "field:contentPadding": "final EdgeInsetsGeometry?", + "field:borderRadius": "final double?", + "field:backgroundColor": "final Color?", + "field:borderColor": "final Color?", + "field:borderWidth": "final double?", + "method:copyWith": "TInputThemeData copyWith ({double? clearIconSize, TextStyle? hintStyle, Color? clearIconColor, EdgeInsetsGeometry? contentPadding, double? borderRadius, Color? backgroundColor, Color? borderColor, double? borderWidth})", + "method:lerp": "TInputThemeData lerp (ThemeExtension? other, double t)" + } + }, + "TInputClearButtonMode": { + "kind": "enum", + "members": { + "value:never": "never", + "value:always": "always", + "value:focused": "focused" + } + }, + "TInputStatus": { + "kind": "enum", + "members": { + "value:normal": "normal", + "value:success": "success", + "value:warning": "warning", + "value:error": "error" + } + }, + "TLink": { + "kind": "class", + "members": { + "constructor:new": "const ({super.key, this.child, this.prefixIcon, this.suffixIcon, this.underline, this.colorPreset, this.size, this.onPressed, this.semanticLabel, this.tooltip})", + "field:child": "final Widget?", + "field:prefixIcon": "final Widget?", + "field:suffixIcon": "final Widget?", + "field:underline": "final bool?", + "field:colorPreset": "final TLinkColorPreset?", + "field:size": "final TLinkSize?", + "field:onPressed": "final VoidCallback?", + "field:semanticLabel": "final String?", + "field:tooltip": "final String?", + "method:build": "Widget build (BuildContext context)" + } + }, + "TLinkThemeData": { + "kind": "class", + "members": { + "constructor:new": "const ({this.textStyle, this.iconSize, this.iconGap})", + "field:textStyle": "final TextStyle?", + "field:iconSize": "final double?", + "field:iconGap": "final double?", + "method:copyWith": "TLinkThemeData copyWith ({TextStyle? textStyle, double? iconSize, double? iconGap})", + "method:lerp": "TLinkThemeData lerp (ThemeExtension? other, double t)" + } + }, + "TLinkColorPreset": { + "kind": "enum", + "members": { + "value:primary": "primary", + "value:defaultTheme": "defaultTheme", + "value:danger": "danger", + "value:warning": "warning", + "value:success": "success" + } + }, + "TLinkSize": { + "kind": "enum", + "members": { + "value:small": "small", + "value:medium": "medium", + "value:large": "large" + } + }, + "TLoadingIcon": { + "kind": "enum", + "members": { + "value:circle": "circle", + "value:point": "point", + "value:activity": "activity" + } + }, + "TLoading": { + "kind": "class", + "members": { + "constructor:new": "const ({Key? key, this.size = 20, this.icon = TLoadingIcon.circle, this.text, this.customIcon, this.refreshWidget})", + "field:size": "final double", + "field:icon": "final TLoadingIcon?", + "field:text": "final String?", + "field:customIcon": "final Widget?", + "field:refreshWidget": "final Widget?", + "method:build": "Widget build (BuildContext context)" + } + }, + "TLoadingController": { + "kind": "class", + "members": { + "method:show": "static void show (BuildContext context, {Widget? child, double size = 20, TLoadingIcon? icon = TLoadingIcon.circle, String? text, TLoadingThemeData? theme})", + "method:dismiss": "static void dismiss ()" + } + }, + "TLoadingThemeData": { + "kind": "class", + "members": { + "field:iconColor": "final Color?", + "field:textColor": "final Color?", + "field:axis": "final Axis?", + "field:duration": "final int?", + "constructor:new": "const ({this.iconColor, this.textColor, this.axis, this.duration})", + "method:merge": "TLoadingThemeData merge (TLoadingThemeData? other)", + "method:copyWith": "TLoadingThemeData copyWith ({Color? iconColor, Color? textColor, Axis? axis, int? duration})", + "method:lerp": "TLoadingThemeData lerp (ThemeExtension? other, double t)" + } + }, + "TMessageMarquee": { + "kind": "class", + "members": { + "constructor:new": "const ({this.duration = const Duration(seconds: 10), this.repeat = false, this.delay = Duration.zero})", + "field:duration": "final Duration", + "field:repeat": "final bool", + "field:delay": "final Duration" + } + }, + "TMessageHandle": { + "kind": "class", + "members": { + "get:isShowing": "bool isShowing", + "method:dismiss": "void dismiss ()" + } + }, + "TMessage": { + "kind": "class", + "members": { + "constructor:new": "const ({super.key, this.content = '', this.duration = const Duration(seconds: 3), this.showIcon = true, this.icon, this.action, this.showCloseButton = false, this.closeButton, this.marquee, this.offset, this.status = TMessageStatus.info, this.onCloseButtonPressed, this.onDurationEnd, this.onDismissed, this.useSafeArea = true})", + "field:content": "final String", + "field:duration": "final Duration?", + "field:showIcon": "final bool", + "field:icon": "final Widget?", + "field:action": "final Widget?", + "field:showCloseButton": "final bool", + "field:closeButton": "final Widget?", + "field:marquee": "final TMessageMarquee?", + "field:offset": "final Offset?", + "field:useSafeArea": "final bool", + "field:status": "final TMessageStatus", + "field:onCloseButtonPressed": "final VoidCallback?", + "field:onDurationEnd": "final VoidCallback?", + "field:onDismissed": "final VoidCallback?", + "method:show": "static TMessageHandle show ({required BuildContext context, String content = '', Duration? duration = const Duration(seconds: 3), bool showIcon = true, Widget? icon, Widget? action, bool showCloseButton = false, Widget? closeButton, TMessageMarquee? marquee, Offset? offset, TMessageStatus status = TMessageStatus.info, VoidCallback? onCloseButtonPressed, VoidCallback? onDurationEnd, VoidCallback? onDismissed, bool useSafeArea = true})", + "method:createState": "State createState ()" + } + }, + "TMessageThemeData": { + "kind": "class", + "members": { + "field:backgroundColor": "final Color?", + "field:shape": "final ShapeBorder?", + "field:elevation": "final double?", + "constructor:new": "const ({this.backgroundColor, this.shape, this.elevation})", + "method:merge": "TMessageThemeData merge (TMessageThemeData? other)", + "method:copyWith": "TMessageThemeData copyWith ({Color? backgroundColor, ShapeBorder? shape, double? elevation})", + "method:lerp": "TMessageThemeData lerp (ThemeExtension? other, double t)", + "method:lerpDouble": "static double? lerpDouble (double? a, double? b, double t)" + } + }, + "TMessageStatus": { + "kind": "enum", + "members": { + "value:info": "info", + "value:success": "success", + "value:warning": "warning", + "value:error": "error" + } + }, + "TNavBar": { + "kind": "class", + "members": { + "constructor:new": "const ({Key? key, this.title, this.leading, this.actions, this.centerTitle = true, this.useDefaultBack = false, this.onBack, this.belowTitleWidget, this.flexibleSpace, this.height = 48, this.useBorderStyle = false, this.useSafeArea = false})", + "field:title": "final Widget?", + "field:leading": "final List?", + "field:actions": "final List?", + "field:centerTitle": "final bool", + "field:useDefaultBack": "final bool", + "field:onBack": "final VoidCallback?", + "field:belowTitleWidget": "final Widget?", + "field:flexibleSpace": "final Widget?", + "field:height": "final double", + "field:useBorderStyle": "final bool", + "field:useSafeArea": "final bool", + "get:preferredSize": "Size preferredSize", + "method:build": "Widget build (BuildContext context)" + } + }, + "TNavBarItem": { + "kind": "class", + "members": { + "field:icon": "final IconData?", + "field:iconColor": "final Color?", + "field:onTap": "final VoidCallback?", + "field:iconSize": "final double?", + "field:padding": "final EdgeInsetsGeometry?", + "field:customWidget": "final Widget?", + "constructor:new": "const ({this.icon, this.iconColor, this.onTap, this.iconSize = 24.0, this.padding, this.customWidget})" + } + }, + "TNavBarBorder": { + "kind": "class", + "members": { + "field:width": "final double", + "field:radius": "final double", + "field:color": "final Color?", + "field:padding": "final EdgeInsetsGeometry?", + "constructor:new": "const ({this.width = 1.0, this.radius = 22.0, this.color, this.padding})" + } + }, + "TNavBarThemeData": { + "kind": "class", + "members": { + "field:titleColor": "final Color?", + "field:backIconColor": "final Color?", + "field:backgroundColor": "final Color?", + "field:padding": "final EdgeInsetsGeometry?", + "field:titleMargin": "final double?", + "field:opacity": "final double?", + "field:border": "final TNavBarBorder?", + "field:boxShadow": "final List?", + "constructor:new": "const ({this.titleColor, this.backIconColor, this.backgroundColor, this.padding, this.titleMargin, this.opacity, this.border, this.boxShadow})", + "method:copyWith": "TNavBarThemeData copyWith ({Color? titleColor, Color? backIconColor, Color? backgroundColor, EdgeInsetsGeometry? padding, double? titleMargin, double? opacity, TNavBarBorder? border, List? boxShadow})", + "method:lerp": "TNavBarThemeData lerp (ThemeExtension? other, double t)" + } + }, + "TNoticeBarTapTarget": { + "kind": "enum", + "members": { + "value:prefix": "prefix", + "value:content": "content", + "value:operation": "operation", + "value:suffix": "suffix" + } + }, + "TNoticeBar": { + "kind": "class", + "members": { + "constructor:new": "const ({super.key, this.content = '', this.items = const [], this.status = TNoticeBarStatus.info, this.prefix, this.operation, this.suffixIcon, this.direction = Axis.horizontal, this.maxLines = 1, this.marquee = false, this.speed = 50, this.interval = const Duration(seconds: 2), this.onPressed})", + "field:content": "final String", + "field:items": "final List", + "field:status": "final TNoticeBarStatus", + "field:prefix": "final Widget?", + "field:operation": "final Widget?", + "field:suffixIcon": "final IconData?", + "field:direction": "final Axis", + "field:maxLines": "final int", + "field:marquee": "final bool", + "field:speed": "final double", + "field:interval": "final Duration", + "field:onPressed": "final ValueChanged?", + "method:createState": "State createState ()" + } + }, + "TNoticeBarThemeData": { + "kind": "class", + "members": { + "field:height": "final double?", + "field:backgroundColor": "final Color?", + "field:textStyle": "final TextStyle?", + "field:leftIconColor": "final Color?", + "field:rightIconColor": "final Color?", + "field:padding": "final EdgeInsetsGeometry?", + "constructor:new": "const ({this.height, this.backgroundColor, this.textStyle, this.leftIconColor, this.rightIconColor, this.padding})", + "field:defaultPadding": "static const EdgeInsets", + "method:merge": "TNoticeBarThemeData merge (TNoticeBarThemeData? other)", + "method:resolve": "TNoticeBarThemeData resolve (BuildContext context, {TNoticeBarStatus status = TNoticeBarStatus.info})", + "method:copyWith": "TNoticeBarThemeData copyWith ({double? height, Color? backgroundColor, TextStyle? textStyle, Color? leftIconColor, Color? rightIconColor, EdgeInsetsGeometry? padding})", + "method:lerp": "TNoticeBarThemeData lerp (ThemeExtension? other, double t)", + "method:lerpDouble": "static double? lerpDouble (double? a, double? b, double t)" + } + }, + "TNoticeBarStatus": { + "kind": "enum", + "members": { + "value:info": "info", + "value:success": "success", + "value:warning": "warning", + "value:error": "error" + } + }, + "TPicker": { + "kind": "class", + "members": { + "constructor:new": "const ({super.key, required this.items, required this.value, this.onChanged, this.onColumnScrollEnd, this.itemBuilder})", + "field:items": "final TPickerItems", + "field:value": "final List", + "field:onChanged": "final ValueChanged?", + "field:onColumnScrollEnd": "final void Function(int columnIndex, TPickerValue value)?", + "field:itemBuilder": "final TPickerItemBuilder?", + "method:createState": "State createState ()" + } + }, + "TPickerPopupHeaderBuilder": { + "kind": "typedef", + "members": { + "signature": "typedef TPickerPopupHeaderBuilder = TPopupHeader Function(BuildContext context, VoidCallback close);" + } + }, + "TPickerPopup": { + "kind": "class", + "members": { + "method:show": "static TPopupHandle show (BuildContext context, {required Widget child, required TPickerPopupHeaderBuilder headerBuilder, TPopupBottomInset? inset, double? radius, Color? backgroundColor, TPopupOverlayConfig? overlay, bool destroyOnClose = false, Duration? animationDuration, VoidCallback? onOpened, VoidCallback? onClosed, TPopupVisibleChangeCallback? onVisibleChange, bool useSafeArea = false, BuildContext? navigatorContext, bool useRootNavigator = false})" + } + }, + "TPickerThemeData": { + "kind": "class", + "members": { + "field:height": "final double?", + "field:itemCount": "final int?", + "constructor:new": "const ({this.height, this.itemCount})", + "method:copyWith": "TPickerThemeData copyWith ({double? height, int? itemCount})", + "method:lerp": "TPickerThemeData lerp (ThemeExtension? other, double t)" + } + }, + "TPickerItemBuilder": { + "kind": "typedef", + "members": { + "signature": "typedef TPickerItemBuilder = Widget? Function(BuildContext context, TPickerOption option, int columnIndex, int itemIndex, double distance);" + } + }, + "TPickerOption": { + "kind": "class", + "members": { + "constructor:new": "const ({required this.label, required this.value, this.disabled = false, this.children = const []})", + "field:label": "final String", + "field:value": "final Object?", + "field:disabled": "final bool", + "field:children": "final List", + "method:==": "bool == (Object other)", + "get:hashCode": "int hashCode", + "method:toString": "String toString ()" + } + }, + "TPickerItems": { + "kind": "class", + "members": { + "constructor:new": "const ()" + } + }, + "TPickerColumns": { + "kind": "class", + "members": { + "constructor:new": "const (this.columns)", + "field:columns": "final List>", + "method:==": "bool == (Object other)", + "get:hashCode": "int hashCode" + } + }, + "TPickerLinked": { + "kind": "class", + "members": { + "constructor:new": "const (this.options)", + "field:options": "final List", + "method:==": "bool == (Object other)", + "get:hashCode": "int hashCode" + } + }, + "TPickerValue": { + "kind": "class", + "members": { + "constructor:new": "const ({required this.selectedOptions, required this.indexes})", + "field:selectedOptions": "final List", + "field:indexes": "final List", + "get:values": "List values", + "get:labels": "List labels", + "method:toString": "String toString ()" + } + }, + "TPopoverAnchorBuilder": { + "kind": "typedef", + "members": { + "signature": "typedef TPopoverAnchorBuilder = Widget Function(BuildContext context, TPopoverController controller, Widget? child);" + } + }, + "TPopoverController": { + "kind": "class", + "members": { + "get:isOpen": "bool isOpen", + "method:open": "void open ()", + "method:close": "void close ()", + "method:maybeOf": "static TPopoverController? maybeOf (BuildContext context)" + } + }, + "TPopoverAnchor": { + "kind": "class", + "members": { + "constructor:new": "const ({super.key, required this.content, required this.builder, this.controller, this.child, this.colorPreset = TPopoverColorPreset.defaultTheme, this.closeOnClickOutside = true, this.closeOnScroll = true, this.placement = TPopoverPlacement.top, this.showArrow, this.width, this.height, this.onTap, this.onLongTap, this.onOpen, this.onClose})", + "field:content": "final Widget", + "field:builder": "final TPopoverAnchorBuilder", + "field:controller": "final TPopoverController?", + "field:child": "final Widget?", + "field:colorPreset": "final TPopoverColorPreset", + "field:closeOnClickOutside": "final bool", + "field:closeOnScroll": "final bool", + "field:placement": "final TPopoverPlacement", + "field:showArrow": "final bool?", + "field:width": "final double?", + "field:height": "final double?", + "field:onTap": "final VoidCallback?", + "field:onLongTap": "final VoidCallback?", + "field:onOpen": "final VoidCallback?", + "field:onClose": "final VoidCallback?", + "method:createState": "State createState ()" + } + }, + "TPopover": { + "kind": "class", + "members": { + "method:showPopover": "static Future showPopover ({required BuildContext context, required Widget content, TPopoverColorPreset colorPreset = TPopoverColorPreset.defaultTheme, bool closeOnClickOutside = true, bool closeOnScroll = true, TPopoverPlacement placement = TPopoverPlacement.top, bool? showArrow, double? width, double? height, VoidCallback? onTap, VoidCallback? onLongTap})" + } + }, + "TPopoverThemeData": { + "kind": "class", + "members": { + "field:backgroundColor": "final Color?", + "field:padding": "final EdgeInsetsGeometry?", + "field:minWidth": "final double?", + "field:maxWidth": "final double?", + "field:maxHeight": "final double?", + "field:borderRadius": "final BorderRadius?", + "field:barrierColor": "final Color?", + "field:arrowSize": "final double?", + "field:offset": "final double?", + "field:boxShadow": "final List?", + "constructor:new": "const ({this.backgroundColor, this.padding, this.minWidth, this.maxWidth, this.maxHeight, this.borderRadius, this.barrierColor, this.arrowSize, this.offset, this.boxShadow})", + "method:merge": "TPopoverThemeData merge (TPopoverThemeData? other)", + "method:copyWith": "TPopoverThemeData copyWith ({Color? backgroundColor, EdgeInsetsGeometry? padding, double? minWidth, double? maxWidth, double? maxHeight, BorderRadius? borderRadius, Color? barrierColor, double? arrowSize, double? offset, List? boxShadow})", + "method:lerp": "TPopoverThemeData lerp (ThemeExtension? other, double t)" + } + }, + "TPopoverColorPreset": { + "kind": "enum", + "members": { + "value:defaultTheme": "defaultTheme", + "value:light": "light", + "value:primary": "primary", + "value:success": "success", + "value:warning": "warning", + "value:danger": "danger" + } + }, + "TPopoverPlacement": { + "kind": "enum", + "members": { + "value:topLeft": "topLeft", + "value:top": "top", + "value:topRight": "topRight", + "value:rightTop": "rightTop", + "value:right": "right", + "value:rightBottom": "rightBottom", + "value:bottomRight": "bottomRight", + "value:bottom": "bottom", + "value:bottomLeft": "bottomLeft", + "value:leftBottom": "leftBottom", + "value:left": "left", + "value:leftTop": "leftTop" + } + }, + "TPopup": { + "kind": "class", + "members": { + "method:show": "static TPopupHandle show (BuildContext context, {required TPopupOptions options, BuildContext? navigatorContext, bool useRootNavigator = false})" + } + }, + "TPopupHeader": { + "kind": "class", + "members": { + "constructor:new": "const ({super.key, this.cancelButton, this.title, this.confirmButton})", + "field:cancelButton": "final Widget?", + "field:title": "final Widget?", + "field:confirmButton": "final Widget?", + "field:headerHeight": "static const double", + "method:build": "Widget build (BuildContext context)" + } + }, + "TPopupHandle": { + "kind": "class", + "members": { + "field:options": "final TPopupOptions", + "field:themeContext": "final BuildContext", + "field:navigatorContext": "final BuildContext?", + "field:useRootNavigator": "final bool", + "get:result": "Future result", + "get:isShowing": "bool isShowing", + "method:open": "void open ([BuildContext? context])", + "method:close": "void close ([Object? result])" + } + }, + "TPopupInset": { + "kind": "class", + "members": { + "constructor:new": "const ()" + } + }, + "TPopupBottomInset": { + "kind": "class", + "members": { + "constructor:new": "const ({this.left = 0, this.right = 0})", + "field:left": "final double", + "field:right": "final double" + } + }, + "TPopupTopInset": { + "kind": "class", + "members": { + "constructor:new": "const ({this.left = 0, this.right = 0})", + "field:left": "final double", + "field:right": "final double" + } + }, + "TPopupLeftInset": { + "kind": "class", + "members": { + "constructor:new": "const ({this.top = 0, this.bottom = 0})", + "field:top": "final double", + "field:bottom": "final double" + } + }, + "TPopupRightInset": { + "kind": "class", + "members": { + "constructor:new": "const ({this.top = 0, this.bottom = 0})", + "field:top": "final double", + "field:bottom": "final double" + } + }, + "TPopupOptions": { + "kind": "class", + "members": { + "constructor:new": "const ({required this.child, this.placement = TPopupPlacement.bottom, this.width, this.height, this.inset, this.radius, this.backgroundColor, this.overlay, this.destroyOnClose = false, this.animationDuration, this.headerBuilder, this.closeBuilder, this.onOpened, this.onClosed, this.onVisibleChange, this.useSafeArea = false})", + "constructor:bottom": "factory ({required Widget child, double? height, TPopupBottomInset? inset, TPopupHeaderBuilder? headerBuilder, double? radius, Color? backgroundColor, TPopupOverlayConfig? overlay, bool destroyOnClose = false, Duration? animationDuration, VoidCallback? onOpened, VoidCallback? onClosed, TPopupVisibleChangeCallback? onVisibleChange, bool useSafeArea = false})", + "constructor:center": "factory ({required Widget child, double? width, double? height, TPopupSlotBuilder? closeBuilder, double? radius, Color? backgroundColor, TPopupOverlayConfig? overlay, bool destroyOnClose = false, Duration? animationDuration, VoidCallback? onOpened, VoidCallback? onClosed, TPopupVisibleChangeCallback? onVisibleChange, bool useSafeArea = false})", + "constructor:top": "factory ({required Widget child, double? height, TPopupTopInset? inset, double? radius, Color? backgroundColor, TPopupOverlayConfig? overlay, bool destroyOnClose = false, Duration? animationDuration, VoidCallback? onOpened, VoidCallback? onClosed, TPopupVisibleChangeCallback? onVisibleChange, bool useSafeArea = false})", + "constructor:left": "factory ({required Widget child, double? width, TPopupLeftInset? inset, double? radius, Color? backgroundColor, TPopupOverlayConfig? overlay, bool destroyOnClose = false, Duration? animationDuration, VoidCallback? onOpened, VoidCallback? onClosed, TPopupVisibleChangeCallback? onVisibleChange, bool useSafeArea = false})", + "constructor:right": "factory ({required Widget child, double? width, TPopupRightInset? inset, double? radius, Color? backgroundColor, TPopupOverlayConfig? overlay, bool destroyOnClose = false, Duration? animationDuration, VoidCallback? onOpened, VoidCallback? onClosed, TPopupVisibleChangeCallback? onVisibleChange, bool useSafeArea = false})", + "field:child": "final Widget", + "field:placement": "final TPopupPlacement", + "field:width": "final double?", + "field:height": "final double?", + "field:inset": "final TPopupInset?", + "field:radius": "final double?", + "field:backgroundColor": "final Color?", + "field:overlay": "final TPopupOverlayConfig?", + "get:overlayConfig": "TPopupOverlayConfig overlayConfig", + "field:destroyOnClose": "final bool", + "field:animationDuration": "final Duration?", + "field:headerBuilder": "final TPopupHeaderBuilder?", + "field:closeBuilder": "final TPopupSlotBuilder?", + "field:onOpened": "final VoidCallback?", + "field:onClosed": "final VoidCallback?", + "field:onVisibleChange": "final TPopupVisibleChangeCallback?", + "field:useSafeArea": "final bool", + "method:copyWith": "TPopupOptions copyWith ({Widget? child, TPopupPlacement? placement, Object? width = _unset, Object? height = _unset, Object? inset = _unset, Object? radius = _unset, Object? backgroundColor = _unset, Object? overlay = _unset, bool? destroyOnClose, Duration? animationDuration, Object? headerBuilder = _unset, Object? closeBuilder = _unset, Object? onOpened = _unset, Object? onClosed = _unset, Object? onVisibleChange = _unset, bool? useSafeArea})", + "method:normalized": "TPopupOptions normalized ()", + "method:assertPlacementParams": "void assertPlacementParams ()" + } + }, + "TPopupPlacement": { + "kind": "enum", + "members": { + "value:top": "top", + "value:left": "left", + "value:right": "right", + "value:bottom": "bottom", + "value:center": "center" + } + }, + "TPopupHeaderBuilder": { + "kind": "typedef", + "members": { + "signature": "typedef TPopupHeaderBuilder = Widget Function(BuildContext context, VoidCallback close);" + } + }, + "TPopupSlotBuilder": { + "kind": "typedef", + "members": { + "signature": "typedef TPopupSlotBuilder = Widget Function(BuildContext context, VoidCallback close);" + } + }, + "TPopupOverlayConfig": { + "kind": "class", + "members": { + "field:showOverlay": "final bool", + "field:color": "final Color?", + "field:preventTap": "final bool", + "field:closeOnClick": "final bool?", + "field:onClick": "final VoidCallback?", + "constructor:new": "const ({this.showOverlay = true, this.color, this.preventTap = true, this.closeOnClick, this.onClick})", + "get:effectiveCloseOnClick": "bool effectiveCloseOnClick" + } + }, + "TPopupTrigger": { + "kind": "enum", + "members": { + "value:overlay": "overlay", + "value:close": "close", + "value:api": "api", + "value:systemBack": "systemBack", + "value:custom": "custom" + } + }, + "TPopupVisibleChangeCallback": { + "kind": "typedef", + "members": { + "signature": "typedef TPopupVisibleChangeCallback = void Function(bool visible, TPopupTrigger trigger);" + } + }, + "TPopupThemeData": { + "kind": "class", + "members": { + "field:barrierColor": "final Color?", + "field:panelRadius": "final double?", + "field:panelBackgroundColor": "final Color?", + "field:edgeHeight": "final double?", + "field:drawerWidth": "final double?", + "field:centerSize": "final Size?", + "constructor:new": "const ({this.barrierColor, this.panelRadius, this.panelBackgroundColor, this.edgeHeight, this.drawerWidth, this.centerSize})", + "method:merge": "TPopupThemeData merge (TPopupThemeData? other)", + "method:copyWith": "TPopupThemeData copyWith ({Color? barrierColor, double? panelRadius, Color? panelBackgroundColor, double? edgeHeight, double? drawerWidth, Size? centerSize})", + "method:lerp": "TPopupThemeData lerp (ThemeExtension? other, double t)", + "method:lerpDouble": "static double? lerpDouble (double? a, double? b, double t)" + } + }, + "TProgressVariant": { + "kind": "enum", + "members": { + "value:linear": "linear", + "value:plump": "plump", + "value:circular": "circular", + "value:microCircular": "microCircular", + "value:button": "button", + "value:microButton": "microButton" + } + }, + "TProgressStatus": { + "kind": "enum", + "members": { + "value:normal": "normal", + "value:warning": "warning", + "value:error": "error", + "value:success": "success" + } + }, + "TProgress": { + "kind": "class", + "members": { + "constructor:linear": "({Key? key, double? value, TProgressStatus status = TProgressStatus.normal, Widget? label, LinearGradient? gradient, String? semanticsLabel, String? semanticsValue})", + "constructor:plump": "({Key? key, double? value, TProgressStatus status = TProgressStatus.normal, Widget? label, LinearGradient? gradient, String? semanticsLabel, String? semanticsValue})", + "constructor:circular": "({Key? key, double? value, TProgressStatus status = TProgressStatus.normal, Widget? label, String? semanticsLabel, String? semanticsValue})", + "constructor:microCircular": "({Key? key, double? value, TProgressStatus status = TProgressStatus.normal, Widget? label, String? semanticsLabel, String? semanticsValue})", + "constructor:button": "({Key? key, double? value, TProgressStatus status = TProgressStatus.normal, Widget? label, LinearGradient? gradient, String? semanticsLabel, String? semanticsValue, VoidCallback? onTap, VoidCallback? onLongPress})", + "constructor:microButton": "({Key? key, double? value, TProgressStatus status = TProgressStatus.normal, Widget? label, String? semanticsLabel, String? semanticsValue, VoidCallback? onTap, VoidCallback? onLongPress})", + "field:variant": "final TProgressVariant", + "field:value": "final double?", + "field:status": "final TProgressStatus", + "field:label": "final Widget?", + "field:gradient": "final LinearGradient?", + "field:semanticsLabel": "final String?", + "field:semanticsValue": "final String?", + "field:onTap": "final VoidCallback?", + "field:onLongPress": "final VoidCallback?", + "method:build": "Widget build (BuildContext context)" + } + }, + "TProgressThemeData": { + "kind": "class", + "members": { + "field:strokeWidth": "final double?", + "field:color": "final Color?", + "field:backgroundColor": "final Color?", + "field:circleInnerBgColor": "final Color?", + "field:linearBorderRadius": "final BorderRadiusGeometry?", + "field:circleSize": "final double?", + "field:animationDuration": "final Duration?", + "field:indeterminateAnimationDuration": "final Duration?", + "field:indeterminateLinearSegmentFraction": "final double?", + "field:indeterminateCircularValue": "final double?", + "constructor:new": "const ({this.strokeWidth, this.color, this.backgroundColor, this.circleInnerBgColor, this.linearBorderRadius, this.circleSize, this.animationDuration, this.indeterminateAnimationDuration, this.indeterminateLinearSegmentFraction, this.indeterminateCircularValue})", + "method:resolveStrokeWidth": "double resolveStrokeWidth (double fallback)", + "method:resolveCircleSize": "double resolveCircleSize (double fallback)", + "method:resolveColor": "Color resolveColor (Color fallback)", + "method:resolveBackgroundColor": "Color resolveBackgroundColor (Color fallback)", + "method:resolveLinearBorderRadius": "BorderRadiusGeometry resolveLinearBorderRadius (BorderRadiusGeometry fallback)", + "method:resolveCircleInnerBgColor": "Color resolveCircleInnerBgColor (Color fallback)", + "method:copyWith": "TProgressThemeData copyWith ({double? strokeWidth, Color? color, Color? backgroundColor, Color? circleInnerBgColor, BorderRadiusGeometry? linearBorderRadius, double? circleSize, Duration? animationDuration, Duration? indeterminateAnimationDuration, double? indeterminateLinearSegmentFraction, double? indeterminateCircularValue})", + "method:lerp": "TProgressThemeData lerp (ThemeExtension? other, double t)" + } + }, + "TRadioIconBuilder": { + "kind": "typedef", + "members": { + "signature": "typedef TRadioIconBuilder = Widget Function(BuildContext context, bool selected, bool disabled);" + } + }, + "TRadioSize": { + "kind": "enum", + "members": { + "value:small": "small", + "value:medium": "medium", + "value:large": "large" + } + }, + "TRadioIconType": { + "kind": "enum", + "members": { + "value:dot": "dot", + "value:check": "check", + "value:fill": "fill" + } + }, + "TRadioVariant": { + "kind": "enum", + "members": { + "value:inline": "inline", + "value:block": "block", + "value:card": "card" + } + }, + "TRadioOption": { + "kind": "class", + "members": { + "constructor:new": "const ({required this.value, required this.label, this.subTitle, this.disabled = false})", + "field:value": "final T", + "field:label": "final String", + "field:subTitle": "final String?", + "field:disabled": "final bool" + } + }, + "TRadio": { + "kind": "class", + "members": { + "constructor:new": "const ({super.key, required this.value, this.title, this.subTitle, this.size = TRadioSize.medium, this.iconType = TRadioIconType.fill, this.variant = TRadioVariant.block, this.disabled = false, this.contentDirection = TContentDirection.right, this.titleMaxLines = 3, this.subTitleMaxLines = 5, this.customIconBuilder})", + "field:value": "final T", + "field:title": "final String?", + "field:subTitle": "final String?", + "field:size": "final TRadioSize", + "field:iconType": "final TRadioIconType", + "field:variant": "final TRadioVariant", + "field:disabled": "final bool", + "field:contentDirection": "final TContentDirection", + "field:titleMaxLines": "final int", + "field:subTitleMaxLines": "final int", + "field:customIconBuilder": "final TRadioIconBuilder?", + "method:build": "Widget build (BuildContext context)" + } + }, + "TRadioGroup": { + "kind": "class", + "members": { + "constructor:new": "const ({super.key, required this.value, this.onChanged, required this.child})", + "constructor:options": "const ({super.key, required this.value, required List> options, this.onChanged, Axis direction = Axis.vertical, int columns = 1, TRadioVariant variant = TRadioVariant.block, bool? showDivider, TContentDirection contentDirection = TContentDirection.right, TRadioSize size = TRadioSize.medium, TRadioIconType iconType = TRadioIconType.fill, int titleMaxLines = 3, int subTitleMaxLines = 5})", + "field:value": "final T?", + "field:onChanged": "final ValueChanged?", + "field:child": "final Widget", + "method:build": "Widget build (BuildContext context)" + } + }, + "TRadioThemeData": { + "kind": "class", + "members": { + "field:selectColor": "final Color?", + "field:disableColor": "final Color?", + "field:titleColor": "final Color?", + "field:subTitleColor": "final Color?", + "field:backgroundColor": "final Color?", + "field:spacing": "final double?", + "field:insetSpacing": "final double?", + "constructor:new": "const ({this.selectColor, this.disableColor, this.titleColor, this.subTitleColor, this.backgroundColor, this.spacing, this.insetSpacing})", + "method:copyWith": "TRadioThemeData copyWith ({Color? selectColor, Color? disableColor, Color? titleColor, Color? subTitleColor, Color? backgroundColor, double? spacing, double? insetSpacing})", + "method:lerp": "TRadioThemeData lerp (ThemeExtension? other, double t)" + } + }, + "TRateIconBuilder": { + "kind": "typedef", + "members": { + "signature": "typedef TRateIconBuilder = Widget Function(bool filled);" + } + }, + "TRate": { + "kind": "class", + "members": { + "constructor:new": "const ({super.key, required this.value, this.onChanged, this.onChangeStart, this.onChangeEnd, this.count = 5, this.allowHalf = false, this.showValueIndicator = true, this.icon, this.texts})", + "field:value": "final double", + "field:onChanged": "final ValueChanged?", + "field:onChangeStart": "final ValueChanged?", + "field:onChangeEnd": "final ValueChanged?", + "field:count": "final int", + "field:allowHalf": "final bool", + "field:showValueIndicator": "final bool", + "field:icon": "final TRateIconBuilder?", + "field:texts": "final List?", + "method:createState": "State createState ()" + } + }, + "TRateThemeData": { + "kind": "class", + "members": { + "constructor:new": "const ({this.starColor, this.inactiveStarColor, this.iconSize, this.iconGap, this.textWidth, this.textGap, this.textStyle, this.overlayBoxShadow})", + "field:starColor": "final Color?", + "field:inactiveStarColor": "final Color?", + "field:iconSize": "final double?", + "field:iconGap": "final double?", + "field:textWidth": "final double?", + "field:textGap": "final double?", + "field:textStyle": "final TextStyle?", + "field:overlayBoxShadow": "final List?", + "method:copyWith": "TRateThemeData copyWith ({Color? starColor, Color? inactiveStarColor, double? iconSize, double? iconGap, double? textWidth, double? textGap, TextStyle? textStyle, List? overlayBoxShadow})", + "method:lerp": "TRateThemeData lerp (ThemeExtension? other, double t)" + } + }, + "TPullDownRefresh": { + "kind": "class", + "members": { + "field:child": "final Widget", + "field:onRefresh": "final FutureOr Function()?", + "field:onLoadMore": "final FutureOr Function()?", + "field:lowerThreshold": "final double", + "field:controller": "final TPullDownRefreshController?", + "field:texts": "final TPullDownRefreshTexts?", + "field:refreshTimeout": "final Duration?", + "field:loadingBarHeight": "final double", + "field:maxBarHeight": "final double", + "field:successDuration": "final Duration", + "field:onStateChanged": "final ValueChanged?", + "constructor:new": "const ({super.key, required this.child, this.onRefresh, this.onLoadMore, this.lowerThreshold = 50, this.controller, this.texts, this.refreshTimeout = const Duration(milliseconds: 3000), double? loadingBarHeight, double? maxBarHeight, this.successDuration = const Duration(milliseconds: 500), this.onStateChanged})", + "method:createState": "State createState ()" + } + }, + "TPullDownRefreshController": { + "kind": "class", + "members": { + "constructor:new": "()", + "method:bind": "void bind (Future Function() refresh)", + "method:unbind": "void unbind ()", + "method:refresh": "Future refresh ()" + } + }, + "TPullDownRefreshTexts": { + "kind": "class", + "members": { + "field:pullToRefresh": "final String", + "field:releaseToRefresh": "final String", + "field:refreshing": "final String", + "field:refreshComplete": "final String", + "constructor:new": "const ({required this.pullToRefresh, required this.releaseToRefresh, required this.refreshing, required this.refreshComplete})" + } + }, + "TPullDownRefreshState": { + "kind": "enum", + "members": { + "value:inactive": "inactive", + "value:dragging": "dragging", + "value:ready": "ready", + "value:refreshing": "refreshing", + "value:done": "done", + "value:timeout": "timeout" + } + }, + "TResultStatus": { + "kind": "enum", + "members": { + "value:info": "info", + "value:success": "success", + "value:warning": "warning", + "value:error": "error" + } + }, + "TResult": { + "kind": "class", + "members": { + "constructor:new": "const ({Key? key, this.description, this.icon, this.status = TResultStatus.info, this.title = ''})", + "field:description": "final String?", + "field:icon": "final Widget?", + "field:status": "final TResultStatus", + "field:title": "final String", + "method:build": "Widget build (BuildContext context)" + } + }, + "TResultThemeData": { + "kind": "class", + "members": { + "field:iconSize": "final double?", + "field:titleStyle": "final TextStyle?", + "field:descriptionStyle": "final TextStyle?", + "constructor:new": "const ({this.iconSize, this.titleStyle, this.descriptionStyle})", + "method:copyWith": "TResultThemeData copyWith ({double? iconSize, TextStyle? titleStyle, TextStyle? descriptionStyle})", + "method:lerp": "TResultThemeData lerp (ThemeExtension? other, double t)" + } + }, + "TSearchBar": { + "kind": "class", + "members": { + "constructor:new": "const ({super.key, this.controller, this.initialValue, this.onChanged, this.onSubmitted, this.onFocusChanged, this.enabled = true, this.readOnly = false, this.hintText, this.actionText, this.onActionPressed, this.onClearPressed, this.clearable = true, this.autofocus = false, this.inputType = TextInputType.text, this.inputAction = TextInputAction.search, this.maxLength, this.maxCharacter, this.inputFormatters, this.variant, this.textAlignment, this.focusNode})", + "field:controller": "final TextEditingController?", + "field:initialValue": "final String?", + "field:onChanged": "final ValueChanged?", + "field:onSubmitted": "final ValueChanged?", + "field:onFocusChanged": "final ValueChanged?", + "field:enabled": "final bool", + "field:readOnly": "final bool", + "field:hintText": "final String?", + "field:actionText": "final String?", + "field:onActionPressed": "final VoidCallback?", + "field:onClearPressed": "final VoidCallback?", + "field:clearable": "final bool", + "field:autofocus": "final bool", + "field:inputType": "final TextInputType", + "field:inputAction": "final TextInputAction", + "field:maxLength": "final int?", + "field:maxCharacter": "final int?", + "field:inputFormatters": "final List?", + "field:variant": "final TSearchBarVariant?", + "field:textAlignment": "final TSearchBarAlignment?", + "field:focusNode": "final FocusNode?", + "method:createState": "State createState ()" + } + }, + "TSearchBarThemeData": { + "kind": "class", + "members": { + "constructor:new": "const ({this.height, this.inputBackgroundColor, this.contentPadding, this.textStyle, this.hintStyle, this.searchIconTheme, this.clearIconTheme, this.actionTextStyle, this.actionGap, this.cursorHeight})", + "field:height": "final double?", + "field:inputBackgroundColor": "final Color?", + "field:contentPadding": "final EdgeInsetsGeometry?", + "field:textStyle": "final TextStyle?", + "field:hintStyle": "final TextStyle?", + "field:searchIconTheme": "final IconThemeData?", + "field:clearIconTheme": "final IconThemeData?", + "field:actionTextStyle": "final TextStyle?", + "field:actionGap": "final double?", + "field:cursorHeight": "final double?", + "method:copyWith": "TSearchBarThemeData copyWith ({double? height, Color? inputBackgroundColor, EdgeInsetsGeometry? contentPadding, TextStyle? textStyle, TextStyle? hintStyle, IconThemeData? searchIconTheme, IconThemeData? clearIconTheme, TextStyle? actionTextStyle, double? actionGap, double? cursorHeight})", + "method:lerp": "TSearchBarThemeData lerp (ThemeExtension? other, double t)" + } + }, + "TSearchBarVariant": { + "kind": "enum", + "members": { + "value:square": "square", + "value:round": "round" + } + }, + "TSearchBarAlignment": { + "kind": "enum", + "members": { + "value:left": "left", + "value:center": "center" + } + }, + "TSideBar": { + "kind": "class", + "members": { + "constructor:new": "const ({Key? key, required this.value, this.children = const [], this.onChanged, this.height, this.variant = TSideBarVariant.line, this.width = 103, this.loading = false, this.loadingWidget})", + "field:value": "final int", + "field:children": "final List", + "field:onChanged": "final ValueChanged?", + "field:variant": "final TSideBarVariant", + "field:width": "final double", + "field:height": "final double?", + "field:loading": "final bool", + "field:loadingWidget": "final Widget?", + "method:createState": "State createState ()" + } + }, + "TSideBarItem": { + "kind": "class", + "members": { + "constructor:new": "const ({this.badge, this.disabled = false, this.icon, this.label = '', this.value = -1})", + "field:badge": "final TBadgeConfig?", + "field:disabled": "final bool", + "field:icon": "final IconData?", + "field:label": "final String", + "field:value": "final int" + } + }, + "TSideBarVariant": { + "kind": "enum", + "members": { + "value:line": "line", + "value:tag": "tag" + } + }, + "TSideBarThemeData": { + "kind": "class", + "members": { + "field:contentPadding": "final EdgeInsetsGeometry?", + "field:textStyle": "final TextStyle?", + "field:selectedTextStyle": "final TextStyle?", + "field:selectedBgColor": "final Color?", + "field:unSelectedBgColor": "final Color?", + "constructor:new": "const ({this.contentPadding, this.textStyle, this.selectedTextStyle, this.selectedBgColor, this.unSelectedBgColor})", + "method:copyWith": "TSideBarThemeData copyWith ({EdgeInsetsGeometry? contentPadding, TextStyle? textStyle, TextStyle? selectedTextStyle, Color? selectedBgColor, Color? unSelectedBgColor})", + "method:lerp": "TSideBarThemeData lerp (ThemeExtension? other, double t)" + } + }, + "TSkeletonAnimation": { + "kind": "enum", + "members": { + "value:gradient": "gradient", + "value:flashed": "flashed" + } + }, + "TSkeletonVariant": { + "kind": "enum", + "members": { + "value:avatar": "avatar", + "value:image": "image", + "value:text": "text", + "value:paragraph": "paragraph" + } + }, + "TSkeleton": { + "kind": "class", + "members": { + "constructor:new": "const ({super.key, TSkeletonVariant variant = TSkeletonVariant.text, this.animation, this.delay = Duration.zero})", + "constructor:custom": "const ({super.key, required TSkeletonLayout layout, this.animation, this.delay = Duration.zero})", + "field:variant": "final TSkeletonVariant?", + "field:layout": "final TSkeletonLayout?", + "field:animation": "final TSkeletonAnimation?", + "field:delay": "final Duration", + "method:createState": "State createState ()" + } + }, + "TSkeletonBlockShape": { + "kind": "enum", + "members": { + "value:rounded": "rounded", + "value:circle": "circle", + "value:rectangle": "rectangle" + } + }, + "TSkeletonLayout": { + "kind": "class", + "members": { + "constructor:new": "const ({required this.rows, this.rowSpacing})", + "field:rows": "final List>", + "field:rowSpacing": "final double?" + } + }, + "TSkeletonBlockStyle": { + "kind": "class", + "members": { + "constructor:new": "const ({this.color, this.borderRadius, this.shape = TSkeletonBlockShape.rounded})", + "field:color": "final Color?", + "field:borderRadius": "final double?", + "field:shape": "final TSkeletonBlockShape" + } + }, + "TSkeletonBlock": { + "kind": "class", + "members": { + "constructor:new": "const ({this.width, this.height = 16, this.flex = 1, this.margin = EdgeInsets.zero, this.style = const TSkeletonBlockStyle()})", + "constructor:line": "const ({this.width, this.height = 16, this.flex = 1, this.margin = EdgeInsets.zero, this.style = const TSkeletonBlockStyle()})", + "constructor:circle": "const ({this.width = 48, this.height = 48, this.flex, this.margin = EdgeInsets.zero, this.style = const TSkeletonBlockStyle(shape: TSkeletonBlockShape.circle)})", + "constructor:rectangle": "const ({this.width, this.height = 16, this.flex = 1, this.margin = EdgeInsets.zero, this.style = const TSkeletonBlockStyle(shape: TSkeletonBlockShape.rectangle)})", + "constructor:spacer": "const ({this.width, this.height, this.flex, this.margin = EdgeInsets.zero})", + "field:width": "final double?", + "field:height": "final double?", + "field:flex": "final int?", + "field:margin": "final EdgeInsets", + "field:style": "final TSkeletonBlockStyle", + "field:isSpacer": "final bool" + } + }, + "TSkeletonThemeData": { + "kind": "class", + "members": { + "constructor:new": "const ({this.blockColor, this.highlightColor, this.borderRadius, this.rowSpacing})", + "field:blockColor": "final Color?", + "field:highlightColor": "final Color?", + "field:borderRadius": "final double?", + "field:rowSpacing": "final double?", + "method:copyWith": "TSkeletonThemeData copyWith ({Color? blockColor, Color? highlightColor, double? borderRadius, double? rowSpacing})", + "method:lerp": "TSkeletonThemeData lerp (TSkeletonThemeData? other, double t)" + } + }, + "TSliderThumbFormatter": { + "kind": "typedef", + "members": { + "signature": "typedef TSliderThumbFormatter = String Function(double value);" + } + }, + "TSliderVariant": { + "kind": "enum", + "members": { + "value:normal": "normal", + "value:capsule": "capsule" + } + }, + "TSlider": { + "kind": "class", + "members": { + "constructor:new": "const ({super.key, required this.value, this.onChanged, this.onChangeStart, this.onChangeEnd, this.min = 0, this.max = 1, this.divisions, this.showThumbValue = false, this.thumbFormatter, this.showScaleValue = false, this.scaleFormatter, this.variant = TSliderVariant.normal})", + "field:value": "final double", + "field:onChanged": "final ValueChanged?", + "field:onChangeStart": "final ValueChanged?", + "field:onChangeEnd": "final ValueChanged?", + "field:min": "final double", + "field:max": "final double", + "field:divisions": "final int?", + "field:showThumbValue": "final bool", + "field:thumbFormatter": "final TSliderThumbFormatter?", + "field:showScaleValue": "final bool", + "field:scaleFormatter": "final TSliderThumbFormatter?", + "field:variant": "final TSliderVariant", + "method:build": "Widget build (BuildContext context)" + } + }, + "TRangeSlider": { + "kind": "class", + "members": { + "constructor:new": "const ({super.key, required this.value, this.onChanged, this.onChangeStart, this.onChangeEnd, this.min = 0, this.max = 1, this.divisions, this.showThumbValue = false, this.thumbFormatter, this.showScaleValue = false, this.scaleFormatter, this.variant = TSliderVariant.normal})", + "field:value": "final RangeValues", + "field:onChanged": "final ValueChanged?", + "field:onChangeStart": "final ValueChanged?", + "field:onChangeEnd": "final ValueChanged?", + "field:min": "final double", + "field:max": "final double", + "field:divisions": "final int?", + "field:showThumbValue": "final bool", + "field:thumbFormatter": "final TSliderThumbFormatter?", + "field:showScaleValue": "final bool", + "field:scaleFormatter": "final TSliderThumbFormatter?", + "field:variant": "final TSliderVariant", + "method:build": "Widget build (BuildContext context)" + } + }, + "TSliderThemeData": { + "kind": "class", + "members": { + "constructor:new": "const ({this.activeTrackColor, this.inactiveTrackColor, this.thumbColor, this.disabledThumbColor, this.thumbBorderColor, this.disabledThumbBorderColor, this.overlayColor, this.valueIndicatorColor, this.valueIndicatorTextColor, this.trackHeight, this.decoration})", + "field:activeTrackColor": "final Color?", + "field:inactiveTrackColor": "final Color?", + "field:thumbColor": "final Color?", + "field:disabledThumbColor": "final Color?", + "field:thumbBorderColor": "final Color?", + "field:disabledThumbBorderColor": "final Color?", + "field:overlayColor": "final Color?", + "field:valueIndicatorColor": "final Color?", + "field:valueIndicatorTextColor": "final Color?", + "field:trackHeight": "final double?", + "field:decoration": "final Decoration?", + "method:copyWith": "TSliderThemeData copyWith ({Color? activeTrackColor, Color? inactiveTrackColor, Color? thumbColor, Color? disabledThumbColor, Color? thumbBorderColor, Color? disabledThumbBorderColor, Color? overlayColor, Color? valueIndicatorColor, Color? valueIndicatorTextColor, double? trackHeight, Decoration? decoration})", + "method:lerp": "TSliderThemeData lerp (ThemeExtension? other, double t)" + } + }, + "TStepper": { + "kind": "class", + "members": { + "constructor:new": "const ({super.key, required this.value, this.onChanged, this.min = 0, this.max = 100, this.step = 1, this.size, this.variant})", + "field:value": "final num", + "field:onChanged": "final ValueChanged?", + "field:min": "final num", + "field:max": "final num", + "field:step": "final num", + "field:size": "final TStepperSize?", + "field:variant": "final TStepperVariant?", + "method:createState": "State createState ()" + } + }, + "TStepperSize": { + "kind": "enum", + "members": { + "value:small": "small", + "value:medium": "medium", + "value:large": "large" + } + }, + "TStepperVariant": { + "kind": "enum", + "members": { + "value:normal": "normal", + "value:filled": "filled", + "value:outline": "outline" + } + }, + "TStepperThemeData": { + "kind": "class", + "members": { + "constructor:new": "const ({this.inputWidth, this.controlSize, this.iconSize, this.spacing, this.borderRadius, this.borderWidth, this.foregroundColor, this.disabledForegroundColor, this.backgroundColor, this.disabledBackgroundColor, this.borderColor, this.textStyle})", + "field:inputWidth": "final double?", + "field:controlSize": "final double?", + "field:iconSize": "final double?", + "field:spacing": "final double?", + "field:borderRadius": "final BorderRadius?", + "field:borderWidth": "final double?", + "field:foregroundColor": "final Color?", + "field:disabledForegroundColor": "final Color?", + "field:backgroundColor": "final Color?", + "field:disabledBackgroundColor": "final Color?", + "field:borderColor": "final Color?", + "field:textStyle": "final TextStyle?", + "method:copyWith": "TStepperThemeData copyWith ({double? inputWidth, double? controlSize, double? iconSize, double? spacing, BorderRadius? borderRadius, double? borderWidth, Color? foregroundColor, Color? disabledForegroundColor, Color? backgroundColor, Color? disabledBackgroundColor, Color? borderColor, TextStyle? textStyle})", + "method:lerp": "TStepperThemeData lerp (ThemeExtension? other, double t)" + } + }, + "TStepsItemData": { + "kind": "class", + "members": { + "constructor:new": "const ({this.title, this.content, this.icon, this.errorIcon, this.customContent, this.customTitle})", + "field:title": "final String?", + "field:content": "final String?", + "field:icon": "final IconData?", + "field:errorIcon": "final IconData?", + "field:customContent": "final Widget?", + "field:customTitle": "final Widget?" + } + }, + "TStepsDirection": { + "kind": "enum", + "members": { + "value:horizontal": "horizontal", + "value:vertical": "vertical" + } + }, + "TStepsIndicator": { + "kind": "enum", + "members": { + "value:standard": "standard", + "value:dot": "dot" + } + }, + "TStepsStatus": { + "kind": "enum", + "members": { + "value:process": "process", + "value:error": "error" + } + }, + "TSteps": { + "kind": "class", + "members": { + "constructor:progress": "const ({super.key, required this.steps, this.value = 0, this.direction = TStepsDirection.horizontal, this.status = TStepsStatus.process, this.indicator = TStepsIndicator.standard, this.onChange})", + "constructor:selectable": "const ({super.key, required this.steps, required this.value, required ValueChanged onChange})", + "constructor:display": "const ({super.key, required this.steps, this.direction = TStepsDirection.vertical})", + "field:steps": "final List", + "field:direction": "final TStepsDirection", + "field:value": "final int", + "field:status": "final TStepsStatus", + "field:indicator": "final TStepsIndicator", + "field:onChange": "final ValueChanged?", + "method:build": "Widget build (BuildContext context)" + } + }, + "TSwipeCellSide": { + "kind": "enum", + "members": { + "value:start": "start", + "value:end": "end" + } + }, + "TSwipeCellChanged": { + "kind": "typedef", + "members": { + "signature": "typedef TSwipeCellChanged = void Function(TSwipeCellSide side, bool isOpen);" + } + }, + "TSwipeCellController": { + "kind": "class", + "members": { + "method:open": "Future open (TSwipeCellSide side)", + "method:close": "Future close ()" + } + }, + "TSwipeCell": { + "kind": "class", + "members": { + "constructor:new": "const ({Key? key, required this.child, this.enabled = true, this.start, this.end, this.onOpenChanged, this.controller, this.initialOpenSide, this.closeOnScroll = true})", + "field:child": "final Widget", + "field:enabled": "final bool", + "field:start": "final TSwipeCellPanel?", + "field:end": "final TSwipeCellPanel?", + "field:onOpenChanged": "final TSwipeCellChanged?", + "field:controller": "final TSwipeCellController?", + "field:initialOpenSide": "final TSwipeCellSide?", + "field:closeOnScroll": "final bool", + "method:createState": "State createState ()" + } + }, + "TSwipeCellAction": { + "kind": "class", + "members": { + "constructor:new": "const ({Key? key, this.backgroundColor, this.onPressed, this.icon, this.iconColor, this.iconSize, this.iconLabelSpacing, this.label, this.labelStyle, this.builder})", + "field:backgroundColor": "final Color?", + "field:onPressed": "final void Function(BuildContext context)?", + "field:icon": "final IconData?", + "field:iconColor": "final Color?", + "field:iconSize": "final double?", + "field:iconLabelSpacing": "final double?", + "field:label": "final String?", + "field:labelStyle": "final TextStyle?", + "field:builder": "final WidgetBuilder?", + "method:build": "Widget build (BuildContext context)" + } + }, + "TSwipeCellPanel": { + "kind": "class", + "members": { + "constructor:new": "({required this.children})", + "field:children": "final List", + "method:build": "Widget build (BuildContext context)" + } + }, + "TSwipeCellThemeData": { + "kind": "class", + "members": { + "field:actionPadding": "final EdgeInsetsGeometry?", + "constructor:new": "const ({this.actionPadding})", + "method:merge": "TSwipeCellThemeData merge (TSwipeCellThemeData? other)", + "method:copyWith": "TSwipeCellThemeData copyWith ({EdgeInsetsGeometry? actionPadding})", + "method:lerp": "TSwipeCellThemeData lerp (ThemeExtension? other, double t)" + } + }, + "TSwiperController": { + "kind": "class", + "members": { + "constructor:new": "({this.initialIndex = 0})", + "field:initialIndex": "final int", + "get:index": "int index", + "get:hasClients": "bool hasClients", + "method:jumpTo": "void jumpTo (int index)", + "method:animateTo": "Future animateTo (int index, {Duration? duration, Curve? curve})", + "method:next": "Future next ({Duration? duration, Curve? curve})", + "method:previous": "Future previous ({Duration? duration, Curve? curve})" + } + }, + "TSwiper": { + "kind": "class", + "members": { + "constructor:new": "const ({this.children, this.itemBuilder, this.itemCount, this.controller, this.onChanged, this.loop = false, this.autoplay = false, this.autoplayInterval = const Duration(seconds: 3), this.animationDuration = kThemeAnimationDuration, this.animationCurve = Curves.easeInOut, this.pagination, this.paginationPlacement, this.paginationItemBuilder, this.previousIcon, this.nextIcon, this.pageEffect, this.viewportFraction = 1, this.scrollDirection = Axis.horizontal, this.physics, this.pageSnapping = true, this.padEnds = true, this.clipBehavior = Clip.hardEdge, this.reverse = false, this.dragStartBehavior = DragStartBehavior.start, this.allowImplicitScrolling = false, super.key})", + "field:children": "final List?", + "field:itemBuilder": "final IndexedWidgetBuilder?", + "field:itemCount": "final int?", + "field:controller": "final TSwiperController?", + "field:onChanged": "final ValueChanged?", + "field:loop": "final bool", + "field:autoplay": "final bool", + "field:autoplayInterval": "final Duration", + "field:animationDuration": "final Duration", + "field:animationCurve": "final Curve", + "field:pagination": "final TSwiperPaginationVariant?", + "field:paginationPlacement": "final TSwiperPaginationPlacement?", + "field:paginationItemBuilder": "final TSwiperPaginationItemBuilder?", + "field:previousIcon": "final Widget?", + "field:nextIcon": "final Widget?", + "field:pageEffect": "final TSwiperPageEffect?", + "field:viewportFraction": "final double", + "field:scrollDirection": "final Axis", + "field:physics": "final ScrollPhysics?", + "field:pageSnapping": "final bool", + "field:padEnds": "final bool", + "field:clipBehavior": "final Clip", + "field:reverse": "final bool", + "field:dragStartBehavior": "final DragStartBehavior", + "field:allowImplicitScrolling": "final bool", + "method:createState": "State createState ()" + } + }, + "TSwiperThemeData": { + "kind": "class", + "members": { + "constructor:new": "const ({this.paginationAlignment, this.paginationMargin, this.borderRadius, this.activeColor, this.inactiveColor, this.dotSize, this.activeDotExtent, this.dotSpacing, this.fractionStyle, this.fractionBackgroundColor, this.controlStyle})", + "field:paginationAlignment": "final AlignmentGeometry?", + "field:paginationMargin": "final EdgeInsetsGeometry?", + "field:borderRadius": "final BorderRadiusGeometry?", + "field:activeColor": "final Color?", + "field:inactiveColor": "final Color?", + "field:dotSize": "final double?", + "field:activeDotExtent": "final double?", + "field:dotSpacing": "final double?", + "field:fractionStyle": "final TextStyle?", + "field:fractionBackgroundColor": "final Color?", + "field:controlStyle": "final ButtonStyle?", + "method:copyWith": "TSwiperThemeData copyWith ({AlignmentGeometry? paginationAlignment, EdgeInsetsGeometry? paginationMargin, BorderRadiusGeometry? borderRadius, Color? activeColor, Color? inactiveColor, double? dotSize, double? activeDotExtent, double? dotSpacing, TextStyle? fractionStyle, Color? fractionBackgroundColor, ButtonStyle? controlStyle})", + "method:lerp": "TSwiperThemeData lerp (TSwiperThemeData? other, double t)" + } + }, + "TSwiperPaginationVariant": { + "kind": "enum", + "members": { + "value:none": "none", + "value:dots": "dots", + "value:dotsBar": "dotsBar", + "value:fraction": "fraction", + "value:controls": "controls" + } + }, + "TSwiperPaginationPlacement": { + "kind": "enum", + "members": { + "value:overlay": "overlay", + "value:outside": "outside" + } + }, + "TSwiperPaginationItemBuilder": { + "kind": "typedef", + "members": { + "signature": "typedef TSwiperPaginationItemBuilder = Widget Function(BuildContext context, TSwiperPaginationItemDetails details);" + } + }, + "TSwiperPaginationItemDetails": { + "kind": "class", + "members": { + "constructor:new": "const ({required this.index, required this.currentIndex, required this.itemCount, required this.axis})", + "field:index": "final int", + "field:currentIndex": "final int", + "field:itemCount": "final int", + "field:axis": "final Axis", + "get:isActive": "bool isActive" + } + }, + "TSwiperPageEffect": { + "kind": "enum", + "members": { + "value:none": "none", + "value:cardMargin": "cardMargin", + "value:scale": "scale", + "value:scaleAndFade": "scaleAndFade" + } + }, + "TSwitch": { + "kind": "class", + "members": { + "constructor:new": "const ({super.key, required this.value, this.onChanged, this.size, this.variant, this.loading = false, this.openText, this.closeText})", + "field:value": "final bool", + "field:onChanged": "final ValueChanged?", + "field:size": "final TSwitchSize?", + "field:variant": "final TSwitchVariant?", + "field:loading": "final bool", + "field:openText": "final String?", + "field:closeText": "final String?", + "method:build": "Widget build (BuildContext context)" + } + }, + "TSwitchSize": { + "kind": "enum", + "members": { + "value:large": "large", + "value:medium": "medium", + "value:small": "small" + } + }, + "TSwitchVariant": { + "kind": "enum", + "members": { + "value:filled": "filled", + "value:text": "text", + "value:icon": "icon" + } + }, + "TSwitchThemeData": { + "kind": "class", + "members": { + "field:trackOnColor": "final Color?", + "field:trackOffColor": "final Color?", + "field:disabledTrackOnColor": "final Color?", + "field:disabledTrackOffColor": "final Color?", + "field:thumbColor": "final Color?", + "field:disabledThumbColor": "final Color?", + "field:loadingColor": "final Color?", + "field:thumbContentOnColor": "final Color?", + "field:thumbContentOffColor": "final Color?", + "field:thumbContentOnFont": "final TextStyle?", + "field:thumbContentOffFont": "final TextStyle?", + "constructor:new": "const ({this.trackOnColor, this.trackOffColor, this.disabledTrackOnColor, this.disabledTrackOffColor, this.thumbColor, this.disabledThumbColor, this.loadingColor, this.thumbContentOnColor, this.thumbContentOffColor, this.thumbContentOnFont, this.thumbContentOffFont})", + "method:copyWith": "TSwitchThemeData copyWith ({Color? trackOnColor, Color? trackOffColor, Color? disabledTrackOnColor, Color? disabledTrackOffColor, Color? thumbColor, Color? disabledThumbColor, Color? loadingColor, Color? thumbContentOnColor, Color? thumbContentOffColor, TextStyle? thumbContentOnFont, TextStyle? thumbContentOffFont})", + "method:lerp": "TSwitchThemeData lerp (ThemeExtension? other, double t)" + } + }, + "TTabBarType": { + "kind": "enum", + "members": { + "value:text": "text", + "value:iconText": "iconText", + "value:icon": "icon", + "value:doubleLayer": "doubleLayer" + } + }, + "TTabBarItemStyle": { + "kind": "enum", + "members": { + "value:normal": "normal", + "value:label": "label" + } + }, + "TTabBarStyle": { + "kind": "enum", + "members": { + "value:filled": "filled", + "value:capsule": "capsule" + } + }, + "TTabBarIconTextLayout": { + "kind": "enum", + "members": { + "value:stacked": "stacked", + "value:inline": "inline" + } + }, + "TTabBarIndicatorAnimation": { + "kind": "enum", + "members": { + "value:none": "none", + "value:linear": "linear", + "value:elastic": "elastic" + } + }, + "TTabBarItemConfig": { + "kind": "class", + "members": { + "constructor:new": "const ({this.onTap, this.selectedIcon, this.unselectedIcon, this.tabText, this.selectTabTextStyle, this.unselectTabTextStyle, this.badge, this.popUpButtonConfig, this.onLongPress, this.allowMultipleTaps = false})", + "field:selectedIcon": "final Widget?", + "field:unselectedIcon": "final Widget?", + "field:tabText": "final String?", + "field:selectTabTextStyle": "final TextStyle?", + "field:unselectTabTextStyle": "final TextStyle?", + "field:onTap": "final GestureTapCallback?", + "field:badge": "final TBadgeConfig?", + "field:popUpButtonConfig": "final TTabBarPopUpBtnConfig?", + "field:allowMultipleTaps": "final bool", + "field:onLongPress": "final GestureLongPressCallback?" + } + }, + "TTabBar": { + "kind": "class", + "members": { + "constructor:new": "({Key? key, required this.type, required this.navigationTabs, this.itemStyle = TTabBarItemStyle.label, this.style = TTabBarStyle.filled, this.iconTextLayout = TTabBarIconTextLayout.stacked, this.split = false, this.useSafeArea = true, this.needInkWell = false, this.indicatorAnimation = TTabBarIndicatorAnimation.none, this.animationDuration, this.animationCurve, required this.value, this.onChanged})", + "field:type": "final TTabBarType", + "field:itemStyle": "final TTabBarItemStyle", + "field:style": "final TTabBarStyle", + "field:iconTextLayout": "final TTabBarIconTextLayout", + "field:navigationTabs": "final List", + "field:split": "final bool", + "field:useSafeArea": "final bool", + "field:needInkWell": "final bool", + "field:indicatorAnimation": "final TTabBarIndicatorAnimation", + "field:animationDuration": "final Duration?", + "field:animationCurve": "final Curve?", + "field:value": "final int", + "field:onChanged": "final ValueChanged?", + "method:createState": "State createState ()" + } + }, + "TTabBarPopUpBtnConfig": { + "kind": "class", + "members": { + "constructor:new": "({required this.items, required this.onChanged, this.popUpDialogConfig})", + "field:items": "final List", + "field:onChanged": "final ValueChanged", + "field:popUpDialogConfig": "final TTabBarPopUpShapeConfig?" + } + }, + "TTabBarPopUpShapeConfig": { + "kind": "class", + "members": { + "constructor:new": "({this.popUpWidth, double? popUpItemHeight, this.backgroundColor, this.radius, this.arrowWidth, this.arrowHeight})", + "field:popUpWidth": "final double?", + "field:popUpItemHeight": "final double?", + "field:backgroundColor": "final Color?", + "field:radius": "final double?", + "field:arrowWidth": "final double?", + "field:arrowHeight": "final double?" + } + }, + "TTabBarMenuItem": { + "kind": "class", + "members": { + "constructor:new": "const ({Key? key, this.itemWidget, required this.value, this.alignment = AlignmentDirectional.center})", + "field:itemWidget": "final Widget?", + "field:value": "final String", + "field:alignment": "final AlignmentGeometry", + "method:build": "Widget build (BuildContext context)" + } + }, + "TTabBarThemeData": { + "kind": "class", + "members": { + "field:barHeight": "final double?", + "field:selectedBgColor": "final Color?", + "field:unselectedBgColor": "final Color?", + "field:backgroundColor": "final Color?", + "field:dividerHeight": "final double?", + "field:dividerThickness": "final double?", + "field:dividerColor": "final Color?", + "constructor:new": "const ({this.barHeight, this.selectedBgColor, this.unselectedBgColor, this.backgroundColor, this.dividerHeight, this.dividerThickness, this.dividerColor})", + "method:copyWith": "TTabBarThemeData copyWith ({double? barHeight, Color? selectedBgColor, Color? unselectedBgColor, Color? backgroundColor, double? dividerHeight, double? dividerThickness, Color? dividerColor})", + "method:lerp": "TTabBarThemeData lerp (ThemeExtension? other, double t)" + } + }, + "TTableRowTap": { + "kind": "typedef", + "members": { + "signature": "typedef TTableRowTap = void Function(int rowIndex, T row);" + } + }, + "TTable": { + "kind": "class", + "members": { + "constructor:new": "const ({required this.columns, required this.data, this.rowKey, this.cellSpanBuilder, this.selectionMode = TTableSelectionMode.none, this.selectedRows = const {}, this.onSelectionChanged, this.rowSelectable, this.sort, this.onSortChanged, this.loading = false, this.loadingWidget, this.empty, this.footer, this.showHeader = true, this.height, this.maxHeight, this.bordered, this.stripe, this.onCellTap, this.onRowTap, this.onScroll, super.key})", + "field:columns": "final List>", + "field:data": "final List", + "field:rowKey": "final TTableRowKey?", + "field:cellSpanBuilder": "final TTableCellSpanBuilder?", + "field:selectionMode": "final TTableSelectionMode", + "field:selectedRows": "final Set", + "field:onSelectionChanged": "final ValueChanged>?", + "field:rowSelectable": "final bool Function(T row, int index)?", + "field:sort": "final TTableSort?", + "field:onSortChanged": "final ValueChanged?", + "field:loading": "final bool", + "field:loadingWidget": "final Widget?", + "field:empty": "final Widget?", + "field:footer": "final Widget?", + "field:showHeader": "final bool", + "field:height": "final double?", + "field:maxHeight": "final double?", + "field:bordered": "final bool?", + "field:stripe": "final bool?", + "field:onCellTap": "final TTableCellTap?", + "field:onRowTap": "final TTableRowTap?", + "field:onScroll": "final ValueChanged?", + "method:createState": "State> createState ()" + } + }, + "TTableColumnFixed": { + "kind": "enum", + "members": { + "value:left": "left", + "value:right": "right", + "value:none": "none" + } + }, + "TTableColumnAlign": { + "kind": "enum", + "members": { + "value:left": "left", + "value:center": "center", + "value:right": "right" + } + }, + "TTableCellBuilder": { + "kind": "typedef", + "members": { + "signature": "typedef TTableCellBuilder = Widget Function(BuildContext context, T row, int rowIndex);" + } + }, + "TTableColumn": { + "kind": "class", + "members": { + "constructor:new": "const ({required this.id, required this.header, required this.cellBuilder, this.width, this.minWidth, this.fixed = TTableColumnFixed.none, this.align = TTableColumnAlign.left, this.comparator})", + "field:id": "final String", + "field:header": "final Widget", + "field:cellBuilder": "final TTableCellBuilder", + "field:width": "final double?", + "field:minWidth": "final double?", + "field:fixed": "final TTableColumnFixed", + "field:align": "final TTableColumnAlign", + "field:comparator": "final Comparator?" + } + }, + "TTableThemeData": { + "kind": "class", + "members": { + "constructor:new": "const ({this.rowHeight, this.headerHeight, this.width, this.backgroundColor, this.headerColor, this.stripeColor, this.borderColor, this.cellPadding})", + "field:rowHeight": "final double?", + "field:headerHeight": "final double?", + "field:width": "final double?", + "field:backgroundColor": "final Color?", + "field:headerColor": "final Color?", + "field:stripeColor": "final Color?", + "field:borderColor": "final Color?", + "field:cellPadding": "final EdgeInsetsGeometry?", + "method:copyWith": "TTableThemeData copyWith ({double? rowHeight, double? headerHeight, double? width, Color? backgroundColor, Color? headerColor, Color? stripeColor, Color? borderColor, EdgeInsetsGeometry? cellPadding})", + "method:lerp": "TTableThemeData lerp (TTableThemeData? other, double t)" + } + }, + "TTableRowKey": { + "kind": "typedef", + "members": { + "signature": "typedef TTableRowKey = Object Function(T row);" + } + }, + "TTableCellSpanBuilder": { + "kind": "typedef", + "members": { + "signature": "typedef TTableCellSpanBuilder = TTableCellSpan? Function(TTableCellContext context);" + } + }, + "TTableCellTap": { + "kind": "typedef", + "members": { + "signature": "typedef TTableCellTap = void Function(TTableCellContext context);" + } + }, + "TTableCellContext": { + "kind": "class", + "members": { + "constructor:new": "const ({required this.row, required this.rowIndex, required this.column, required this.columnIndex})", + "field:row": "final T", + "field:rowIndex": "final int", + "field:column": "final TTableColumn", + "field:columnIndex": "final int" + } + }, + "TTableCellSpan": { + "kind": "class", + "members": { + "constructor:new": "const ({this.rowSpan = 1, this.columnSpan = 1})", + "field:rowSpan": "final int", + "field:columnSpan": "final int" + } + }, + "TTableSelectionMode": { + "kind": "enum", + "members": { + "value:none": "none", + "value:multiple": "multiple" + } + }, + "TTableSortDirection": { + "kind": "enum", + "members": { + "value:ascending": "ascending", + "value:descending": "descending" + } + }, + "TTableSort": { + "kind": "class", + "members": { + "constructor:new": "const ({required this.columnId, required this.direction})", + "field:columnId": "final String", + "field:direction": "final TTableSortDirection", + "method:==": "bool == (Object other)", + "get:hashCode": "int hashCode" + } + }, + "TTab": { + "kind": "class", + "members": { + "field:text": "final String?", + "field:child": "final Widget?", + "field:icon": "final Widget?", + "field:enabled": "final bool", + "constructor:new": "const ({Key? key, this.text, this.child, this.icon, this.enabled = true})", + "get:preferredSize": "Size preferredSize", + "method:build": "Widget build (BuildContext context)" + } + }, + "TTabsBarSize": { + "kind": "enum", + "members": { + "value:small": "small", + "value:large": "large" + } + }, + "TTabsBar": { + "kind": "class", + "members": { + "constructor:new": "const ({Key? key, required this.tabs, this.controller, this.isScrollable = false, this.onTap, this.size = TTabsBarSize.small, this.variant = TTabsBarVariant.line})", + "field:tabs": "final List", + "field:controller": "final TabController?", + "field:isScrollable": "final bool", + "field:onTap": "final ValueChanged?", + "field:size": "final TTabsBarSize", + "field:variant": "final TTabsBarVariant", + "method:build": "Widget build (BuildContext context)" + } + }, + "TTabsBarIndicator": { + "kind": "class", + "members": { + "field:indicatorWidth": "final double?", + "field:indicatorHeight": "final double?", + "field:indicatorColor": "final Color", + "constructor:new": "const ({required this.indicatorColor, this.indicatorWidth, this.indicatorHeight})", + "method:createBoxPainter": "BoxPainter createBoxPainter ([VoidCallback? onChanged])" + } + }, + "TTabsBarVariant": { + "kind": "enum", + "members": { + "value:line": "line", + "value:tag": "tag", + "value:card": "card" + } + }, + "TTabsBarThemeData": { + "kind": "class", + "members": { + "field:backgroundColor": "final Color?", + "field:labelStyle": "final TextStyle?", + "field:unselectedLabelStyle": "final TextStyle?", + "field:disabledLabelStyle": "final TextStyle?", + "field:labelPadding": "final EdgeInsetsGeometry?", + "field:indicator": "final Decoration?", + "field:dividerColor": "final Color?", + "field:dividerHeight": "final double?", + "field:selectedTagBackgroundColor": "final Color?", + "field:tagBackgroundColor": "final Color?", + "constructor:new": "const ({this.backgroundColor, this.labelStyle, this.unselectedLabelStyle, this.disabledLabelStyle, this.labelPadding, this.indicator, this.dividerColor, this.dividerHeight, this.selectedTagBackgroundColor, this.tagBackgroundColor})", + "method:copyWith": "TTabsBarThemeData copyWith ({Color? backgroundColor, TextStyle? labelStyle, TextStyle? unselectedLabelStyle, TextStyle? disabledLabelStyle, EdgeInsetsGeometry? labelPadding, Decoration? indicator, Color? dividerColor, double? dividerHeight, Color? selectedTagBackgroundColor, Color? tagBackgroundColor})", + "method:lerp": "TTabsBarThemeData lerp (ThemeExtension? other, double t)" + } + }, + "TTabsBarView": { + "kind": "class", + "members": { + "field:children": "final List", + "field:controller": "final TabController?", + "field:physics": "final ScrollPhysics?", + "constructor:new": "const ({Key? key, required this.children, this.controller, this.physics})", + "method:build": "Widget build (BuildContext context)" + } + }, + "TSelectTag": { + "kind": "class", + "members": { + "constructor:new": "const (this.text, {super.key, required this.value, this.onChanged, this.colorPreset = TTagColorPreset.primary, this.variant = TTagVariant.dark, this.icon, this.size = TTagSize.medium, this.shape = TTagShape.square})", + "field:text": "final String", + "field:value": "final bool", + "field:onChanged": "final ValueChanged?", + "field:colorPreset": "final TTagColorPreset", + "field:variant": "final TTagVariant", + "field:icon": "final IconData?", + "field:size": "final TTagSize", + "field:shape": "final TTagShape", + "method:build": "Widget build (BuildContext context)" + } + }, + "TTag": { + "kind": "class", + "members": { + "constructor:new": "const (this.text, {this.colorPreset = TTagColorPreset.defaultTheme, this.variant = TTagVariant.dark, this.icon, this.size = TTagSize.medium, this.shape = TTagShape.square, this.needCloseIcon = false, this.enabled = true, this.onTap, this.onCloseTap, Key? key})", + "field:text": "final String", + "field:colorPreset": "final TTagColorPreset", + "field:variant": "final TTagVariant", + "field:icon": "final IconData?", + "field:size": "final TTagSize", + "field:shape": "final TTagShape", + "field:needCloseIcon": "final bool", + "field:enabled": "final bool", + "field:onTap": "final GestureTapCallback?", + "field:onCloseTap": "final GestureTapCallback?", + "method:build": "Widget build (BuildContext context)" + } + }, + "TTagThemeData": { + "kind": "class", + "members": { + "field:textColor": "final Color?", + "field:backgroundColor": "final Color?", + "field:dangerColor": "final Color?", + "field:successColor": "final Color?", + "field:successLightColor": "final Color?", + "field:font": "final Font?", + "field:padding": "final EdgeInsets?", + "field:squareBorderRadius": "final double?", + "field:overflow": "final TextOverflow?", + "field:maxLines": "final int?", + "field:fixedWidth": "final double?", + "constructor:new": "const ({this.textColor, this.backgroundColor, this.dangerColor, this.successColor, this.successLightColor, this.font, this.padding, this.squareBorderRadius, this.overflow, this.maxLines, this.fixedWidth})", + "method:resolveTextColor": "Color resolveTextColor (Color fallback)", + "method:resolveBackgroundColor": "Color resolveBackgroundColor (Color fallback)", + "method:resolvePadding": "EdgeInsets resolvePadding (EdgeInsets fallback)", + "method:resolveDangerColor": "Color resolveDangerColor (Color fallback)", + "method:resolveSuccessColor": "Color resolveSuccessColor (Color fallback)", + "method:resolveSuccessLightColor": "Color resolveSuccessLightColor (Color fallback)", + "method:resolveSquareBorderRadius": "double resolveSquareBorderRadius (double fallback)", + "method:copyWith": "TTagThemeData copyWith ({Color? textColor, Color? backgroundColor, Color? dangerColor, Color? successColor, Color? successLightColor, Font? font, EdgeInsets? padding, double? squareBorderRadius, TextOverflow? overflow, int? maxLines, double? fixedWidth})", + "method:lerp": "TTagThemeData lerp (ThemeExtension? other, double t)" + } + }, + "TTagSize": { + "kind": "enum", + "members": { + "value:extraLarge": "extraLarge", + "value:large": "large", + "value:medium": "medium", + "value:small": "small", + "value:custom": "custom" + } + }, + "TTagShape": { + "kind": "enum", + "members": { + "value:square": "square", + "value:round": "round", + "value:mark": "mark" + } + }, + "TTagColorPreset": { + "kind": "enum", + "members": { + "value:defaultTheme": "defaultTheme", + "value:primary": "primary", + "value:warning": "warning", + "value:danger": "danger", + "value:success": "success" + } + }, + "TTagVariant": { + "kind": "enum", + "members": { + "value:dark": "dark", + "value:light": "light", + "value:outline": "outline", + "value:lightOutline": "lightOutline" + } + }, + "TFontLoader": { + "kind": "class", + "members": { + "method:load": "static Future load ({required String name, required String fontFamilyUrl})" + } + }, + "TText": { + "kind": "class", + "members": { + "constructor:new": "const (String this.data, {this.font, this.style, this.strutStyle, this.textAlign, this.textDirection, this.locale, this.softWrap, this.overflow, this.textScaler, this.maxLines, this.semanticsLabel, this.semanticsIdentifier, this.textWidthBasis, this.textHeightBehavior, this.selectionColor, super.key})", + "constructor:rich": "const (InlineSpan this.textSpan, {this.font, this.style, this.strutStyle, this.textAlign, this.textDirection, this.locale, this.softWrap, this.overflow, this.textScaler, this.maxLines, this.semanticsLabel, this.semanticsIdentifier, this.textWidthBasis, this.textHeightBehavior, this.selectionColor, super.key})", + "field:font": "final Font?", + "field:style": "final TextStyle?", + "field:data": "final String?", + "field:textSpan": "final InlineSpan?", + "field:strutStyle": "final StrutStyle?", + "field:textAlign": "final TextAlign?", + "field:textDirection": "final TextDirection?", + "field:locale": "final Locale?", + "field:softWrap": "final bool?", + "field:overflow": "final TextOverflow?", + "field:textScaler": "final TextScaler?", + "field:maxLines": "final int?", + "field:semanticsLabel": "final String?", + "field:semanticsIdentifier": "final String?", + "field:textWidthBasis": "final TextWidthBasis?", + "field:textHeightBehavior": "final ui.TextHeightBehavior?", + "field:selectionColor": "final Color?", + "method:build": "Widget build (BuildContext context)", + "method:getRawText": "Text getRawText ({required BuildContext context})", + "method:getTextStyle": "TextStyle getTextStyle (BuildContext context)" + } + }, + "TTextSpan": { + "kind": "class", + "members": { + "constructor:new": "const ({String? text, List? children, TextStyle? style, GestureRecognizer? recognizer, MouseCursor? mouseCursor, PointerEnterEventListener? onEnter, PointerExitEventListener? onExit, String? semanticsLabel, String? semanticsIdentifier, Locale? locale, bool? spellOut})" + } + }, + "TTextThemeData": { + "kind": "class", + "members": { + "constructor:new": "const ({this.textStyle, this.strutStyle, this.textWidthBasis, this.textHeightBehavior})", + "field:textStyle": "final TextStyle?", + "field:strutStyle": "final StrutStyle?", + "field:textWidthBasis": "final TextWidthBasis?", + "field:textHeightBehavior": "final ui.TextHeightBehavior?", + "method:copyWith": "TTextThemeData copyWith ({TextStyle? textStyle, StrutStyle? strutStyle, TextWidthBasis? textWidthBasis, ui.TextHeightBehavior? textHeightBehavior})", + "method:lerp": "TTextThemeData lerp (ThemeExtension? other, double t)" + } + }, + "TTextareaLayout": { + "kind": "enum", + "members": { + "value:horizontal": "horizontal", + "value:vertical": "vertical" + } + }, + "TTextarea": { + "kind": "class", + "members": { + "constructor:new": "const ({super.key, this.controller, this.initialValue, this.onChanged, this.onSubmitted, this.onEditingComplete, this.enabled = true, this.readOnly = false, this.hintText, this.label, this.layout = TTextareaLayout.horizontal, this.prefix, this.suffix, this.clearButtonMode, this.status = TInputStatus.normal, this.bordered = false, this.maxLines, this.minLines, this.maxLength, this.maxCharacter, this.indicator = false, this.autofocus = false, this.focusNode, this.inputType = TextInputType.multiline, this.inputAction, this.textAlign = TextAlign.start, this.inputFormatters})", + "field:controller": "final TextEditingController?", + "field:initialValue": "final String?", + "field:onChanged": "final ValueChanged?", + "field:onSubmitted": "final ValueChanged?", + "field:onEditingComplete": "final VoidCallback?", + "field:enabled": "final bool", + "field:readOnly": "final bool", + "field:hintText": "final String?", + "field:label": "final String?", + "field:layout": "final TTextareaLayout", + "field:prefix": "final Widget?", + "field:suffix": "final Widget?", + "field:clearButtonMode": "final TInputClearButtonMode?", + "field:status": "final TInputStatus", + "field:bordered": "final bool", + "field:maxLines": "final int?", + "field:minLines": "final int?", + "field:maxLength": "final int?", + "field:maxCharacter": "final int?", + "field:indicator": "final bool", + "field:autofocus": "final bool", + "field:focusNode": "final FocusNode?", + "field:inputType": "final TextInputType", + "field:inputAction": "final TextInputAction?", + "field:textAlign": "final TextAlign", + "field:inputFormatters": "final List?", + "method:createState": "State createState ()" + } + }, + "TTimeCounterBuilder": { + "kind": "typedef", + "members": { + "signature": "typedef TTimeCounterBuilder = Widget Function(int time);" + } + }, + "TTimeCounter": { + "kind": "class", + "members": { + "constructor:new": "const ({super.key, this.autoStart = true, this.content, this.format = 'HH:mm:ss', this.size, this.splitWithUnit = false, this.variant, required this.time, this.onChanged, this.onFinish, this.direction = TTimeCounterDirection.down, this.controller})", + "field:autoStart": "final bool", + "field:content": "final TTimeCounterBuilder?", + "field:format": "final String", + "field:size": "final TTimeCounterSize?", + "field:splitWithUnit": "final bool", + "field:variant": "final TTimeCounterVariant?", + "field:time": "final int", + "field:onChanged": "final ValueChanged?", + "field:onFinish": "final VoidCallback?", + "field:direction": "final TTimeCounterDirection", + "field:controller": "final TTimeCounterController?", + "method:createState": "State createState ()" + } + }, + "TTimeCounterController": { + "kind": "class", + "members": { + "method:start": "void start ()", + "method:pause": "void pause ()", + "method:reset": "void reset ([int? time])" + } + }, + "TTimeCounterThemeData": { + "kind": "class", + "members": { + "constructor:new": "const ({this.defaultTextColor, this.blockTextColor, this.blockBackgroundColor, this.squareBorderRadius, this.roundBorderRadius})", + "field:defaultTextColor": "final Color?", + "field:blockTextColor": "final Color?", + "field:blockBackgroundColor": "final Color?", + "field:squareBorderRadius": "final double?", + "field:roundBorderRadius": "final double?", + "method:copyWith": "TTimeCounterThemeData copyWith ({Color? defaultTextColor, Color? blockTextColor, Color? blockBackgroundColor, double? squareBorderRadius, double? roundBorderRadius})", + "method:lerp": "TTimeCounterThemeData lerp (ThemeExtension? other, double t)" + } + }, + "TTimeCounterDirection": { + "kind": "enum", + "members": { + "value:down": "down", + "value:up": "up" + } + }, + "TTimeCounterSize": { + "kind": "enum", + "members": { + "value:small": "small", + "value:medium": "medium", + "value:large": "large" + } + }, + "TTimeCounterVariant": { + "kind": "enum", + "members": { + "value:plain": "plain", + "value:highlight": "highlight", + "value:round": "round", + "value:square": "square" + } + }, + "IconTextDirection": { + "kind": "enum", + "members": { + "value:horizontal": "horizontal", + "value:vertical": "vertical" + } + }, + "TToastPlacement": { + "kind": "enum", + "members": { + "value:top": "top", + "value:middle": "middle", + "value:bottom": "bottom" + } + }, + "TOverlayConfig": { + "kind": "class", + "members": { + "field:showOverlay": "final bool", + "field:color": "final Color?", + "field:opacity": "final double", + "field:preventScrollThrough": "final bool", + "constructor:new": "const ({this.showOverlay = false, this.color, this.opacity = 0.2, this.preventScrollThrough = false})" + } + }, + "TToast": { + "kind": "class", + "members": { + "method:showText": "static String showText (String? text, {required BuildContext context, Duration duration = const Duration(milliseconds: 2000), int? maxLines, BoxConstraints? constraints, TOverlayConfig? overlay, TToastPlacement placement = TToastPlacement.middle, Widget? customWidget, Color? backgroundColor, TextStyle? textStyle, String? toastId})", + "method:showIconText": "static String showIconText (String? text, {IconData? icon, IconTextDirection direction = IconTextDirection.horizontal, required BuildContext context, Duration duration = const Duration(milliseconds: 2000), TOverlayConfig? overlay, TToastPlacement placement = TToastPlacement.middle, Color? backgroundColor, int? maxLines, TextStyle? textStyle, double? iconSize, Color? iconColor, String? toastId})", + "method:showSuccess": "static String showSuccess (String? text, {IconTextDirection direction = IconTextDirection.horizontal, required BuildContext context, Duration duration = const Duration(milliseconds: 2000), TOverlayConfig? overlay, TToastPlacement placement = TToastPlacement.middle, Color? backgroundColor, int? maxLines, TextStyle? textStyle, double? iconSize, Color? iconColor, String? toastId})", + "method:showWarning": "static String showWarning (String? text, {IconTextDirection direction = IconTextDirection.horizontal, required BuildContext context, Duration duration = const Duration(milliseconds: 2000), TOverlayConfig? overlay, TToastPlacement placement = TToastPlacement.middle, Color? backgroundColor, int? maxLines, TextStyle? textStyle, double? iconSize, Color? iconColor, String? toastId})", + "method:showFail": "static String showFail (String? text, {IconTextDirection direction = IconTextDirection.horizontal, required BuildContext context, Duration duration = const Duration(milliseconds: 2000), TOverlayConfig? overlay, TToastPlacement placement = TToastPlacement.middle, Color? backgroundColor, int? maxLines, TextStyle? textStyle, double? iconSize, Color? iconColor, String? toastId})", + "method:showLoading": "static String showLoading ({required BuildContext context, String? text, Duration duration = const Duration(milliseconds: 2000), TOverlayConfig? overlay, TToastPlacement placement = TToastPlacement.middle, Widget? customWidget, Color? backgroundColor, TextStyle? textStyle, double? iconSize, Color? iconColor, String? toastId})", + "method:showLoadingWithoutText": "static String showLoadingWithoutText ({required BuildContext context, Duration duration = const Duration(milliseconds: 2000), TOverlayConfig? overlay, TToastPlacement placement = TToastPlacement.middle, Color? backgroundColor, double? iconSize, Color? iconColor, String? toastId})", + "method:dismissToast": "static void dismissToast (String toastId)", + "method:dismissAll": "static void dismissAll ()" + } + }, + "TToastThemeData": { + "kind": "class", + "members": { + "field:backgroundColor": "final Color?", + "field:textStyle": "final TextStyle?", + "field:iconSize": "final double?", + "field:iconColor": "final Color?", + "field:borderRadius": "final double?", + "field:padding": "final EdgeInsetsGeometry?", + "field:maxWidth": "final double?", + "constructor:new": "const ({this.backgroundColor, this.textStyle, this.iconSize, this.iconColor, this.borderRadius, this.padding, this.maxWidth})", + "method:merge": "TToastThemeData merge (TToastThemeData? other)", + "method:copyWith": "TToastThemeData copyWith ({Color? backgroundColor, TextStyle? textStyle, double? iconSize, Color? iconColor, double? borderRadius, EdgeInsetsGeometry? padding, double? maxWidth})", + "method:lerp": "TToastThemeData lerp (ThemeExtension? other, double t)", + "method:lerpDouble": "static double? lerpDouble (double? a, double? b, double t)" + } + }, + "TTreeSelectOption": { + "kind": "class", + "members": { + "constructor:new": "const ({required this.label, required this.value, this.children = const [], this.disabled = false})", + "field:label": "final String", + "field:value": "final Object?", + "field:children": "final List", + "field:disabled": "final bool" + } + }, + "TTreeSelect": { + "kind": "class", + "members": { + "constructor:new": "const ({super.key, required this.options, required this.value, this.onChanged, this.multiple = false})", + "field:options": "final List", + "field:value": "final List>", + "field:onChanged": "final ValueChanged>>?", + "field:multiple": "final bool", + "method:createState": "State createState ()" + } + }, + "TTreeSelectThemeData": { + "kind": "class", + "members": { + "constructor:new": "const ({this.height, this.rootColumnWidth, this.columnWidth, this.itemHeight, this.backgroundColor, this.rootBackgroundColor, this.selectedBackgroundColor, this.textStyle, this.selectedTextStyle, this.disabledTextStyle, this.indicatorColor})", + "field:height": "final double?", + "field:rootColumnWidth": "final double?", + "field:columnWidth": "final double?", + "field:itemHeight": "final double?", + "field:backgroundColor": "final Color?", + "field:rootBackgroundColor": "final Color?", + "field:selectedBackgroundColor": "final Color?", + "field:textStyle": "final TextStyle?", + "field:selectedTextStyle": "final TextStyle?", + "field:disabledTextStyle": "final TextStyle?", + "field:indicatorColor": "final Color?", + "method:copyWith": "TTreeSelectThemeData copyWith ({double? height, double? rootColumnWidth, double? columnWidth, double? itemHeight, Color? backgroundColor, Color? rootBackgroundColor, Color? selectedBackgroundColor, TextStyle? textStyle, TextStyle? selectedTextStyle, TextStyle? disabledTextStyle, Color? indicatorColor})", + "method:lerp": "TTreeSelectThemeData lerp (ThemeExtension? other, double t)" + } + }, + "TUpload": { + "kind": "class", + "members": { + "constructor:new": "const ({super.key, required this.files, this.onChanged, this.mediaType = TUploadMediaType.image, this.layout = TUploadLayout.grid, this.draggable = false, this.maxFiles = 1, this.maxFileSize, this.picker, this.onFileTap, this.onValidationError, this.onError})", + "field:files": "final List", + "field:onChanged": "final ValueChanged>?", + "field:mediaType": "final TUploadMediaType", + "field:layout": "final TUploadLayout", + "field:draggable": "final bool", + "field:maxFiles": "final int?", + "field:maxFileSize": "final int?", + "field:picker": "final TUploadPicker?", + "field:onFileTap": "final ValueChanged?", + "field:onValidationError": "final ValueChanged?", + "field:onError": "final ValueChanged?", + "method:build": "Widget build (BuildContext context)" + } + }, + "TUploadMediaType": { + "kind": "enum", + "members": { + "value:image": "image", + "value:video": "video" + } + }, + "TUploadLayout": { + "kind": "enum", + "members": { + "value:grid": "grid", + "value:list": "list" + } + }, + "TUploadFileStatus": { + "kind": "enum", + "members": { + "value:ready": "ready", + "value:uploading": "uploading", + "value:success": "success", + "value:error": "error", + "value:retryableError": "retryableError" + } + }, + "TUploadValidationError": { + "kind": "enum", + "members": { + "value:maxFiles": "maxFiles", + "value:fileSize": "fileSize" + } + }, + "TUploadPicker": { + "kind": "typedef", + "members": { + "signature": "typedef TUploadPicker = Future> Function();" + } + }, + "TUploadFile": { + "kind": "class", + "members": { + "constructor:new": "const ({required this.id, required this.name, this.url, this.bytes, this.size, this.status = TUploadFileStatus.ready, this.progress, this.errorText, this.canRemove = true})", + "field:id": "final String", + "field:name": "final String", + "field:url": "final String?", + "field:bytes": "final Uint8List?", + "field:size": "final int?", + "field:status": "final TUploadFileStatus", + "field:progress": "final double?", + "field:errorText": "final String?", + "field:canRemove": "final bool", + "method:copyWith": "TUploadFile copyWith ({String? id, String? name, String? url, Uint8List? bytes, int? size, TUploadFileStatus? status, double? progress, String? errorText, bool? canRemove})" + } + }, + "TUploadVariant": { + "kind": "enum", + "members": { + "value:square": "square", + "value:circle": "circle" + } + }, + "TUploadThemeData": { + "kind": "class", + "members": { + "constructor:new": "const ({this.variant, this.itemSize, this.spacing, this.runSpacing, this.alignment, this.backgroundColor, this.foregroundColor, this.disabledBackgroundColor, this.disabledForegroundColor, this.overlayColor, this.statusTextStyle, this.borderRadius, this.addIconSize, this.statusIconSize, this.removeButtonSize, this.removeButtonColor, this.removeIconSize, this.disabledMaskColor})", + "field:variant": "final TUploadVariant?", + "field:itemSize": "final double?", + "field:spacing": "final double?", + "field:runSpacing": "final double?", + "field:alignment": "final WrapAlignment?", + "field:backgroundColor": "final Color?", + "field:foregroundColor": "final Color?", + "field:disabledBackgroundColor": "final Color?", + "field:disabledForegroundColor": "final Color?", + "field:overlayColor": "final Color?", + "field:statusTextStyle": "final TextStyle?", + "field:borderRadius": "final double?", + "field:addIconSize": "final double?", + "field:statusIconSize": "final double?", + "field:removeButtonSize": "final double?", + "field:removeButtonColor": "final Color?", + "field:removeIconSize": "final double?", + "field:disabledMaskColor": "final Color?", + "method:copyWith": "TUploadThemeData copyWith ({TUploadVariant? variant, double? itemSize, double? spacing, double? runSpacing, WrapAlignment? alignment, Color? backgroundColor, Color? foregroundColor, Color? disabledBackgroundColor, Color? disabledForegroundColor, Color? overlayColor, TextStyle? statusTextStyle, double? borderRadius, double? addIconSize, double? statusIconSize, double? removeButtonSize, Color? removeButtonColor, double? removeIconSize, Color? disabledMaskColor})", + "method:lerp": "TUploadThemeData lerp (ThemeExtension? other, double t)" + } + }, + "Font": { + "kind": "class", + "members": { + "field:size": "double", + "field:height": "double", + "field:fontWeight": "FontWeight", + "constructor:new": "({required int size, required int lineHeight, this.fontWeight = FontWeight.w400})", + "constructor:fromJson": "factory (Map map)" + } + }, + "FontFamily": { + "kind": "class", + "members": { + "field:fontFamily": "String", + "field:package": "String?", + "field:fallback": "List?", + "constructor:new": "({required this.fontFamily, this.package, this.fallback})", + "constructor:fromJson": "factory (Map map)" + } + }, + "FontExtensions": { + "kind": "extension", + "members": { + "member:withSize": "Font withSize(int newSize)" + } + }, + "TResourceBuilder": { + "kind": "typedef", + "members": { + "signature": "typedef TResourceBuilder = TResourceDelegate? Function(BuildContext context);" + } + }, + "TResourceManager": { + "kind": "class", + "members": { + "method:delegate": "TResourceDelegate delegate (BuildContext context)", + "get:instance": "static TResourceManager instance", + "get:defaultDelegate": "static TResourceDelegate defaultDelegate", + "method:setResourceBuilder": "void setResourceBuilder (TResourceBuilder delegate, needAlwaysBuild)" + } + }, + "TResourceDelegate": { + "kind": "class", + "members": { + "get:uploading": "String uploading", + "get:uploadSelect": "String uploadSelect", + "get:uploadPending": "String uploadPending", + "get:uploadFailed": "String uploadFailed", + "get:uploadRetry": "String uploadRetry", + "get:uploadSuccess": "String uploadSuccess", + "get:open": "String open", + "get:close": "String close", + "get:badgeZero": "String badgeZero", + "get:cancel": "String cancel", + "get:confirm": "String confirm", + "get:other": "String other", + "get:reset": "String reset", + "get:loading": "String loading", + "get:loadingWithPoint": "String loadingWithPoint", + "get:knew": "String knew", + "get:refreshing": "String refreshing", + "get:releaseRefresh": "String releaseRefresh", + "get:pullToRefresh": "String pullToRefresh", + "get:completeRefresh": "String completeRefresh", + "get:days": "String days", + "get:hours": "String hours", + "get:minutes": "String minutes", + "get:seconds": "String seconds", + "get:milliseconds": "String milliseconds", + "get:yearLabel": "String yearLabel", + "get:monthLabel": "String monthLabel", + "get:dateLabel": "String dateLabel", + "get:weeksLabel": "String weeksLabel", + "get:sunday": "String sunday", + "get:monday": "String monday", + "get:tuesday": "String tuesday", + "get:wednesday": "String wednesday", + "get:thursday": "String thursday", + "get:friday": "String friday", + "get:saturday": "String saturday", + "get:year": "String year", + "get:january": "String january", + "get:february": "String february", + "get:march": "String march", + "get:april": "String april", + "get:may": "String may", + "get:june": "String june", + "get:july": "String july", + "get:august": "String august", + "get:september": "String september", + "get:october": "String october", + "get:november": "String november", + "get:december": "String december", + "get:time": "String time", + "get:start": "String start", + "get:end": "String end", + "get:notRated": "String notRated", + "get:cascadeLabel": "String cascadeLabel", + "get:back": "String back", + "get:top": "String top", + "get:emptyData": "String emptyData", + "get:picker": "String picker", + "method:pickerColumn": "String pickerColumn (int colIndex)" + } + }, + "TColors": { + "kind": "extension", + "members": { + "member:primaryColor1": "Color primaryColor1", + "member:primaryColor2": "Color primaryColor2", + "member:primaryColor3": "Color primaryColor3", + "member:primaryColor4": "Color primaryColor4", + "member:primaryColor5": "Color primaryColor5", + "member:primaryColor6": "Color primaryColor6", + "member:primaryColor7": "Color primaryColor7", + "member:primaryColor8": "Color primaryColor8", + "member:primaryColor9": "Color primaryColor9", + "member:primaryColor10": "Color primaryColor10", + "member:brandColor1": "Color brandColor1", + "member:brandColor2": "Color brandColor2", + "member:brandColor3": "Color brandColor3", + "member:brandColor4": "Color brandColor4", + "member:brandColor5": "Color brandColor5", + "member:brandColor6": "Color brandColor6", + "member:brandColor7": "Color brandColor7", + "member:brandColor8": "Color brandColor8", + "member:brandColor9": "Color brandColor9", + "member:brandColor10": "Color brandColor10", + "member:brandColorLight": "Color brandColorLight", + "member:brandColorLightActive": "Color brandColorLightActive", + "member:brandColorFocus": "Color brandColorFocus", + "member:brandColorDisabled": "Color brandColorDisabled", + "member:brandColor": "Color brandColor", + "member:brandColorActive": "Color brandColorActive", + "member:errorColor1": "Color errorColor1", + "member:errorColor2": "Color errorColor2", + "member:errorColor3": "Color errorColor3", + "member:errorColor4": "Color errorColor4", + "member:errorColor5": "Color errorColor5", + "member:errorColor6": "Color errorColor6", + "member:errorColor7": "Color errorColor7", + "member:errorColor8": "Color errorColor8", + "member:errorColor9": "Color errorColor9", + "member:errorColor10": "Color errorColor10", + "member:errorColorLight": "Color errorColorLight", + "member:errorColorLightActive": "Color errorColorLightActive", + "member:errorColorFocus": "Color errorColorFocus", + "member:errorColorDisabled": "Color errorColorDisabled", + "member:errorColor": "Color errorColor", + "member:errorColorActive": "Color errorColorActive", + "member:warningColor1": "Color warningColor1", + "member:warningColor2": "Color warningColor2", + "member:warningColor3": "Color warningColor3", + "member:warningColor4": "Color warningColor4", + "member:warningColor5": "Color warningColor5", + "member:warningColor6": "Color warningColor6", + "member:warningColor7": "Color warningColor7", + "member:warningColor8": "Color warningColor8", + "member:warningColor9": "Color warningColor9", + "member:warningColor10": "Color warningColor10", + "member:warningColorLight": "Color warningColorLight", + "member:warningColorLightActive": "Color warningColorLightActive", + "member:warningColorFocus": "Color warningColorFocus", + "member:warningColorDisabled": "Color warningColorDisabled", + "member:warningColor": "Color warningColor", + "member:warningColorActive": "Color warningColorActive", + "member:successColor1": "Color successColor1", + "member:successColor2": "Color successColor2", + "member:successColor3": "Color successColor3", + "member:successColor4": "Color successColor4", + "member:successColor5": "Color successColor5", + "member:successColor6": "Color successColor6", + "member:successColor7": "Color successColor7", + "member:successColor8": "Color successColor8", + "member:successColor9": "Color successColor9", + "member:successColor10": "Color successColor10", + "member:successColorLight": "Color successColorLight", + "member:successColorLightActive": "Color successColorLightActive", + "member:successColorFocus": "Color successColorFocus", + "member:successColorDisabled": "Color successColorDisabled", + "member:successColor": "Color successColor", + "member:successColorActive": "Color successColorActive", + "member:fontGray1": "Color fontGray1", + "member:fontGray2": "Color fontGray2", + "member:fontGray3": "Color fontGray3", + "member:fontGray4": "Color fontGray4", + "member:fontWhite1": "Color fontWhite1", + "member:fontWhite2": "Color fontWhite2", + "member:fontWhite3": "Color fontWhite3", + "member:fontWhite4": "Color fontWhite4", + "member:whiteColor1": "Color whiteColor1", + "member:grayColor1": "Color grayColor1", + "member:grayColor2": "Color grayColor2", + "member:grayColor3": "Color grayColor3", + "member:grayColor4": "Color grayColor4", + "member:grayColor5": "Color grayColor5", + "member:grayColor6": "Color grayColor6", + "member:grayColor7": "Color grayColor7", + "member:grayColor8": "Color grayColor8", + "member:grayColor9": "Color grayColor9", + "member:grayColor10": "Color grayColor10", + "member:grayColor11": "Color grayColor11", + "member:grayColor12": "Color grayColor12", + "member:grayColor13": "Color grayColor13", + "member:grayColor14": "Color grayColor14", + "member:bgColorPage": "Color bgColorPage", + "member:bgColorContainer": "Color bgColorContainer", + "member:bgColorContainerActive": "Color bgColorContainerActive", + "member:bgColorSecondaryContainer": "Color bgColorSecondaryContainer", + "member:bgColorSecondaryContainerActive": "Color bgColorSecondaryContainerActive", + "member:bgColorSecondaryComponent": "Color bgColorSecondaryComponent", + "member:bgColorSecondaryComponentActive": "Color bgColorSecondaryComponentActive", + "member:bgColorSpecialComponent": "Color bgColorSpecialComponent", + "member:bgColorComponent": "Color bgColorComponent", + "member:bgColorComponentActive": "Color bgColorComponentActive", + "member:bgColorComponentDisabled": "Color bgColorComponentDisabled", + "member:componentStroke": "Color componentStroke", + "member:componentBorder": "Color componentBorder", + "member:borderLevel1Color": "Color borderLevel1Color", + "member:borderLevel2Color": "Color borderLevel2Color", + "member:textColorPrimary": "Color textColorPrimary", + "member:textColorSecondary": "Color textColorSecondary", + "member:textColorPlaceholder": "Color textColorPlaceholder", + "member:textColorDisabled": "Color textColorDisabled", + "member:textColorAnti": "Color textColorAnti", + "member:textColorBrand": "Color textColorBrand", + "member:textColorLink": "Color textColorLink", + "member:maskActive": "Color maskActive", + "member:maskDisabled": "Color maskDisabled", + "member:maskBackground": "Color maskBackground", + "member:tableShadowColor": "Color tableShadowColor", + "member:scrollbarColor": "Color scrollbarColor", + "member:scrollbarHoverColor": "Color scrollbarHoverColor", + "member:scrollTrackColor": "Color scrollTrackColor" + } + }, + "TResolvedFontFamily": { + "kind": "extension", + "members": { + "member:flutterFontFamily": "String flutterFontFamily", + "member:flutterFontFamilyFallback": "List? flutterFontFamilyFallback" + } + }, + "TFontFamilies": { + "kind": "extension", + "members": { + "member:fontFamily": "FontFamily? fontFamily", + "member:fontFamilyMedium": "FontFamily? fontFamilyMedium" + } + }, + "TFontMetrics": { + "kind": "extension", + "members": { + "member:fontSize": "double fontSize", + "member:fontSizeXs": "double fontSizeXs", + "member:fontSizeS": "double fontSizeS", + "member:fontSizeBase": "double fontSizeBase", + "member:fontSizeM": "double fontSizeM", + "member:fontSizeL": "double fontSizeL", + "member:fontSizeXl": "double fontSizeXl", + "member:fontSizeXxl": "double fontSizeXxl", + "member:fontSizeLinkSmall": "double fontSizeLinkSmall", + "member:fontSizeLinkMedium": "double fontSizeLinkMedium", + "member:fontSizeLinkLarge": "double fontSizeLinkLarge", + "member:fontSizeMarkExtraSmall": "double fontSizeMarkExtraSmall", + "member:fontSizeMarkSmall": "double fontSizeMarkSmall", + "member:fontSizeMarkMedium": "double fontSizeMarkMedium", + "member:fontSizeMarkLarge": "double fontSizeMarkLarge", + "member:fontSizeBodyExtraSmall": "double fontSizeBodyExtraSmall", + "member:fontSizeBodySmall": "double fontSizeBodySmall", + "member:fontSizeBodyMedium": "double fontSizeBodyMedium", + "member:fontSizeBodyLarge": "double fontSizeBodyLarge", + "member:fontSizeTitleSmall": "double fontSizeTitleSmall", + "member:fontSizeTitleMedium": "double fontSizeTitleMedium", + "member:fontSizeTitleLarge": "double fontSizeTitleLarge", + "member:fontSizeTitleExtraLarge": "double fontSizeTitleExtraLarge", + "member:fontSizeHeadlineSmall": "double fontSizeHeadlineSmall", + "member:fontSizeHeadlineMedium": "double fontSizeHeadlineMedium", + "member:fontSizeHeadlineLarge": "double fontSizeHeadlineLarge", + "member:fontSizeDisplayMedium": "double fontSizeDisplayMedium", + "member:fontSizeDisplayLarge": "double fontSizeDisplayLarge", + "member:lineHeightLinkSmall": "double lineHeightLinkSmall", + "member:lineHeightLinkMedium": "double lineHeightLinkMedium", + "member:lineHeightLinkLarge": "double lineHeightLinkLarge", + "member:lineHeightMarkExtraSmall": "double lineHeightMarkExtraSmall", + "member:lineHeightMarkSmall": "double lineHeightMarkSmall", + "member:lineHeightMarkMedium": "double lineHeightMarkMedium", + "member:lineHeightMarkLarge": "double lineHeightMarkLarge", + "member:lineHeightBodyExtraSmall": "double lineHeightBodyExtraSmall", + "member:lineHeightBodySmall": "double lineHeightBodySmall", + "member:lineHeightBodyMedium": "double lineHeightBodyMedium", + "member:lineHeightBodyLarge": "double lineHeightBodyLarge", + "member:lineHeightTitleSmall": "double lineHeightTitleSmall", + "member:lineHeightTitleMedium": "double lineHeightTitleMedium", + "member:lineHeightTitleLarge": "double lineHeightTitleLarge", + "member:lineHeightTitleExtraLarge": "double lineHeightTitleExtraLarge", + "member:lineHeightHeadlineSmall": "double lineHeightHeadlineSmall", + "member:lineHeightHeadlineMedium": "double lineHeightHeadlineMedium", + "member:lineHeightHeadlineLarge": "double lineHeightHeadlineLarge", + "member:lineHeightDisplayMedium": "double lineHeightDisplayMedium", + "member:lineHeightDisplayLarge": "double lineHeightDisplayLarge" + } + }, + "TFonts": { + "kind": "extension", + "members": { + "member:fontDisplayLarge": "Font? fontDisplayLarge", + "member:fontDisplayMedium": "Font? fontDisplayMedium", + "member:fontHeadlineLarge": "Font? fontHeadlineLarge", + "member:fontHeadlineMedium": "Font? fontHeadlineMedium", + "member:fontHeadlineSmall": "Font? fontHeadlineSmall", + "member:fontTitleExtraLarge": "Font? fontTitleExtraLarge", + "member:fontTitleLarge": "Font? fontTitleLarge", + "member:fontTitleMedium": "Font? fontTitleMedium", + "member:fontTitleSmall": "Font? fontTitleSmall", + "member:fontBodyLarge": "Font? fontBodyLarge", + "member:fontBodyMedium": "Font? fontBodyMedium", + "member:fontBodySmall": "Font? fontBodySmall", + "member:fontBodyExtraSmall": "Font? fontBodyExtraSmall", + "member:fontMarkLarge": "Font? fontMarkLarge", + "member:fontMarkMedium": "Font? fontMarkMedium", + "member:fontMarkSmall": "Font? fontMarkSmall", + "member:fontMarkExtraSmall": "Font? fontMarkExtraSmall", + "member:fontLinkLarge": "Font? fontLinkLarge", + "member:fontLinkMedium": "Font? fontLinkMedium", + "member:fontLinkSmall": "Font? fontLinkSmall" + } + }, + "TRadius": { + "kind": "extension", + "members": { + "member:radiusSmall": "double radiusSmall", + "member:radiusDefault": "double radiusDefault", + "member:radiusLarge": "double radiusLarge", + "member:radiusExtraLarge": "double radiusExtraLarge", + "member:radiusRound": "double radiusRound", + "member:radiusCircle": "double radiusCircle" + } + }, + "TBoxShadows": { + "kind": "extension", + "members": { + "member:shadow1": "List? shadow1", + "member:shadow2": "List? shadow2", + "member:shadow3": "List? shadow3", + "member:shadow4": "List? shadow4" + } + }, + "TInsetShadows": { + "kind": "extension", + "members": { + "member:shadowInsetTop": "BorderSide? shadowInsetTop", + "member:shadowInsetRight": "BorderSide? shadowInsetRight", + "member:shadowInsetBottom": "BorderSide? shadowInsetBottom", + "member:shadowInsetLeft": "BorderSide? shadowInsetLeft" + } + }, + "TSpacers": { + "kind": "extension", + "members": { + "member:spacer": "double spacer", + "member:spacer1": "double spacer1", + "member:spacer2": "double spacer2", + "member:spacer3": "double spacer3", + "member:spacer4": "double spacer4", + "member:spacer5": "double spacer5", + "member:spacer6": "double spacer6" + } + }, + "TThemeContextExtension": { + "kind": "extension", + "members": { + "member:tTheme": "TThemeData tTheme" + } + }, + "TThemeDataMergeExtension": { + "kind": "extension", + "members": { + "member:mergeExtension": "ThemeData mergeExtension(T extension)" + } + }, + "TStyleResolver": { + "kind": "class", + "members": { + "method:of": "static TStyleResolver of (BuildContext context)", + "get:token": "TThemeData token", + "method:componentExtension": "E? componentExtension >()" + } + }, + "TMaterialThemeBuilder": { + "kind": "class", + "members": { + "constructor:new": "const (this.token)", + "field:token": "final TThemeData", + "method:buildLight": "ThemeData buildLight ()", + "method:buildDark": "ThemeData buildDark ()" + } + }, + "TThemeBuilder": { + "kind": "class", + "members": { + "method:light": "static ThemeData light (TThemeData token)", + "method:dark": "static ThemeData dark (TThemeData token)" + } + }, + "setTResourceBuilder": { + "kind": "function", + "members": { + "signature": "void setTResourceBuilder (TResourceBuilder delegate, {bool needAlwaysBuild = false})" + } + }, + "TThemeData": { + "kind": "class", + "members": { + "field:dark": "TThemeData?", + "field:light": "TThemeData", + "field:name": "String", + "field:colorMap": "TMap", + "field:fontMap": "TMap", + "field:fontMetricMap": "TMap", + "field:radiusMap": "TMap", + "field:fontFamilyMap": "TMap", + "field:shadowMap": "TMap>", + "field:insetShadowMap": "TMap", + "field:spacerMap": "TMap", + "field:refMap": "TMap", + "field:extraThemeData": "TExtraThemeData?", + "constructor:new": "({required this.name, required this.colorMap, required this.fontMap, TMap? fontMetricMap, required this.radiusMap, required this.fontFamilyMap, required this.shadowMap, TMap? insetShadowMap, required this.spacerMap, required this.refMap, this.extraThemeData})", + "method:defaultData": "static TThemeData defaultData ({TExtraThemeData? extraThemeData})", + "method:copyWith": "TThemeData copyWith ({String? name, Map? colorMap, Map? fontMap, Map? fontMetricMap, Map? radiusMap, Map? fontFamilyMap, Map>? shadowMap, Map? insetShadowMap, Map? spacerMap, TExtraThemeData? extraThemeData})", + "method:fromJson": "static TThemeData? fromJson (String name, String themeJson, {String? darkName, bool recoverDefault = false, TExtraThemeData? extraThemeData})", + "method:lerp": "TThemeData lerp (ThemeExtension? other, double t)" + } + }, + "TExtraThemeData": { + "kind": "class", + "members": { + "method:parse": "void parse (String name, Map curThemeMap)" + } + }, + "DefaultMapFactory": { + "kind": "typedef", + "members": { + "signature": "typedef DefaultMapFactory = TMap? Function();" + } + }, + "TMap": { + "kind": "class", + "members": { + "constructor:new": "({this.factory, this.refs})", + "field:factory": "DefaultMapFactory?", + "field:refs": "TMap?", + "method:[]": "V? [] (Object? key)", + "method:get": "V? get (Object? key)" + } + }, + "PlatformUtil": { + "kind": "class", + "members": { + "get:isAndroid": "static bool isAndroid", + "get:isIOS": "static bool isIOS", + "get:isFuchsia": "static bool isFuchsia", + "get:isLinux": "static bool isLinux", + "get:isMacOS": "static bool isMacOS", + "get:isOhos": "static bool isOhos", + "get:isWindows": "static bool isWindows", + "get:isWeb": "static bool isWeb" + } + }, + "TToolbarPressable": { + "kind": "class", + "members": { + "constructor:new": "const ({super.key, required this.child, this.onTap, this.padding, this.enabled = true, this.pressDuration = kToolbarPressDuration, this.pressedOpacity = kToolbarPressedOpacity, this.mergeTextStyle, this.mergeIconTheme})", + "field:kToolbarPressDuration": "static const Duration", + "field:kToolbarPressedOpacity": "static const double", + "field:child": "final Widget", + "field:onTap": "final VoidCallback?", + "field:padding": "final EdgeInsetsGeometry?", + "field:enabled": "final bool", + "field:pressDuration": "final Duration", + "field:pressedOpacity": "final double", + "field:mergeTextStyle": "final TextStyle?", + "field:mergeIconTheme": "final IconThemeData?", + "method:createState": "State createState ()" + } + } + }, + "items": [ + { + "old": "BadgeConfig", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "constructor:new": "({required this.showBadge, TDBadge? tdBadge, this.badgeTopOffset, this.badgeRightOffset})", + "field:showBadge": "final bool", + "field:tdBadge": "final TDBadge?", + "field:badgeTopOffset": "final double?", + "field:badgeRightOffset": "final double?" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "CalendarBuilder", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "typedef", + "members": { + "signature": "typedef CalendarBuilder = Widget Function(BuildContext context);" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "CalendarFormat", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "typedef", + "members": { + "signature": "typedef CalendarFormat = TDate? Function(TDate? day);" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "CalendarTrigger", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "enum", + "members": { + "value:closeBtn": "closeBtn", + "value:confirmBtn": "confirmBtn", + "value:overlay": "overlay" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "CalendarType", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "enum", + "members": { + "value:single": "single", + "value:multiple": "multiple", + "value:range": "range" + } + }, + "after": null, + "migrationDirection": "TCalendarVariant", + "migrationNote": "入口重组,见对应组件;不保证参数/行为兼容" + }, + { + "old": "CellBuilder", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "typedef", + "members": { + "signature": "typedef CellBuilder = Widget Function(BuildContext context, TDCell cell, int index);" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "ChevronPainter", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "constructor:new": "({required this.upColor, required this.downColor})", + "field:upColor": "final Color", + "field:downColor": "final Color", + "method:paint": "void paint (Canvas canvas, Size size)", + "method:shouldRepaint": "bool shouldRepaint (covariant CustomPainter oldDelegate)" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "Chinese2Formatter", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "field:maxLength": "final int", + "constructor:new": "(this.maxLength)", + "method:formatEditUpdate": "TextEditingValue formatEditUpdate (TextEditingValue oldValue, TextEditingValue newValue)" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "ContentBuilder", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "typedef", + "members": { + "signature": "typedef ContentBuilder = Widget Function(BuildContext context, bool checked, String? content);" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "DatePickerCallback", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "typedef", + "members": { + "signature": "typedef DatePickerCallback = void Function(Map selected);" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "DatePickerModel", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "field:useYear": "bool", + "field:useMonth": "bool", + "field:useDay": "bool", + "field:useWeekDay": "bool", + "field:useHour": "bool", + "field:useMinute": "bool", + "field:useSecond": "bool", + "field:dateStart": "List", + "field:dateEnd": "List", + "field:dateInitial": "List?", + "field:filterItems": "List Function(DateTypeKey key, List nums)?", + "field:mapping": "final", + "field:initialTime": "DateTime", + "field:yearIndex": "int", + "field:monthIndex": "int", + "field:dayIndex": "int", + "field:weekDayIndex": "int", + "field:hourIndex": "int", + "field:minuteIndex": "int", + "field:secondIndex": "int", + "field:data": "List>", + "field:controllers": "var", + "field:yearFixedExtentScrollController": "FixedExtentScrollController", + "field:monthFixedExtentScrollController": "FixedExtentScrollController", + "field:dayFixedExtentScrollController": "FixedExtentScrollController", + "field:weekDayFixedExtentScrollController": "FixedExtentScrollController", + "field:hourFixedExtentScrollController": "FixedExtentScrollController", + "field:minuteFixedExtentScrollController": "FixedExtentScrollController", + "field:secondFixedExtentScrollController": "FixedExtentScrollController", + "constructor:new": "({required this.useYear, required this.useMonth, required this.useDay, required this.useHour, required this.useMinute, required this.useSecond, required this.useWeekDay, required this.dateStart, required this.dateEnd, this.dateInitial, this.filterItems})", + "method:setInitialTime": "void setInitialTime ()", + "method:setInitialYearData": "void setInitialYearData ()", + "method:setInitialMonthData": "void setInitialMonthData ()", + "method:setInitialDayData": "void setInitialDayData ()", + "method:setInitialWeekDayData": "void setInitialWeekDayData ()", + "method:setInitialTimeData": "void setInitialTimeData ()", + "method:setControllers": "void setControllers ()", + "method:addListener": "void addListener ()", + "method:removeListener": "void removeListener ()", + "method:refreshMonthDataAndController": "void refreshMonthDataAndController ()", + "method:refreshDayDataAndController": "void refreshDayDataAndController ()", + "method:refreshWeekDayDataAndController": "void refreshWeekDayDataAndController ()", + "method:refreshTimeDataInitialAndController": "void refreshTimeDataInitialAndController (int wheel)", + "method:refreshHourData": "void refreshHourData ({required int selectedYear, required int selectedMonth, required int selectDay})", + "method:refreshMinuteData": "void refreshMinuteData ({required int selectedYear, required int selectedMonth, required int selectDay})", + "method:refreshSecondData": "void refreshSecondData ({required int selectedYear, required int selectedMonth, required int selectDay})", + "method:getSelectedMap": "Map getSelectedMap ()" + } + }, + "after": null, + "migrationDirection": "TDateTimePickerValue", + "migrationNote": "入口重组,见对应组件;不保证参数/行为兼容" + }, + { + "old": "DateSelectType", + "candidate": "DateSelectType", + "classification": "declaration-shape-unchanged", + "before": { + "kind": "enum", + "members": { + "value:selected": "selected", + "value:disabled": "disabled", + "value:start": "start", + "value:centre": "centre", + "value:end": "end", + "value:empty": "empty" + } + }, + "after": { + "kind": "enum", + "members": { + "value:selected": "selected", + "value:disabled": "disabled", + "value:start": "start", + "value:centre": "centre", + "value:end": "end", + "value:empty": "empty" + } + }, + "migrationDirection": "DateSelectType", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "DateSelectTypeNotifier", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "field:value": "DateSelectType", + "constructor:new": "(DateSelectType selectType)", + "method:setType": "void setType (DateSelectType type)" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "DateTypeKey", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "enum", + "members": { + "value:year": "year", + "value:month": "month", + "value:weekDay": "weekDay", + "value:day": "day", + "value:hour": "hour", + "value:minute": "minute", + "value:second": "second" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "DefaultMapFactory", + "candidate": "DefaultMapFactory", + "classification": "declaration-changed", + "before": { + "kind": "typedef", + "members": { + "signature": "typedef DefaultMapFactory = TDMap? Function();" + } + }, + "after": { + "kind": "typedef", + "members": { + "signature": "typedef DefaultMapFactory = TMap? Function();" + } + }, + "migrationDirection": "DefaultMapFactory", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "DefaultStickyHeaderController", + "candidate": "DefaultStickyHeaderController", + "classification": "declaration-shape-unchanged", + "before": { + "kind": "class", + "members": { + "constructor:new": "const ({Key? key, required this.child})", + "field:child": "final Widget", + "method:of": "static StickyHeaderController? of (BuildContext context)", + "method:createState": "_DefaultStickyHeaderControllerState createState ()" + } + }, + "after": { + "kind": "class", + "members": { + "constructor:new": "const ({Key? key, required this.child})", + "field:child": "final Widget", + "method:of": "static StickyHeaderController? of (BuildContext context)", + "method:createState": "_DefaultStickyHeaderControllerState createState ()" + } + }, + "migrationDirection": "DefaultStickyHeaderController", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "Font", + "candidate": "Font", + "classification": "declaration-shape-unchanged", + "before": { + "kind": "class", + "members": { + "field:size": "double", + "field:height": "double", + "field:fontWeight": "FontWeight", + "constructor:new": "({required int size, required int lineHeight, this.fontWeight = FontWeight.w400})", + "constructor:fromJson": "factory (Map map)" + } + }, + "after": { + "kind": "class", + "members": { + "field:size": "double", + "field:height": "double", + "field:fontWeight": "FontWeight", + "constructor:new": "({required int size, required int lineHeight, this.fontWeight = FontWeight.w400})", + "constructor:fromJson": "factory (Map map)" + } + }, + "migrationDirection": "Font", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "FontExtensions", + "candidate": "FontExtensions", + "classification": "declaration-shape-unchanged", + "before": { + "kind": "extension", + "members": { + "member:withSize": "Font withSize(int newSize)" + } + }, + "after": { + "kind": "extension", + "members": { + "member:withSize": "Font withSize(int newSize)" + } + }, + "migrationDirection": "FontExtensions", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "FontFamily", + "candidate": "FontFamily", + "classification": "declaration-changed", + "before": { + "kind": "class", + "members": { + "field:fontFamily": "String", + "field:package": "String?", + "constructor:new": "({required this.fontFamily, this.package})", + "constructor:fromJson": "factory (Map map)" + } + }, + "after": { + "kind": "class", + "members": { + "field:fontFamily": "String", + "field:package": "String?", + "field:fallback": "List?", + "constructor:new": "({required this.fontFamily, this.package, this.fallback})", + "constructor:fromJson": "factory (Map map)" + } + }, + "migrationDirection": "FontFamily", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "FormController", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "field:eventType": "String", + "field:formData": "Map", + "method:submit": "submit ()", + "method:reset": "reset (Map data)" + } + }, + "after": null, + "migrationDirection": "TFormController", + "migrationNote": "入口重组,见对应组件;不保证参数/行为兼容" + }, + { + "old": "FormItemNotifier", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "field:isDisposed": "bool", + "get:formVal": "String formVal", + "method:upDataForm": "upDataForm (val)", + "method:dispose": "void dispose ()" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "HollowCircle", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "constructor:new": "(this.color)", + "field:color": "final Color", + "method:paint": "void paint (Canvas canvas, Size size)", + "method:shouldRepaint": "bool shouldRepaint (covariant CustomPainter oldDelegate)" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "IconBuilder", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "typedef", + "members": { + "signature": "typedef IconBuilder = Widget? Function(BuildContext context, bool checked);" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "IconTextDirection", + "candidate": "IconTextDirection", + "classification": "declaration-shape-unchanged", + "before": { + "kind": "enum", + "members": { + "value:horizontal": "horizontal", + "value:vertical": "vertical" + } + }, + "after": { + "kind": "enum", + "members": { + "value:horizontal": "horizontal", + "value:vertical": "vertical" + } + }, + "migrationDirection": "IconTextDirection", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "ImageWidget", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "field:src": "final String?", + "field:assetUrl": "final String?", + "field:imageFile": "final File?", + "field:width": "final double?", + "field:height": "final double?", + "field:errorWidget": "final Widget?", + "field:loadingWidget": "final Widget?", + "field:fit": "final BoxFit", + "field:image": "final ImageProvider", + "field:frameBuilder": "final ImageFrameBuilder?", + "field:loadingBuilder": "final ImageLoadingBuilder?", + "field:errorBuilder": "final ImageErrorWidgetBuilder?", + "field:color": "final Color?", + "field:opacity": "final Animation?", + "field:filterQuality": "final FilterQuality", + "field:colorBlendMode": "final BlendMode?", + "field:alignment": "final AlignmentGeometry", + "field:repeat": "final ImageRepeat", + "field:centerSlice": "final Rect?", + "field:matchTextDirection": "final bool", + "field:gaplessPlayback": "final bool", + "field:semanticLabel": "final String?", + "field:excludeFromSemantics": "final bool", + "field:isAntiAlias": "final bool", + "field:cacheWidth": "final int?", + "field:cacheHeight": "final int?", + "constructor:new": "const ({Key? key, required this.image, this.frameBuilder, this.loadingBuilder, this.errorBuilder, this.semanticLabel, this.excludeFromSemantics = false, this.width, this.height, this.color, this.opacity, this.colorBlendMode, required this.fit, this.alignment = Alignment.center, this.repeat = ImageRepeat.noRepeat, this.centerSlice, this.matchTextDirection = false, this.gaplessPlayback = false, this.isAntiAlias = false, this.filterQuality = FilterQuality.low, required this.src, this.errorWidget, this.loadingWidget, this.cacheWidth, this.cacheHeight, this.assetUrl, this.imageFile})", + "constructor:network": "(this.src, {Key? key, this.width, this.height, double scale = 1.0, this.errorWidget, this.fit = BoxFit.none, this.loadingWidget, this.frameBuilder, this.loadingBuilder, this.errorBuilder, this.semanticLabel, this.excludeFromSemantics = false, this.color, this.opacity, this.colorBlendMode, this.alignment = Alignment.center, this.repeat = ImageRepeat.noRepeat, this.centerSlice, this.matchTextDirection = false, this.gaplessPlayback = false, this.filterQuality = FilterQuality.low, this.isAntiAlias = false, Map? headers, this.cacheWidth, this.assetUrl, this.cacheHeight, this.imageFile})", + "constructor:asset": "(this.assetUrl, {Key? key, AssetBundle? bundle, this.frameBuilder, this.errorBuilder, this.semanticLabel, this.excludeFromSemantics = false, double? scale, this.width, this.height, this.color, this.opacity, this.colorBlendMode, this.fit = BoxFit.none, this.alignment = Alignment.center, this.repeat = ImageRepeat.noRepeat, this.centerSlice, this.matchTextDirection = false, this.gaplessPlayback = false, this.isAntiAlias = false, String? package, this.filterQuality = FilterQuality.low, this.cacheWidth, this.cacheHeight, this.src, this.errorWidget, this.loadingWidget, this.imageFile})", + "constructor:file": "(this.imageFile, {Key? key, double scale = 1.0, this.frameBuilder, this.errorBuilder, this.semanticLabel, this.excludeFromSemantics = false, this.width, this.height, this.color, this.opacity, this.colorBlendMode, this.fit = BoxFit.none, this.alignment = Alignment.center, this.repeat = ImageRepeat.noRepeat, this.centerSlice, this.matchTextDirection = false, this.gaplessPlayback = false, this.isAntiAlias = false, this.filterQuality = FilterQuality.low, this.assetUrl, this.cacheWidth, this.cacheHeight, this.errorWidget, this.loadingWidget, this.src})", + "method:createState": "State createState ()" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "ItemBuilderType", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "typedef", + "members": { + "signature": "typedef ItemBuilderType = Widget? Function(BuildContext context, String content, int colIndex, int index, ItemDistanceCalculator itemDistanceCalculator, double distance);" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "ItemDistanceCalculator", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "constructor:new": "()", + "method:calculateColor": "Color calculateColor (BuildContext context, double distance)", + "method:calculateFontWeight": "FontWeight calculateFontWeight (BuildContext context, double distance)", + "method:calculateFont": "double calculateFont (BuildContext context, double distance)" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "LabelBuilder", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "typedef", + "members": { + "signature": "typedef LabelBuilder = Widget Function(BuildContext context, String label, bool isOpened, int index);" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "LeftItemBuilder", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "typedef", + "members": { + "signature": "typedef LeftItemBuilder = Widget Function(BuildContext context, int index);" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "LeftLinePainter", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "field:isCircleFill": "final bool", + "field:topLineColor": "final Color", + "field:isShowTopLine": "final bool", + "constructor:new": "const ({required this.topLineColor, required this.isShowTopLine, required this.isCircleFill})", + "method:paint": "void paint (Canvas canvas, Size size)", + "method:shouldRepaint": "bool shouldRepaint (CustomPainter oldDelegate)" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "LeftLineWidget", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "field:isCircleFill": "final bool", + "field:topLineColor": "final Color?", + "field:isShowTopLine": "final bool", + "constructor:new": "const ({super.key, this.isShowTopLine = false, this.topLineColor, this.isCircleFill = false})", + "method:build": "Widget build (BuildContext context)" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "LinkClick", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "typedef", + "members": { + "signature": "typedef LinkClick = Function(Uri? uri);" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "MessageLink", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "constructor:new": "({required this.name, required this.uri, this.color})", + "field:name": "final String", + "field:uri": "final Uri?", + "field:color": "final Color?" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "MessageMarquee", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "constructor:new": "({this.speed, this.loop, this.delay})", + "field:speed": "final int?", + "field:loop": "final int?", + "field:delay": "final int?" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "MessageTheme", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "enum", + "members": { + "value:info": "info", + "value:success": "success", + "value:warning": "warning", + "value:error": "error" + } + }, + "after": null, + "migrationDirection": "TMessageStatus", + "migrationNote": "入口重组,见对应组件;不保证参数/行为兼容" + }, + { + "old": "MultiCascaderCallback", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "typedef", + "members": { + "signature": "typedef MultiCascaderCallback = void Function(List selected);" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "MultiCascaderListModel", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "field:labelFun": "String? Function()?", + "get:label": "String? label", + "field:value": "String?", + "field:parentValue": "String?", + "field:segmentValue": "String?", + "field:level": "int?", + "constructor:new": "({this.labelFun, this.value, this.parentValue, this.level, this.segmentValue})" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "MultiLinkedPickerModel", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "field:placeData": "static const", + "field:data": "Map", + "field:selectedIndexes": "List", + "field:columnNum": "int", + "field:selectedData": "List", + "field:controllers": "List", + "field:presentData": "List", + "field:keepSameSelection": "bool", + "field:pageSize": "static const int", + "field:currentPages": "List", + "field:hasMoreData": "List", + "field:totalCounts": "List", + "constructor:new": "({required this.data, required this.columnNum, required List initialData, this.keepSameSelection = false})", + "method:loadMoreData": "bool loadMoreData (int columnIndex)", + "method:refreshPresentDataAndController": "void refreshPresentDataAndController (int position, int selectedIndex, bool jump)" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "MultiPickerCallback", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "typedef", + "members": { + "signature": "typedef MultiPickerCallback = void Function(List selected);" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "OnCellTap", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "typedef", + "members": { + "signature": "typedef OnCellTap = void Function(int rowIndex, dynamic row, TDTableCol col);" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "OnCheckBoxGroupChange", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "typedef", + "members": { + "signature": "typedef OnCheckBoxGroupChange = void Function(List ids);" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "OnCheckValueChanged", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "typedef", + "members": { + "signature": "typedef OnCheckValueChanged = void Function(bool selected);" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "OnClose", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "typedef", + "members": { + "signature": "typedef OnClose = Function(int index);" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "OnDelete", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "typedef", + "members": { + "signature": "typedef OnDelete = Function(int index);" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "OnGroupChange", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "typedef", + "members": { + "signature": "typedef OnGroupChange = void Function(List checkedIds);" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "OnImageTap", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "typedef", + "members": { + "signature": "typedef OnImageTap = Function(int index);" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "OnIndexChange", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "typedef", + "members": { + "signature": "typedef OnIndexChange = Function(int index);" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "OnLongPress", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "typedef", + "members": { + "signature": "typedef OnLongPress = Function(int index);" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "OnLongTap", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "typedef", + "members": { + "signature": "typedef OnLongTap = Function(String? content);" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "OnRadioGroupChange", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "typedef", + "members": { + "signature": "typedef OnRadioGroupChange = void Function(String? selectedId);" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "OnRowSelect", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "typedef", + "members": { + "signature": "typedef OnRowSelect = void Function(int index, bool checked);" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "OnScroll", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "typedef", + "members": { + "signature": "typedef OnScroll = void Function(ScrollController controller);" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "OnSelect", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "typedef", + "members": { + "signature": "typedef OnSelect = void Function(List? data);" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "OnSliderThemeDataUpdate", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "typedef", + "members": { + "signature": "typedef OnSliderThemeDataUpdate = SliderThemeData Function(SliderThemeData sliderThemeData);" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "OnSwitchChanged", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "typedef", + "members": { + "signature": "typedef OnSwitchChanged = bool Function(bool value);" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "OnTap", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "typedef", + "members": { + "signature": "typedef OnTap = Function(String? content);" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "PanelWithDownArrow", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "field:config": "TDBottomTabBarPopUpShapeConfig?", + "field:backgroundColor": "Color", + "constructor:new": "({this.config, required this.backgroundColor})", + "method:paint": "void paint (Canvas canvas, Size size)", + "method:shouldRepaint": "bool shouldRepaint (covariant CustomPainter oldDelegate)" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "PlacementEnum", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "enum", + "members": { + "value:none": "none", + "value:top": "top", + "value:bottom": "bottom" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "PlatformUtil", + "candidate": "PlatformUtil", + "classification": "declaration-shape-unchanged", + "before": { + "kind": "class", + "members": { + "get:isAndroid": "static bool isAndroid", + "get:isIOS": "static bool isIOS", + "get:isFuchsia": "static bool isFuchsia", + "get:isLinux": "static bool isLinux", + "get:isMacOS": "static bool isMacOS", + "get:isOhos": "static bool isOhos", + "get:isWindows": "static bool isWindows", + "get:isWeb": "static bool isWeb" + } + }, + "after": { + "kind": "class", + "members": { + "get:isAndroid": "static bool isAndroid", + "get:isIOS": "static bool isIOS", + "get:isFuchsia": "static bool isFuchsia", + "get:isLinux": "static bool isLinux", + "get:isMacOS": "static bool isMacOS", + "get:isOhos": "static bool isOhos", + "get:isWindows": "static bool isWindows", + "get:isWeb": "static bool isWeb" + } + }, + "migrationDirection": "PlatformUtil", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "PopRoute", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "field:child": "Widget", + "constructor:new": "({required this.child})", + "get:barrierColor": "Color? barrierColor", + "get:barrierDismissible": "bool barrierDismissible", + "get:barrierLabel": "String? barrierLabel", + "method:buildPage": "Widget buildPage (BuildContext context, Animation animation, Animation secondaryAnimation)", + "get:transitionDuration": "Duration transitionDuration" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "PopUpMenuItem", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "constructor:new": "const ({Key? key, this.itemWidget, required this.value, this.alignment = AlignmentDirectional.center})", + "field:itemWidget": "final Widget?", + "field:value": "final String", + "field:alignment": "final AlignmentGeometry", + "method:build": "Widget build (BuildContext context)" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "PopupClick", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "typedef", + "members": { + "signature": "typedef PopupClick = Function();" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "PopupDialog", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "field:btnContext": "final BuildContext", + "field:onClickMenu": "final ValueChanged", + "field:items": "final List", + "field:config": "final TDBottomTabBarPopUpShapeConfig?", + "field:defaultPopUpWidth": "final double", + "constructor:new": "const (this.defaultPopUpWidth, {Key? key, required this.btnContext, required this.onClickMenu, required this.items, required this.config})", + "method:createState": "PopupDialogState createState ()" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "PopupDialogState", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "field:button": "RenderBox?", + "field:overlay": "RenderBox?", + "field:position": "RelativeRect?", + "field:size": "Size?", + "method:initState": "void initState ()", + "method:build": "Widget build (BuildContext context)" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "Position", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "enum", + "members": { + "value:start": "start", + "value:end": "end" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "ProgressIndicator", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "field:value": "final double?", + "field:label": "final TDLabelWidget?", + "field:progressLabelPosition": "final TDProgressLabelPosition", + "field:strokeWidth": "final double", + "field:circleRadius": "final double", + "field:linearBorderRadius": "final BorderRadiusGeometry", + "field:color": "final Color?", + "field:backgroundColor": "final Color", + "field:type": "final TDProgressType", + "field:progressStatus": "final TDProgressStatus", + "field:showLabel": "final bool", + "field:customProgressLabel": "final Widget?", + "field:labelWidgetWidth": "final double?", + "field:labelWidgetAlignment": "final Alignment?", + "field:onTap": "final VoidCallback?", + "field:onLongPress": "final VoidCallback?", + "field:animationDuration": "final int", + "field:context": "final BuildContext?", + "constructor:new": "const ({Key? key, this.value, this.label, this.progressLabelPosition = TDProgressLabelPosition.inside, required this.strokeWidth, required this.linearBorderRadius, required this.circleRadius, this.color, required this.backgroundColor, required this.type, this.progressStatus = TDProgressStatus.primary, this.showLabel = true, this.customProgressLabel, this.labelWidgetWidth, this.labelWidgetAlignment, this.onTap, this.onLongPress, this.animationDuration = 300, this.context})", + "method:createState": "_ProgressIndicatorState createState ()" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "RadioCorner", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "field:length": "final double", + "field:radius": "final double", + "field:fillColor": "final Color", + "constructor:new": "({required this.length, required this.radius, required this.fillColor})", + "method:paint": "void paint (Canvas canvas, Size size)", + "method:shouldRepaint": "bool shouldRepaint (covariant CustomPainter oldDelegate)" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "RadioCornerIcon", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "field:length": "final double", + "field:radius": "final double", + "field:selectColor": "final Color?", + "constructor:new": "const ({Key? key, required this.length, required this.radius, required this.selectColor})", + "method:build": "Widget build (BuildContext context)" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "RectClipper", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "field:animValue": "final double", + "field:slideTransitionFrom": "final SlideTransitionFrom", + "constructor:new": "(this.animValue, this.slideTransitionFrom)", + "method:getClip": "Rect getClip (Size size)", + "method:shouldReclip": "bool shouldReclip (covariant CustomClipper oldClipper)" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "RightItemBuilder", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "typedef", + "members": { + "signature": "typedef RightItemBuilder = Widget Function(BuildContext context, int index);" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "RowCheckFunc", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "typedef", + "members": { + "signature": "typedef RowCheckFunc = bool Function(int index, dynamic row);" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "ScaleFormatter", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "typedef", + "members": { + "signature": "typedef ScaleFormatter = String Function(double value);" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "SelectableFunc", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "typedef", + "members": { + "signature": "typedef SelectableFunc = bool Function(int index, dynamic row);" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "SideItemProps", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "field:index": "int", + "field:value": "int", + "field:disabled": "bool?", + "field:icon": "IconData?", + "field:label": "String?", + "field:badge": "TDBadge?", + "field:textStyle": "TextStyle?", + "constructor:new": "({required this.value, required this.index, this.disabled, this.icon, this.label, this.badge, this.textStyle})" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "SlideTransitionFrom", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "enum", + "members": { + "value:top": "top", + "value:right": "right", + "value:left": "left", + "value:bottom": "bottom", + "value:center": "center" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "SliderMeasureData", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "field:trackerRect": "Rect?", + "field:thumbCenter": "Offset?", + "field:thumbTextRect": "Rect?", + "field:startRangeThumbTextRect": "Rect?", + "field:endRangeThumbTextRect": "Rect?" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "SliverStickyHeader", + "candidate": "SliverStickyHeader", + "classification": "declaration-shape-unchanged", + "before": { + "kind": "class", + "members": { + "constructor:new": "const ({Key? key, this.header, this.sliver, this.overlapsContent = false, this.sticky = true, this.pinnedOffset = 0.0, this.controller})", + "constructor:builder": "({Key? key, required SliverStickyHeaderWidgetBuilder builder, Widget? sliver, bool overlapsContent = false, bool sticky = true, double pinnedOffset = 0.0, StickyHeaderController? controller})", + "field:header": "final Widget?", + "field:sliver": "final Widget?", + "field:overlapsContent": "final bool", + "field:sticky": "final bool", + "field:pinnedOffset": "final double", + "field:controller": "final StickyHeaderController?", + "method:createRenderObject": "RenderSliverStickyHeader createRenderObject (BuildContext context)", + "method:createElement": "SliverStickyHeaderRenderObjectElement createElement ()", + "method:updateRenderObject": "void updateRenderObject (BuildContext context, RenderSliverStickyHeader renderObject)" + } + }, + "after": { + "kind": "class", + "members": { + "constructor:new": "const ({Key? key, this.header, this.sliver, this.overlapsContent = false, this.sticky = true, this.pinnedOffset = 0.0, this.controller})", + "constructor:builder": "({Key? key, required SliverStickyHeaderWidgetBuilder builder, Widget? sliver, bool overlapsContent = false, bool sticky = true, double pinnedOffset = 0.0, StickyHeaderController? controller})", + "field:header": "final Widget?", + "field:sliver": "final Widget?", + "field:overlapsContent": "final bool", + "field:sticky": "final bool", + "field:pinnedOffset": "final double", + "field:controller": "final StickyHeaderController?", + "method:createRenderObject": "RenderSliverStickyHeader createRenderObject (BuildContext context)", + "method:createElement": "SliverStickyHeaderRenderObjectElement createElement ()", + "method:updateRenderObject": "void updateRenderObject (BuildContext context, RenderSliverStickyHeader renderObject)" + } + }, + "migrationDirection": "SliverStickyHeader", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "SliverStickyHeaderRenderObjectElement", + "candidate": "SliverStickyHeaderRenderObjectElement", + "classification": "declaration-shape-unchanged", + "before": { + "kind": "class", + "members": { + "constructor:new": "(SliverStickyHeader widget)", + "get:widget": "SliverStickyHeader widget", + "method:visitChildren": "void visitChildren (ElementVisitor visitor)", + "method:forgetChild": "void forgetChild (Element child)", + "method:mount": "void mount (Element? parent, dynamic newSlot)", + "method:update": "void update (SliverStickyHeader newWidget)", + "method:insertRenderObjectChild": "void insertRenderObjectChild (RenderObject child, int? slot)", + "method:moveRenderObjectChild": "void moveRenderObjectChild (RenderObject child, slot, newSlot)", + "method:removeRenderObjectChild": "void removeRenderObjectChild (RenderObject child, slot)" + } + }, + "after": { + "kind": "class", + "members": { + "constructor:new": "(SliverStickyHeader widget)", + "get:widget": "SliverStickyHeader widget", + "method:visitChildren": "void visitChildren (ElementVisitor visitor)", + "method:forgetChild": "void forgetChild (Element child)", + "method:mount": "void mount (Element? parent, dynamic newSlot)", + "method:update": "void update (SliverStickyHeader newWidget)", + "method:insertRenderObjectChild": "void insertRenderObjectChild (RenderObject child, int? slot)", + "method:moveRenderObjectChild": "void moveRenderObjectChild (RenderObject child, slot, newSlot)", + "method:removeRenderObjectChild": "void removeRenderObjectChild (RenderObject child, slot)" + } + }, + "migrationDirection": "SliverStickyHeaderRenderObjectElement", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "SliverStickyHeaderState", + "candidate": "SliverStickyHeaderState", + "classification": "declaration-changed", + "before": { + "kind": "class", + "members": { + "constructor:new": "const (this.scrollPercentage, this.isPinned)", + "field:scrollPercentage": "final double", + "field:isPinned": "final bool", + "method:==": "bool == (dynamic other)", + "get:hashCode": "int hashCode" + } + }, + "after": { + "kind": "class", + "members": { + "constructor:new": "const (this.scrollPercentage, this.isPinned)", + "field:scrollPercentage": "final double", + "field:isPinned": "final bool", + "method:==": "bool == (Object other)", + "get:hashCode": "int hashCode" + } + }, + "migrationDirection": "SliverStickyHeaderState", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "SliverStickyHeaderWidgetBuilder", + "candidate": "SliverStickyHeaderWidgetBuilder", + "classification": "declaration-shape-unchanged", + "before": { + "kind": "typedef", + "members": { + "signature": "typedef SliverStickyHeaderWidgetBuilder = Widget Function(BuildContext context, SliverStickyHeaderState state);" + } + }, + "after": { + "kind": "typedef", + "members": { + "signature": "typedef SliverStickyHeaderWidgetBuilder = Widget Function(BuildContext context, SliverStickyHeaderState state);" + } + }, + "migrationDirection": "SliverStickyHeaderWidgetBuilder", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "StickyHeaderController", + "candidate": "StickyHeaderController", + "classification": "declaration-shape-unchanged", + "before": { + "kind": "class", + "members": { + "get:stickyHeaderScrollOffset": "double stickyHeaderScrollOffset", + "set:stickyHeaderScrollOffset": "stickyHeaderScrollOffset (double value)" + } + }, + "after": { + "kind": "class", + "members": { + "get:stickyHeaderScrollOffset": "double stickyHeaderScrollOffset", + "set:stickyHeaderScrollOffset": "stickyHeaderScrollOffset (double value)" + } + }, + "migrationDirection": "StickyHeaderController", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "SwipeMotion", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "enum", + "members": { + "value:scroll": "scroll", + "value:behind": "behind", + "value:drawer": "drawer", + "value:stretch": "stretch" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDActionSheet", + "candidate": "TActionSheet", + "classification": "declaration-changed", + "before": { + "kind": "class", + "members": { + "constructor:new": "(this.context, {this.align = TDActionSheetAlign.center, this.cancelText, this.count = 8, this.rows = 2, this.itemHeight = 96.0, this.itemMinWidth = 80.0, this.description, required this.items, this.showCancel = true, this.showPagination = false, this.scrollable = false, this.theme = TDActionSheetTheme.list, this.visible = false, this.onCancel, this.onClose, this.onSelected, this.showOverlay = true, this.closeOnOverlayClick = true, this.useSafeArea = true})", + "field:context": "final BuildContext", + "field:align": "final TDActionSheetAlign", + "field:cancelText": "final String?", + "field:count": "final int", + "field:rows": "final int", + "field:itemHeight": "final double", + "field:itemMinWidth": "final double", + "field:description": "final String?", + "field:items": "final List", + "field:showCancel": "final bool", + "field:showOverlay": "final bool", + "field:closeOnOverlayClick": "final bool", + "field:theme": "final TDActionSheetTheme", + "field:visible": "final bool", + "field:showPagination": "final bool", + "field:scrollable": "final bool", + "field:onCancel": "final VoidCallback?", + "field:onClose": "final VoidCallback?", + "field:onSelected": "final TDActionSheetItemCallback?", + "field:useSafeArea": "final bool", + "method:showListActionSheet": "static void showListActionSheet (BuildContext context, {required List items, TDActionSheetAlign align = TDActionSheetAlign.center, String? cancelText, bool showCancel = true, VoidCallback? onCancel, TDActionSheetItemCallback? onSelected, bool showOverlay = true, bool closeOnOverlayClick = true, VoidCallback? onClose, bool useSafeArea = true})", + "method:showGridActionSheet": "static void showGridActionSheet (BuildContext context, {required List items, TDActionSheetAlign align = TDActionSheetAlign.center, String? cancelText, bool showCancel = true, TDActionSheetItemCallback? onSelected, bool showOverlay = true, bool closeOnOverlayClick = true, int count = 8, int rows = 2, double itemHeight = 96.0, double itemMinWidth = 80.0, bool scrollable = false, bool showPagination = false, VoidCallback? onCancel, String? description, VoidCallback? onClose, bool useSafeArea = true})", + "method:showGroupActionSheet": "static void showGroupActionSheet (BuildContext context, {required List items, TDActionSheetAlign align = TDActionSheetAlign.left, String? cancelText, bool showCancel = true, TDActionSheetItemCallback? onSelected, bool showOverlay = true, bool closeOnOverlayClick = true, double itemHeight = 96.0, double itemMinWidth = 80.0, VoidCallback? onCancel, VoidCallback? onClose, bool useSafeArea = true})", + "method:show": "void show ()", + "method:open": "void open ()", + "method:close": "void close ()" + } + }, + "after": { + "kind": "class", + "members": { + "method:showList": "static TPopupHandle showList (BuildContext context, {required List> items, TActionSheetAlign align = TActionSheetAlign.center, String? cancelText, String? subtitle, bool showCancel = true, bool showOverlay = true, bool closeOnOverlayClick = true, bool useSafeArea = true, VoidCallback? onCancel, VoidCallback? onClosed, TActionSheetOnSelected? onSelected})", + "method:showGrid": "static TPopupHandle showGrid (BuildContext context, {required List> items, TActionSheetGridLayout layout = const TActionSheetGridLayout.fixed(), String? cancelText, String? subtitle, bool showCancel = true, bool showOverlay = true, bool closeOnOverlayClick = true, bool useSafeArea = true, double? itemHeight, VoidCallback? onCancel, VoidCallback? onClosed, TActionSheetOnSelected? onSelected})", + "method:showGridSections": "static TPopupHandle showGridSections (BuildContext context, {required List> sections, String? cancelText, bool showCancel = true, bool showOverlay = true, bool closeOnOverlayClick = true, bool useSafeArea = true, double itemWidth = 80, double? itemHeight, VoidCallback? onCancel, VoidCallback? onClosed, TActionSheetOnSelected? onSelected})" + } + }, + "migrationDirection": "TActionSheet", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDActionSheetAlign", + "candidate": "TActionSheetAlign", + "classification": "declaration-shape-unchanged", + "before": { + "kind": "enum", + "members": { + "value:center": "center", + "value:left": "left", + "value:right": "right" + } + }, + "after": { + "kind": "enum", + "members": { + "value:center": "center", + "value:left": "left", + "value:right": "right" + } + }, + "migrationDirection": "TActionSheetAlign", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDActionSheetItem", + "candidate": "TActionSheetItem", + "classification": "declaration-changed", + "before": { + "kind": "class", + "members": { + "constructor:new": "({required this.label, this.textStyle, this.icon, this.badge, this.description, this.disabled = false, this.iconSize, this.group})", + "field:label": "final String", + "field:textStyle": "final TextStyle?", + "field:icon": "final Widget?", + "field:badge": "final TDBadge?", + "field:disabled": "final bool", + "field:iconSize": "final double?", + "field:group": "final String?", + "field:description": "final String?" + } + }, + "after": { + "kind": "class", + "members": { + "constructor:new": "const ({required this.value, required this.label, this.textStyle, this.icon, this.badge, this.subtitle, this.disabled = false})", + "field:value": "final T", + "field:label": "final String", + "field:textStyle": "final TextStyle?", + "field:icon": "final Widget?", + "field:badge": "final TBadgeConfig?", + "field:disabled": "final bool", + "field:subtitle": "final String?" + } + }, + "migrationDirection": "TActionSheetItem", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDActionSheetItemCallback", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "typedef", + "members": { + "signature": "typedef TDActionSheetItemCallback = void Function(TDActionSheetItem item, int index);" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDActionSheetTheme", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "enum", + "members": { + "value:list": "list", + "value:grid": "grid", + "value:group": "group" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDAlertDialog", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "constructor:new": "const ({Key? key, this.backgroundColor, this.radius = 12.0, this.title, this.titleColor, this.content, this.contentColor, this.titleAlignment, this.contentWidget, this.contentMaxHeight = 0, this.leftBtn, this.rightBtn, this.leftBtnAction, this.rightBtnAction, this.showCloseButton, TDDialogButtonStyle buttonStyle = TDDialogButtonStyle.normal, this.padding = const EdgeInsets.fromLTRB(24, 32, 24, 0), this.buttonWidget})", + "constructor:vertical": "const ({Key? key, required List buttons, this.backgroundColor, this.radius = 12.0, this.title, this.titleColor, this.titleAlignment, this.contentWidget, this.content, this.contentColor, this.contentMaxHeight = 0, this.showCloseButton, this.padding = const EdgeInsets.fromLTRB(24, 32, 24, 0), this.buttonWidget})", + "field:backgroundColor": "final Color?", + "field:radius": "final double", + "field:title": "final String?", + "field:titleColor": "final Color?", + "field:titleAlignment": "final AlignmentGeometry?", + "field:contentWidget": "final Widget?", + "field:content": "final String?", + "field:contentColor": "final Color?", + "field:contentMaxHeight": "final double", + "field:leftBtn": "final TDDialogButtonOptions?", + "field:rightBtn": "final TDDialogButtonOptions?", + "field:leftBtnAction": "final Function()?", + "field:rightBtnAction": "final Function()?", + "field:showCloseButton": "final bool?", + "field:padding": "final EdgeInsets?", + "field:buttonWidget": "final Widget?", + "method:build": "Widget build (BuildContext context)" + } + }, + "after": null, + "migrationDirection": "TDialog", + "migrationNote": "入口重组,见对应组件;不保证参数/行为兼容" + }, + { + "old": "TDAvatar", + "candidate": "TAvatar", + "classification": "declaration-changed", + "before": { + "kind": "class", + "members": { + "constructor:new": "const ({Key? key, this.size = TDAvatarSize.medium, this.type = TDAvatarType.normal, this.shape = TDAvatarShape.circle, this.text, this.radius, this.icon, this.avatarUrl, this.avatarSize, this.avatarDisplayList, this.displayText, this.onTap, this.defaultUrl = '', this.avatarDisplayWidget, this.avatarDisplayBorder = 2, this.avatarDisplayListAsset, this.backgroundColor, this.fit})", + "field:avatarUrl": "final String?", + "field:size": "final TDAvatarSize", + "field:type": "final TDAvatarType", + "field:shape": "final TDAvatarShape", + "field:text": "final String?", + "field:radius": "final double?", + "field:avatarSize": "final double?", + "field:icon": "final IconData?", + "field:defaultUrl": "final String", + "field:avatarDisplayList": "final List?", + "field:avatarDisplayListAsset": "final List?", + "field:avatarDisplayBorder": "final double", + "field:avatarDisplayWidget": "final Widget?", + "field:displayText": "final String?", + "field:onTap": "final Function()?", + "field:backgroundColor": "final Color?", + "field:fit": "final BoxFit?", + "method:build": "Widget build (BuildContext context)", + "method:buildOperationAvatar": "Widget buildOperationAvatar (BuildContext context)", + "method:buildDisplayAvatar": "Widget buildDisplayAvatar (BuildContext context)" + } + }, + "after": { + "kind": "class", + "members": { + "constructor:new": "const ({this.image, this.child, this.size, this.shape, this.fit = BoxFit.cover, this.onTap, super.key})", + "field:image": "final ImageProvider?", + "field:child": "final Widget?", + "field:size": "final TAvatarSize?", + "field:shape": "final TAvatarShape?", + "field:fit": "final BoxFit", + "field:onTap": "final GestureTapCallback?", + "method:build": "Widget build (BuildContext context)" + } + }, + "migrationDirection": "TAvatar", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDAvatarShape", + "candidate": "TAvatarShape", + "classification": "declaration-shape-unchanged", + "before": { + "kind": "enum", + "members": { + "value:circle": "circle", + "value:square": "square" + } + }, + "after": { + "kind": "enum", + "members": { + "value:circle": "circle", + "value:square": "square" + } + }, + "migrationDirection": "TAvatarShape", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDAvatarSize", + "candidate": "TAvatarSize", + "classification": "declaration-shape-unchanged", + "before": { + "kind": "enum", + "members": { + "value:large": "large", + "value:medium": "medium", + "value:small": "small" + } + }, + "after": { + "kind": "enum", + "members": { + "value:large": "large", + "value:medium": "medium", + "value:small": "small" + } + }, + "migrationDirection": "TAvatarSize", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDAvatarType", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "enum", + "members": { + "value:icon": "icon", + "value:normal": "normal", + "value:customText": "customText", + "value:display": "display", + "value:operation": "operation" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDBackTop", + "candidate": "TBackTop", + "classification": "declaration-changed", + "before": { + "kind": "class", + "members": { + "constructor:new": "const ({Key? key, this.controller, this.theme = TDBackTopTheme.light, this.style = TDBackTopStyle.circle, this.showText = false, this.onClick})", + "field:controller": "final ScrollController?", + "field:theme": "final TDBackTopTheme", + "field:style": "final TDBackTopStyle", + "field:showText": "final bool", + "field:onClick": "final VoidCallback?", + "method:createState": "State createState ()" + } + }, + "after": { + "kind": "class", + "members": { + "constructor:new": "const ({Key? key, this.controller, this.onPressed, this.showText = false, this.visibilityOffset = 200, this.tooltip, this.shape = TBackTopShape.circle, this.colorPreset = TBackTopColorPreset.light})", + "field:controller": "final ScrollController?", + "field:onPressed": "final VoidCallback?", + "field:showText": "final bool", + "field:visibilityOffset": "final double", + "field:tooltip": "final String?", + "field:shape": "final TBackTopShape", + "field:colorPreset": "final TBackTopColorPreset", + "method:createState": "State createState ()" + } + }, + "migrationDirection": "TBackTop", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDBackTopStyle", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "enum", + "members": { + "value:circle": "circle", + "value:halfCircle": "halfCircle" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDBackTopTheme", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "enum", + "members": { + "value:light": "light", + "value:dark": "dark" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDBadge", + "candidate": "TBadge", + "classification": "declaration-changed", + "before": { + "kind": "class", + "members": { + "constructor:new": "const (this.type, {Key? key, this.count, this.maxCount = '99', this.border = TDBadgeBorder.large, this.size = TDBadgeSize.small, this.color, this.textColor, this.message, this.widthLarge = 32, this.widthSmall = 12, this.padding, this.showZero = true})", + "field:count": "final String?", + "field:maxCount": "final String?", + "field:type": "final TDBadgeType", + "field:size": "final TDBadgeSize", + "field:border": "final TDBadgeBorder", + "field:color": "final Color?", + "field:textColor": "final Color?", + "field:message": "final String?", + "field:widthLarge": "final double", + "field:widthSmall": "final double", + "field:padding": "final EdgeInsetsGeometry?", + "field:showZero": "final bool", + "method:createState": "State createState ()" + } + }, + "after": { + "kind": "class", + "members": { + "constructor:new": "const ({super.key, this.label = '0', this.variant = TBadgeVariant.circle, this.size = TBadgeSize.medium, this.border = false, this.showZero = true, this.alignment, this.offset, this.child, this.onTap})", + "constructor:custom": "const ({super.key, required this.badge, this.alignment, this.offset, this.child, this.onTap})", + "field:label": "final String?", + "field:variant": "final TBadgeVariant", + "field:size": "final TBadgeSize", + "field:border": "final bool", + "field:showZero": "final bool", + "field:alignment": "final AlignmentGeometry?", + "field:offset": "final Offset?", + "field:child": "final Widget?", + "field:badge": "final Widget?", + "field:onTap": "final GestureTapCallback?", + "method:build": "Widget build (BuildContext context)" + } + }, + "migrationDirection": "TBadge", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDBadgeBorder", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "enum", + "members": { + "value:large": "large", + "value:small": "small" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDBadgeSize", + "candidate": "TBadgeSize", + "classification": "declaration-changed", + "before": { + "kind": "enum", + "members": { + "value:large": "large", + "value:small": "small" + } + }, + "after": { + "kind": "enum", + "members": { + "value:medium": "medium", + "value:large": "large" + } + }, + "migrationDirection": "TBadgeSize", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDBadgeType", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "enum", + "members": { + "value:redPoint": "redPoint", + "value:message": "message", + "value:bubble": "bubble", + "value:square": "square", + "value:subscript": "subscript" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDBarItemAction", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "typedef", + "members": { + "signature": "typedef TDBarItemAction = void Function();" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDBottomTabBar", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "constructor:new": "(this.basicType, {Key? key, this.componentType = TDBottomTabBarComponentType.label, this.outlineType = TDBottomTabBarOutlineType.filled, required this.navigationTabs, this.barHeight = _kDefaultTabBarHeight, this.useVerticalDivider, this.dividerHeight, this.dividerThickness, this.dividerColor, this.showTopBorder = true, this.topBorder, this.useSafeArea = true, this.selectedBgColor, this.unselectedBgColor, this.backgroundColor, this.centerDistance, this.currentIndex, this.needInkWell = false, this.indicatorAnimation = TDBottomTabBarIndicatorAnimation.none, this.animationDuration = const Duration(milliseconds: 300), this.animationCurve = Curves.easeInOutCubic})", + "field:basicType": "final TDBottomTabBarBasicType", + "field:componentType": "final TDBottomTabBarComponentType?", + "field:outlineType": "final TDBottomTabBarOutlineType?", + "field:navigationTabs": "final List", + "field:barHeight": "final double?", + "field:useVerticalDivider": "final bool?", + "field:dividerHeight": "final double?", + "field:dividerThickness": "final double?", + "field:dividerColor": "final Color?", + "field:showTopBorder": "final bool?", + "field:topBorder": "final BorderSide?", + "field:useSafeArea": "final bool", + "field:selectedBgColor": "final Color?", + "field:unselectedBgColor": "final Color?", + "field:backgroundColor": "final Color?", + "field:centerDistance": "final double?", + "field:currentIndex": "final int?", + "field:needInkWell": "final bool", + "field:indicatorAnimation": "final TDBottomTabBarIndicatorAnimation", + "field:animationDuration": "final Duration", + "field:animationCurve": "final Curve", + "method:createState": "State createState ()" + } + }, + "after": null, + "migrationDirection": "TTabBar", + "migrationNote": "入口重组,见对应组件;不保证参数/行为兼容" + }, + { + "old": "TDBottomTabBarBasicType", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "enum", + "members": { + "value:text": "text", + "value:iconText": "iconText", + "value:icon": "icon", + "value:expansionPanel": "expansionPanel" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDBottomTabBarComponentType", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "enum", + "members": { + "value:normal": "normal", + "value:label": "label" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDBottomTabBarIndicatorAnimation", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "enum", + "members": { + "value:none": "none", + "value:linear": "linear", + "value:elastic": "elastic" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDBottomTabBarItemWithBadge", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "constructor:new": "const ({Key? key, required this.basicType, required this.componentType, required this.outlineType, required this.itemConfig, required this.isSelected, required this.itemHeight, required this.itemWidth, required this.onTap, required this.tabsLength, required this.selectedBgColor, required this.unselectedBgColor, required this.centerDistance, this.onLongPress, this.needInkWell = false, this.showItemBackground = true})", + "field:basicType": "final TDBottomTabBarBasicType", + "field:componentType": "final TDBottomTabBarComponentType", + "field:outlineType": "final TDBottomTabBarOutlineType", + "field:itemConfig": "final TDBottomTabBarTabConfig", + "field:isSelected": "final bool", + "field:itemHeight": "final double", + "field:itemWidth": "final double", + "field:onTap": "final GestureTapCallback", + "field:tabsLength": "final int", + "field:selectedBgColor": "final Color?", + "field:unselectedBgColor": "final Color?", + "field:centerDistance": "final double", + "field:onLongPress": "final GestureLongPressCallback?", + "field:needInkWell": "final bool", + "field:showItemBackground": "final bool", + "method:build": "Widget build (BuildContext context)", + "method:handleTap": "void handleTap (BuildContext context)" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDBottomTabBarOutlineType", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "enum", + "members": { + "value:filled": "filled", + "value:capsule": "capsule" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDBottomTabBarPopUpBtnConfig", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "constructor:new": "({required this.items, required this.onChanged, this.popUpDialogConfig})", + "field:items": "final List", + "field:onChanged": "final ValueChanged", + "field:popUpDialogConfig": "final TDBottomTabBarPopUpShapeConfig?" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDBottomTabBarPopUpShapeConfig", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "constructor:new": "({this.popUpWidth, this.popUpItemHeight = _kDefaultMenuItemHeight, this.backgroundColor, this.radius, this.arrowWidth, this.arrowHeight})", + "field:popUpWidth": "final double?", + "field:popUpItemHeight": "final double?", + "field:backgroundColor": "final Color?", + "field:radius": "final double?", + "field:arrowWidth": "final double?", + "field:arrowHeight": "final double?" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDBottomTabBarTabConfig", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "constructor:new": "({required this.onTap, this.selectedIcon, this.unselectedIcon, this.tabText, this.selectTabTextStyle, this.unselectTabTextStyle, this.badgeConfig, this.popUpButtonConfig, this.onLongPress, this.allowMultipleTaps = false})", + "field:selectedIcon": "final Widget?", + "field:unselectedIcon": "final Widget?", + "field:tabText": "final String?", + "field:selectTabTextStyle": "final TextStyle?", + "field:unselectTabTextStyle": "final TextStyle?", + "field:onTap": "final GestureTapCallback?", + "field:badgeConfig": "final BadgeConfig?", + "field:popUpButtonConfig": "final TDBottomTabBarPopUpBtnConfig?", + "field:allowMultipleTaps": "final bool", + "field:onLongPress": "final GestureLongPressCallback?" + } + }, + "after": null, + "migrationDirection": "TTabBarItemConfig", + "migrationNote": "入口重组,见对应组件;不保证参数/行为兼容" + }, + { + "old": "TDBoxShadows", + "candidate": "TBoxShadows", + "classification": "declaration-changed", + "before": { + "kind": "extension", + "members": { + "member:shadowsBase": "List? shadowsBase", + "member:shadowsMiddle": "List? shadowsMiddle", + "member:shadowsTop": "List? shadowsTop" + } + }, + "after": { + "kind": "extension", + "members": { + "member:shadow1": "List? shadow1", + "member:shadow2": "List? shadow2", + "member:shadow3": "List? shadow3", + "member:shadow4": "List? shadow4" + } + }, + "migrationDirection": "TBoxShadows", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDButton", + "candidate": "TButton", + "classification": "declaration-changed", + "before": { + "kind": "class", + "members": { + "constructor:new": "const ({Key? key, this.text, this.size = TDButtonSize.medium, this.type = TDButtonType.fill, this.shape = TDButtonShape.rectangle, this.theme, this.child, this.disabled = false, this.isBlock = false, this.style, this.activeStyle, this.disableStyle, this.textStyle, this.disableTextStyle, this.width, this.height, this.onTap, this.icon, this.iconWidget, this.iconTextSpacing, this.onLongPress, this.margin, this.padding, this.iconPosition = TDButtonIconPosition.left, this.gradient})", + "field:child": "final Widget?", + "field:text": "final String?", + "field:disabled": "final bool", + "field:width": "final double?", + "field:height": "final double?", + "field:size": "final TDButtonSize", + "field:type": "final TDButtonType", + "field:shape": "final TDButtonShape", + "field:theme": "final TDButtonTheme?", + "field:style": "final TDButtonStyle?", + "field:activeStyle": "final TDButtonStyle?", + "field:disableStyle": "final TDButtonStyle?", + "field:textStyle": "final TextStyle?", + "field:disableTextStyle": "final TextStyle?", + "field:onTap": "final TDButtonEvent?", + "field:onLongPress": "final TDButtonEvent?", + "field:icon": "final IconData?", + "field:iconWidget": "final Widget?", + "field:iconTextSpacing": "final double?", + "field:iconPosition": "final TDButtonIconPosition?", + "field:padding": "final EdgeInsetsGeometry?", + "field:margin": "final EdgeInsetsGeometry?", + "field:isBlock": "final bool", + "field:gradient": "final Gradient?", + "method:createState": "State createState ()" + } + }, + "after": { + "kind": "class", + "members": { + "constructor:new": "const ({Key? key, this.child, this.size, this.variant, this.shape = TButtonShape.rectangle, this.colorPreset, this.icon, this.iconPosition = TButtonIconPosition.left, this.onPressed, this.onLongPress, this.style})", + "field:child": "final Widget?", + "field:size": "final TButtonSize?", + "field:variant": "final TButtonVariant?", + "field:shape": "final TButtonShape", + "field:colorPreset": "final TButtonColorPreset?", + "field:icon": "final Widget?", + "field:iconPosition": "final TButtonIconPosition", + "field:onPressed": "final VoidCallback?", + "field:onLongPress": "final VoidCallback?", + "field:style": "final ButtonStyle?", + "method:createState": "State createState ()" + } + }, + "migrationDirection": "TButton", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDButtonEvent", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "typedef", + "members": { + "signature": "typedef TDButtonEvent = void Function();" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDButtonIconPosition", + "candidate": "TButtonIconPosition", + "classification": "declaration-shape-unchanged", + "before": { + "kind": "enum", + "members": { + "value:left": "left", + "value:right": "right" + } + }, + "after": { + "kind": "enum", + "members": { + "value:left": "left", + "value:right": "right" + } + }, + "migrationDirection": "TButtonIconPosition", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDButtonShape", + "candidate": "TButtonShape", + "classification": "declaration-changed", + "before": { + "kind": "enum", + "members": { + "value:rectangle": "rectangle", + "value:round": "round", + "value:square": "square", + "value:circle": "circle", + "value:filled": "filled" + } + }, + "after": { + "kind": "enum", + "members": { + "value:rectangle": "rectangle", + "value:round": "round", + "value:square": "square", + "value:circle": "circle" + } + }, + "migrationDirection": "TButtonShape", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDButtonSize", + "candidate": "TButtonSize", + "classification": "declaration-shape-unchanged", + "before": { + "kind": "enum", + "members": { + "value:large": "large", + "value:medium": "medium", + "value:small": "small", + "value:extraSmall": "extraSmall" + } + }, + "after": { + "kind": "enum", + "members": { + "value:large": "large", + "value:medium": "medium", + "value:small": "small", + "value:extraSmall": "extraSmall" + } + }, + "migrationDirection": "TButtonSize", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDButtonStatus", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "enum", + "members": { + "value:defaultState": "defaultState", + "value:active": "active", + "value:disable": "disable" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDButtonStyle", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "field:backgroundColor": "Color?", + "field:frameColor": "Color?", + "field:textColor": "Color?", + "field:frameWidth": "double?", + "field:radius": "BorderRadiusGeometry?", + "field:gradient": "Gradient?", + "constructor:new": "({this.backgroundColor, this.frameColor, this.textColor, this.frameWidth, this.radius, this.gradient})", + "constructor:generateFillStyleByTheme": "(BuildContext context, TDButtonTheme? theme, TDButtonStatus status)", + "constructor:generateOutlineStyleByTheme": "(BuildContext context, TDButtonTheme? theme, TDButtonStatus status)", + "constructor:generateTextStyleByTheme": "(BuildContext context, TDButtonTheme? theme, TDButtonStatus status)", + "constructor:generateGhostStyleByTheme": "(BuildContext context, TDButtonTheme? theme, TDButtonStatus status)" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDButtonTheme", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "enum", + "members": { + "value:defaultTheme": "defaultTheme", + "value:primary": "primary", + "value:danger": "danger", + "value:light": "light" + } + }, + "after": null, + "migrationDirection": "TButtonColorPreset", + "migrationNote": "入口重组,见对应组件;不保证参数/行为兼容" + }, + { + "old": "TDButtonType", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "enum", + "members": { + "value:fill": "fill", + "value:outline": "outline", + "value:text": "text", + "value:ghost": "ghost" + } + }, + "after": null, + "migrationDirection": "TButtonVariant", + "migrationNote": "入口重组,见对应组件;不保证参数/行为兼容" + }, + { + "old": "TDCalendar", + "candidate": "TCalendar", + "classification": "declaration-changed", + "before": { + "kind": "class", + "members": { + "constructor:new": "const ({Key? key, this.firstDayOfWeek = 0, this.format, this.maxDate, this.minDate, this.title, this.titleWidget, this.type = CalendarType.single, this.value, this.displayFormat = 'year month', this.cellHeight = 60, this.height, this.width, this.style, this.onChange, this.onCellClick, this.onCellLongPress, this.onHeaderClick, this.useSafeArea = true, this.useTimePicker = false, this.timePickerModel, this.monthTitleHeight = 22, this.monthTitleBuilder, this.pickerHeight = 178, this.pickerItemCount = 3, this.isTimeUnit = true, this.animateTo = false, this.cellWidget, this.onMonthChange, this.anchorDate})", + "field:firstDayOfWeek": "final int?", + "field:format": "final CalendarFormat?", + "field:maxDate": "final int?", + "field:minDate": "final int?", + "field:title": "final String?", + "field:titleWidget": "final Widget?", + "field:type": "final CalendarType?", + "field:value": "final List?", + "field:displayFormat": "final String?", + "field:height": "final double?", + "field:cellHeight": "final double?", + "field:width": "final double?", + "field:anchorDate": "final DateTime?", + "field:style": "final TDCalendarStyle?", + "field:onChange": "final void Function(List value)?", + "field:onCellClick": "final void Function(int value, DateSelectType type, TDate tdate)?", + "field:onCellLongPress": "final void Function(int value, DateSelectType type, TDate tdate)?", + "field:onHeaderClick": "final void Function(int index, String week)?", + "field:onMonthChange": "final ValueChanged?", + "field:useSafeArea": "final bool?", + "field:useTimePicker": "final bool?", + "field:timePickerModel": "final List?", + "field:monthTitleHeight": "final double?", + "field:monthTitleBuilder": "final Widget Function(BuildContext context, DateTime monthDate)?", + "field:pickerHeight": "final double?", + "field:pickerItemCount": "final int?", + "field:isTimeUnit": "final bool?", + "field:animateTo": "final bool?", + "field:cellWidget": "final Widget? Function(BuildContext context, TDate tdate, DateSelectType selectType)?", + "method:createState": "_TDCalendarState createState ()" + } + }, + "after": { + "kind": "class", + "members": { + "constructor:new": "({super.key, required this.value, this.firstDayOfWeek = TCalendarFirstDayOfWeek.sunday, DateTime? minDate, DateTime? maxDate, this.variant = TCalendarVariant.single, this.onChanged, this.onMonthChanged, TCalendarMonthTitleBuilder? monthTitleBuilder, this.weekdayNames, this.cellBuilder, this.subtitleBuilder, this.animateTo = false, this.anchorDate})", + "field:firstDayOfWeek": "final TCalendarFirstDayOfWeek", + "field:minDate": "final DateTime", + "field:maxDate": "final DateTime", + "field:variant": "final TCalendarVariant", + "field:value": "final List", + "field:onChanged": "final ValueChanged>?", + "field:onMonthChanged": "final ValueChanged?", + "field:monthTitleBuilder": "final TCalendarMonthTitleBuilder", + "field:weekdayNames": "final List?", + "field:cellBuilder": "final TCalendarCellBuilder?", + "field:subtitleBuilder": "final TCalendarSubtitleBuilder?", + "field:animateTo": "final bool", + "field:anchorDate": "final DateTime?", + "method:createState": "_TCalendarState createState ()" + } + }, + "migrationDirection": "TCalendar", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDCalendarBody", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "constructor:new": "const ({Key? key, this.maxDate, this.minDate, required this.type, this.value, required this.firstDayOfWeek, required this.builder, required this.bodyPadding, required this.displayFormat, required this.monthNames, this.monthTitleStyle, this.monthTitleBuilder, required this.cellHeight, required this.monthTitleHeight, required this.verticalGap, required this.animateTo, this.onMonthChange, this.anchorDate})", + "field:maxDate": "final int?", + "field:minDate": "final int?", + "field:type": "final CalendarType", + "field:value": "final List?", + "field:anchorDate": "final DateTime?", + "field:firstDayOfWeek": "final int", + "field:builder": "final Widget Function(TDate? date, List dateList, Map> data, int rowIndex, int colIndex)", + "field:bodyPadding": "final double", + "field:displayFormat": "final String", + "field:monthNames": "final List", + "field:monthTitleStyle": "final TextStyle?", + "field:monthTitleBuilder": "final Widget Function(BuildContext context, DateTime monthDate)?", + "field:monthTitleHeight": "final double", + "field:verticalGap": "final double", + "field:cellHeight": "final double", + "field:animateTo": "final bool", + "field:onMonthChange": "final ValueChanged?", + "method:build": "Widget build (BuildContext context)" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDCalendarCell", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "constructor:new": "const ({Key? key, this.tdate, this.format, required this.type, this.onCellClick, this.onCellLongPress, this.onChange, required this.height, required this.data, required this.padding, required this.rowIndex, required this.colIndex, required this.dateList, this.cellWidget})", + "field:tdate": "final TDate?", + "field:format": "final CalendarFormat?", + "field:type": "final CalendarType", + "field:onCellClick": "final void Function(int value, DateSelectType type, TDate tdate)?", + "field:onCellLongPress": "final void Function(int value, DateSelectType type, TDate tdate)?", + "field:onChange": "final void Function(List value)?", + "field:height": "final double", + "field:data": "final Map>", + "field:padding": "final double", + "field:rowIndex": "final int", + "field:colIndex": "final int", + "field:dateList": "final List", + "field:cellWidget": "final Widget? Function(BuildContext context, TDate tdate, DateSelectType selectType)?", + "method:createState": "_TDCalendarCellState createState ()" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDCalendarHeader", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "constructor:new": "const ({Key? key, required this.firstDayOfWeek, required this.weekdayGap, required this.padding, this.weekdayStyle, required this.weekdayHeight, this.title, this.titleStyle, this.titleWidget, this.titleMaxLine, this.titleOverflow, this.closeBtn = true, this.closeColor, this.onClose, this.onClick, required this.weekdayNames})", + "field:firstDayOfWeek": "final int", + "field:weekdayGap": "final double", + "field:padding": "final double", + "field:weekdayStyle": "final TextStyle?", + "field:weekdayHeight": "final double", + "field:title": "final String?", + "field:titleStyle": "final TextStyle?", + "field:titleWidget": "final Widget?", + "field:titleMaxLine": "final int?", + "field:titleOverflow": "final TextOverflow?", + "field:closeBtn": "final bool", + "field:closeColor": "final Color?", + "field:onClose": "final VoidCallback?", + "field:weekdayNames": "final List", + "field:onClick": "final void Function(int index, String week)?", + "method:build": "Widget build (BuildContext context)" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDCalendarInherited", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "constructor:new": "const ({required Widget child, this.onClose, required this.selected, this.usePopup = true, this.onConfirm, this.confirmBtn, Key? key})", + "field:onClose": "final VoidCallback?", + "field:selected": "final ValueNotifier>", + "field:usePopup": "final bool?", + "field:onConfirm": "final VoidCallback?", + "field:confirmBtn": "final Widget?", + "method:updateShouldNotify": "bool updateShouldNotify (covariant TDCalendarInherited oldWidget)", + "method:of": "static TDCalendarInherited? of (BuildContext context)" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDCalendarPopup", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "constructor:new": "(this.context, {this.top, this.autoClose = true, this.confirmBtn, this.visible, this.onClose, this.onConfirm, this.builder, this.child})", + "field:context": "final BuildContext", + "field:top": "final double?", + "field:autoClose": "final bool?", + "field:confirmBtn": "final Widget?", + "field:visible": "final bool?", + "field:onClose": "final VoidCallback?", + "field:builder": "final CalendarBuilder?", + "field:child": "final TDCalendar?", + "field:onConfirm": "final void Function(List value)?", + "get:selected": "List selected", + "method:show": "void show ()", + "method:close": "void close ()" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDCalendarStyle", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "constructor:new": "({this.decoration, this.titleStyle, this.titleMaxLine, this.titleCloseColor, this.weekdayStyle, this.monthTitleStyle, this.cellStyle, this.centreColor, this.cellDecoration, this.cellPrefixStyle, this.cellSuffixStyle})", + "field:decoration": "BoxDecoration?", + "field:titleStyle": "TextStyle?", + "field:titleMaxLine": "int?", + "field:titleCloseColor": "Color?", + "field:weekdayStyle": "TextStyle?", + "field:monthTitleStyle": "TextStyle?", + "field:cellStyle": "TextStyle?", + "field:todayStyle": "TextStyle?", + "field:cellDecoration": "BoxDecoration?", + "field:centreColor": "Color?", + "field:cellPrefixStyle": "TextStyle?", + "field:cellSuffixStyle": "TextStyle?", + "field:verticalGap": "double?", + "field:bodyPadding": "double?", + "constructor:generateStyle": "(BuildContext context)", + "constructor:cellStyle": "(BuildContext context, DateSelectType? type)" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDCapsuleRangeSliderThumbShape", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "constructor:new": "const ({this.enabledThumbRadius = 9.0, this.disabledThumbRadius, this.elevation = 3.0, this.pressedElevation = 3.0, required this.themeData, required this.buildContext})", + "field:enabledThumbRadius": "final double", + "field:disabledThumbRadius": "final double?", + "field:elevation": "final double", + "field:pressedElevation": "final double", + "field:themeData": "final TDSliderThemeData", + "field:buildContext": "final BuildContext?", + "method:getPreferredSize": "Size getPreferredSize (bool isEnabled, bool isDiscrete)", + "method:paint": "void paint (PaintingContext context, Offset center, {required Animation activationAnimation, required Animation enableAnimation, bool isDiscrete = false, bool isEnabled = false, bool? isOnTop, required SliderThemeData sliderTheme, TextDirection? textDirection, Thumb? thumb, bool? isPressed})" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDCapsuleRangeSliderTickMarkShape", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "constructor:new": "const ({this.tickMarkRadius, required this.themeData})", + "field:tickMarkRadius": "final double?", + "field:themeData": "final TDSliderThemeData", + "method:getPreferredSize": "Size getPreferredSize ({required SliderThemeData sliderTheme, bool isEnabled = false})", + "method:paint": "void paint (PaintingContext context, Offset center, {required RenderBox parentBox, required SliderThemeData sliderTheme, required Animation enableAnimation, required Offset startThumbCenter, required Offset endThumbCenter, bool isEnabled = false, required TextDirection textDirection})" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDCapsuleRectRangeSliderTrackShape", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "field:trackColorWhenShowScale": "final Color", + "constructor:new": "const ({required this.trackColorWhenShowScale, required this.themeData})", + "field:themeData": "final TDSliderThemeData", + "method:getPreferredRect": "Rect getPreferredRect ({required RenderBox parentBox, Offset offset = Offset.zero, required SliderThemeData sliderTheme, bool isEnabled = false, bool isDiscrete = false})", + "method:paint": "void paint (PaintingContext context, Offset offset, {required RenderBox parentBox, required SliderThemeData sliderTheme, required Animation enableAnimation, required Offset startThumbCenter, required Offset endThumbCenter, bool isEnabled = false, bool isDiscrete = false, required TextDirection textDirection, double additionalActiveTrackHeight = 3})" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDCapsuleRectSliderTrackShape", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "constructor:new": "const ({required this.trackColorWhenShowScale, required this.themeData})", + "field:trackColorWhenShowScale": "final Color", + "field:themeData": "final TDSliderThemeData", + "method:getPreferredRect": "Rect getPreferredRect ({required RenderBox parentBox, Offset offset = Offset.zero, required SliderThemeData sliderTheme, bool isEnabled = false, bool isDiscrete = false})", + "method:paint": "void paint (PaintingContext context, Offset offset, {required RenderBox parentBox, required SliderThemeData sliderTheme, required Animation enableAnimation, required TextDirection textDirection, required Offset thumbCenter, Offset? secondaryOffset, bool isDiscrete = false, bool isEnabled = false, double additionalActiveTrackHeight = 3})" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDCapsuleRectThemeData", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "field:themeData": "final TDSliderThemeData", + "constructor:new": "({required this.themeData})" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDCapsuleSliderThumbShape", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "constructor:new": "const ({this.enabledThumbRadius = 9.0, this.disabledThumbRadius, this.elevation = 4.0, this.pressedElevation = 4.0, required this.themeData, required this.buildContext})", + "field:enabledThumbRadius": "final double", + "field:disabledThumbRadius": "final double?", + "field:elevation": "final double", + "field:pressedElevation": "final double", + "field:themeData": "final TDSliderThemeData", + "field:buildContext": "final BuildContext?", + "method:getPreferredSize": "Size getPreferredSize (bool isEnabled, bool isDiscrete)", + "method:paint": "void paint (PaintingContext context, Offset center, {required Animation activationAnimation, required Animation enableAnimation, required bool isDiscrete, required TextPainter labelPainter, required RenderBox parentBox, required SliderThemeData sliderTheme, required TextDirection textDirection, required double value, required double textScaleFactor, required Size sizeWithOverflow})" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDCapsuleSliderTickMarkShape", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "constructor:new": "const ({this.tickMarkRadius, required this.themeData})", + "field:tickMarkRadius": "final double?", + "field:themeData": "final TDSliderThemeData", + "method:getPreferredSize": "Size getPreferredSize ({required SliderThemeData sliderTheme, required bool isEnabled})", + "method:paint": "void paint (PaintingContext context, Offset center, {required RenderBox parentBox, required SliderThemeData sliderTheme, required Animation enableAnimation, required TextDirection textDirection, required Offset thumbCenter, required bool isEnabled})" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDCardStyle", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "enum", + "members": { + "value:topText": "topText", + "value:topTextWithBlueBorder": "topTextWithBlueBorder", + "value:errorStyle": "errorStyle" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDCascader", + "candidate": "TCascader", + "classification": "declaration-changed", + "before": { + "kind": "class", + "members": { + "method:showMultiCascader": "static void showMultiCascader (context, {String? title, required List data, List? initialIndexes, String? theme, required onChange, Duration duration = const Duration(milliseconds: 100), Color? barrierColor, double cascaderHeight = 500, String? initialData, String? closeText, bool isLetterSort = false, List? subTitles, TDCascaderAction? action, Function? onClose})" + } + }, + "after": { + "kind": "class", + "members": { + "constructor:new": "const ({super.key, required this.options, required this.value, this.onChanged, this.variant = TCascaderVariant.tab, this.placeholder = '请选择', this.subtitles = const []})", + "field:options": "final List", + "field:value": "final List", + "field:onChanged": "final ValueChanged>?", + "field:variant": "final TCascaderVariant", + "field:placeholder": "final String", + "field:subtitles": "final List", + "method:createState": "State createState ()" + } + }, + "migrationDirection": "TCascader", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDCascaderAction", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "constructor:new": "({this.builder, this.text, required this.onConfirm})", + "field:builder": "WidgetBuilder?", + "field:text": "String?", + "field:onConfirm": "MultiCascaderCallback", + "method:build": "Widget build (BuildContext context)" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDCell", + "candidate": "TCell", + "classification": "declaration-changed", + "before": { + "kind": "class", + "members": { + "constructor:new": "const ({Key? key, this.align = TDCellAlign.middle, this.arrow = false, this.bordered = true, this.description, this.descriptionWidget, this.hover = true, this.image, this.imageSize, this.imageWidget, this.leftIcon, this.leftIconWidget, this.note, this.noteWidget, this.noteMaxWidth, this.noteMaxLine = 1, this.required = false, this.title, this.titleWidget, this.onClick, this.onLongPress, this.style, this.rightIcon, this.rightIconWidget, this.disabled = false, this.imageCircle = 50, this.showBottomBorder = false, this.height})", + "field:align": "final TDCellAlign?", + "field:arrow": "final bool?", + "field:bordered": "final bool?", + "field:description": "final String?", + "field:descriptionWidget": "final Widget?", + "field:hover": "final bool?", + "field:image": "final ImageProvider?", + "field:imageSize": "final double?", + "field:imageCircle": "final double?", + "field:imageWidget": "final Widget?", + "field:leftIcon": "final IconData?", + "field:leftIconWidget": "final Widget?", + "field:note": "final String?", + "field:noteWidget": "final Widget?", + "field:noteMaxWidth": "final double?", + "field:noteMaxLine": "final int", + "field:required": "final bool?", + "field:rightIcon": "final IconData?", + "field:rightIconWidget": "final Widget?", + "field:title": "final String?", + "field:titleWidget": "final Widget?", + "field:onClick": "final TDCellClick?", + "field:onLongPress": "final TDCellClick?", + "field:style": "final TDCellStyle?", + "field:disabled": "final bool?", + "field:showBottomBorder": "final bool?", + "field:height": "final double?", + "method:createState": "_TDCellState createState ()" + } + }, + "after": { + "kind": "class", + "members": { + "constructor:new": "const ({this.title, this.subtitle, this.prefix, this.image, this.note, this.trailing, this.arrow = false, this.required = false, this.align, this.enableFeedback = true, this.onTap, this.onLongPress, super.key})", + "field:title": "final Widget?", + "field:subtitle": "final Widget?", + "field:prefix": "final Widget?", + "field:image": "final Widget?", + "field:note": "final Widget?", + "field:trailing": "final Widget?", + "field:arrow": "final bool", + "field:required": "final bool", + "field:align": "final TCellAlign?", + "field:enableFeedback": "final bool", + "field:onTap": "final GestureTapCallback?", + "field:onLongPress": "final GestureLongPressCallback?", + "method:createState": "State createState ()" + } + }, + "migrationDirection": "TCell", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDCellAlign", + "candidate": "TCellAlign", + "classification": "declaration-changed", + "before": { + "kind": "enum", + "members": { + "value:top": "top", + "value:middle": "middle", + "value:bottom": "bottom" + } + }, + "after": { + "kind": "enum", + "members": { + "value:top": "top", + "value:center": "center", + "value:bottom": "bottom" + } + }, + "migrationDirection": "TCellAlign", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDCellClick", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "typedef", + "members": { + "signature": "typedef TDCellClick = void Function(TDCell cell);" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDCellGroup", + "candidate": "TCellGroup", + "classification": "declaration-changed", + "before": { + "kind": "class", + "members": { + "constructor:new": "const ({Key? key, this.bordered = false, this.theme = TDCellGroupTheme.defaultTheme, this.title, required this.cells, this.builder, this.style, this.titleWidget, this.scrollable = false, this.isShowLastBordered = false})", + "field:bordered": "final bool?", + "field:theme": "final TDCellGroupTheme?", + "field:title": "final String?", + "field:titleWidget": "final Widget?", + "field:cells": "final List", + "field:builder": "final CellBuilder?", + "field:style": "final TDCellStyle?", + "field:scrollable": "final bool?", + "field:isShowLastBordered": "final bool?", + "method:createState": "_TDCellGroupState createState ()" + } + }, + "after": { + "kind": "class", + "members": { + "constructor:new": "const ({required this.cells, this.title, this.variant, this.builder, this.scrollable = false, super.key})", + "field:cells": "final List", + "field:title": "final Widget?", + "field:variant": "final TCellGroupVariant?", + "field:builder": "final TCellGroupBuilder?", + "field:scrollable": "final bool", + "method:build": "Widget build (BuildContext context)" + } + }, + "migrationDirection": "TCellGroup", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDCellGroupTheme", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "enum", + "members": { + "value:defaultTheme": "defaultTheme", + "value:cardTheme": "cardTheme" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDCellStyle", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "constructor:new": "({this.context, this.leftIconColor, this.rightIconColor, this.titleStyle, this.requiredStyle, this.descriptionStyle, this.noteStyle, this.arrowColor, this.borderedColor, this.groupBorderedColor, this.backgroundColor, this.clickBackgroundColor, this.groupTitleStyle, this.padding, this.cardBorderRadius, this.cardPadding, this.titlePadding, @deprecated this.titleBackgroundColor})", + "field:context": "BuildContext?", + "field:leftIconColor": "Color?", + "field:rightIconColor": "Color?", + "field:titleStyle": "TextStyle?", + "field:requiredStyle": "TextStyle?", + "field:descriptionStyle": "TextStyle?", + "field:noteStyle": "TextStyle?", + "field:arrowColor": "Color?", + "field:borderedColor": "Color?", + "field:groupBorderedColor": "Color?", + "field:backgroundColor": "Color?", + "field:clickBackgroundColor": "Color?", + "field:groupTitleStyle": "TextStyle?", + "field:padding": "EdgeInsets?", + "field:cardBorderRadius": "BorderRadius?", + "field:cardPadding": "EdgeInsets?", + "field:titlePadding": "EdgeInsets?", + "field:titleBackgroundColor": "Color?", + "constructor:cellStyle": "(BuildContext context)", + "method:defaultStyle": "defaultStyle (BuildContext context)" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDCheckBoxSize", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "enum", + "members": { + "value:large": "large", + "value:small": "small" + } + }, + "after": null, + "migrationDirection": "TCheckboxSize", + "migrationNote": "入口重组,见对应组件;不保证参数/行为兼容" + }, + { + "old": "TDCheckbox", + "candidate": "TCheckbox", + "classification": "declaration-changed", + "before": { + "kind": "class", + "members": { + "constructor:new": "const ({this.id, Key? key, this.title, this.subTitle, this.titleFont, this.subTitleFont, this.enable = true, this.checked = false, this.titleMaxLine, this.subTitleMaxLine = 1, this.customIconBuilder, this.customContentBuilder, this.insetSpacing = 16, this.style, this.spacing, this.backgroundColor, this.selectColor, this.disableColor, this.size = TDCheckBoxSize.small, this.cardMode = false, this.showDivider = true, this.contentDirection = TDContentDirection.right, this.onCheckBoxChanged, this.titleColor, this.subTitleColor, this.checkBoxLeftSpace, this.customSpace})", + "field:id": "final String?", + "field:title": "final String?", + "field:titleFont": "final Font?", + "field:subTitle": "final String?", + "field:subTitleFont": "final Font?", + "field:enable": "final bool", + "field:checked": "final bool", + "field:titleMaxLine": "final int?", + "field:subTitleMaxLine": "final int?", + "field:insetSpacing": "final double?", + "field:spacing": "final double?", + "field:style": "final TDCheckboxStyle?", + "field:size": "final TDCheckBoxSize", + "field:cardMode": "final bool", + "field:showDivider": "final bool", + "field:contentDirection": "final TDContentDirection", + "field:onCheckBoxChanged": "final OnCheckValueChanged?", + "field:customIconBuilder": "final IconBuilder?", + "field:customContentBuilder": "final ContentBuilder?", + "field:backgroundColor": "final Color?", + "field:selectColor": "final Color?", + "field:disableColor": "final Color?", + "field:titleColor": "final Color?", + "field:subTitleColor": "final Color?", + "field:checkBoxLeftSpace": "final double?", + "field:customSpace": "final EdgeInsetsGeometry?", + "method:createState": "State createState ()", + "method:buildDefaultIcon": "Widget buildDefaultIcon (BuildContext context, TDCheckboxGroupState? groupState, bool isChecked)" + } + }, + "after": { + "kind": "class", + "members": { + "constructor:new": "const ({super.key, required this.value, this.onChanged, this.title, this.subTitle, this.size = TCheckboxSize.medium, this.cardMode = false, this.showDivider = true, this.contentDirection = TContentDirection.right, this.titleMaxLines = 3, this.subTitleMaxLines = 5, this.customIconBuilder})", + "field:value": "final bool?", + "field:onChanged": "final ValueChanged?", + "field:title": "final String?", + "field:subTitle": "final String?", + "field:size": "final TCheckboxSize", + "field:cardMode": "final bool", + "field:showDivider": "final bool", + "field:contentDirection": "final TContentDirection", + "field:titleMaxLines": "final int", + "field:subTitleMaxLines": "final int", + "field:customIconBuilder": "final TCheckboxIconBuilder?", + "method:build": "Widget build (BuildContext context)" + } + }, + "migrationDirection": "TCheckbox", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDCheckboxGroup", + "candidate": "TCheckboxGroup", + "classification": "declaration-changed", + "before": { + "kind": "class", + "members": { + "constructor:new": "const ({required this.child, Key? key, this.onChangeGroup, this.controller, this.checkedIds, this.maxChecked, this.titleMaxLine, this.customContentBuilder, this.contentDirection, this.style, this.spacing, this.customIconBuilder, this.onOverloadChecked})", + "field:child": "final Widget", + "field:onChangeGroup": "final OnGroupChange?", + "field:controller": "final TDCheckboxGroupController?", + "field:maxChecked": "final int?", + "field:checkedIds": "final List?", + "field:onOverloadChecked": "final VoidCallback?", + "field:titleMaxLine": "final int?", + "field:customContentBuilder": "final ContentBuilder?", + "field:spacing": "final double?", + "field:style": "final TDCheckboxStyle?", + "field:contentDirection": "final TDContentDirection?", + "field:customIconBuilder": "final IconBuilder?", + "method:createState": "State createState ()" + } + }, + "after": { + "kind": "class", + "members": { + "constructor:new": "const ({super.key, required this.value, required this.options, this.onChanged, this.direction = Axis.vertical, this.columns = 1, this.cardMode = false, this.showDivider = true, this.contentDirection = TContentDirection.right, this.size = TCheckboxSize.medium, this.maxSelected, this.onMaxSelected, this.itemBuilder})", + "field:value": "final List", + "field:options": "final List>", + "field:onChanged": "final ValueChanged>?", + "field:direction": "final Axis", + "field:columns": "final int", + "field:cardMode": "final bool", + "field:showDivider": "final bool", + "field:contentDirection": "final TContentDirection", + "field:size": "final TCheckboxSize", + "field:maxSelected": "final int?", + "field:onMaxSelected": "final VoidCallback?", + "field:itemBuilder": "final TCheckboxOptionBuilder?", + "method:build": "Widget build (BuildContext context)" + } + }, + "migrationDirection": "TCheckboxGroup", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDCheckboxGroupContainer", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "constructor:new": "({Key? key, Widget? child, Axis? direction, List? directionalTdCheckboxes, List? selectIds, bool? passThrough, bool cardMode = false, int? titleMaxLine, int? maxSelected, TDCheckboxStyle? style, TDCheckboxGroupController? controller, IconBuilder? customIconBuilder, ContentBuilder? customContentBuilder, double? spacing, TDContentDirection? contentDirection, OnCheckBoxGroupChange? onCheckBoxGroupChange, VoidCallback? onOverloadChecked, int? rowCount})", + "method:createState": "State createState ()" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDCheckboxGroupContainerState", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": {} + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDCheckboxGroupController", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "method:toggleAll": "void toggleAll (bool check)", + "method:reverseAll": "void reverseAll ()", + "method:toggle": "void toggle (String id, bool check)", + "method:allChecked": "List allChecked ()", + "method:checked": "bool checked (String id)" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDCheckboxGroupInherited", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "field:state": "final TDCheckboxGroupState", + "method:of": "static TDCheckboxGroupInherited? of (BuildContext context)", + "constructor:new": "const (this.state, Widget child, {Key? key})", + "method:updateShouldNotify": "bool updateShouldNotify (covariant TDCheckboxGroupInherited oldWidget)" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDCheckboxGroupState", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "field:checkBoxStates": "Map", + "method:initState": "void initState ()", + "method:didUpdateWidget": "void didUpdateWidget (TDCheckboxGroup oldWidget)", + "method:getCheckBoxStateById": "bool getCheckBoxStateById (String id, bool checked)", + "method:toggle": "bool toggle (String id, bool check, [bool notify = false])", + "method:toggleAll": "void toggleAll (bool check, [bool notify = true])", + "method:build": "Widget build (BuildContext context)" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDCheckboxState", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "field:checked": "bool", + "field:canNotCancel": "bool", + "method:initState": "void initState ()", + "method:didUpdateWidget": "void didUpdateWidget (TDCheckbox oldWidget)", + "method:build": "Widget build (BuildContext context)", + "method:onValueChange": "void onValueChange (String? id, bool value, TDCheckboxGroupState? groupState)" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDCheckboxStyle", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "enum", + "members": { + "value:circle": "circle", + "value:square": "square", + "value:check": "check" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDCircleIndicator", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "constructor:new": "const ({Key? key, this.color, this.size = 20.0, this.lineWidth = 3.0, this.duration = 1000})", + "field:color": "final Color?", + "field:size": "final double", + "field:lineWidth": "final double", + "field:duration": "final int", + "method:createState": "_TDCircleIndicatorState createState ()" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDCollapse", + "candidate": "TCollapse", + "classification": "declaration-changed", + "before": { + "kind": "class", + "members": { + "constructor:new": "const ({required this.children, this.style = TDCollapseStyle.block, this.expansionCallback, this.animationDuration = kThemeAnimationDuration, this.elevation = 0, Key? key})", + "constructor:accordion": "const ({required this.children, this.style = TDCollapseStyle.block, this.expansionCallback, this.animationDuration = kThemeAnimationDuration, this.elevation = 0, this.initialOpenPanelValue, Key? key})", + "field:style": "final TDCollapseStyle", + "field:children": "final List", + "field:expansionCallback": "final ExpansionPanelCallback?", + "field:animationDuration": "final Duration", + "field:elevation": "final double", + "field:initialOpenPanelValue": "final Object?", + "method:createState": "State createState ()" + } + }, + "after": { + "kind": "class", + "members": { + "constructor:new": "const ({required this.children, required this.value, this.mode = TCollapseMode.multiple, this.variant, this.animationDuration, this.onChanged, Key? key})", + "field:children": "final List>", + "field:mode": "final TCollapseMode", + "field:variant": "final TCollapseVariant?", + "field:animationDuration": "final Duration?", + "field:value": "final List", + "field:onChanged": "final ValueChanged>?", + "method:createState": "State> createState ()" + } + }, + "migrationDirection": "TCollapse", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDCollapseIconTextBuilder", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "typedef", + "members": { + "signature": "typedef TDCollapseIconTextBuilder = String Function(BuildContext context, bool isExpanded);" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDCollapsePanel", + "candidate": "TCollapsePanel", + "classification": "declaration-changed", + "before": { + "kind": "class", + "members": { + "constructor:new": "({required ExpansionPanelHeaderBuilder headerBuilder, required Widget body, isExpanded = false, this.expandIconTextBuilder, this.value, backgroundColor})", + "field:value": "final Object?", + "field:expandIconTextBuilder": "final TDCollapseIconTextBuilder?" + } + }, + "after": { + "kind": "class", + "members": { + "constructor:new": "const ({required this.value, required this.headerBuilder, required this.body, this.bodyHeight, this.key, this.disabled = false, this.placement = TCollapsePlacement.bottom, this.semanticsLabel, this.leadingBuilder, this.trailingBuilder, this.expandIconBuilder = _defaultExpandIconBuilder, this.backgroundColor})", + "field:key": "final Key?", + "field:headerBuilder": "final ExpansionPanelHeaderBuilder", + "field:body": "final Widget", + "field:bodyHeight": "final double?", + "field:disabled": "final bool", + "field:placement": "final TCollapsePlacement", + "field:semanticsLabel": "final String?", + "field:backgroundColor": "final Color?", + "field:value": "final T", + "field:leadingBuilder": "final TCollapsePanelBuilder?", + "field:trailingBuilder": "final TCollapsePanelBuilder?", + "field:expandIconBuilder": "final TCollapsePanelBuilder?" + } + }, + "migrationDirection": "TCollapsePanel", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDCollapseStyle", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "enum", + "members": { + "value:block": "block", + "value:card": "card" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDColors", + "candidate": "TColors", + "classification": "declaration-changed", + "before": { + "kind": "extension", + "members": { + "member:brandColor1": "Color brandColor1", + "member:brandColor2": "Color brandColor2", + "member:brandColor3": "Color brandColor3", + "member:brandColor4": "Color brandColor4", + "member:brandColor5": "Color brandColor5", + "member:brandColor6": "Color brandColor6", + "member:brandColor7": "Color brandColor7", + "member:brandColor8": "Color brandColor8", + "member:brandColor9": "Color brandColor9", + "member:brandColor10": "Color brandColor10", + "member:brandLightColor": "Color brandLightColor", + "member:brandFocusColor": "Color brandFocusColor", + "member:brandDisabledColor": "Color brandDisabledColor", + "member:brandHoverColor": "Color brandHoverColor", + "member:brandNormalColor": "Color brandNormalColor", + "member:brandClickColor": "Color brandClickColor", + "member:errorColor1": "Color errorColor1", + "member:errorColor2": "Color errorColor2", + "member:errorColor3": "Color errorColor3", + "member:errorColor4": "Color errorColor4", + "member:errorColor5": "Color errorColor5", + "member:errorColor6": "Color errorColor6", + "member:errorColor7": "Color errorColor7", + "member:errorColor8": "Color errorColor8", + "member:errorColor9": "Color errorColor9", + "member:errorColor10": "Color errorColor10", + "member:errorLightColor": "Color errorLightColor", + "member:errorFocusColor": "Color errorFocusColor", + "member:errorDisabledColor": "Color errorDisabledColor", + "member:errorHoverColor": "Color errorHoverColor", + "member:errorNormalColor": "Color errorNormalColor", + "member:errorClickColor": "Color errorClickColor", + "member:warningColor1": "Color warningColor1", + "member:warningColor2": "Color warningColor2", + "member:warningColor3": "Color warningColor3", + "member:warningColor4": "Color warningColor4", + "member:warningColor5": "Color warningColor5", + "member:warningColor6": "Color warningColor6", + "member:warningColor7": "Color warningColor7", + "member:warningColor8": "Color warningColor8", + "member:warningColor9": "Color warningColor9", + "member:warningColor10": "Color warningColor10", + "member:warningLightColor": "Color warningLightColor", + "member:warningFocusColor": "Color warningFocusColor", + "member:warningDisabledColor": "Color warningDisabledColor", + "member:warningHoverColor": "Color warningHoverColor", + "member:warningNormalColor": "Color warningNormalColor", + "member:warningClickColor": "Color warningClickColor", + "member:successColor1": "Color successColor1", + "member:successColor2": "Color successColor2", + "member:successColor3": "Color successColor3", + "member:successColor4": "Color successColor4", + "member:successColor5": "Color successColor5", + "member:successColor6": "Color successColor6", + "member:successColor7": "Color successColor7", + "member:successColor8": "Color successColor8", + "member:successColor9": "Color successColor9", + "member:successColor10": "Color successColor10", + "member:successLightColor": "Color successLightColor", + "member:successFocusColor": "Color successFocusColor", + "member:successDisabledColor": "Color successDisabledColor", + "member:successHoverColor": "Color successHoverColor", + "member:successNormalColor": "Color successNormalColor", + "member:successClickColor": "Color successClickColor", + "member:fontGyColor1": "Color fontGyColor1", + "member:fontGyColor2": "Color fontGyColor2", + "member:fontGyColor3": "Color fontGyColor3", + "member:fontGyColor4": "Color fontGyColor4", + "member:fontWhColor1": "Color fontWhColor1", + "member:fontWhColor2": "Color fontWhColor2", + "member:fontWhColor3": "Color fontWhColor3", + "member:fontWhColor4": "Color fontWhColor4", + "member:whiteColor1": "Color whiteColor1", + "member:grayColor1": "Color grayColor1", + "member:grayColor2": "Color grayColor2", + "member:grayColor3": "Color grayColor3", + "member:grayColor4": "Color grayColor4", + "member:grayColor5": "Color grayColor5", + "member:grayColor6": "Color grayColor6", + "member:grayColor7": "Color grayColor7", + "member:grayColor8": "Color grayColor8", + "member:grayColor9": "Color grayColor9", + "member:grayColor10": "Color grayColor10", + "member:grayColor11": "Color grayColor11", + "member:grayColor12": "Color grayColor12", + "member:grayColor13": "Color grayColor13", + "member:grayColor14": "Color grayColor14", + "member:bgColorPage": "Color bgColorPage", + "member:bgColorContainer": "Color bgColorContainer", + "member:bgColorContainerSelect": "Color bgColorContainerSelect", + "member:bgColorContainerHover": "Color bgColorContainerHover", + "member:bgColorContainerActive": "Color bgColorContainerActive", + "member:bgColorSecondaryContainer": "Color bgColorSecondaryContainer", + "member:bgColorSecondaryContainerHover": "Color bgColorSecondaryContainerHover", + "member:bgColorSecondaryContainerActive": "Color bgColorSecondaryContainerActive", + "member:bgColorComponent": "Color bgColorComponent", + "member:bgColorComponentHover": "Color bgColorComponentHover", + "member:bgColorComponentActive": "Color bgColorComponentActive", + "member:bgColorComponentDisabled": "Color bgColorComponentDisabled", + "member:componentStrokeColor": "Color componentStrokeColor", + "member:componentBorderColor": "Color componentBorderColor", + "member:textColorPrimary": "Color textColorPrimary", + "member:textColorSecondary": "Color textColorSecondary", + "member:textColorPlaceholder": "Color textColorPlaceholder", + "member:textDisabledColor": "Color textDisabledColor", + "member:textColorAnti": "Color textColorAnti", + "member:textColorBrand": "Color textColorBrand", + "member:textColorLink": "Color textColorLink" + } + }, + "after": { + "kind": "extension", + "members": { + "member:primaryColor1": "Color primaryColor1", + "member:primaryColor2": "Color primaryColor2", + "member:primaryColor3": "Color primaryColor3", + "member:primaryColor4": "Color primaryColor4", + "member:primaryColor5": "Color primaryColor5", + "member:primaryColor6": "Color primaryColor6", + "member:primaryColor7": "Color primaryColor7", + "member:primaryColor8": "Color primaryColor8", + "member:primaryColor9": "Color primaryColor9", + "member:primaryColor10": "Color primaryColor10", + "member:brandColor1": "Color brandColor1", + "member:brandColor2": "Color brandColor2", + "member:brandColor3": "Color brandColor3", + "member:brandColor4": "Color brandColor4", + "member:brandColor5": "Color brandColor5", + "member:brandColor6": "Color brandColor6", + "member:brandColor7": "Color brandColor7", + "member:brandColor8": "Color brandColor8", + "member:brandColor9": "Color brandColor9", + "member:brandColor10": "Color brandColor10", + "member:brandColorLight": "Color brandColorLight", + "member:brandColorLightActive": "Color brandColorLightActive", + "member:brandColorFocus": "Color brandColorFocus", + "member:brandColorDisabled": "Color brandColorDisabled", + "member:brandColor": "Color brandColor", + "member:brandColorActive": "Color brandColorActive", + "member:errorColor1": "Color errorColor1", + "member:errorColor2": "Color errorColor2", + "member:errorColor3": "Color errorColor3", + "member:errorColor4": "Color errorColor4", + "member:errorColor5": "Color errorColor5", + "member:errorColor6": "Color errorColor6", + "member:errorColor7": "Color errorColor7", + "member:errorColor8": "Color errorColor8", + "member:errorColor9": "Color errorColor9", + "member:errorColor10": "Color errorColor10", + "member:errorColorLight": "Color errorColorLight", + "member:errorColorLightActive": "Color errorColorLightActive", + "member:errorColorFocus": "Color errorColorFocus", + "member:errorColorDisabled": "Color errorColorDisabled", + "member:errorColor": "Color errorColor", + "member:errorColorActive": "Color errorColorActive", + "member:warningColor1": "Color warningColor1", + "member:warningColor2": "Color warningColor2", + "member:warningColor3": "Color warningColor3", + "member:warningColor4": "Color warningColor4", + "member:warningColor5": "Color warningColor5", + "member:warningColor6": "Color warningColor6", + "member:warningColor7": "Color warningColor7", + "member:warningColor8": "Color warningColor8", + "member:warningColor9": "Color warningColor9", + "member:warningColor10": "Color warningColor10", + "member:warningColorLight": "Color warningColorLight", + "member:warningColorLightActive": "Color warningColorLightActive", + "member:warningColorFocus": "Color warningColorFocus", + "member:warningColorDisabled": "Color warningColorDisabled", + "member:warningColor": "Color warningColor", + "member:warningColorActive": "Color warningColorActive", + "member:successColor1": "Color successColor1", + "member:successColor2": "Color successColor2", + "member:successColor3": "Color successColor3", + "member:successColor4": "Color successColor4", + "member:successColor5": "Color successColor5", + "member:successColor6": "Color successColor6", + "member:successColor7": "Color successColor7", + "member:successColor8": "Color successColor8", + "member:successColor9": "Color successColor9", + "member:successColor10": "Color successColor10", + "member:successColorLight": "Color successColorLight", + "member:successColorLightActive": "Color successColorLightActive", + "member:successColorFocus": "Color successColorFocus", + "member:successColorDisabled": "Color successColorDisabled", + "member:successColor": "Color successColor", + "member:successColorActive": "Color successColorActive", + "member:fontGray1": "Color fontGray1", + "member:fontGray2": "Color fontGray2", + "member:fontGray3": "Color fontGray3", + "member:fontGray4": "Color fontGray4", + "member:fontWhite1": "Color fontWhite1", + "member:fontWhite2": "Color fontWhite2", + "member:fontWhite3": "Color fontWhite3", + "member:fontWhite4": "Color fontWhite4", + "member:whiteColor1": "Color whiteColor1", + "member:grayColor1": "Color grayColor1", + "member:grayColor2": "Color grayColor2", + "member:grayColor3": "Color grayColor3", + "member:grayColor4": "Color grayColor4", + "member:grayColor5": "Color grayColor5", + "member:grayColor6": "Color grayColor6", + "member:grayColor7": "Color grayColor7", + "member:grayColor8": "Color grayColor8", + "member:grayColor9": "Color grayColor9", + "member:grayColor10": "Color grayColor10", + "member:grayColor11": "Color grayColor11", + "member:grayColor12": "Color grayColor12", + "member:grayColor13": "Color grayColor13", + "member:grayColor14": "Color grayColor14", + "member:bgColorPage": "Color bgColorPage", + "member:bgColorContainer": "Color bgColorContainer", + "member:bgColorContainerActive": "Color bgColorContainerActive", + "member:bgColorSecondaryContainer": "Color bgColorSecondaryContainer", + "member:bgColorSecondaryContainerActive": "Color bgColorSecondaryContainerActive", + "member:bgColorSecondaryComponent": "Color bgColorSecondaryComponent", + "member:bgColorSecondaryComponentActive": "Color bgColorSecondaryComponentActive", + "member:bgColorSpecialComponent": "Color bgColorSpecialComponent", + "member:bgColorComponent": "Color bgColorComponent", + "member:bgColorComponentActive": "Color bgColorComponentActive", + "member:bgColorComponentDisabled": "Color bgColorComponentDisabled", + "member:componentStroke": "Color componentStroke", + "member:componentBorder": "Color componentBorder", + "member:borderLevel1Color": "Color borderLevel1Color", + "member:borderLevel2Color": "Color borderLevel2Color", + "member:textColorPrimary": "Color textColorPrimary", + "member:textColorSecondary": "Color textColorSecondary", + "member:textColorPlaceholder": "Color textColorPlaceholder", + "member:textColorDisabled": "Color textColorDisabled", + "member:textColorAnti": "Color textColorAnti", + "member:textColorBrand": "Color textColorBrand", + "member:textColorLink": "Color textColorLink", + "member:maskActive": "Color maskActive", + "member:maskDisabled": "Color maskDisabled", + "member:maskBackground": "Color maskBackground", + "member:tableShadowColor": "Color tableShadowColor", + "member:scrollbarColor": "Color scrollbarColor", + "member:scrollbarHoverColor": "Color scrollbarHoverColor", + "member:scrollTrackColor": "Color scrollTrackColor" + } + }, + "migrationDirection": "TColors", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDConfirmDialog", + "candidate": "TConfirmDialog", + "classification": "declaration-changed", + "before": { + "kind": "class", + "members": { + "constructor:new": "const ({Key? key, this.action, this.backgroundColor, this.radius = 12.0, this.title, this.titleColor, this.titleAlignment, this.contentWidget, this.content, this.contentColor, this.contentMaxHeight = 0, this.buttonText, this.buttonTextColor, this.buttonStyle = TDDialogButtonStyle.normal, this.showCloseButton, this.padding = const EdgeInsets.fromLTRB(24, 32, 24, 0), this.buttonWidget, this.width, this.buttonStyleCustom})", + "field:title": "final String?", + "field:titleColor": "final Color?", + "field:titleAlignment": "final AlignmentGeometry?", + "field:contentWidget": "final Widget?", + "field:content": "final String?", + "field:contentColor": "final Color?", + "field:contentMaxHeight": "final double", + "field:buttonText": "final String?", + "field:buttonTextColor": "final Color?", + "field:action": "final Function()?", + "field:backgroundColor": "final Color?", + "field:buttonStyle": "final TDDialogButtonStyle", + "field:radius": "final double", + "field:showCloseButton": "final bool?", + "field:padding": "final EdgeInsets?", + "field:buttonWidget": "final Widget?", + "field:buttonStyleCustom": "final TDButtonStyle?", + "field:width": "final double?", + "method:build": "Widget build (BuildContext context)" + } + }, + "after": { + "kind": "class", + "members": { + "constructor:new": "const ({super.key, this.title, this.content, this.contentWidget, this.buttonText, this.onPressed, this.result = true, this.closeOnPressed = true, this.showCloseButton = false, this.closeButtonResult, this.semanticLabel, this.buttonStyle})", + "field:title": "final String?", + "field:content": "final String?", + "field:contentWidget": "final Widget?", + "field:buttonText": "final String?", + "field:onPressed": "final VoidCallback?", + "field:result": "final Object?", + "field:closeOnPressed": "final bool", + "field:showCloseButton": "final bool", + "field:closeButtonResult": "final Object?", + "field:semanticLabel": "final String?", + "field:buttonStyle": "final ButtonStyle?", + "method:build": "Widget build (BuildContext context)" + } + }, + "migrationDirection": "TConfirmDialog", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDContentDirection", + "candidate": "TContentDirection", + "classification": "declaration-shape-unchanged", + "before": { + "kind": "enum", + "members": { + "value:left": "left", + "value:right": "right" + } + }, + "after": { + "kind": "enum", + "members": { + "value:left": "left", + "value:right": "right" + } + }, + "migrationDirection": "TContentDirection", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDCustomTab", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "field:tabs": "final List", + "field:onTap": "final TapCallback?", + "field:initialIndex": "final int?", + "constructor:new": "const ({super.key, required this.tabs, this.onTap, this.initialIndex})", + "method:createState": "State createState ()" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDDatePicker", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "constructor:new": "const ({this.title, this.titleHeight, this.titleDividerColor, this.onConfirm, this.onCancel, this.onChange, this.onSelectedItemChanged, this.leftText, this.rightText, this.leftTextStyle, this.centerTextStyle, this.rightTextStyle, this.padding, this.leftPadding, this.topPadding, this.rightPadding, this.topRadius, this.backgroundColor, this.customSelectWidget, this.header = true, this.itemDistanceCalculator, required this.model, this.pickerHeight = 200, this.pickerItemCount = 5, this.isTimeUnit, this.itemBuilder, Key? key})", + "field:title": "final String?", + "field:titleHeight": "final double?", + "field:titleDividerColor": "final Color?", + "field:onConfirm": "final DatePickerCallback?", + "field:onCancel": "final DatePickerCallback?", + "field:onChange": "final DatePickerCallback?", + "field:onSelectedItemChanged": "final void Function(int wheelIndex, int index)?", + "field:leftText": "final String?", + "field:rightText": "final String?", + "field:leftTextStyle": "final TextStyle?", + "field:centerTextStyle": "final TextStyle?", + "field:rightTextStyle": "final TextStyle?", + "field:padding": "final EdgeInsets?", + "field:topPadding": "final double?", + "field:leftPadding": "final double?", + "field:rightPadding": "final double?", + "field:topRadius": "final double?", + "field:backgroundColor": "final Color?", + "field:itemDistanceCalculator": "final ItemDistanceCalculator?", + "field:header": "final bool", + "field:pickerHeight": "final double", + "field:pickerItemCount": "final int", + "field:customSelectWidget": "final Widget?", + "field:model": "final DatePickerModel", + "field:isTimeUnit": "final bool?", + "field:itemBuilder": "final ItemBuilderType?", + "method:createState": "State createState ()" + } + }, + "after": null, + "migrationDirection": "TDateTimePicker", + "migrationNote": "入口重组,见对应组件;不保证参数/行为兼容" + }, + { + "old": "TDDialogButtonOptions", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "constructor:new": "({required this.title, required this.action, this.titleColor, this.titleSize, this.style, this.type, this.theme, this.height, this.fontWeight})", + "field:title": "final String", + "field:titleColor": "Color?", + "field:titleSize": "final double?", + "field:fontWeight": "final FontWeight?", + "field:style": "final TDButtonStyle?", + "field:type": "final TDButtonType?", + "field:theme": "final TDButtonTheme?", + "field:height": "final double?", + "field:action": "final Function()?" + } + }, + "after": null, + "migrationDirection": "TDialogAction", + "migrationNote": "入口重组,见对应组件;不保证参数/行为兼容" + }, + { + "old": "TDDialogButtonStyle", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "enum", + "members": { + "value:normal": "normal", + "value:text": "text" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDDialogImagePosition", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "enum", + "members": { + "value:top": "top", + "value:middle": "middle" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDDivider", + "candidate": "TDivider", + "classification": "declaration-changed", + "before": { + "kind": "class", + "members": { + "constructor:new": "const ({Key? key, this.color, this.margin, this.width, this.height = 0.5, this.text, this.textStyle, this.widget, this.gapPadding, this.hideLine = false, this.isDashed = false, this.alignment = TextAlignment.center, this.direction = Axis.horizontal})", + "field:color": "final Color?", + "field:alignment": "final TextAlignment", + "field:margin": "final EdgeInsetsGeometry?", + "field:gapPadding": "final EdgeInsetsGeometry?", + "field:width": "final double?", + "field:height": "final double", + "field:text": "final String?", + "field:textStyle": "final TextStyle?", + "field:widget": "final Widget?", + "field:hideLine": "final bool", + "field:isDashed": "final bool", + "field:direction": "final Axis", + "method:build": "Widget build (BuildContext context)" + } + }, + "after": { + "kind": "class", + "members": { + "constructor:new": "const ({super.key, this.layout, this.align, this.dashed, this.child})", + "field:layout": "final TDividerLayout?", + "field:align": "final TDividerAlign?", + "field:dashed": "final bool?", + "field:child": "final Widget?", + "method:build": "Widget build (BuildContext context)" + } + }, + "migrationDirection": "TDivider", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDDrawer", + "candidate": "TDrawer", + "classification": "declaration-changed", + "before": { + "kind": "class", + "members": { + "constructor:new": "(this.context, {this.closeOnOverlayClick = true, this.footer, this.items, this.placement = TDDrawerPlacement.right, this.showOverlay = true, this.title, this.titleWidget, this.visible, this.onClose, this.onItemClick, this.width = 280, this.drawerTop, this.style, this.hover = true, this.backgroundColor, this.bordered = true, this.isShowLastBordered = true, this.contentWidget})", + "field:context": "final BuildContext", + "field:closeOnOverlayClick": "final bool?", + "field:footer": "final Widget?", + "field:items": "final List?", + "field:contentWidget": "final Widget?", + "field:placement": "final TDDrawerPlacement?", + "field:showOverlay": "final bool?", + "field:title": "final String?", + "field:titleWidget": "final Widget?", + "field:visible": "final bool?", + "field:onClose": "final VoidCallback?", + "field:onItemClick": "final TDDrawerItemClickCallback?", + "field:width": "final double?", + "field:drawerTop": "final double?", + "field:style": "final TDCellStyle?", + "field:hover": "final bool?", + "field:backgroundColor": "final Color?", + "field:bordered": "final bool?", + "field:isShowLastBordered": "final bool?", + "method:show": "void show ()", + "method:open": "void open ()", + "method:close": "void close ()" + } + }, + "after": { + "kind": "class", + "members": { + "constructor:new": "const ({super.key, this.showDivider = true, this.footer, this.items, this.enableFeedback = true, this.showLastDivider = true, this.title, this.onItemClick, this.child})", + "field:showDivider": "final bool", + "field:footer": "final Widget?", + "field:items": "final List?", + "field:enableFeedback": "final bool", + "field:showLastDivider": "final bool", + "field:child": "final Widget?", + "field:title": "final Widget?", + "field:onItemClick": "final TDrawerItemClickCallback?", + "method:build": "Widget build (BuildContext context)" + } + }, + "migrationDirection": "TDrawer", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDDrawerItem", + "candidate": "TDrawerItem", + "classification": "declaration-changed", + "before": { + "kind": "class", + "members": { + "constructor:new": "({this.title, this.icon, this.content})", + "field:title": "final String?", + "field:icon": "final Widget?", + "field:content": "final Widget?" + } + }, + "after": { + "kind": "class", + "members": { + "constructor:new": "const ({this.title, this.icon, this.content})", + "field:title": "final String?", + "field:icon": "final Widget?", + "field:content": "final Widget?" + } + }, + "migrationDirection": "TDrawerItem", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDDrawerItemClickCallback", + "candidate": "TDrawerItemClickCallback", + "classification": "declaration-changed", + "before": { + "kind": "typedef", + "members": { + "signature": "typedef TDDrawerItemClickCallback = void Function(int index, TDDrawerItem item);" + } + }, + "after": { + "kind": "typedef", + "members": { + "signature": "typedef TDrawerItemClickCallback = void Function(int index, TDrawerItem item);" + } + }, + "migrationDirection": "TDrawerItemClickCallback", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDDrawerPlacement", + "candidate": "TDrawerPlacement", + "classification": "declaration-shape-unchanged", + "before": { + "kind": "enum", + "members": { + "value:left": "left", + "value:right": "right" + } + }, + "after": { + "kind": "enum", + "members": { + "value:left": "left", + "value:right": "right" + } + }, + "migrationDirection": "TDrawerPlacement", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDDrawerWidget", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "constructor:new": "const ({super.key, this.footer, this.items, this.contentWidget, this.title, this.titleWidget, this.onItemClick, this.width = 280, this.style, this.hover = true, this.backgroundColor, this.bordered = true, this.isShowLastBordered = true})", + "field:footer": "final Widget?", + "field:items": "final List?", + "field:contentWidget": "final Widget?", + "field:title": "final String?", + "field:titleWidget": "final Widget?", + "field:onItemClick": "final TDDrawerItemClickCallback?", + "field:width": "final double?", + "field:style": "final TDCellStyle?", + "field:hover": "final bool?", + "field:backgroundColor": "final Color?", + "field:bordered": "final bool?", + "field:isShowLastBordered": "final bool?", + "method:build": "Widget build (BuildContext context)" + } + }, + "after": null, + "migrationDirection": "TDrawer", + "migrationNote": "入口重组,见对应组件;不保证参数/行为兼容" + }, + { + "old": "TDDropdownItem", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "constructor:new": "const ({Key? key, this.disabled = false, this.label, this.arrowIcon, this.arrowColor, this.multiple = false, this.options = const [], this.builder, this.optionsColumns = 1, this.onChange, this.onConfirm, this.onReset, this.minHeight, this.maxHeight, this.tabBarWidth, this.tabBarAlign, this.tabBarFlex = 1, this.controller})", + "field:disabled": "final bool?", + "field:label": "final String?", + "field:arrowIcon": "final IconData?", + "field:arrowColor": "final Color?", + "field:multiple": "final bool?", + "field:options": "final List?", + "field:builder": "final TDDropdownItemContentBuilder?", + "field:optionsColumns": "final int?", + "field:onChange": "final ValueChanged?", + "field:onConfirm": "final ValueChanged?", + "field:onReset": "final VoidCallback?", + "field:minHeight": "final double?", + "field:maxHeight": "final double?", + "field:tabBarWidth": "final double?", + "field:tabBarAlign": "final MainAxisAlignment?", + "field:tabBarFlex": "final int?", + "field:controller": "final TDDropdownItemController?", + "field:operateHeight": "static const double", + "get:minContentHeight": "double? minContentHeight", + "get:maxContentHeight": "double? maxContentHeight", + "method:createState": "_TDDropdownItemState createState ()", + "method:getLabel": "String getLabel ()" + } + }, + "after": null, + "migrationDirection": "TDropdownMenuItem", + "migrationNote": "入口重组,见对应组件;不保证参数/行为兼容" + }, + { + "old": "TDDropdownItemBuilder", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "typedef", + "members": { + "signature": "typedef TDDropdownItemBuilder = List Function(BuildContext context);" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDDropdownItemContentBuilder", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "typedef", + "members": { + "signature": "typedef TDDropdownItemContentBuilder = Widget Function(BuildContext context, _TDDropdownItemState itemState, TDDropdownPopup? popupState);" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDDropdownItemController", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "method:reset": "void reset ()", + "method:updateOptions": "void updateOptions (TDDropdownItemOptionsCallback callback)" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDDropdownItemOption", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "constructor:new": "({required this.value, required this.label, this.disabled = false, this.group, this.selected = false, this.selectedColor, this.disabledColor})", + "field:value": "String", + "field:label": "final String", + "field:disabled": "bool?", + "field:group": "final String?", + "field:selected": "bool", + "field:selectedColor": "final Color?", + "field:disabledColor": "final Color?" + } + }, + "after": null, + "migrationDirection": "TDropdownMenuOption", + "migrationNote": "入口重组,见对应组件;不保证参数/行为兼容" + }, + { + "old": "TDDropdownItemOptionsCallback", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "typedef", + "members": { + "signature": "typedef TDDropdownItemOptionsCallback = void Function(List? options);" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDDropdownMenu", + "candidate": "TDropdownMenu", + "classification": "declaration-changed", + "before": { + "kind": "class", + "members": { + "constructor:new": "const ({Key? key, this.builder, this.items, this.closeOnClickOverlay = true, this.direction = TDDropdownMenuDirection.auto, this.duration = 200.0, this.showOverlay = true, this.isScrollable = false, this.arrowIcon, this.arrowColor, this.labelBuilder, this.onMenuOpened, this.onMenuClosed, this.width, this.height = 48, this.tabBarAlign = MainAxisAlignment.center, this.decoration})", + "field:builder": "final TDDropdownItemBuilder?", + "field:items": "final List?", + "field:closeOnClickOverlay": "final bool?", + "field:direction": "final TDDropdownMenuDirection?", + "field:duration": "final double?", + "field:showOverlay": "final bool?", + "field:arrowIcon": "final IconData?", + "field:arrowColor": "final Color?", + "field:labelBuilder": "final LabelBuilder?", + "field:onMenuOpened": "final ValueChanged?", + "field:onMenuClosed": "final ValueChanged?", + "field:isScrollable": "final bool?", + "field:width": "final double?", + "field:height": "final double?", + "field:tabBarAlign": "final MainAxisAlignment?", + "field:decoration": "final Decoration?", + "method:createState": "_TDDropdownMenuState createState ()" + } + }, + "after": { + "kind": "class", + "members": { + "constructor:new": "const ({super.key, required this.items, this.controller, this.placement = TDropdownMenuPlacement.auto, this.scrollable = false, this.showOverlay = true, this.closeOnOverlayTap = true, this.useRootOverlay = false, this.animationDuration, this.onOpened, this.onClosed})", + "field:items": "final List", + "field:controller": "final TDropdownMenuController?", + "field:placement": "final TDropdownMenuPlacement", + "field:scrollable": "final bool", + "field:showOverlay": "final bool", + "field:closeOnOverlayTap": "final bool", + "field:useRootOverlay": "final bool", + "field:animationDuration": "final Duration?", + "field:onOpened": "final ValueChanged?", + "field:onClosed": "final TDropdownMenuClosedCallback?", + "method:createState": "State createState ()" + } + }, + "migrationDirection": "TDropdownMenu", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDDropdownMenuDirection", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "enum", + "members": { + "value:down": "down", + "value:up": "up", + "value:auto": "auto" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDEmpty", + "candidate": "TEmpty", + "classification": "declaration-changed", + "before": { + "kind": "class", + "members": { + "constructor:new": "const ({this.type = TDEmptyType.plain, this.icon = TDIcons.info_circle_filled, this.image, this.emptyText, this.operationText, this.operationTheme, this.onTapEvent, this.emptyTextColor, this.emptyTextFont, this.customOperationWidget, Key? key})", + "field:onTapEvent": "final TDTapEvent?", + "field:icon": "final IconData?", + "field:image": "final Widget?", + "field:emptyText": "final String?", + "field:emptyTextColor": "final Color?", + "field:emptyTextFont": "final Font?", + "field:operationText": "final String?", + "field:operationTheme": "final TDButtonTheme?", + "field:type": "final TDEmptyType", + "field:customOperationWidget": "final Widget?", + "method:build": "Widget build (BuildContext context)" + } + }, + "after": { + "kind": "class", + "members": { + "constructor:new": "const ({this.icon = TIcons.info_circle_filled, this.image, this.emptyText, this.operation, Key? key})", + "field:icon": "final IconData?", + "field:image": "final Widget?", + "field:emptyText": "final String?", + "field:operation": "final Widget?", + "method:build": "Widget build (BuildContext context)" + } + }, + "migrationDirection": "TEmpty", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDEmptyType", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "enum", + "members": { + "value:plain": "plain", + "value:operation": "operation" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDExtraThemeData", + "candidate": "TExtraThemeData", + "classification": "declaration-shape-unchanged", + "before": { + "kind": "class", + "members": { + "method:parse": "void parse (String name, Map curThemeMap)" + } + }, + "after": { + "kind": "class", + "members": { + "method:parse": "void parse (String name, Map curThemeMap)" + } + }, + "migrationDirection": "TExtraThemeData", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDFab", + "candidate": "TFab", + "classification": "declaration-changed", + "before": { + "kind": "class", + "members": { + "constructor:new": "const ({Key? key, this.theme = TDFabTheme.defaultTheme, this.shape = TDFabShape.circle, this.size = TDFabSize.large, this.text, this.onClick, this.icon})", + "field:theme": "final TDFabTheme", + "field:shape": "final TDFabShape", + "field:size": "final TDFabSize", + "field:text": "final String?", + "field:icon": "final Icon?", + "field:onClick": "final VoidCallback?", + "get:showText": "bool showText", + "method:getPadding": "EdgeInsets getPadding ()", + "method:getMinWidthOrHeight": "double getMinWidthOrHeight ()", + "method:getBackgroundColor": "Color getBackgroundColor (BuildContext context)", + "method:getIconColor": "Color getIconColor (BuildContext context)", + "method:getIconSize": "double getIconSize ()", + "method:getFontSize": "double getFontSize ()", + "method:build": "Widget build (BuildContext context)" + } + }, + "after": { + "kind": "class", + "members": { + "constructor:new": "const ({super.key, this.text = '', this.icon, this.child, this.onPressed, this.tooltip, this.semanticLabel, this.right, this.bottom, this.draggable, this.magnet, this.xBounds, this.yBounds, this.onDragStart, this.onDragEnd, this.useSafeArea = true})", + "field:text": "final String", + "field:icon": "final Widget?", + "field:child": "final Widget?", + "field:onPressed": "final VoidCallback?", + "field:tooltip": "final String?", + "field:semanticLabel": "final String?", + "field:right": "final double?", + "field:bottom": "final double?", + "field:draggable": "final TFabDragAxis?", + "field:magnet": "final TFabMagnet?", + "field:xBounds": "final TFabBounds?", + "field:yBounds": "final TFabBounds?", + "field:onDragStart": "final TFabDragCallback?", + "field:onDragEnd": "final TFabDragCallback?", + "field:useSafeArea": "final bool", + "method:build": "Widget build (BuildContext context)" + } + }, + "migrationDirection": "TFab", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDFabShape", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "enum", + "members": { + "value:circle": "circle", + "value:square": "square" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDFabSize", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "enum", + "members": { + "value:large": "large", + "value:medium": "medium", + "value:small": "small", + "value:extraSmall": "extraSmall" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDFabTheme", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "enum", + "members": { + "value:primary": "primary", + "value:defaultTheme": "defaultTheme", + "value:light": "light", + "value:danger": "danger" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDFontFamilies", + "candidate": "TFontFamilies", + "classification": "declaration-changed", + "before": { + "kind": "extension", + "members": { + "member:numberFontFamily": "FontFamily? numberFontFamily" + } + }, + "after": { + "kind": "extension", + "members": { + "member:fontFamily": "FontFamily? fontFamily", + "member:fontFamilyMedium": "FontFamily? fontFamilyMedium" + } + }, + "migrationDirection": "TFontFamilies", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDFontLoader", + "candidate": "TFontLoader", + "classification": "declaration-shape-unchanged", + "before": { + "kind": "class", + "members": { + "method:load": "static Future load ({required String name, required String fontFamilyUrl})" + } + }, + "after": { + "kind": "class", + "members": { + "method:load": "static Future load ({required String name, required String fontFamilyUrl})" + } + }, + "migrationDirection": "TFontLoader", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDFontLoaderWidget", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "constructor:new": "const ({Key? key, required this.textWidget, required this.fontFamilyUrl})", + "field:textWidget": "final TDText", + "field:fontFamilyUrl": "final String", + "method:createState": "State createState ()" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDFonts", + "candidate": "TFonts", + "classification": "declaration-changed", + "before": { + "kind": "extension", + "members": { + "member:fontDisplayLarge": "Font? fontDisplayLarge", + "member:fontDisplayMedium": "Font? fontDisplayMedium", + "member:fontHeadlineLarge": "Font? fontHeadlineLarge", + "member:fontHeadlineMedium": "Font? fontHeadlineMedium", + "member:fontHeadlineSmall": "Font? fontHeadlineSmall", + "member:fontTitleExtraLarge": "Font? fontTitleExtraLarge", + "member:fontTitleLarge": "Font? fontTitleLarge", + "member:fontTitleMedium": "Font? fontTitleMedium", + "member:fontTitleSmall": "Font? fontTitleSmall", + "member:fontBodyExtraLarge": "Font? fontBodyExtraLarge", + "member:fontBodyLarge": "Font? fontBodyLarge", + "member:fontBodyMedium": "Font? fontBodyMedium", + "member:fontBodySmall": "Font? fontBodySmall", + "member:fontBodyExtraSmall": "Font? fontBodyExtraSmall", + "member:fontMarkLarge": "Font? fontMarkLarge", + "member:fontMarkMedium": "Font? fontMarkMedium", + "member:fontMarkSmall": "Font? fontMarkSmall", + "member:fontMarkExtraSmall": "Font? fontMarkExtraSmall", + "member:fontLinkLarge": "Font? fontLinkLarge", + "member:fontLinkMedium": "Font? fontLinkMedium", + "member:fontLinkSmall": "Font? fontLinkSmall" + } + }, + "after": { + "kind": "extension", + "members": { + "member:fontDisplayLarge": "Font? fontDisplayLarge", + "member:fontDisplayMedium": "Font? fontDisplayMedium", + "member:fontHeadlineLarge": "Font? fontHeadlineLarge", + "member:fontHeadlineMedium": "Font? fontHeadlineMedium", + "member:fontHeadlineSmall": "Font? fontHeadlineSmall", + "member:fontTitleExtraLarge": "Font? fontTitleExtraLarge", + "member:fontTitleLarge": "Font? fontTitleLarge", + "member:fontTitleMedium": "Font? fontTitleMedium", + "member:fontTitleSmall": "Font? fontTitleSmall", + "member:fontBodyLarge": "Font? fontBodyLarge", + "member:fontBodyMedium": "Font? fontBodyMedium", + "member:fontBodySmall": "Font? fontBodySmall", + "member:fontBodyExtraSmall": "Font? fontBodyExtraSmall", + "member:fontMarkLarge": "Font? fontMarkLarge", + "member:fontMarkMedium": "Font? fontMarkMedium", + "member:fontMarkSmall": "Font? fontMarkSmall", + "member:fontMarkExtraSmall": "Font? fontMarkExtraSmall", + "member:fontLinkLarge": "Font? fontLinkLarge", + "member:fontLinkMedium": "Font? fontLinkMedium", + "member:fontLinkSmall": "Font? fontLinkSmall" + } + }, + "migrationDirection": "TFonts", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDFooter", + "candidate": "TFooter", + "classification": "declaration-changed", + "before": { + "kind": "class", + "members": { + "constructor:new": "const (this.type, {Key? key, this.logo, this.text = '', this.links = const [], this.width, this.height})", + "field:logo": "final String?", + "field:type": "final TDFooterType", + "field:text": "final String", + "field:width": "final double?", + "field:height": "final double?", + "field:links": "final List", + "method:createState": "State createState ()" + } + }, + "after": { + "kind": "class", + "members": { + "constructor:new": "const ({Key? key, this.logo, this.text = '', this.links = const []})", + "field:logo": "final Widget?", + "field:text": "final String", + "field:links": "final List", + "method:build": "Widget build (BuildContext context)" + } + }, + "migrationDirection": "TFooter", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDFooterType", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "enum", + "members": { + "value:text": "text", + "value:link": "link", + "value:brand": "brand" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDForm", + "candidate": "TForm", + "classification": "declaration-changed", + "before": { + "kind": "class", + "members": { + "constructor:new": "const ({Key? key, required this.items, required this.rules, required this.onSubmit, required this.data, this.colon = false, this.formContentAlign = TextAlign.left, this.isHorizontal = true, this.disabled = false, this.errorMessage, this.formLabelAlign = TextAlign.left, this.labelWidth = 20.0, this.preventSubmitDefault = true, this.requiredMark = true, this.scrollToFirstError, this.formShowErrorMessage = true, this.submitWithWarningMessage = false, this.onReset, this.formController, this.btnGroup})", + "field:items": "final List", + "field:colon": "final bool?", + "field:formContentAlign": "final TextAlign", + "field:data": "final Map", + "field:isHorizontal": "final bool", + "field:disabled": "final bool", + "field:errorMessage": "final Object?", + "field:formLabelAlign": "final TextAlign?", + "field:labelWidth": "final double?", + "field:preventSubmitDefault": "final bool?", + "field:requiredMark": "final bool?", + "field:rules": "final Map", + "field:scrollToFirstError": "final String?", + "field:formShowErrorMessage": "final bool?", + "field:submitWithWarningMessage": "final bool?", + "field:onSubmit": "final Function", + "field:onReset": "final Function?", + "field:btnGroup": "final List?", + "field:formController": "final FormController?", + "method:createState": "State createState ()" + } + }, + "after": { + "kind": "class", + "members": { + "constructor:new": "const ({super.key, required this.child, this.controller, this.autovalidateMode, this.onChanged, this.onSubmit, this.showErrorMessage = true})", + "field:child": "final Widget", + "field:controller": "final TFormController?", + "field:autovalidateMode": "final AutovalidateMode?", + "field:onChanged": "final VoidCallback?", + "field:onSubmit": "final ValueChanged>?", + "field:showErrorMessage": "final bool", + "method:createState": "TFormState createState ()" + } + }, + "migrationDirection": "TForm", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDFormItem", + "candidate": "TFormItem", + "classification": "declaration-changed", + "before": { + "kind": "class", + "members": { + "constructor:new": "const ({required this.type, this.child, this.formItemNotifier, this.label, this.labelWidget, this.help, this.name, this.labelAlign, this.contentAlign, this.labelWidth, this.tipAlign, this.requiredMark = true, this.formRules, this.itemRule, this.showErrorMessage = true, this.indicator, this.additionInfo, this.select = '', this.selectFn, this.hintText = '', this.backgroundColor, Map? radios, Key? key})", + "field:label": "final String?", + "field:labelWidget": "final Widget?", + "field:type": "final TDFormItemType", + "field:name": "final String?", + "field:additionInfo": "final String?", + "field:help": "final String?", + "field:labelAlign": "final TextAlign?", + "field:contentAlign": "final TextAlign?", + "field:labelWidth": "final double?", + "field:tipAlign": "final TextAlign?", + "field:child": "final Widget?", + "field:formItemNotifier": "final FormItemNotifier?", + "field:select": "final String", + "field:selectFn": "final Function?", + "field:requiredMark": "final bool?", + "field:formRules": "final List?", + "field:itemRule": "final List?", + "field:showErrorMessage": "final bool", + "field:indicator": "final bool?", + "field:hintText": "final", + "field:backgroundColor": "final Color?", + "method:createState": "_TDFormItemState createState ()" + } + }, + "after": { + "kind": "class", + "members": { + "constructor:new": "const ({super.key, required this.child, this.label, this.leading, this.required, this.help, this.errorText, this.extra, this.verticalAlignment, this.contentAlignment, this.showErrorMessage = true})", + "field:child": "final Widget", + "field:label": "final String?", + "field:leading": "final Widget?", + "field:required": "final bool?", + "field:help": "final String?", + "field:errorText": "final String?", + "field:extra": "final Widget?", + "field:verticalAlignment": "final TFormItemVerticalAlignment?", + "field:contentAlignment": "final TFormItemContentAlignment?", + "field:showErrorMessage": "final bool", + "method:build": "Widget build (BuildContext context)" + } + }, + "migrationDirection": "TFormItem", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDFormItemType", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "enum", + "members": { + "value:input": "input", + "value:radios": "radios", + "value:dateTimePicker": "dateTimePicker", + "value:cascader": "cascader", + "value:stepper": "stepper", + "value:rate": "rate", + "value:textarea": "textarea", + "value:upLoadImg": "upLoadImg" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDFormValidation", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "constructor:new": "({required this.validate, required this.errorMessage, required this.type})", + "field:validate": "final String? Function(dynamic)", + "field:errorMessage": "final String", + "field:type": "final TDFormItemType", + "method:check": "String? check (String? value)" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDFractionPagination", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "field:width": "final double?", + "field:height": "final double?", + "field:borderRadius": "final double?", + "field:backgroundColor": "final Color?", + "field:color": "final Color?", + "field:activeColor": "final Color?", + "field:textStyle": "final TextStyle?", + "field:activeTextStyle": "final TextStyle?", + "field:key": "final Key?", + "constructor:new": "const ({this.width, this.height, this.borderRadius, this.backgroundColor, this.color = Colors.white, this.textStyle = const TextStyle(fontSize: 12.0, color: Colors.white), this.activeTextStyle = const TextStyle(fontSize: 12.0, color: Colors.white), this.key, this.activeColor = Colors.white})", + "method:build": "Widget build (BuildContext context, SwiperPluginConfig config)" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDIconLabel", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "constructor:new": "const (IconData icon, {Key? key, double? size, Color? color})" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDIcons", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "field:accessibility_filled": "static const", + "field:accessibility": "static const", + "field:activity_filled": "static const", + "field:activity": "static const", + "field:add_and_subtract": "static const", + "field:add_circle_filled": "static const", + "field:add_circle": "static const", + "field:add_rectangle_filled": "static const", + "field:add_rectangle": "static const", + "field:add": "static const", + "field:address_book_filled": "static const", + "field:address_book": "static const", + "field:adjustment_filled": "static const", + "field:adjustment": "static const", + "field:airplay_wave_filled": "static const", + "field:airplay_wave": "static const", + "field:alarm_add_filled": "static const", + "field:alarm_add": "static const", + "field:alarm_filled": "static const", + "field:alarm_off_filled": "static const", + "field:alarm_off": "static const", + "field:alarm": "static const", + "field:align_top": "static const", + "field:align_vertical": "static const", + "field:alpha": "static const", + "field:analytics_filled": "static const", + "field:analytics": "static const", + "field:anchor": "static const", + "field:angry_filled": "static const", + "field:angry": "static const", + "field:animation_1_filled": "static const", + "field:animation_1": "static const", + "field:animation_filled": "static const", + "field:animation": "static const", + "field:anticlockwise_filled": "static const", + "field:anticlockwise": "static const", + "field:api": "static const", + "field:app_filled": "static const", + "field:app": "static const", + "field:apple_filled": "static const", + "field:apple": "static const", + "field:application_filled": "static const", + "field:application": "static const", + "field:architecture_hui_style_filled": "static const", + "field:architecture_hui_style": "static const", + "field:archway_1_filled": "static const", + "field:archway_1": "static const", + "field:archway_filled": "static const", + "field:archway": "static const", + "field:arrow_down_circle_filled": "static const", + "field:arrow_down_circle": "static const", + "field:arrow_down_rectangle_filled": "static const", + "field:arrow_down_rectangle": "static const", + "field:arrow_down": "static const", + "field:arrow_left_circle_filled": "static const", + "field:arrow_left_circle": "static const", + "field:arrow_left_down_circle_filled": "static const", + "field:arrow_left_down_circle": "static const", + "field:arrow_left_down": "static const", + "field:arrow_left_right_1": "static const", + "field:arrow_left_right_2": "static const", + "field:arrow_left_right_3": "static const", + "field:arrow_left_right_circle_filled": "static const", + "field:arrow_left_right_circle": "static const", + "field:arrow_left_up_circle_filled": "static const", + "field:arrow_left_up_circle": "static const", + "field:arrow_left_up": "static const", + "field:arrow_left": "static const", + "field:arrow_right_circle_filled": "static const", + "field:arrow_right_circle": "static const", + "field:arrow_right_down_circle_filled": "static const", + "field:arrow_right_down_circle": "static const", + "field:arrow_right_down": "static const", + "field:arrow_right_up_circle_filled": "static const", + "field:arrow_right_up_circle": "static const", + "field:arrow_right_up": "static const", + "field:arrow_right": "static const", + "field:arrow_triangle_down_filled": "static const", + "field:arrow_triangle_down": "static const", + "field:arrow_triangle_up_filled": "static const", + "field:arrow_triangle_up": "static const", + "field:arrow_up_circle_filled": "static const", + "field:arrow_up_circle": "static const", + "field:arrow_up_down_1": "static const", + "field:arrow_up_down_2": "static const", + "field:arrow_up_down_3": "static const", + "field:arrow_up_down_circle_filled": "static const", + "field:arrow_up_down_circle": "static const", + "field:arrow_up": "static const", + "field:artboard": "static const", + "field:article_filled": "static const", + "field:article": "static const", + "field:assignment_checked_filled": "static const", + "field:assignment_checked": "static const", + "field:assignment_code_filled": "static const", + "field:assignment_code": "static const", + "field:assignment_error_filled": "static const", + "field:assignment_error": "static const", + "field:assignment_filled": "static const", + "field:assignment_user_filled": "static const", + "field:assignment_user": "static const", + "field:assignment": "static const", + "field:attach": "static const", + "field:attic_1_filled": "static const", + "field:attic_1": "static const", + "field:attic_filled": "static const", + "field:attic": "static const", + "field:audio_filled": "static const", + "field:audio": "static const", + "field:awkward_filled": "static const", + "field:awkward": "static const", + "field:backtop_rectangle_filled": "static const", + "field:backtop_rectangle": "static const", + "field:backtop": "static const", + "field:backup_filled": "static const", + "field:backup": "static const", + "field:backward_filled": "static const", + "field:backward": "static const", + "field:bad_laugh_filled": "static const", + "field:bad_laugh": "static const", + "field:bamboo_shoot_filled": "static const", + "field:bamboo_shoot": "static const", + "field:banana_filled": "static const", + "field:banana": "static const", + "field:barbecue_filled": "static const", + "field:barbecue": "static const", + "field:barcode_1": "static const", + "field:barcode": "static const", + "field:base_station": "static const", + "field:battery_add_filled": "static const", + "field:battery_add": "static const", + "field:battery_charging_filled": "static const", + "field:battery_charging": "static const", + "field:battery_filled": "static const", + "field:battery_low_filled": "static const", + "field:battery_low": "static const", + "field:battery": "static const", + "field:bean_filled": "static const", + "field:bean": "static const", + "field:beer_filled": "static const", + "field:beer": "static const", + "field:beta": "static const", + "field:bifurcate_filled": "static const", + "field:bifurcate": "static const", + "field:bill_filled": "static const", + "field:bill": "static const", + "field:bluetooth": "static const", + "field:bone_filled": "static const", + "field:bone": "static const", + "field:book_filled": "static const", + "field:book_open_filled": "static const", + "field:book_open": "static const", + "field:book_unknown_filled": "static const", + "field:book_unknown": "static const", + "field:book": "static const", + "field:bookmark_add_filled": "static const", + "field:bookmark_add": "static const", + "field:bookmark_checked_filled": "static const", + "field:bookmark_checked": "static const", + "field:bookmark_double_filled": "static const", + "field:bookmark_double": "static const", + "field:bookmark_filled": "static const", + "field:bookmark_minus_filled": "static const", + "field:bookmark_minus": "static const", + "field:bookmark": "static const", + "field:braces": "static const", + "field:brackets": "static const", + "field:bread_filled": "static const", + "field:bread": "static const", + "field:bridge_1_filled": "static const", + "field:bridge_1": "static const", + "field:bridge_2_filled": "static const", + "field:bridge_2": "static const", + "field:bridge_3": "static const", + "field:bridge_4": "static const", + "field:bridge_5_filled": "static const", + "field:bridge_5": "static const", + "field:bridge_6_filled": "static const", + "field:bridge_6": "static const", + "field:bridge": "static const", + "field:brightness_1_filled": "static const", + "field:brightness_1": "static const", + "field:brightness_filled": "static const", + "field:brightness": "static const", + "field:broccoli_filled": "static const", + "field:broccoli": "static const", + "field:browse_filled": "static const", + "field:browse_gallery_filled": "static const", + "field:browse_gallery": "static const", + "field:browse_off_filled": "static const", + "field:browse_off": "static const", + "field:browse": "static const", + "field:brush_filled": "static const", + "field:brush": "static const", + "field:bug_filled": "static const", + "field:bug_report_filled": "static const", + "field:bug_report": "static const", + "field:bug": "static const", + "field:building_1_filled": "static const", + "field:building_1": "static const", + "field:building_2_filled": "static const", + "field:building_2": "static const", + "field:building_3_filled": "static const", + "field:building_3": "static const", + "field:building_4_filled": "static const", + "field:building_4": "static const", + "field:building_5_filled": "static const", + "field:building_5": "static const", + "field:building_filled": "static const", + "field:building": "static const", + "field:bulletpoint": "static const", + "field:button_filled": "static const", + "field:button": "static const", + "field:cabbage_filled": "static const", + "field:cabbage": "static const", + "field:cake_filled": "static const", + "field:cake": "static const", + "field:calculation_1_filled": "static const", + "field:calculation_1": "static const", + "field:calculation": "static const", + "field:calculator_1": "static const", + "field:calculator_filled": "static const", + "field:calculator": "static const", + "field:calendar_1_filled": "static const", + "field:calendar_1": "static const", + "field:calendar_2_filled": "static const", + "field:calendar_2": "static const", + "field:calendar_edit_filled": "static const", + "field:calendar_edit": "static const", + "field:calendar_event_filled": "static const", + "field:calendar_event": "static const", + "field:calendar_filled": "static const", + "field:calendar": "static const", + "field:call_1_filled": "static const", + "field:call_1": "static const", + "field:call_cancel_filled": "static const", + "field:call_cancel": "static const", + "field:call_filled": "static const", + "field:call_forwarded_filled": "static const", + "field:call_forwarded": "static const", + "field:call_incoming_filled": "static const", + "field:call_incoming": "static const", + "field:call_off_filled": "static const", + "field:call_off": "static const", + "field:call": "static const", + "field:calm_1_filled": "static const", + "field:calm_1": "static const", + "field:calm_filled": "static const", + "field:calm": "static const", + "field:camera_1_filled": "static const", + "field:camera_1": "static const", + "field:camera_2_filled": "static const", + "field:camera_2": "static const", + "field:camera_filled": "static const", + "field:camera_off_filled": "static const", + "field:camera_off": "static const", + "field:camera": "static const", + "field:candy_filled": "static const", + "field:candy": "static const", + "field:card_filled": "static const", + "field:card": "static const", + "field:cardmembership_filled": "static const", + "field:cardmembership": "static const", + "field:caret_down_small": "static const", + "field:caret_down": "static const", + "field:caret_left_small": "static const", + "field:caret_left": "static const", + "field:caret_right_small": "static const", + "field:caret_right": "static const", + "field:caret_up_small": "static const", + "field:caret_up": "static const", + "field:cart_add_filled": "static const", + "field:cart_add": "static const", + "field:cart_filled": "static const", + "field:cart": "static const", + "field:cast_filled": "static const", + "field:cast": "static const", + "field:castle_1_filled": "static const", + "field:castle_1": "static const", + "field:castle_2_filled": "static const", + "field:castle_2": "static const", + "field:castle_3_filled": "static const", + "field:castle_3": "static const", + "field:castle_4_filled": "static const", + "field:castle_4": "static const", + "field:castle_5_filled": "static const", + "field:castle_5": "static const", + "field:castle_6_filled": "static const", + "field:castle_6": "static const", + "field:castle_7_filled": "static const", + "field:castle_7": "static const", + "field:castle_filled": "static const", + "field:castle": "static const", + "field:cat_filled": "static const", + "field:cat": "static const", + "field:catalog_filled": "static const", + "field:catalog": "static const", + "field:cd_filled": "static const", + "field:cd": "static const", + "field:celsius": "static const", + "field:center_focus_strong_filled": "static const", + "field:center_focus_strong": "static const", + "field:centimeter": "static const", + "field:certificate_1_filled": "static const", + "field:certificate_1": "static const", + "field:certificate_filled": "static const", + "field:certificate": "static const", + "field:chart_3d_filled": "static const", + "field:chart_3d": "static const", + "field:chart_add_filled": "static const", + "field:chart_add": "static const", + "field:chart_analytics": "static const", + "field:chart_area_filled": "static const", + "field:chart_area_multi_filled": "static const", + "field:chart_area_multi": "static const", + "field:chart_area": "static const", + "field:chart_bar_filled": "static const", + "field:chart_bar": "static const", + "field:chart_bubble_filled": "static const", + "field:chart_bubble": "static const", + "field:chart_column_filled": "static const", + "field:chart_column": "static const", + "field:chart_combo_filled": "static const", + "field:chart_combo": "static const", + "field:chart_filled": "static const", + "field:chart_line_data_1": "static const", + "field:chart_line_data": "static const", + "field:chart_line_multi": "static const", + "field:chart_line": "static const", + "field:chart_maximum": "static const", + "field:chart_median": "static const", + "field:chart_minimum": "static const", + "field:chart_pie_filled": "static const", + "field:chart_pie": "static const", + "field:chart_radar_filled": "static const", + "field:chart_radar": "static const", + "field:chart_radial": "static const", + "field:chart_ring_1_filled": "static const", + "field:chart_ring_1": "static const", + "field:chart_ring_filled": "static const", + "field:chart_ring": "static const", + "field:chart_scatter": "static const", + "field:chart_stacked_filled": "static const", + "field:chart_stacked": "static const", + "field:chart": "static const", + "field:chat_add_filled": "static const", + "field:chat_add": "static const", + "field:chat_bubble_1_filled": "static const", + "field:chat_bubble_1": "static const", + "field:chat_bubble_add_filled": "static const", + "field:chat_bubble_add": "static const", + "field:chat_bubble_error_filled": "static const", + "field:chat_bubble_error": "static const", + "field:chat_bubble_filled": "static const", + "field:chat_bubble_help_filled": "static const", + "field:chat_bubble_help": "static const", + "field:chat_bubble_history_filled": "static const", + "field:chat_bubble_history": "static const", + "field:chat_bubble_locked_filled": "static const", + "field:chat_bubble_locked": "static const", + "field:chat_bubble_smile_filled": "static const", + "field:chat_bubble_smile": "static const", + "field:chat_bubble": "static const", + "field:chat_checked_filled": "static const", + "field:chat_checked": "static const", + "field:chat_clear_filled": "static const", + "field:chat_clear": "static const", + "field:chat_double_filled": "static const", + "field:chat_double": "static const", + "field:chat_error_filled": "static const", + "field:chat_error": "static const", + "field:chat_filled": "static const", + "field:chat_heart_filled": "static const", + "field:chat_heart": "static const", + "field:chat_message_filled": "static const", + "field:chat_message": "static const", + "field:chat_off_filled": "static const", + "field:chat_off": "static const", + "field:chat_poll_filled": "static const", + "field:chat_poll": "static const", + "field:chat_setting_filled": "static const", + "field:chat_setting": "static const", + "field:chat": "static const", + "field:check_circle_filled": "static const", + "field:check_circle": "static const", + "field:check_double": "static const", + "field:check_rectangle_filled": "static const", + "field:check_rectangle": "static const", + "field:check": "static const", + "field:cheese_filled": "static const", + "field:cheese": "static const", + "field:cherry_filled": "static const", + "field:cherry": "static const", + "field:chevron_down_circle_filled": "static const", + "field:chevron_down_circle": "static const", + "field:chevron_down_double_s": "static const", + "field:chevron_down_double": "static const", + "field:chevron_down_rectangle_filled": "static const", + "field:chevron_down_rectangle": "static const", + "field:chevron_down_s": "static const", + "field:chevron_down": "static const", + "field:chevron_left_circle_filled": "static const", + "field:chevron_left_circle": "static const", + "field:chevron_left_double_s": "static const", + "field:chevron_left_double": "static const", + "field:chevron_left_rectangle_filled": "static const", + "field:chevron_left_rectangle": "static const", + "field:chevron_left_s": "static const", + "field:chevron_left": "static const", + "field:chevron_right_circle_filled": "static const", + "field:chevron_right_circle": "static const", + "field:chevron_right_double_s": "static const", + "field:chevron_right_double": "static const", + "field:chevron_right_rectangle_filled": "static const", + "field:chevron_right_rectangle": "static const", + "field:chevron_right_s": "static const", + "field:chevron_right": "static const", + "field:chevron_up_circle_filled": "static const", + "field:chevron_up_circle": "static const", + "field:chevron_up_double_s": "static const", + "field:chevron_up_double": "static const", + "field:chevron_up_rectangle_filled": "static const", + "field:chevron_up_rectangle": "static const", + "field:chevron_up_s": "static const", + "field:chevron_up": "static const", + "field:chicken": "static const", + "field:chili_filled": "static const", + "field:chili": "static const", + "field:chimney_1_filled": "static const", + "field:chimney_1": "static const", + "field:chimney_2_filled": "static const", + "field:chimney_2": "static const", + "field:chimney_filled": "static const", + "field:chimney": "static const", + "field:chinese_cabbage_filled": "static const", + "field:chinese_cabbage": "static const", + "field:church_filled": "static const", + "field:church": "static const", + "field:circle_filled": "static const", + "field:circle": "static const", + "field:city_1_filled": "static const", + "field:city_1": "static const", + "field:city_10_filled": "static const", + "field:city_10": "static const", + "field:city_11_filled": "static const", + "field:city_11": "static const", + "field:city_12_filled": "static const", + "field:city_12": "static const", + "field:city_13_filled": "static const", + "field:city_13": "static const", + "field:city_14_filled": "static const", + "field:city_14": "static const", + "field:city_15_filled": "static const", + "field:city_15": "static const", + "field:city_2_filled": "static const", + "field:city_2": "static const", + "field:city_3_filled": "static const", + "field:city_3": "static const", + "field:city_4_filled": "static const", + "field:city_4": "static const", + "field:city_5_filled": "static const", + "field:city_5": "static const", + "field:city_6_filled": "static const", + "field:city_6": "static const", + "field:city_7_filled": "static const", + "field:city_7": "static const", + "field:city_8_filled": "static const", + "field:city_8": "static const", + "field:city_9_filled": "static const", + "field:city_9": "static const", + "field:city_ancient_1_filled": "static const", + "field:city_ancient_1": "static const", + "field:city_ancient_2_filled": "static const", + "field:city_ancient_2": "static const", + "field:city_ancient_filled": "static const", + "field:city_ancient": "static const", + "field:city_filled": "static const", + "field:city": "static const", + "field:clear_filled": "static const", + "field:clear_formatting_1_filled": "static const", + "field:clear_formatting_1": "static const", + "field:clear_formatting_filled": "static const", + "field:clear_formatting": "static const", + "field:clear": "static const", + "field:close_circle_filled": "static const", + "field:close_circle": "static const", + "field:close_octagon_filled": "static const", + "field:close_octagon": "static const", + "field:close_rectangle_filled": "static const", + "field:close_rectangle": "static const", + "field:close": "static const", + "field:cloud_download": "static const", + "field:cloud_filled": "static const", + "field:cloud_upload": "static const", + "field:cloud": "static const", + "field:cloudy_day_filled": "static const", + "field:cloudy_day": "static const", + "field:cloudy_night_filled": "static const", + "field:cloudy_night_rain_filled": "static const", + "field:cloudy_night_rain": "static const", + "field:cloudy_night": "static const", + "field:cloudy_rain_filled": "static const", + "field:cloudy_rain": "static const", + "field:cloudy_sunny_filled": "static const", + "field:cloudy_sunny": "static const", + "field:code_1": "static const", + "field:code_off": "static const", + "field:code": "static const", + "field:cola_filled": "static const", + "field:cola": "static const", + "field:collage_filled": "static const", + "field:collage": "static const", + "field:collection_filled": "static const", + "field:collection": "static const", + "field:color_invert_filled": "static const", + "field:color_invert": "static const", + "field:combination_filled": "static const", + "field:combination": "static const", + "field:command": "static const", + "field:compass_1_filled": "static const", + "field:compass_1": "static const", + "field:compass_filled": "static const", + "field:compass": "static const", + "field:component_breadcrumb_filled": "static const", + "field:component_breadcrumb": "static const", + "field:component_checkbox_filled": "static const", + "field:component_checkbox": "static const", + "field:component_divider_horizontal_filled": "static const", + "field:component_divider_horizontal": "static const", + "field:component_divider_vertical_filled": "static const", + "field:component_divider_vertical": "static const", + "field:component_dropdown_filled": "static const", + "field:component_dropdown": "static const", + "field:component_grid_filled": "static const", + "field:component_grid": "static const", + "field:component_input_filled": "static const", + "field:component_input": "static const", + "field:component_layout_filled": "static const", + "field:component_layout": "static const", + "field:component_radio": "static const", + "field:component_space_filled": "static const", + "field:component_space": "static const", + "field:component_steps_filled": "static const", + "field:component_steps": "static const", + "field:component_switch_filled": "static const", + "field:component_switch": "static const", + "field:constraint": "static const", + "field:contrast_1_filled": "static const", + "field:contrast_1": "static const", + "field:contrast_filled": "static const", + "field:contrast": "static const", + "field:control_platform_filled": "static const", + "field:control_platform": "static const", + "field:cooperate_filled": "static const", + "field:cooperate": "static const", + "field:coordinate_system_filled": "static const", + "field:coordinate_system": "static const", + "field:copy_filled": "static const", + "field:copy": "static const", + "field:copyright_filled": "static const", + "field:copyright": "static const", + "field:corn_filled": "static const", + "field:corn": "static const", + "field:coupon_filled": "static const", + "field:coupon": "static const", + "field:course_filled": "static const", + "field:course": "static const", + "field:cpu_filled": "static const", + "field:cpu": "static const", + "field:crack_filled": "static const", + "field:crack": "static const", + "field:creditcard_add_filled": "static const", + "field:creditcard_add": "static const", + "field:creditcard_filled": "static const", + "field:creditcard_off_filled": "static const", + "field:creditcard_off": "static const", + "field:creditcard": "static const", + "field:crooked_smile_filled": "static const", + "field:crooked_smile": "static const", + "field:cry_and_laugh_filled": "static const", + "field:cry_and_laugh": "static const", + "field:cry_loudly_filled": "static const", + "field:cry_loudly": "static const", + "field:css3_filled": "static const", + "field:css3": "static const", + "field:cucumber": "static const", + "field:currency_exchange": "static const", + "field:cursor_filled": "static const", + "field:cursor": "static const", + "field:curtain_filled": "static const", + "field:curtain": "static const", + "field:curve": "static const", + "field:cut_1": "static const", + "field:cut": "static const", + "field:dam_1_filled": "static const", + "field:dam_1": "static const", + "field:dam_2_filled": "static const", + "field:dam_2": "static const", + "field:dam_3_filled": "static const", + "field:dam_3": "static const", + "field:dam_4_filled": "static const", + "field:dam_4": "static const", + "field:dam_5_filled": "static const", + "field:dam_5": "static const", + "field:dam_6_filled": "static const", + "field:dam_6": "static const", + "field:dam_7_filled": "static const", + "field:dam_7": "static const", + "field:dam_filled": "static const", + "field:dam": "static const", + "field:dart_board_filled": "static const", + "field:dart_board": "static const", + "field:dashboard_1_filled": "static const", + "field:dashboard_1": "static const", + "field:dashboard_filled": "static const", + "field:dashboard": "static const", + "field:data_base_filled": "static const", + "field:data_base": "static const", + "field:data_checked_filled": "static const", + "field:data_checked": "static const", + "field:data_display": "static const", + "field:data_error_filled": "static const", + "field:data_error": "static const", + "field:data_filled": "static const", + "field:data_search_filled": "static const", + "field:data_search": "static const", + "field:data": "static const", + "field:delete_1_filled": "static const", + "field:delete_1": "static const", + "field:delete_filled": "static const", + "field:delete_time_filled": "static const", + "field:delete_time": "static const", + "field:delete": "static const", + "field:delta_filled": "static const", + "field:delta": "static const", + "field:depressed_filled": "static const", + "field:depressed": "static const", + "field:desktop_1_filled": "static const", + "field:desktop_1": "static const", + "field:desktop_filled": "static const", + "field:desktop": "static const", + "field:despise_filled": "static const", + "field:despise": "static const", + "field:device_filled": "static const", + "field:device": "static const", + "field:discount_filled": "static const", + "field:discount": "static const", + "field:dissatisfaction_filled": "static const", + "field:dissatisfaction": "static const", + "field:divide": "static const", + "field:dividers_1": "static const", + "field:dividers": "static const", + "field:doge_filled": "static const", + "field:doge": "static const", + "field:double_storey_filled": "static const", + "field:double_storey": "static const", + "field:download_1": "static const", + "field:download_2_filled": "static const", + "field:download_2": "static const", + "field:download": "static const", + "field:downscale": "static const", + "field:drag_drop": "static const", + "field:drag_move": "static const", + "field:drink_filled": "static const", + "field:drink": "static const", + "field:drumstick_filled": "static const", + "field:drumstick": "static const", + "field:dv_filled": "static const", + "field:dv": "static const", + "field:dvd_filled": "static const", + "field:dvd": "static const", + "field:earphone_filled": "static const", + "field:earphone": "static const", + "field:earth_filled": "static const", + "field:earth": "static const", + "field:edit_1_filled": "static const", + "field:edit_1": "static const", + "field:edit_2_filled": "static const", + "field:edit_2": "static const", + "field:edit_filled": "static const", + "field:edit_off_filled": "static const", + "field:edit_off": "static const", + "field:edit": "static const", + "field:education_filled": "static const", + "field:education": "static const", + "field:eggplant_filled": "static const", + "field:eggplant": "static const", + "field:ellipsis": "static const", + "field:emo_emotional_filled": "static const", + "field:emo_emotional": "static const", + "field:enter": "static const", + "field:equal": "static const", + "field:error_circle_filled": "static const", + "field:error_circle": "static const", + "field:error_triangle_filled": "static const", + "field:error_triangle": "static const", + "field:error": "static const", + "field:excited_1_filled": "static const", + "field:excited_1": "static const", + "field:excited_filled": "static const", + "field:excited": "static const", + "field:expand_down_filled": "static const", + "field:expand_down": "static const", + "field:expand_horizontal": "static const", + "field:expand_up_filled": "static const", + "field:expand_up": "static const", + "field:expand_vertical": "static const", + "field:explore_filled": "static const", + "field:explore_off_filled": "static const", + "field:explore_off": "static const", + "field:explore": "static const", + "field:exposure_filled": "static const", + "field:exposure": "static const", + "field:extension_filled": "static const", + "field:extension_off_filled": "static const", + "field:extension_off": "static const", + "field:extension": "static const", + "field:face_retouching_filled": "static const", + "field:face_retouching": "static const", + "field:fact_check_filled": "static const", + "field:fact_check": "static const", + "field:fahrenheit_scale": "static const", + "field:feel_at_ease_filled": "static const", + "field:feel_at_ease": "static const", + "field:ferocious_filled": "static const", + "field:ferocious": "static const", + "field:ferris_wheel_filled": "static const", + "field:ferris_wheel": "static const", + "field:file_1_filled": "static const", + "field:file_1": "static const", + "field:file_add_1_filled": "static const", + "field:file_add_1": "static const", + "field:file_add_filled": "static const", + "field:file_add": "static const", + "field:file_attachment_filled": "static const", + "field:file_attachment": "static const", + "field:file_blocked_filled": "static const", + "field:file_blocked": "static const", + "field:file_code_1_filled": "static const", + "field:file_code_1": "static const", + "field:file_code_filled": "static const", + "field:file_code": "static const", + "field:file_copy_filled": "static const", + "field:file_copy": "static const", + "field:file_download_filled": "static const", + "field:file_download": "static const", + "field:file_excel_filled": "static const", + "field:file_excel": "static const", + "field:file_export_filled": "static const", + "field:file_export": "static const", + "field:file_filled": "static const", + "field:file_icon_filled": "static const", + "field:file_icon": "static const", + "field:file_image_filled": "static const", + "field:file_image": "static const", + "field:file_import_filled": "static const", + "field:file_import": "static const", + "field:file_locked_filled": "static const", + "field:file_locked": "static const", + "field:file_minus_filled": "static const", + "field:file_minus": "static const", + "field:file_music_filled": "static const", + "field:file_music": "static const", + "field:file_onenote_filled": "static const", + "field:file_onenote": "static const", + "field:file_outlook_filled": "static const", + "field:file_outlook": "static const", + "field:file_paste_filled": "static const", + "field:file_paste": "static const", + "field:file_pdf_filled": "static const", + "field:file_pdf": "static const", + "field:file_powerpoint_filled": "static const", + "field:file_powerpoint": "static const", + "field:file_restore_filled": "static const", + "field:file_restore": "static const", + "field:file_safety_filled": "static const", + "field:file_safety": "static const", + "field:file_search_filled": "static const", + "field:file_search": "static const", + "field:file_setting_filled": "static const", + "field:file_setting": "static const", + "field:file_teams_filled": "static const", + "field:file_teams": "static const", + "field:file_transmit_double_filled": "static const", + "field:file_transmit_double": "static const", + "field:file_transmit_filled": "static const", + "field:file_transmit": "static const", + "field:file_unknown_filled": "static const", + "field:file_unknown": "static const", + "field:file_unlocked_filled": "static const", + "field:file_unlocked": "static const", + "field:file_word_filled": "static const", + "field:file_word": "static const", + "field:file_zip_filled": "static const", + "field:file_zip": "static const", + "field:file": "static const", + "field:fill_color_1_filled": "static const", + "field:fill_color_1": "static const", + "field:fill_color_filled": "static const", + "field:fill_color": "static const", + "field:film_1_filled": "static const", + "field:film_1": "static const", + "field:film_filled": "static const", + "field:film": "static const", + "field:filter_1_filled": "static const", + "field:filter_1": "static const", + "field:filter_2_filled": "static const", + "field:filter_2": "static const", + "field:filter_3_filled": "static const", + "field:filter_3": "static const", + "field:filter_clear_filled": "static const", + "field:filter_clear": "static const", + "field:filter_filled": "static const", + "field:filter_off_filled": "static const", + "field:filter_off": "static const", + "field:filter_sort_filled": "static const", + "field:filter_sort": "static const", + "field:filter": "static const", + "field:fingerprint_1": "static const", + "field:fingerprint_2": "static const", + "field:fingerprint_3": "static const", + "field:fingerprint": "static const", + "field:fish_filled": "static const", + "field:fish": "static const", + "field:flag_1_filled": "static const", + "field:flag_1": "static const", + "field:flag_2_filled": "static const", + "field:flag_2": "static const", + "field:flag_3_filled": "static const", + "field:flag_3": "static const", + "field:flag_4_filled": "static const", + "field:flag_4": "static const", + "field:flag_filled": "static const", + "field:flag": "static const", + "field:flashlight_filled": "static const", + "field:flashlight": "static const", + "field:flight_landing_filled": "static const", + "field:flight_landing": "static const", + "field:flight_takeoff_filled": "static const", + "field:flight_takeoff": "static const", + "field:flip_smiling_face_filled": "static const", + "field:flip_smiling_face": "static const", + "field:flip_to_back_filled": "static const", + "field:flip_to_back": "static const", + "field:flip_to_front_filled": "static const", + "field:flip_to_front": "static const", + "field:focus_filled": "static const", + "field:focus": "static const", + "field:fog_filled": "static const", + "field:fog_night_filled": "static const", + "field:fog_night": "static const", + "field:fog_sunny_filled": "static const", + "field:fog_sunny": "static const", + "field:fog": "static const", + "field:folder_1_filled": "static const", + "field:folder_1": "static const", + "field:folder_add_1_filled": "static const", + "field:folder_add_1": "static const", + "field:folder_add_filled": "static const", + "field:folder_add": "static const", + "field:folder_blocked_filled": "static const", + "field:folder_blocked": "static const", + "field:folder_details_filled": "static const", + "field:folder_details": "static const", + "field:folder_export_filled": "static const", + "field:folder_export": "static const", + "field:folder_filled": "static const", + "field:folder_import_filled": "static const", + "field:folder_import": "static const", + "field:folder_locked_filled": "static const", + "field:folder_locked": "static const", + "field:folder_minus_filled": "static const", + "field:folder_minus": "static const", + "field:folder_move_filled": "static const", + "field:folder_move": "static const", + "field:folder_off_filled": "static const", + "field:folder_off": "static const", + "field:folder_open_1_filled": "static const", + "field:folder_open_1": "static const", + "field:folder_open_filled": "static const", + "field:folder_open": "static const", + "field:folder_search_filled": "static const", + "field:folder_search": "static const", + "field:folder_setting_filled": "static const", + "field:folder_setting": "static const", + "field:folder_shared_filled": "static const", + "field:folder_shared": "static const", + "field:folder_unlocked_filled": "static const", + "field:folder_unlocked": "static const", + "field:folder_zip_filled": "static const", + "field:folder_zip": "static const", + "field:folder": "static const", + "field:forest_filled": "static const", + "field:forest": "static const", + "field:fork_filled": "static const", + "field:fork": "static const", + "field:form_filled": "static const", + "field:form": "static const", + "field:format_horizontal_align_bottom": "static const", + "field:format_horizontal_align_center": "static const", + "field:format_horizontal_align_top": "static const", + "field:format_vertical_align_center": "static const", + "field:format_vertical_align_left": "static const", + "field:format_vertical_align_right": "static const", + "field:forward_filled": "static const", + "field:forward": "static const", + "field:frame_1_filled": "static const", + "field:frame_1": "static const", + "field:frame_filled": "static const", + "field:frame": "static const", + "field:fries_filled": "static const", + "field:fries": "static const", + "field:fullscreen_1": "static const", + "field:fullscreen_2": "static const", + "field:fullscreen_exit_1": "static const", + "field:fullscreen_exit": "static const", + "field:fullscreen": "static const", + "field:function_curve": "static const", + "field:functions_1": "static const", + "field:functions": "static const", + "field:gamepad_1_filled": "static const", + "field:gamepad_1": "static const", + "field:gamepad_filled": "static const", + "field:gamepad": "static const", + "field:gamma": "static const", + "field:garlic_filled": "static const", + "field:garlic": "static const", + "field:gender_female": "static const", + "field:gender_male": "static const", + "field:gesture_applause_filled": "static const", + "field:gesture_applause": "static const", + "field:gesture_click_filled": "static const", + "field:gesture_click": "static const", + "field:gesture_down_filled": "static const", + "field:gesture_down": "static const", + "field:gesture_expansion_filled": "static const", + "field:gesture_expansion": "static const", + "field:gesture_left_filled": "static const", + "field:gesture_left_slip_filled": "static const", + "field:gesture_left_slip": "static const", + "field:gesture_left": "static const", + "field:gesture_open_filled": "static const", + "field:gesture_open": "static const", + "field:gesture_pray_filled": "static const", + "field:gesture_pray": "static const", + "field:gesture_press_filled": "static const", + "field:gesture_press": "static const", + "field:gesture_ranslation_filled": "static const", + "field:gesture_ranslation": "static const", + "field:gesture_right_filled": "static const", + "field:gesture_right_slip_filled": "static const", + "field:gesture_right_slip": "static const", + "field:gesture_right": "static const", + "field:gesture_slide_left_and_right_filled": "static const", + "field:gesture_slide_left_and_right": "static const", + "field:gesture_slide_up_filled": "static const", + "field:gesture_slide_up": "static const", + "field:gesture_typing_filled": "static const", + "field:gesture_typing": "static const", + "field:gesture_up_and_down_filled": "static const", + "field:gesture_up_and_down": "static const", + "field:gesture_up_filled": "static const", + "field:gesture_up": "static const", + "field:gesture_wipe_down_filled": "static const", + "field:gesture_wipe_down": "static const", + "field:gift_filled": "static const", + "field:gift": "static const", + "field:giggle_filled": "static const", + "field:giggle": "static const", + "field:git_branch_filled": "static const", + "field:git_branch": "static const", + "field:git_commit_filled": "static const", + "field:git_commit": "static const", + "field:git_merge_filled": "static const", + "field:git_merge": "static const", + "field:git_pull_request_filled": "static const", + "field:git_pull_request": "static const", + "field:git_repository_commits_filled": "static const", + "field:git_repository_commits": "static const", + "field:git_repository_filled": "static const", + "field:git_repository_private_filled": "static const", + "field:git_repository_private": "static const", + "field:git_repository": "static const", + "field:gps_filled": "static const", + "field:gps": "static const", + "field:grape_filled": "static const", + "field:grape": "static const", + "field:greater_than_or_equal": "static const", + "field:greater_than": "static const", + "field:green_onion": "static const", + "field:grid_add_filled": "static const", + "field:grid_add": "static const", + "field:grid_view_filled": "static const", + "field:grid_view": "static const", + "field:guitar_filled": "static const", + "field:guitar": "static const", + "field:hamburger_filled": "static const", + "field:hamburger": "static const", + "field:happy_filled": "static const", + "field:happy": "static const", + "field:hard_disk_storage_filled": "static const", + "field:hard_disk_storage": "static const", + "field:hard_drive_filled": "static const", + "field:hard_drive": "static const", + "field:hashtag": "static const", + "field:hd_filled": "static const", + "field:hd": "static const", + "field:heart_filled": "static const", + "field:heart": "static const", + "field:help_circle_filled": "static const", + "field:help_circle": "static const", + "field:help_rectangle_filled": "static const", + "field:help_rectangle": "static const", + "field:help": "static const", + "field:highlight_1_filled": "static const", + "field:highlight_1": "static const", + "field:highlight": "static const", + "field:history_setting": "static const", + "field:history": "static const", + "field:home_filled": "static const", + "field:home": "static const", + "field:horizontal_filled": "static const", + "field:horizontal": "static const", + "field:hospital_1_filled": "static const", + "field:hospital_1": "static const", + "field:hospital_filled": "static const", + "field:hospital": "static const", + "field:hotspot_wave_filled": "static const", + "field:hotspot_wave": "static const", + "field:hourglass_filled": "static const", + "field:hourglass": "static const", + "field:houses_1_filled": "static const", + "field:houses_1": "static const", + "field:houses_2_filled": "static const", + "field:houses_2": "static const", + "field:houses_filled": "static const", + "field:houses": "static const", + "field:html5_filled": "static const", + "field:html5": "static const", + "field:https_filled": "static const", + "field:https": "static const", + "field:ice_cream_filled": "static const", + "field:ice_cream": "static const", + "field:icon_filled": "static const", + "field:icon": "static const", + "field:image_1_filled": "static const", + "field:image_1": "static const", + "field:image_add_filled": "static const", + "field:image_add": "static const", + "field:image_edit_filled": "static const", + "field:image_edit": "static const", + "field:image_error_filled": "static const", + "field:image_error": "static const", + "field:image_filled": "static const", + "field:image_off_filled": "static const", + "field:image_off": "static const", + "field:image_search_filled": "static const", + "field:image_search": "static const", + "field:image": "static const", + "field:indent_left": "static const", + "field:indent_right": "static const", + "field:indicator_filled": "static const", + "field:indicator": "static const", + "field:info_circle_filled": "static const", + "field:info_circle": "static const", + "field:ink_filled": "static const", + "field:ink": "static const", + "field:install_desktop_filled": "static const", + "field:install_desktop": "static const", + "field:install_filled": "static const", + "field:install_mobile_filled": "static const", + "field:install_mobile": "static const", + "field:install": "static const", + "field:institution_checked_filled": "static const", + "field:institution_checked": "static const", + "field:institution_filled": "static const", + "field:institution": "static const", + "field:internet_filled": "static const", + "field:internet": "static const", + "field:ipod_filled": "static const", + "field:ipod": "static const", + "field:joyful_filled": "static const", + "field:joyful": "static const", + "field:jump_double": "static const", + "field:jump_off": "static const", + "field:jump": "static const", + "field:key_filled": "static const", + "field:key": "static const", + "field:keyboard_filled": "static const", + "field:keyboard": "static const", + "field:laptop_filled": "static const", + "field:laptop": "static const", + "field:layers_filled": "static const", + "field:layers": "static const", + "field:layout_filled": "static const", + "field:layout": "static const", + "field:leaderboard_filled": "static const", + "field:leaderboard": "static const", + "field:lemon_filled": "static const", + "field:lemon_slice_filled": "static const", + "field:lemon_slice": "static const", + "field:lemon": "static const", + "field:less_than_or_equal": "static const", + "field:less_than": "static const", + "field:letters_a": "static const", + "field:letters_b": "static const", + "field:letters_c": "static const", + "field:letters_d": "static const", + "field:letters_e": "static const", + "field:letters_f": "static const", + "field:letters_g": "static const", + "field:letters_h": "static const", + "field:letters_i": "static const", + "field:letters_j": "static const", + "field:letters_k": "static const", + "field:letters_l": "static const", + "field:letters_m": "static const", + "field:letters_n": "static const", + "field:letters_o": "static const", + "field:letters_p": "static const", + "field:letters_q": "static const", + "field:letters_r": "static const", + "field:letters_s": "static const", + "field:letters_t": "static const", + "field:letters_u": "static const", + "field:letters_v": "static const", + "field:letters_w": "static const", + "field:letters_x": "static const", + "field:letters_y": "static const", + "field:letters_z": "static const", + "field:lightbulb_circle_filled": "static const", + "field:lightbulb_circle": "static const", + "field:lightbulb_filled": "static const", + "field:lightbulb": "static const", + "field:lighthouse_1_filled": "static const", + "field:lighthouse_1": "static const", + "field:lighthouse_2_filled": "static const", + "field:lighthouse_2": "static const", + "field:lighthouse_filled": "static const", + "field:lighthouse": "static const", + "field:lighting_circle_filled": "static const", + "field:lighting_circle": "static const", + "field:line_height": "static const", + "field:link_1": "static const", + "field:link_unlink": "static const", + "field:link": "static const", + "field:liquor_filled": "static const", + "field:liquor": "static const", + "field:list_numbered": "static const", + "field:list": "static const", + "field:load": "static const", + "field:loading": "static const", + "field:location_1_filled": "static const", + "field:location_1": "static const", + "field:location_enlargement_filled": "static const", + "field:location_enlargement": "static const", + "field:location_error_filled": "static const", + "field:location_error": "static const", + "field:location_filled": "static const", + "field:location_parking_place_filled": "static const", + "field:location_parking_place": "static const", + "field:location_reduction_filled": "static const", + "field:location_reduction": "static const", + "field:location_setting_filled": "static const", + "field:location_setting": "static const", + "field:location": "static const", + "field:lock_off_filled": "static const", + "field:lock_off": "static const", + "field:lock_on_filled": "static const", + "field:lock_on": "static const", + "field:lock_time_filled": "static const", + "field:lock_time": "static const", + "field:login": "static const", + "field:logo_adobe_illustrate_filled": "static const", + "field:logo_adobe_illustrate": "static const", + "field:logo_adobe_lightroom_filled": "static const", + "field:logo_adobe_lightroom": "static const", + "field:logo_adobe_photoshop_filled": "static const", + "field:logo_adobe_photoshop": "static const", + "field:logo_android_filled": "static const", + "field:logo_android": "static const", + "field:logo_apple_filled": "static const", + "field:logo_apple": "static const", + "field:logo_behance": "static const", + "field:logo_chrome_filled": "static const", + "field:logo_chrome": "static const", + "field:logo_cinema4d_filled": "static const", + "field:logo_cinema4d": "static const", + "field:logo_codepen": "static const", + "field:logo_codesandbox": "static const", + "field:logo_dribbble_filled": "static const", + "field:logo_dribbble": "static const", + "field:logo_facebook_filled": "static const", + "field:logo_facebook": "static const", + "field:logo_figma_filled": "static const", + "field:logo_figma": "static const", + "field:logo_framer_filled": "static const", + "field:logo_framer": "static const", + "field:logo_github_filled": "static const", + "field:logo_github": "static const", + "field:logo_gitlab_filled": "static const", + "field:logo_gitlab": "static const", + "field:logo_ie_filled": "static const", + "field:logo_ie": "static const", + "field:logo_instagram_filled": "static const", + "field:logo_instagram": "static const", + "field:logo_qq_filled": "static const", + "field:logo_qq": "static const", + "field:logo_twitter_filled": "static const", + "field:logo_twitter": "static const", + "field:logo_wechat_stroke_filled": "static const", + "field:logo_wechat_stroke": "static const", + "field:logo_wechatpay_filled": "static const", + "field:logo_wechatpay": "static const", + "field:logo_wecom_filled": "static const", + "field:logo_wecom": "static const", + "field:logo_windows_filled": "static const", + "field:logo_windows": "static const", + "field:logo_youtube_filled": "static const", + "field:logo_youtube": "static const", + "field:logout": "static const", + "field:look_around_filled": "static const", + "field:look_around": "static const", + "field:loudspeaker_filled": "static const", + "field:loudspeaker": "static const", + "field:mail_filled": "static const", + "field:mail": "static const", + "field:map_3d_filled": "static const", + "field:map_3d": "static const", + "field:map_add_filled": "static const", + "field:map_add": "static const", + "field:map_aiming_filled": "static const", + "field:map_aiming": "static const", + "field:map_blocked_filled": "static const", + "field:map_blocked": "static const", + "field:map_bubble_filled": "static const", + "field:map_bubble": "static const", + "field:map_cancel_filled": "static const", + "field:map_cancel": "static const", + "field:map_chat_filled": "static const", + "field:map_chat": "static const", + "field:map_checked_filled": "static const", + "field:map_checked": "static const", + "field:map_collection_filled": "static const", + "field:map_collection": "static const", + "field:map_connection_filled": "static const", + "field:map_connection": "static const", + "field:map_distance_filled": "static const", + "field:map_distance": "static const", + "field:map_double_filled": "static const", + "field:map_double": "static const", + "field:map_edit_filled": "static const", + "field:map_edit": "static const", + "field:map_filled": "static const", + "field:map_grid_filled": "static const", + "field:map_grid": "static const", + "field:map_information_1_filled": "static const", + "field:map_information_1": "static const", + "field:map_information_2_filled": "static const", + "field:map_information_2": "static const", + "field:map_information_filled": "static const", + "field:map_information": "static const", + "field:map_location_filled": "static const", + "field:map_location": "static const", + "field:map_locked_filled": "static const", + "field:map_locked": "static const", + "field:map_marked_filled": "static const", + "field:map_marked": "static const", + "field:map_navigation_filled": "static const", + "field:map_navigation": "static const", + "field:map_outline_filled": "static const", + "field:map_outline": "static const", + "field:map_route_planning_filled": "static const", + "field:map_route_planning": "static const", + "field:map_ruler_filled": "static const", + "field:map_ruler": "static const", + "field:map_safety_filled": "static const", + "field:map_safety": "static const", + "field:map_search_1_filled": "static const", + "field:map_search_1": "static const", + "field:map_search_filled": "static const", + "field:map_search": "static const", + "field:map_setting_filled": "static const", + "field:map_setting": "static const", + "field:map_unlocked_filled": "static const", + "field:map_unlocked": "static const", + "field:map": "static const", + "field:mark_as_unread_filled": "static const", + "field:mark_as_unread": "static const", + "field:markup_filled": "static const", + "field:markup": "static const", + "field:mathematics_filled": "static const", + "field:mathematics": "static const", + "field:measurement_1_filled": "static const", + "field:measurement_1": "static const", + "field:measurement_2_filled": "static const", + "field:measurement_2": "static const", + "field:measurement_filled": "static const", + "field:measurement": "static const", + "field:meat_pepper_filled": "static const", + "field:meat_pepper": "static const", + "field:media_library_filled": "static const", + "field:media_library": "static const", + "field:member_filled": "static const", + "field:member": "static const", + "field:menu_application": "static const", + "field:menu_filled": "static const", + "field:menu_fold": "static const", + "field:menu_unfold": "static const", + "field:menu": "static const", + "field:merge_cells_filled": "static const", + "field:merge_cells": "static const", + "field:microphone_1_filled": "static const", + "field:microphone_1": "static const", + "field:microphone_2_filled": "static const", + "field:microphone_2": "static const", + "field:microphone_filled": "static const", + "field:microphone": "static const", + "field:milk_filled": "static const", + "field:milk": "static const", + "field:minus_circle_filled": "static const", + "field:minus_circle": "static const", + "field:minus_rectangle_filled": "static const", + "field:minus_rectangle": "static const", + "field:minus": "static const", + "field:mirror_filled": "static const", + "field:mirror": "static const", + "field:mobile_blocked_filled": "static const", + "field:mobile_blocked": "static const", + "field:mobile_filled": "static const", + "field:mobile_list_filled": "static const", + "field:mobile_list": "static const", + "field:mobile_navigation_filled": "static const", + "field:mobile_navigation": "static const", + "field:mobile_shortcut_filled": "static const", + "field:mobile_shortcut": "static const", + "field:mobile_vibrate_filled": "static const", + "field:mobile_vibrate": "static const", + "field:mobile": "static const", + "field:mode_dark_filled": "static const", + "field:mode_dark": "static const", + "field:mode_light_filled": "static const", + "field:mode_light": "static const", + "field:module_filled": "static const", + "field:module": "static const", + "field:money_filled": "static const", + "field:money": "static const", + "field:monument_filled": "static const", + "field:monument": "static const", + "field:moon_fall_filled": "static const", + "field:moon_fall": "static const", + "field:moon_filled": "static const", + "field:moon_rising_filled": "static const", + "field:moon_rising": "static const", + "field:moon": "static const", + "field:more": "static const", + "field:mosque_1_filled": "static const", + "field:mosque_1": "static const", + "field:mosque_filled": "static const", + "field:mosque": "static const", + "field:mouse_filled": "static const", + "field:mouse": "static const", + "field:move_1": "static const", + "field:move": "static const", + "field:movie_clapper_filled": "static const", + "field:movie_clapper": "static const", + "field:multiply": "static const", + "field:museum_1_filled": "static const", + "field:museum_1": "static const", + "field:museum_2_filled": "static const", + "field:museum_2": "static const", + "field:museum_filled": "static const", + "field:museum": "static const", + "field:mushroom_1_filled": "static const", + "field:mushroom_1": "static const", + "field:mushroom_filled": "static const", + "field:mushroom": "static const", + "field:music_1_filled": "static const", + "field:music_1": "static const", + "field:music_2_filled": "static const", + "field:music_2": "static const", + "field:music_filled": "static const", + "field:music_rectangle_add_filled": "static const", + "field:music_rectangle_add": "static const", + "field:music": "static const", + "field:navigation_arrow_filled": "static const", + "field:navigation_arrow": "static const", + "field:next_filled": "static const", + "field:next": "static const", + "field:no_expression_filled": "static const", + "field:no_expression": "static const", + "field:noodle_filled": "static const", + "field:noodle": "static const", + "field:notification_add_filled": "static const", + "field:notification_add": "static const", + "field:notification_circle_filled": "static const", + "field:notification_circle": "static const", + "field:notification_error_filled": "static const", + "field:notification_error": "static const", + "field:notification_filled": "static const", + "field:notification": "static const", + "field:numbers_0_1": "static const", + "field:numbers_0": "static const", + "field:numbers_1_1": "static const", + "field:numbers_1": "static const", + "field:numbers_2_1": "static const", + "field:numbers_2": "static const", + "field:numbers_3_1": "static const", + "field:numbers_3": "static const", + "field:numbers_4_1": "static const", + "field:numbers_4": "static const", + "field:numbers_5_1": "static const", + "field:numbers_5": "static const", + "field:numbers_6_1": "static const", + "field:numbers_6": "static const", + "field:numbers_7_1": "static const", + "field:numbers_7": "static const", + "field:numbers_8_1": "static const", + "field:numbers_8": "static const", + "field:numbers_9_1": "static const", + "field:numbers_9": "static const", + "field:nut_filled": "static const", + "field:nut": "static const", + "field:object_storage": "static const", + "field:open_mouth_filled": "static const", + "field:open_mouth": "static const", + "field:opera_filled": "static const", + "field:opera": "static const", + "field:order_adjustment_column": "static const", + "field:order_ascending": "static const", + "field:order_descending": "static const", + "field:outbox_filled": "static const", + "field:outbox": "static const", + "field:page_first": "static const", + "field:page_head_filled": "static const", + "field:page_head": "static const", + "field:page_last": "static const", + "field:palace_1_filled": "static const", + "field:palace_1": "static const", + "field:palace_2_filled": "static const", + "field:palace_2": "static const", + "field:palace_3_filled": "static const", + "field:palace_3": "static const", + "field:palace_4_filled": "static const", + "field:palace_4": "static const", + "field:palace_filled": "static const", + "field:palace": "static const", + "field:palette_1_filled": "static const", + "field:palette_1": "static const", + "field:palette_filled": "static const", + "field:palette": "static const", + "field:panorama_horizontal_filled": "static const", + "field:panorama_horizontal": "static const", + "field:panorama_vertical_filled": "static const", + "field:panorama_vertical": "static const", + "field:pantone_filled": "static const", + "field:pantone": "static const", + "field:parabola": "static const", + "field:parentheses": "static const", + "field:paste_filled": "static const", + "field:paste": "static const", + "field:patio_filled": "static const", + "field:patio": "static const", + "field:pause_circle_filled": "static const", + "field:pause_circle_stroke_filled": "static const", + "field:pause_circle_stroke": "static const", + "field:pause_circle": "static const", + "field:pause": "static const", + "field:pea_filled": "static const", + "field:pea": "static const", + "field:peach_filled": "static const", + "field:peach": "static const", + "field:pear_filled": "static const", + "field:pear": "static const", + "field:pearl_of_the_orient_filled": "static const", + "field:pearl_of_the_orient": "static const", + "field:pen_ball_filled": "static const", + "field:pen_ball": "static const", + "field:pen_brush_filled": "static const", + "field:pen_brush": "static const", + "field:pen_filled": "static const", + "field:pen_mark_filled": "static const", + "field:pen_mark": "static const", + "field:pen_quill_filled": "static const", + "field:pen_quill": "static const", + "field:pen": "static const", + "field:pending_filled": "static const", + "field:pending": "static const", + "field:percent": "static const", + "field:personal_information_filled": "static const", + "field:personal_information": "static const", + "field:phone_locked_filled": "static const", + "field:phone_locked": "static const", + "field:phone_search_filled": "static const", + "field:phone_search": "static const", + "field:pi": "static const", + "field:piano_filled": "static const", + "field:piano": "static const", + "field:pin_filled": "static const", + "field:pin": "static const", + "field:play_circle_filled": "static const", + "field:play_circle_stroke_add_filled": "static const", + "field:play_circle_stroke_add": "static const", + "field:play_circle_stroke_filled": "static const", + "field:play_circle_stroke": "static const", + "field:play_circle": "static const", + "field:play_demo_filled": "static const", + "field:play_demo": "static const", + "field:play_rectangle_filled": "static const", + "field:play_rectangle": "static const", + "field:play": "static const", + "field:plus": "static const", + "field:popsicle_filled": "static const", + "field:popsicle": "static const", + "field:portrait_filled": "static const", + "field:portrait": "static const", + "field:pout_filled": "static const", + "field:pout": "static const", + "field:poweroff": "static const", + "field:precise_monitor": "static const", + "field:previous_filled": "static const", + "field:previous": "static const", + "field:print_filled": "static const", + "field:print": "static const", + "field:pumpkin_filled": "static const", + "field:pumpkin": "static const", + "field:pyramid_filled": "static const", + "field:pyramid_maya_filled": "static const", + "field:pyramid_maya": "static const", + "field:pyramid": "static const", + "field:qrcode": "static const", + "field:quadratic": "static const", + "field:questionnaire_double_filled": "static const", + "field:questionnaire_double": "static const", + "field:questionnaire_filled": "static const", + "field:questionnaire": "static const", + "field:queue_filled": "static const", + "field:queue": "static const", + "field:radar": "static const", + "field:radio_1_filled": "static const", + "field:radio_1": "static const", + "field:radio_2_filled": "static const", + "field:radio_2": "static const", + "field:radish_filled": "static const", + "field:radish": "static const", + "field:rain_heavy": "static const", + "field:rain_light_filled": "static const", + "field:rain_light": "static const", + "field:rain_medium": "static const", + "field:rainbow": "static const", + "field:rectangle_filled": "static const", + "field:rectangle": "static const", + "field:refresh": "static const", + "field:relation": "static const", + "field:relativity_filled": "static const", + "field:relativity": "static const", + "field:remote_wave_filled": "static const", + "field:remote_wave": "static const", + "field:remove": "static const", + "field:replay_filled": "static const", + "field:replay": "static const", + "field:rice_ball_filled": "static const", + "field:rice_ball": "static const", + "field:rice_filled": "static const", + "field:rice": "static const", + "field:roast_filled": "static const", + "field:roast": "static const", + "field:rocket_filled": "static const", + "field:rocket": "static const", + "field:rollback": "static const", + "field:rollfront": "static const", + "field:root_list_filled": "static const", + "field:root_list": "static const", + "field:rotate_locked_filled": "static const", + "field:rotate_locked": "static const", + "field:rotate": "static const", + "field:rotation": "static const", + "field:round_filled": "static const", + "field:round": "static const", + "field:router_wave_filled": "static const", + "field:router_wave": "static const", + "field:rss": "static const", + "field:ruler_filled": "static const", + "field:ruler": "static const", + "field:sailing_hotel_filled": "static const", + "field:sailing_hotel": "static const", + "field:sandwich_filled": "static const", + "field:sandwich": "static const", + "field:saturation_filled": "static const", + "field:saturation": "static const", + "field:sausage_filled": "static const", + "field:sausage": "static const", + "field:save_filled": "static const", + "field:save": "static const", + "field:saving_pot_filled": "static const", + "field:saving_pot": "static const", + "field:scan": "static const", + "field:screen_4k_filled": "static const", + "field:screen_4k": "static const", + "field:screencast_filled": "static const", + "field:screencast": "static const", + "field:screenshot": "static const", + "field:scroll_bar_filled": "static const", + "field:scroll_bar": "static const", + "field:sd_card_1_filled": "static const", + "field:sd_card_1": "static const", + "field:sd_card_filled": "static const", + "field:sd_card": "static const", + "field:search_error_filled": "static const", + "field:search_error": "static const", + "field:search_filled": "static const", + "field:search": "static const", + "field:secured_filled": "static const", + "field:secured": "static const", + "field:send_cancel_filled": "static const", + "field:send_cancel": "static const", + "field:send_filled": "static const", + "field:send": "static const", + "field:sensors_1": "static const", + "field:sensors_2": "static const", + "field:sensors_off": "static const", + "field:sensors": "static const", + "field:sequence_filled": "static const", + "field:sequence": "static const", + "field:serenity_filled": "static const", + "field:serenity": "static const", + "field:server_filled": "static const", + "field:server": "static const", + "field:service_filled": "static const", + "field:service": "static const", + "field:setting_1_filled": "static const", + "field:setting_1": "static const", + "field:setting_filled": "static const", + "field:setting": "static const", + "field:share_1_filled": "static const", + "field:share_1": "static const", + "field:share_filled": "static const", + "field:share": "static const", + "field:sharpness_filled": "static const", + "field:sharpness": "static const", + "field:shield_error_filled": "static const", + "field:shield_error": "static const", + "field:shimen_filled": "static const", + "field:shimen": "static const", + "field:shop_1_filled": "static const", + "field:shop_1": "static const", + "field:shop_2_filled": "static const", + "field:shop_2": "static const", + "field:shop_3_filled": "static const", + "field:shop_3": "static const", + "field:shop_4_filled": "static const", + "field:shop_4": "static const", + "field:shop_5_filled": "static const", + "field:shop_5": "static const", + "field:shop_filled": "static const", + "field:shop": "static const", + "field:shrimp_filled": "static const", + "field:shrimp": "static const", + "field:shrink_horizontal": "static const", + "field:shrink_vertical": "static const", + "field:shutter_filled": "static const", + "field:shutter": "static const", + "field:shutup_filled": "static const", + "field:shutup": "static const", + "field:sim_card_1_filled": "static const", + "field:sim_card_1": "static const", + "field:sim_card_2_filled": "static const", + "field:sim_card_2": "static const", + "field:sim_card_filled": "static const", + "field:sim_card": "static const", + "field:sinister_smile_filled": "static const", + "field:sinister_smile": "static const", + "field:sip_filled": "static const", + "field:sip": "static const", + "field:sitemap_filled": "static const", + "field:sitemap": "static const", + "field:slash": "static const", + "field:sleep_filled": "static const", + "field:sleep": "static const", + "field:slice_filled": "static const", + "field:slice": "static const", + "field:slideshow_filled": "static const", + "field:slideshow": "static const", + "field:smile_filled": "static const", + "field:smile": "static const", + "field:sneer_filled": "static const", + "field:sneer": "static const", + "field:snowflake": "static const", + "field:sonic": "static const", + "field:sound_down_filled": "static const", + "field:sound_down": "static const", + "field:sound_filled": "static const", + "field:sound_high_filled": "static const", + "field:sound_high": "static const", + "field:sound_low_filled": "static const", + "field:sound_low": "static const", + "field:sound_mute_1_filled": "static const", + "field:sound_mute_1": "static const", + "field:sound_mute_filled": "static const", + "field:sound_mute": "static const", + "field:sound_up_filled": "static const", + "field:sound_up": "static const", + "field:sound": "static const", + "field:space": "static const", + "field:speechless_1_filled": "static const", + "field:speechless_1": "static const", + "field:speechless_filled": "static const", + "field:speechless": "static const", + "field:star_filled": "static const", + "field:star": "static const", + "field:statue_of_jesus_filled": "static const", + "field:statue_of_jesus": "static const", + "field:sticky_note_filled": "static const", + "field:sticky_note": "static const", + "field:stop_circle_filled": "static const", + "field:stop_circle_stroke_filled": "static const", + "field:stop_circle_stroke": "static const", + "field:stop_circle": "static const", + "field:stop": "static const", + "field:store_filled": "static const", + "field:store": "static const", + "field:street_road_1_filled": "static const", + "field:street_road_1": "static const", + "field:street_road_filled": "static const", + "field:street_road": "static const", + "field:subtitle_filled": "static const", + "field:subtitle": "static const", + "field:subway_line_filled": "static const", + "field:subway_line": "static const", + "field:sum": "static const", + "field:sun_fall_filled": "static const", + "field:sun_fall": "static const", + "field:sun_rising_filled": "static const", + "field:sun_rising": "static const", + "field:sunny_filled": "static const", + "field:sunny": "static const", + "field:support_filled": "static const", + "field:support": "static const", + "field:surprised_1_filled": "static const", + "field:surprised_1": "static const", + "field:surprised_filled": "static const", + "field:surprised": "static const", + "field:swap_left": "static const", + "field:swap_right": "static const", + "field:swap": "static const", + "field:swear_1_filled": "static const", + "field:swear_1": "static const", + "field:swear_2_filled": "static const", + "field:swear_2": "static const", + "field:system_2": "static const", + "field:system_3_filled": "static const", + "field:system_3": "static const", + "field:system_application_filled": "static const", + "field:system_application": "static const", + "field:system_blocked_filled": "static const", + "field:system_blocked": "static const", + "field:system_code_filled": "static const", + "field:system_code": "static const", + "field:system_components_filled": "static const", + "field:system_components": "static const", + "field:system_coordinate_filled": "static const", + "field:system_coordinate": "static const", + "field:system_device_filled": "static const", + "field:system_device": "static const", + "field:system_interface_filled": "static const", + "field:system_interface": "static const", + "field:system_location_filled": "static const", + "field:system_location": "static const", + "field:system_locked_filled": "static const", + "field:system_locked": "static const", + "field:system_log_filled": "static const", + "field:system_log": "static const", + "field:system_marked_filled": "static const", + "field:system_marked": "static const", + "field:system_messages_filled": "static const", + "field:system_messages": "static const", + "field:system_regulation_filled": "static const", + "field:system_regulation": "static const", + "field:system_search_filled": "static const", + "field:system_search": "static const", + "field:system_setting_filled": "static const", + "field:system_setting": "static const", + "field:system_storage_filled": "static const", + "field:system_storage": "static const", + "field:system_sum": "static const", + "field:system_unlocked_filled": "static const", + "field:system_unlocked": "static const", + "field:tab_filled": "static const", + "field:tab": "static const", + "field:table_1_filled": "static const", + "field:table_1": "static const", + "field:table_2_filled": "static const", + "field:table_2": "static const", + "field:table_add_filled": "static const", + "field:table_add": "static const", + "field:table_filled": "static const", + "field:table_split_filled": "static const", + "field:table_split": "static const", + "field:table": "static const", + "field:tag_filled": "static const", + "field:tag": "static const", + "field:tangerinr_filled": "static const", + "field:tangerinr": "static const", + "field:tape_filled": "static const", + "field:tape": "static const", + "field:task_1_filled": "static const", + "field:task_1": "static const", + "field:task_add_1": "static const", + "field:task_add_filled": "static const", + "field:task_add": "static const", + "field:task_checked_1": "static const", + "field:task_checked_filled": "static const", + "field:task_checked": "static const", + "field:task_double_filled": "static const", + "field:task_double": "static const", + "field:task_error_filled": "static const", + "field:task_error": "static const", + "field:task_filled": "static const", + "field:task_location_filled": "static const", + "field:task_location": "static const", + "field:task_marked_filled": "static const", + "field:task_marked": "static const", + "field:task_setting_filled": "static const", + "field:task_setting": "static const", + "field:task_time_filled": "static const", + "field:task_time": "static const", + "field:task_visible_filled": "static const", + "field:task_visible": "static const", + "field:task": "static const", + "field:tea_filled": "static const", + "field:tea": "static const", + "field:teahouse_filled": "static const", + "field:teahouse": "static const", + "field:template_filled": "static const", + "field:template": "static const", + "field:temple_filled": "static const", + "field:temple": "static const", + "field:terminal_rectangle_1_filled": "static const", + "field:terminal_rectangle_1": "static const", + "field:terminal_rectangle_filled": "static const", + "field:terminal_rectangle": "static const", + "field:terminal_window_filled": "static const", + "field:terminal_window": "static const", + "field:terminal": "static const", + "field:textbox_filled": "static const", + "field:textbox": "static const", + "field:textformat_bold": "static const", + "field:textformat_color": "static const", + "field:textformat_italic": "static const", + "field:textformat_strikethrough": "static const", + "field:textformat_underline": "static const", + "field:textformat_wrap": "static const", + "field:theaters_filled": "static const", + "field:theaters": "static const", + "field:thumb_down_1_filled": "static const", + "field:thumb_down_1": "static const", + "field:thumb_down_2_filled": "static const", + "field:thumb_down_2": "static const", + "field:thumb_down_filled": "static const", + "field:thumb_down": "static const", + "field:thumb_up_1_filled": "static const", + "field:thumb_up_1": "static const", + "field:thumb_up_2_filled": "static const", + "field:thumb_up_2": "static const", + "field:thumb_up_filled": "static const", + "field:thumb_up": "static const", + "field:thunder": "static const", + "field:thunderstorm_night_filled": "static const", + "field:thunderstorm_night": "static const", + "field:thunderstorm_sunny_filled": "static const", + "field:thunderstorm_sunny": "static const", + "field:thunderstorm": "static const", + "field:ticket_filled": "static const", + "field:ticket": "static const", + "field:time_filled": "static const", + "field:time": "static const", + "field:tips_double_filled": "static const", + "field:tips_double": "static const", + "field:tips_filled": "static const", + "field:tips": "static const", + "field:tomato_filled": "static const", + "field:tomato": "static const", + "field:tools_circle_filled": "static const", + "field:tools_circle": "static const", + "field:tools_filled": "static const", + "field:tools": "static const", + "field:tornado": "static const", + "field:tower_1_filled": "static const", + "field:tower_1": "static const", + "field:tower_2_filled": "static const", + "field:tower_2": "static const", + "field:tower_3_filled": "static const", + "field:tower_3": "static const", + "field:tower_clock_filled": "static const", + "field:tower_clock": "static const", + "field:tower_filled": "static const", + "field:tower": "static const", + "field:town_filled": "static const", + "field:town": "static const", + "field:traffic_events_filled": "static const", + "field:traffic_events": "static const", + "field:traffic_filled": "static const", + "field:traffic": "static const", + "field:transform_1_filled": "static const", + "field:transform_1": "static const", + "field:transform_2": "static const", + "field:transform_3": "static const", + "field:transform_filled": "static const", + "field:transform": "static const", + "field:translate_1": "static const", + "field:translate": "static const", + "field:tree_round_dot_filled": "static const", + "field:tree_round_dot_vertical_filled": "static const", + "field:tree_round_dot_vertical": "static const", + "field:tree_round_dot": "static const", + "field:tree_square_dot_filled": "static const", + "field:tree_square_dot_vertical_filled": "static const", + "field:tree_square_dot_vertical": "static const", + "field:tree_square_dot": "static const", + "field:trending_down": "static const", + "field:trending_up": "static const", + "field:tv_1_filled": "static const", + "field:tv_1": "static const", + "field:tv_2_filled": "static const", + "field:tv_2": "static const", + "field:tv_filled": "static const", + "field:tv": "static const", + "field:typography_filled": "static const", + "field:typography": "static const", + "field:uncomfortable_1_filled": "static const", + "field:uncomfortable_1": "static const", + "field:uncomfortable_2_filled": "static const", + "field:uncomfortable_2": "static const", + "field:uncomfortable_filled": "static const", + "field:uncomfortable": "static const", + "field:undertake_delivery_filled": "static const", + "field:undertake_delivery": "static const", + "field:undertake_environment_protection_filled": "static const", + "field:undertake_environment_protection": "static const", + "field:undertake_filled": "static const", + "field:undertake_hold_up_filled": "static const", + "field:undertake_hold_up": "static const", + "field:undertake_transaction_filled": "static const", + "field:undertake_transaction": "static const", + "field:undertake": "static const", + "field:unfold_less": "static const", + "field:unfold_more": "static const", + "field:unhappy_1_filled": "static const", + "field:unhappy_1": "static const", + "field:unhappy_filled": "static const", + "field:unhappy": "static const", + "field:uninstall_filled": "static const", + "field:uninstall": "static const", + "field:upload_1": "static const", + "field:upload": "static const", + "field:upscale": "static const", + "field:usb_filled": "static const", + "field:usb": "static const", + "field:user_1_filled": "static const", + "field:user_1": "static const", + "field:user_add_filled": "static const", + "field:user_add": "static const", + "field:user_arrow_down_filled": "static const", + "field:user_arrow_down": "static const", + "field:user_arrow_left_filled": "static const", + "field:user_arrow_left": "static const", + "field:user_arrow_right_filled": "static const", + "field:user_arrow_right": "static const", + "field:user_arrow_up_filled": "static const", + "field:user_arrow_up": "static const", + "field:user_avatar_filled": "static const", + "field:user_avatar": "static const", + "field:user_blocked_filled": "static const", + "field:user_blocked": "static const", + "field:user_business_filled": "static const", + "field:user_business": "static const", + "field:user_checked_1_filled": "static const", + "field:user_checked_1": "static const", + "field:user_checked_filled": "static const", + "field:user_checked": "static const", + "field:user_circle_filled": "static const", + "field:user_circle": "static const", + "field:user_clear_filled": "static const", + "field:user_clear": "static const", + "field:user_error_1_filled": "static const", + "field:user_error_1": "static const", + "field:user_filled": "static const", + "field:user_invisible_filled": "static const", + "field:user_invisible": "static const", + "field:user_list_filled": "static const", + "field:user_list": "static const", + "field:user_locked_filled": "static const", + "field:user_locked": "static const", + "field:user_marked_filled": "static const", + "field:user_marked": "static const", + "field:user_password_filled": "static const", + "field:user_password": "static const", + "field:user_safety_filled": "static const", + "field:user_safety": "static const", + "field:user_search_filled": "static const", + "field:user_search": "static const", + "field:user_setting_filled": "static const", + "field:user_setting": "static const", + "field:user_talk_1_filled": "static const", + "field:user_talk_1": "static const", + "field:user_talk_filled": "static const", + "field:user_talk_off_1_filled": "static const", + "field:user_talk_off_1": "static const", + "field:user_talk": "static const", + "field:user_time_filled": "static const", + "field:user_time": "static const", + "field:user_transmit_filled": "static const", + "field:user_transmit": "static const", + "field:user_unknown_filled": "static const", + "field:user_unknown": "static const", + "field:user_unlocked_filled": "static const", + "field:user_unlocked": "static const", + "field:user_vip_filled": "static const", + "field:user_vip": "static const", + "field:user_visible_filled": "static const", + "field:user_visible": "static const", + "field:user": "static const", + "field:usercase_filled": "static const", + "field:usercase_link_filled": "static const", + "field:usercase_link": "static const", + "field:usercase": "static const", + "field:usergroup_add_filled": "static const", + "field:usergroup_add": "static const", + "field:usergroup_clear_filled": "static const", + "field:usergroup_clear": "static const", + "field:usergroup_filled": "static const", + "field:usergroup": "static const", + "field:vehicle_filled": "static const", + "field:vehicle": "static const", + "field:verified_filled": "static const", + "field:verified": "static const", + "field:verify_filled": "static const", + "field:verify": "static const", + "field:vertical_filled": "static const", + "field:vertical": "static const", + "field:video_camera_1_filled": "static const", + "field:video_camera_1": "static const", + "field:video_camera_2_filled": "static const", + "field:video_camera_2": "static const", + "field:video_camera_3_filled": "static const", + "field:video_camera_3": "static const", + "field:video_camera_dollar_filled": "static const", + "field:video_camera_dollar": "static const", + "field:video_camera_filled": "static const", + "field:video_camera_minus_filled": "static const", + "field:video_camera_minus": "static const", + "field:video_camera_music_filled": "static const", + "field:video_camera_music": "static const", + "field:video_camera_off_filled": "static const", + "field:video_camera_off": "static const", + "field:video_camera": "static const", + "field:video_filled": "static const", + "field:video_library_filled": "static const", + "field:video_library": "static const", + "field:video": "static const", + "field:view_agenda_filled": "static const", + "field:view_agenda": "static const", + "field:view_column": "static const", + "field:view_in_ar_filled": "static const", + "field:view_in_ar": "static const", + "field:view_list": "static const", + "field:view_module_filled": "static const", + "field:view_module": "static const", + "field:visual_recognition_filled": "static const", + "field:visual_recognition": "static const", + "field:wallet_filled": "static const", + "field:wallet": "static const", + "field:watch_filled": "static const", + "field:watch": "static const", + "field:watermelon_filled": "static const", + "field:watermelon": "static const", + "field:wave_bye_filled": "static const", + "field:wave_bye": "static const", + "field:wave_left_filled": "static const", + "field:wave_left": "static const", + "field:wave_right_filled": "static const", + "field:wave_right": "static const", + "field:wealth_1_filled": "static const", + "field:wealth_1": "static const", + "field:wealth_filled": "static const", + "field:wealth": "static const", + "field:widget_filled": "static const", + "field:widget": "static const", + "field:wifi_1_filled": "static const", + "field:wifi_1": "static const", + "field:wifi_off_1_filled": "static const", + "field:wifi_off_1": "static const", + "field:wifi_off": "static const", + "field:wifi": "static const", + "field:window_1_filled": "static const", + "field:window_1": "static const", + "field:window_filled": "static const", + "field:window": "static const", + "field:windy_rain": "static const", + "field:windy": "static const", + "field:wink_filled": "static const", + "field:wink": "static const", + "field:work_filled": "static const", + "field:work_history_filled": "static const", + "field:work_history": "static const", + "field:work_off_filled": "static const", + "field:work_off": "static const", + "field:work": "static const", + "field:wry_smile_filled": "static const", + "field:wry_smile": "static const", + "field:zoom_in_filled": "static const", + "field:zoom_in": "static const", + "field:zoom_out_filled": "static const", + "field:zoom_out": "static const", + "field:all": "static const" + } + }, + "after": null, + "migrationDirection": "TIcons", + "migrationNote": "入口重组,见对应组件;不保证参数/行为兼容" + }, + { + "old": "TDImage", + "candidate": "TImage", + "classification": "declaration-changed", + "before": { + "kind": "class", + "members": { + "constructor:new": "const ({this.imgUrl, Key? key, this.type = TDImageType.roundedSquare, this.errorWidget, this.loadingWidget, this.width, this.height, this.fit, this.frameBuilder, this.loadingBuilder, this.errorBuilder, this.semanticLabel, this.excludeFromSemantics = false, this.color, this.opacity, this.colorBlendMode, this.alignment = Alignment.center, this.repeat = ImageRepeat.noRepeat, this.centerSlice, this.matchTextDirection = false, this.gaplessPlayback = false, this.isAntiAlias = false, this.filterQuality = FilterQuality.low, this.cacheHeight, this.cacheWidth, this.assetUrl, this.imageFile})", + "field:imgUrl": "final String?", + "field:assetUrl": "final String?", + "field:imageFile": "final File?", + "field:type": "final TDImageType", + "field:loadingWidget": "final Widget?", + "field:errorWidget": "final Widget?", + "field:width": "final double?", + "field:height": "final double?", + "field:fit": "final BoxFit?", + "field:frameBuilder": "final ImageFrameBuilder?", + "field:loadingBuilder": "final ImageLoadingBuilder?", + "field:errorBuilder": "final ImageErrorWidgetBuilder?", + "field:color": "final Color?", + "field:opacity": "final Animation?", + "field:filterQuality": "final FilterQuality", + "field:colorBlendMode": "final BlendMode?", + "field:alignment": "final AlignmentGeometry", + "field:repeat": "final ImageRepeat", + "field:centerSlice": "final Rect?", + "field:matchTextDirection": "final bool", + "field:gaplessPlayback": "final bool", + "field:semanticLabel": "final String?", + "field:excludeFromSemantics": "final bool", + "field:isAntiAlias": "final bool", + "field:cacheHeight": "final int?", + "field:cacheWidth": "final int?", + "method:createState": "State createState ()" + } + }, + "after": { + "kind": "class", + "members": { + "constructor:new": "const ({super.key, this.src, this.imageFile, this.shape = TImageShape.square, this.errorWidget, this.loadingWidget, this.width, this.height, this.fit = BoxFit.fill, this.frameBuilder, this.loadingBuilder, this.errorBuilder, this.onLoad, this.onError, this.semanticLabel, this.excludeFromSemantics = false, this.cacheWidth, this.cacheHeight, this.filterQuality = FilterQuality.low, this.alignment = Alignment.center, this.repeat = ImageRepeat.noRepeat, this.onTap})", + "field:src": "final String?", + "field:imageFile": "final File?", + "field:shape": "final TImageShape", + "field:errorWidget": "final Widget?", + "field:loadingWidget": "final Widget?", + "field:width": "final double?", + "field:height": "final double?", + "field:fit": "final BoxFit", + "field:frameBuilder": "final ImageFrameBuilder?", + "field:loadingBuilder": "final ImageLoadingBuilder?", + "field:errorBuilder": "final ImageErrorWidgetBuilder?", + "field:onLoad": "final VoidCallback?", + "field:onError": "final ImageErrorListener?", + "field:semanticLabel": "final String?", + "field:excludeFromSemantics": "final bool", + "field:cacheWidth": "final int?", + "field:cacheHeight": "final int?", + "field:filterQuality": "final FilterQuality", + "field:alignment": "final AlignmentGeometry", + "field:repeat": "final ImageRepeat", + "field:onTap": "final GestureTapCallback?", + "method:build": "Widget build (BuildContext context)" + } + }, + "migrationDirection": "TImage", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDImageDialog", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "constructor:new": "const ({Key? key, required this.image, this.imagePosition = TDDialogImagePosition.top, this.backgroundColor, this.radius = 12.0, this.title, this.titleColor, this.titleAlignment, this.contentWidget, this.content, this.contentColor, this.leftBtn, this.rightBtn, this.showCloseButton, this.padding, this.buttonWidget})", + "field:backgroundColor": "final Color?", + "field:radius": "final double", + "field:title": "final String?", + "field:titleColor": "final Color?", + "field:titleAlignment": "final AlignmentGeometry?", + "field:contentWidget": "final Widget?", + "field:content": "final String?", + "field:contentColor": "final Color?", + "field:leftBtn": "final TDDialogButtonOptions?", + "field:rightBtn": "final TDDialogButtonOptions?", + "field:image": "final Image", + "field:imagePosition": "final TDDialogImagePosition?", + "field:showCloseButton": "final bool?", + "field:padding": "final EdgeInsets?", + "field:buttonWidget": "final Widget?", + "method:build": "Widget build (BuildContext context)" + } + }, + "after": null, + "migrationDirection": "TImageViewer", + "migrationNote": "入口重组,见对应组件;不保证参数/行为兼容" + }, + { + "old": "TDImageType", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "enum", + "members": { + "value:clip": "clip", + "value:fitHeight": "fitHeight", + "value:fitWidth": "fitWidth", + "value:stretch": "stretch", + "value:square": "square", + "value:roundedSquare": "roundedSquare", + "value:circle": "circle" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDImageViewer", + "candidate": "TImageViewer", + "classification": "declaration-changed", + "before": { + "kind": "class", + "members": { + "method:showImageViewer": "static void showImageViewer ({required BuildContext context, required List images, List? labels, bool? closeBtn = true, bool? deleteBtn = false, bool? showIndex = false, bool? loop = false, bool? autoplay = false, int? duration, Color? bgColor, Color? navBarBgColor, Color? iconColor, TextStyle? labelStyle, TextStyle? indexStyle, Color? modalBarrierColor, bool? barrierDismissible, int? defaultIndex, double? width, double? height, OnIndexChange? onIndexChange, OnClose? onClose, OnDelete? onDelete, bool? ignoreDeleteError, OnImageTap? onTap, OnLongPress? onLongPress, LeftItemBuilder? leftItemBuilder, RightItemBuilder? rightItemBuilder})" + } + }, + "after": { + "kind": "class", + "members": { + "method:show": "static Future show ({required BuildContext context, required List> images, List? labels, int initialIndex = 0, bool showClose = true, bool showDelete = false, bool showIndex = true, bool loop = false, bool autoplay = false, Duration autoplayInterval = const Duration(seconds: 3), ValueChanged? onIndexChanged, ValueChanged? onDelete, ValueChanged? onTap, ValueChanged? onLongPress, TImageViewerItemBuilder? leadingBuilder, TImageViewerItemBuilder? trailingBuilder})" + } + }, + "migrationDirection": "TImageViewer", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDImageViewerWidget", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "constructor:new": "const ({Key? key, this.closeBtn, this.deleteBtn, required this.images, this.labels, this.showIndex, this.loop, this.autoplay, this.duration, this.bgColor, this.navBarBgColor, this.iconColor, this.labelStyle, this.indexStyle, this.defaultIndex, this.onIndexChange, this.width, this.height, this.onClose, this.onDelete, this.ignoreDeleteError = false, this.onTap, this.onLongPress, this.leftItemBuilder, this.rightItemBuilder})", + "field:closeBtn": "final bool?", + "field:deleteBtn": "final bool?", + "field:images": "final List", + "field:labels": "final List?", + "field:showIndex": "final bool?", + "field:loop": "final bool?", + "field:autoplay": "final bool?", + "field:duration": "final int?", + "field:bgColor": "final Color?", + "field:navBarBgColor": "final Color?", + "field:iconColor": "final Color?", + "field:labelStyle": "final TextStyle?", + "field:indexStyle": "final TextStyle?", + "field:defaultIndex": "final int?", + "field:onIndexChange": "final OnIndexChange?", + "field:onClose": "final OnClose?", + "field:onDelete": "final OnDelete?", + "field:ignoreDeleteError": "final bool?", + "field:onTap": "final OnImageTap?", + "field:onLongPress": "final OnLongPress?", + "field:width": "final double?", + "field:height": "final double?", + "field:leftItemBuilder": "final LeftItemBuilder?", + "field:rightItemBuilder": "final RightItemBuilder?", + "method:createState": "State createState ()" + } + }, + "after": null, + "migrationDirection": "TImageViewer", + "migrationNote": "入口重组,见对应组件;不保证参数/行为兼容" + }, + { + "old": "TDIndexes", + "candidate": "TIndexes", + "classification": "declaration-changed", + "before": { + "kind": "class", + "members": { + "constructor:new": "const ({Key? key, this.indexList, this.indexListMaxHeight = 0.8, this.sticky = true, this.stickyOffset = 0, this.capsuleTheme = false, this.reverse = false, this.scrollController, this.onChange, this.onSelect, required this.builderContent, this.builderAnchor, this.builderIndex})", + "field:indexList": "final List?", + "field:indexListMaxHeight": "final double?", + "field:sticky": "final bool?", + "field:stickyOffset": "final double?", + "field:capsuleTheme": "final bool?", + "field:reverse": "final bool?", + "field:scrollController": "final ScrollController?", + "field:onChange": "final void Function(String index)?", + "field:onSelect": "final void Function(String index)?", + "field:builderContent": "final Widget? Function(BuildContext context, String index)", + "field:builderAnchor": "final Widget? Function(BuildContext context, String index, bool isPinnedToTop)?", + "field:builderIndex": "final Widget Function(BuildContext context, String index, bool isActive)?", + "method:createState": "_TDIndexesState createState ()" + } + }, + "after": { + "kind": "class", + "members": { + "constructor:new": "const ({Key? key, this.indexList, this.initialIndex, this.useSafeArea = false, this.sticky = true, this.stickyOffset = 0, this.capsuleTheme = false, this.reverse = false, this.scrollController, this.onChanged, this.onSelect, required this.builderContent, this.builderAnchor, this.builderIndex})", + "field:indexList": "final List?", + "field:initialIndex": "final String?", + "field:useSafeArea": "final bool", + "field:sticky": "final bool", + "field:stickyOffset": "final double", + "field:capsuleTheme": "final bool", + "field:reverse": "final bool", + "field:scrollController": "final ScrollController?", + "field:onChanged": "final void Function(String index)?", + "field:onSelect": "final void Function(String index)?", + "field:builderContent": "final Widget? Function(BuildContext context, String index)", + "field:builderAnchor": "final Widget? Function(BuildContext context, String index, bool isPinnedToTop)?", + "field:builderIndex": "final Widget Function(BuildContext context, String index, bool isActive)?", + "method:createState": "_TIndexesState createState ()" + } + }, + "migrationDirection": "TIndexes", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDIndexesAnchor", + "candidate": "TIndexesAnchor", + "classification": "declaration-shape-unchanged", + "before": { + "kind": "class", + "members": { + "constructor:new": "const ({Key? key, required this.sticky, required this.text, required this.capsuleTheme, this.builderAnchor, required this.activeIndex})", + "field:sticky": "final bool", + "field:text": "final String", + "field:capsuleTheme": "final bool", + "field:activeIndex": "final ValueNotifier", + "field:builderAnchor": "final Widget? Function(BuildContext context, String index, bool isPinnedToTop)?", + "method:build": "Widget build (BuildContext context)" + } + }, + "after": { + "kind": "class", + "members": { + "constructor:new": "const ({Key? key, required this.sticky, required this.text, required this.capsuleTheme, this.builderAnchor, required this.activeIndex})", + "field:sticky": "final bool", + "field:text": "final String", + "field:capsuleTheme": "final bool", + "field:activeIndex": "final ValueNotifier", + "field:builderAnchor": "final Widget? Function(BuildContext context, String index, bool isPinnedToTop)?", + "method:build": "Widget build (BuildContext context)" + } + }, + "migrationDirection": "TIndexesAnchor", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDIndexesList", + "candidate": "TIndexesList", + "classification": "declaration-changed", + "before": { + "kind": "class", + "members": { + "constructor:new": "const ({Key? key, required this.indexList, this.indexListMaxHeight = 0.8, required this.activeIndex, required this.onSelect, this.builderIndex})", + "field:indexList": "final List", + "field:indexListMaxHeight": "final double", + "field:activeIndex": "final ValueNotifier", + "field:onSelect": "final void Function(String newIndex, String oldIndex)", + "field:builderIndex": "final Widget Function(BuildContext context, String index, bool isActive)?", + "method:createState": "State createState ()" + } + }, + "after": { + "kind": "class", + "members": { + "constructor:new": "const ({Key? key, required this.indexList, this.indexListMaxHeight = 0.8, required this.activeIndex, required this.onSelect, this.builderIndex})", + "field:indexList": "final List", + "field:indexListMaxHeight": "final double", + "field:activeIndex": "final ValueNotifier", + "field:onSelect": "final void Function(String newIndex, String oldIndex)", + "field:builderIndex": "final Widget Function(BuildContext context, String index, bool isActive)?", + "method:createState": "State createState ()" + } + }, + "migrationDirection": "TIndexesList", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDInput", + "candidate": "TInput", + "classification": "declaration-changed", + "before": { + "kind": "class", + "members": { + "constructor:new": "({Key? key, this.width, this.textStyle, this.backgroundColor, this.decoration, this.leftIcon, this.leftLabel, this.leftLabelStyle, this.leftLabelSpace, this.required, this.readOnly = false, this.autofocus = false, this.obscureText = false, this.onEditingComplete, this.onSubmitted, this.hintText, this.inputType, this.onChanged, this.inputFormatters, this.inputDecoration, this.maxLines = 1, this.focusNode, this.controller, this.cursorColor, this.rightBtn, this.hintTextStyle, this.onBtnTap, this.labelWidget, this.leftInfoWidth, this.leftContentSpace, this.textInputBackgroundColor, this.contentPadding, this.type = TDInputType.normal, this.size = TDInputSize.large, this.maxLength = 500, this.additionInfo = '', this.additionInfoColor, this.textAlign, this.clearIconSize, this.onClearTap, this.needClear = true, this.clearBtnColor, this.contentAlignment = TextAlign.start, this.rightWidget, this.showBottomDivider = true, this.cardStyle, this.cardStyleTopText, this.inputAction, TDInputSpacer? spacer, this.cardStyleBottomText, this.onTapOutside, this.selectionControls, this.contextMenuBuilder, this.enableInteractiveSelection})", + "field:width": "final double?", + "field:backgroundColor": "final Color?", + "field:decoration": "final Decoration?", + "field:leftLabel": "final String?", + "field:leftLabelSpace": "final double?", + "field:leftContentSpace": "final double?", + "field:required": "final bool?", + "field:leftIcon": "final Widget?", + "field:labelWidget": "final Widget?", + "field:readOnly": "final bool", + "field:hintText": "final String?", + "field:inputType": "final TextInputType?", + "field:onChanged": "final ValueChanged?", + "field:inputFormatters": "final List?", + "field:controller": "final TextEditingController?", + "field:maxLines": "final int?", + "field:focusNode": "final FocusNode?", + "field:autofocus": "final bool", + "field:obscureText": "final bool", + "field:onEditingComplete": "final VoidCallback?", + "field:onSubmitted": "final ValueChanged?", + "field:inputDecoration": "final InputDecoration?", + "field:textStyle": "final TextStyle?", + "field:hintTextStyle": "final TextStyle?", + "field:cardStyleTopText": "final String?", + "field:cardStyleBottomText": "final String?", + "field:textInputBackgroundColor": "final Color?", + "field:cursorColor": "final Color?", + "field:clearIconSize": "final double?", + "field:rightBtn": "final Widget?", + "field:onBtnTap": "final GestureTapCallback?", + "field:onClearTap": "final GestureTapCallback?", + "field:needClear": "final bool", + "field:clearBtnColor": "final Color?", + "field:contentPadding": "final EdgeInsetsGeometry?", + "field:type": "final TDInputType", + "field:cardStyle": "final TDCardStyle?", + "field:size": "final TDInputSize", + "field:leftInfoWidth": "final double?", + "field:maxLength": "final int?", + "field:additionInfo": "final String?", + "field:additionInfoColor": "final Color?", + "field:textAlign": "final TextAlign?", + "field:rightWidget": "final Widget?", + "field:showBottomDivider": "final bool", + "field:contentAlignment": "final TextAlign", + "field:leftLabelStyle": "final TextStyle?", + "field:inputAction": "final TextInputAction?", + "field:spacer": "final TDInputSpacer", + "field:onTapOutside": "final TapRegionCallback?", + "field:selectionControls": "final TextSelectionControls?", + "field:contextMenuBuilder": "final EditableTextContextMenuBuilder?", + "field:enableInteractiveSelection": "final bool?", + "method:getInputPadding": "double getInputPadding ()", + "method:buildInputView": "Widget buildInputView (BuildContext context)", + "method:buildNormalInput": "Widget buildNormalInput (BuildContext context, double leftLabelWidth)", + "method:buildTwoLineInput": "Widget buildTwoLineInput (BuildContext context, double leftLabelWidth)", + "method:buildLongTextInput": "Widget buildLongTextInput (BuildContext context)", + "method:buildSpecialInput": "Widget buildSpecialInput (BuildContext context, double leftLabelWidth)", + "method:getTextSize": "Size getTextSize (String text, [TextStyle? style])", + "method:build": "Widget build (BuildContext context)", + "method:buildCardStyleInput": "Widget buildCardStyleInput (BuildContext context, double leftLabelWidth)" + } + }, + "after": { + "kind": "class", + "members": { + "constructor:new": "const ({super.key, this.controller, this.initialValue, this.onChanged, this.onSubmitted, this.onEditingComplete, this.enabled = true, this.readOnly = false, this.hintText, this.prefix, this.suffix, this.clearButtonMode, this.status = TInputStatus.normal, this.borderless = false, this.maxLines = 1, this.minLines, this.maxLength, this.maxCharacter, this.indicator = false, this.autofocus = false, this.focusNode, this.inputType = TextInputType.text, this.inputAction, this.textAlign = TextAlign.start, this.obscureText = false, this.showPasswordToggle = false, this.inputFormatters, this.style, this.cursorColor})", + "field:controller": "final TextEditingController?", + "field:initialValue": "final String?", + "field:onChanged": "final ValueChanged?", + "field:onSubmitted": "final ValueChanged?", + "field:onEditingComplete": "final VoidCallback?", + "field:enabled": "final bool", + "field:readOnly": "final bool", + "field:hintText": "final String?", + "field:prefix": "final Widget?", + "field:suffix": "final Widget?", + "field:clearButtonMode": "final TInputClearButtonMode?", + "field:status": "final TInputStatus", + "field:borderless": "final bool", + "field:maxLines": "final int?", + "field:minLines": "final int?", + "field:maxLength": "final int?", + "field:maxCharacter": "final int?", + "field:indicator": "final bool", + "field:autofocus": "final bool", + "field:focusNode": "final FocusNode?", + "field:inputType": "final TextInputType", + "field:inputAction": "final TextInputAction?", + "field:textAlign": "final TextAlign", + "field:obscureText": "final bool", + "field:showPasswordToggle": "final bool", + "field:inputFormatters": "final List?", + "field:style": "final TextStyle?", + "field:cursorColor": "final Color?", + "method:createState": "State createState ()" + } + }, + "migrationDirection": "TInput", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDInputDialog", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "constructor:new": "const ({Key? key, required this.textEditingController, this.backgroundColor, this.radius = 12.0, this.title, this.titleColor, this.titleAlignment, this.contentWidget, this.content, this.hintText = '', this.contentColor, this.leftBtn, this.rightBtn, this.showCloseButton, this.padding = const EdgeInsets.fromLTRB(24, 32, 24, 0), this.buttonWidget, this.customInputWidget})", + "field:backgroundColor": "final Color?", + "field:radius": "final double", + "field:title": "final String?", + "field:titleColor": "final Color?", + "field:titleAlignment": "final AlignmentGeometry?", + "field:contentWidget": "final Widget?", + "field:content": "final String?", + "field:hintText": "final String?", + "field:contentColor": "final Color?", + "field:textEditingController": "final TextEditingController", + "field:leftBtn": "final TDDialogButtonOptions?", + "field:rightBtn": "final TDDialogButtonOptions?", + "field:showCloseButton": "final bool?", + "field:padding": "final EdgeInsets?", + "field:buttonWidget": "final Widget?", + "field:customInputWidget": "final Widget?", + "method:build": "Widget build (BuildContext context)" + } + }, + "after": null, + "migrationDirection": "TDialog", + "migrationNote": "入口重组,见对应组件;不保证参数/行为兼容" + }, + { + "old": "TDInputSize", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "enum", + "members": { + "value:small": "small", + "value:large": "large" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDInputSpacer", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "constructor:new": "({this.iconLabelSpace, this.labelInputSpace, this.inputRightSpace, this.rightSpace, this.additionInfoSpace})", + "field:iconLabelSpace": "double?", + "field:labelInputSpace": "double?", + "field:inputRightSpace": "double?", + "field:rightSpace": "double?", + "field:additionInfoSpace": "double?", + "constructor:generateDefault": "()" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDInputType", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "enum", + "members": { + "value:normal": "normal", + "value:twoLine": "twoLine", + "value:longText": "longText", + "value:special": "special", + "value:normalMaxTwoLine": "normalMaxTwoLine", + "value:cardStyle": "cardStyle" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDInputView", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "field:readOnly": "final bool", + "field:hintText": "final String?", + "field:inputType": "final TextInputType?", + "field:onChanged": "final ValueChanged?", + "field:inputFormatters": "final List?", + "field:controller": "final TextEditingController?", + "field:maxLines": "final int?", + "field:minLines": "final int?", + "field:maxLength": "final int?", + "field:focusNode": "final FocusNode?", + "field:autofocus": "final bool", + "field:obscureText": "final bool", + "field:onEditingComplete": "final VoidCallback?", + "field:onSubmitted": "final ValueChanged?", + "field:inputDecoration": "final InputDecoration?", + "field:textStyle": "final TextStyle", + "field:hintTextStyle": "final TextStyle?", + "field:textInputBackgroundColor": "final Color?", + "field:cursorColor": "final Color?", + "field:contentPadding": "final EdgeInsetsGeometry", + "field:isCollapsed": "final bool", + "field:textAlign": "final TextAlign?", + "field:inputAction": "final TextInputAction?", + "field:onTapOutside": "final TapRegionCallback?", + "field:selectionControls": "final TextSelectionControls?", + "field:contextMenuBuilder": "final EditableTextContextMenuBuilder?", + "field:enableInteractiveSelection": "final bool?", + "constructor:new": "const ({Key? key, required this.textStyle, this.readOnly = false, this.autofocus = false, this.obscureText = false, this.onEditingComplete, this.onSubmitted, this.hintText = '', this.inputType, this.onChanged, this.inputFormatters, this.inputDecoration, this.maxLines, this.minLines, this.maxLength, this.focusNode, this.hintTextStyle, this.cursorColor, this.textInputBackgroundColor, this.contentPadding = EdgeInsets.zero, this.isCollapsed = false, this.textAlign, this.controller, this.inputAction, this.onTapOutside, this.selectionControls, this.contextMenuBuilder, this.enableInteractiveSelection})", + "method:build": "Widget build (BuildContext context)" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDItemWidget", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "field:content": "final String", + "field:fixedExtentScrollController": "final FixedExtentScrollController", + "field:colIndex": "final int", + "field:index": "final int", + "field:itemHeight": "final double", + "field:itemDistanceCalculator": "final ItemDistanceCalculator?", + "field:itemBuilder": "final ItemBuilderType?", + "constructor:new": "const ({required this.fixedExtentScrollController, required this.colIndex, required this.index, required this.content, required this.itemHeight, this.itemDistanceCalculator, this.itemBuilder, Key? key})", + "method:createState": "_TDItemWidgetState createState ()" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDLabelWidget", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "constructor:new": "const ({super.key})" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDLink", + "candidate": "TLink", + "classification": "declaration-changed", + "before": { + "kind": "class", + "members": { + "constructor:new": "const ({Key? key, required this.label, this.uri, this.prefixIcon, this.suffixIcon, this.linkClick, this.type = TDLinkType.basic, this.style = TDLinkStyle.defaultStyle, this.state = TDLinkState.normal, this.size = TDLinkSize.medium, this.color, this.iconSize, this.fontSize, this.leftGapWithIcon, this.rightGapWithIcon})", + "field:label": "final String", + "field:uri": "final Uri?", + "field:type": "final TDLinkType", + "field:style": "final TDLinkStyle", + "field:state": "final TDLinkState", + "field:size": "final TDLinkSize", + "field:prefixIcon": "final Icon?", + "field:suffixIcon": "final Icon?", + "field:color": "final Color?", + "field:iconSize": "final double?", + "field:fontSize": "final double?", + "field:leftGapWithIcon": "final double?", + "field:rightGapWithIcon": "final double?", + "field:linkClick": "final LinkClick?", + "method:build": "Widget build (BuildContext context)", + "method:getConfiguration": "TDLinkConfiguration? getConfiguration (BuildContext context)", + "method:getColor": "Color getColor (BuildContext context)" + } + }, + "after": { + "kind": "class", + "members": { + "constructor:new": "const ({super.key, this.child, this.prefixIcon, this.suffixIcon, this.underline, this.colorPreset, this.size, this.onPressed, this.semanticLabel, this.tooltip})", + "field:child": "final Widget?", + "field:prefixIcon": "final Widget?", + "field:suffixIcon": "final Widget?", + "field:underline": "final bool?", + "field:colorPreset": "final TLinkColorPreset?", + "field:size": "final TLinkSize?", + "field:onPressed": "final VoidCallback?", + "field:semanticLabel": "final String?", + "field:tooltip": "final String?", + "method:build": "Widget build (BuildContext context)" + } + }, + "migrationDirection": "TLink", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDLinkConfiguration", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "field:linkClick": "final LinkClick?", + "constructor:new": "const ({this.linkClick, Key? key, required Widget child})", + "method:updateShouldNotify": "bool updateShouldNotify (covariant TDLinkConfiguration oldWidget)" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDLinkSize", + "candidate": "TLinkSize", + "classification": "declaration-shape-unchanged", + "before": { + "kind": "enum", + "members": { + "value:small": "small", + "value:medium": "medium", + "value:large": "large" + } + }, + "after": { + "kind": "enum", + "members": { + "value:small": "small", + "value:medium": "medium", + "value:large": "large" + } + }, + "migrationDirection": "TLinkSize", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDLinkState", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "enum", + "members": { + "value:normal": "normal", + "value:active": "active", + "value:disabled": "disabled" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDLinkStyle", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "enum", + "members": { + "value:primary": "primary", + "value:defaultStyle": "defaultStyle", + "value:danger": "danger", + "value:warning": "warning", + "value:success": "success" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDLinkType", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "enum", + "members": { + "value:basic": "basic", + "value:withUnderline": "withUnderline", + "value:withPrefixIcon": "withPrefixIcon", + "value:withSuffixIcon": "withSuffixIcon" + } + }, + "after": null, + "migrationDirection": "TLinkColorPreset", + "migrationNote": "入口重组,见对应组件;不保证参数/行为兼容" + }, + { + "old": "TDLoading", + "candidate": "TLoading", + "classification": "declaration-changed", + "before": { + "kind": "class", + "members": { + "constructor:new": "const ({Key? key, required this.size, this.icon = TDLoadingIcon.circle, this.iconColor, this.axis = Axis.vertical, this.text, this.refreshWidget, this.customIcon, this.textColor, this.duration = 2000})", + "field:size": "final TDLoadingSize", + "field:icon": "final TDLoadingIcon?", + "field:iconColor": "final Color?", + "field:text": "final String?", + "field:refreshWidget": "final Widget?", + "field:textColor": "final Color?", + "field:axis": "final Axis", + "field:customIcon": "final Widget?", + "field:duration": "final int", + "method:build": "Widget build (BuildContext context)", + "method:textWidget": "Widget textWidget (BuildContext context)" + } + }, + "after": { + "kind": "class", + "members": { + "constructor:new": "const ({Key? key, this.size = 20, this.icon = TLoadingIcon.circle, this.text, this.customIcon, this.refreshWidget})", + "field:size": "final double", + "field:icon": "final TLoadingIcon?", + "field:text": "final String?", + "field:customIcon": "final Widget?", + "field:refreshWidget": "final Widget?", + "method:build": "Widget build (BuildContext context)" + } + }, + "migrationDirection": "TLoading", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDLoadingController", + "candidate": "TLoadingController", + "classification": "declaration-changed", + "before": { + "kind": "class", + "members": { + "method:show": "static void show (BuildContext context, {Widget? child, TDLoadingSize size = TDLoadingSize.medium, TDLoadingIcon? icon = TDLoadingIcon.circle, Color? iconColor, String? text, Widget? refreshWidget, Color? textColor, Axis axis = Axis.vertical, Widget? customIcon, int duration = 2000})", + "method:dismiss": "static void dismiss ()" + } + }, + "after": { + "kind": "class", + "members": { + "method:show": "static void show (BuildContext context, {Widget? child, double size = 20, TLoadingIcon? icon = TLoadingIcon.circle, String? text, TLoadingThemeData? theme})", + "method:dismiss": "static void dismiss ()" + } + }, + "migrationDirection": "TLoadingController", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDLoadingIcon", + "candidate": "TLoadingIcon", + "classification": "declaration-shape-unchanged", + "before": { + "kind": "enum", + "members": { + "value:circle": "circle", + "value:point": "point", + "value:activity": "activity" + } + }, + "after": { + "kind": "enum", + "members": { + "value:circle": "circle", + "value:point": "point", + "value:activity": "activity" + } + }, + "migrationDirection": "TLoadingIcon", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDLoadingSize", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "enum", + "members": { + "value:small": "small", + "value:medium": "medium", + "value:large": "large" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDMap", + "candidate": "TMap", + "classification": "declaration-changed", + "before": { + "kind": "class", + "members": { + "constructor:new": "({this.factory, this.refs})", + "field:factory": "DefaultMapFactory?", + "field:refs": "TDMap?", + "method:[]": "V? [] (Object? key)", + "method:get": "V? get (Object? key)" + } + }, + "after": { + "kind": "class", + "members": { + "constructor:new": "({this.factory, this.refs})", + "field:factory": "DefaultMapFactory?", + "field:refs": "TMap?", + "method:[]": "V? [] (Object? key)", + "method:get": "V? get (Object? key)" + } + }, + "migrationDirection": "TMap", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDMessage", + "candidate": "TMessage", + "classification": "declaration-changed", + "before": { + "kind": "class", + "members": { + "constructor:new": "const ({Key? key, this.closeBtn, this.content, this.duration = 3000, this.icon = true, this.link, this.marquee, this.offset, this.theme = MessageTheme.info, this.visible = true, this.onCloseBtnClick, this.onDurationEnd, this.onLinkClick})", + "field:content": "final String?", + "field:duration": "final int?", + "field:visible": "final bool?", + "field:icon": "final dynamic", + "field:link": "final dynamic", + "field:closeBtn": "final dynamic", + "field:marquee": "final MessageMarquee?", + "field:offset": "final List?", + "field:theme": "final MessageTheme?", + "field:onCloseBtnClick": "final VoidCallback?", + "field:onDurationEnd": "final VoidCallback?", + "field:onLinkClick": "final VoidCallback?", + "method:createState": "_TDMessageState createState ()", + "method:showMessage": "static void showMessage ({required BuildContext context, String? content, bool? visible, int? duration, dynamic closeBtn, dynamic icon, dynamic link, MessageMarquee? marquee, List? offset, MessageTheme? theme, VoidCallback? onCloseBtnClick, VoidCallback? onDurationEnd, VoidCallback? onLinkClick})" + } + }, + "after": { + "kind": "class", + "members": { + "constructor:new": "const ({super.key, this.content = '', this.duration = const Duration(seconds: 3), this.showIcon = true, this.icon, this.action, this.showCloseButton = false, this.closeButton, this.marquee, this.offset, this.status = TMessageStatus.info, this.onCloseButtonPressed, this.onDurationEnd, this.onDismissed, this.useSafeArea = true})", + "field:content": "final String", + "field:duration": "final Duration?", + "field:showIcon": "final bool", + "field:icon": "final Widget?", + "field:action": "final Widget?", + "field:showCloseButton": "final bool", + "field:closeButton": "final Widget?", + "field:marquee": "final TMessageMarquee?", + "field:offset": "final Offset?", + "field:useSafeArea": "final bool", + "field:status": "final TMessageStatus", + "field:onCloseButtonPressed": "final VoidCallback?", + "field:onDurationEnd": "final VoidCallback?", + "field:onDismissed": "final VoidCallback?", + "method:show": "static TMessageHandle show ({required BuildContext context, String content = '', Duration? duration = const Duration(seconds: 3), bool showIcon = true, Widget? icon, Widget? action, bool showCloseButton = false, Widget? closeButton, TMessageMarquee? marquee, Offset? offset, TMessageStatus status = TMessageStatus.info, VoidCallback? onCloseButtonPressed, VoidCallback? onDurationEnd, VoidCallback? onDismissed, bool useSafeArea = true})", + "method:createState": "State createState ()" + } + }, + "migrationDirection": "TMessage", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDMultiCascader", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "field:title": "final String?", + "field:titleStyle": "final TextStyle?", + "field:theme": "final String?", + "field:subTitles": "final List?", + "field:cascaderHeight": "final double", + "field:initialIndexes": "final List?", + "field:data": "final List", + "field:initialData": "final String?", + "field:backgroundColor": "final Color?", + "field:topRadius": "final double?", + "field:isLetterSort": "final bool", + "field:closeText": "final String?", + "field:onClose": "final Function?", + "field:action": "final TDCascaderAction?", + "field:onChange": "final MultiCascaderCallback", + "constructor:new": "const ({super.key, this.title, this.titleStyle, this.theme, this.subTitles, required this.data, required this.cascaderHeight, this.initialIndexes, this.initialData, this.backgroundColor, this.topRadius, this.closeText, this.isLetterSort = false, this.onClose, this.action, required this.onChange})", + "method:createState": "State createState ()" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDMultiLinkedPicker", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "field:title": "final String?", + "field:onConfirm": "final MultiPickerCallback?", + "field:onCancel": "final MultiPickerCallback?", + "field:onChange": "final MultiPickerCallback?", + "field:selectedData": "final List", + "field:data": "final Map", + "field:columnNum": "final int", + "field:pickerHeight": "final double", + "field:pickerItemCount": "final int", + "field:customSelectWidget": "final Widget?", + "field:rightText": "final String?", + "field:leftText": "final String?", + "field:leftTextStyle": "final TextStyle?", + "field:rightTextStyle": "final TextStyle?", + "field:centerTextStyle": "final TextStyle?", + "field:padding": "final EdgeInsets?", + "field:titleHeight": "final double?", + "field:topPadding": "final double?", + "field:leftPadding": "final double?", + "field:rightPadding": "final double?", + "field:titleDividerColor": "final Color?", + "field:backgroundColor": "final Color?", + "field:topRadius": "final double?", + "field:itemDistanceCalculator": "final ItemDistanceCalculator?", + "field:itemBuilder": "final ItemBuilderType?", + "field:keepSameSelection": "final bool", + "field:header": "final bool", + "constructor:new": "const ({this.title, required this.onConfirm, this.onCancel, this.onChange, required this.selectedData, required this.data, required this.columnNum, this.pickerHeight = 200, this.pickerItemCount = 5, this.customSelectWidget, this.rightText, this.leftText, this.leftTextStyle, this.rightTextStyle, this.centerTextStyle, this.titleHeight, this.topPadding, this.leftPadding, this.rightPadding, this.titleDividerColor, this.backgroundColor, this.topRadius, this.padding, this.itemDistanceCalculator, this.itemBuilder, this.keepSameSelection = false, this.header = true, Key? key})", + "method:createState": "State createState ()" + } + }, + "after": null, + "migrationDirection": "TPicker", + "migrationNote": "入口重组,见对应组件;不保证参数/行为兼容" + }, + { + "old": "TDMultiPicker", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "field:title": "final String?", + "field:onConfirm": "final MultiPickerCallback?", + "field:onCancel": "final MultiPickerCallback?", + "field:onChange": "final MultiPickerCallback?", + "field:data": "final List>", + "field:pickerHeight": "final double", + "field:pickerItemCount": "final int", + "field:customSelectWidget": "final Widget?", + "field:rightText": "final String?", + "field:leftText": "final String?", + "field:leftTextStyle": "final TextStyle?", + "field:rightTextStyle": "final TextStyle?", + "field:centerTextStyle": "final TextStyle?", + "field:titleHeight": "final double?", + "field:topPadding": "final double?", + "field:leftPadding": "final double?", + "field:rightPadding": "final double?", + "field:titleDividerColor": "final Color?", + "field:backgroundColor": "final Color?", + "field:topRadius": "final double?", + "field:itemDistanceCalculator": "final ItemDistanceCalculator?", + "field:padding": "final EdgeInsets?", + "field:initialIndexes": "final List?", + "field:itemBuilder": "final ItemBuilderType?", + "field:header": "final bool", + "constructor:new": "const ({this.title, required this.onConfirm, this.onCancel, this.onChange, required this.data, this.pickerHeight = 200, this.pickerItemCount = 5, this.initialIndexes, this.rightText, this.leftText, this.leftTextStyle, this.rightTextStyle, this.centerTextStyle, this.titleHeight, this.topPadding, this.leftPadding, this.rightPadding, this.titleDividerColor, this.backgroundColor, this.topRadius, this.padding, this.itemDistanceCalculator, this.customSelectWidget, this.itemBuilder, this.header = true, Key? key})", + "method:build": "Widget build (BuildContext context)", + "method:getTitleHeight": "double getTitleHeight ()" + } + }, + "after": null, + "migrationDirection": "TPicker", + "migrationNote": "入口重组,见对应组件;不保证参数/行为兼容" + }, + { + "old": "TDNavBar", + "candidate": "TNavBar", + "classification": "declaration-changed", + "before": { + "kind": "class", + "members": { + "constructor:new": "const ({Key? key, this.leftBarItems, this.rightBarItems, this.titleWidget, this.title, this.titleColor, this.backIconColor, this.titleFont, this.titleFontFamily, this.titleFontWeight = FontWeight.w500, this.centerTitle = true, this.opacity = 1.0, this.backgroundColor, this.titleMargin = 16, this.padding, this.height = 48, this.screenAdaptation = true, this.useDefaultBack = true, this.onBack, this.useBorderStyle = false, this.border, this.belowTitleWidget, this.boxShadow, this.flexibleSpace})", + "field:backIconColor": "final Color?", + "field:leftBarItems": "final List?", + "field:rightBarItems": "final List?", + "field:titleWidget": "final Widget?", + "field:title": "final String?", + "field:titleColor": "final Color?", + "field:titleFont": "final Font?", + "field:titleFontWeight": "final FontWeight?", + "field:titleFontFamily": "final FontFamily?", + "field:centerTitle": "final bool", + "field:opacity": "final double", + "field:backgroundColor": "final Color?", + "field:padding": "final EdgeInsetsGeometry?", + "field:titleMargin": "final double", + "field:height": "final double", + "field:screenAdaptation": "final bool", + "field:useDefaultBack": "final bool", + "field:onBack": "final VoidCallback?", + "field:useBorderStyle": "final bool", + "field:border": "final TDNavBarItemBorder?", + "field:belowTitleWidget": "final Widget?", + "field:boxShadow": "final List?", + "field:flexibleSpace": "final Widget?", + "method:createState": "State createState ()", + "get:preferredSize": "Size preferredSize" + } + }, + "after": { + "kind": "class", + "members": { + "constructor:new": "const ({Key? key, this.title, this.leading, this.actions, this.centerTitle = true, this.useDefaultBack = false, this.onBack, this.belowTitleWidget, this.flexibleSpace, this.height = 48, this.useBorderStyle = false, this.useSafeArea = false})", + "field:title": "final Widget?", + "field:leading": "final List?", + "field:actions": "final List?", + "field:centerTitle": "final bool", + "field:useDefaultBack": "final bool", + "field:onBack": "final VoidCallback?", + "field:belowTitleWidget": "final Widget?", + "field:flexibleSpace": "final Widget?", + "field:height": "final double", + "field:useBorderStyle": "final bool", + "field:useSafeArea": "final bool", + "get:preferredSize": "Size preferredSize", + "method:build": "Widget build (BuildContext context)" + } + }, + "migrationDirection": "TNavBar", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDNavBarItem", + "candidate": "TNavBarItem", + "classification": "declaration-changed", + "before": { + "kind": "class", + "members": { + "field:icon": "IconData?", + "field:iconColor": "Color?", + "field:action": "TDBarItemAction?", + "field:iconSize": "double?", + "field:padding": "EdgeInsetsGeometry?", + "field:iconWidget": "Widget?", + "constructor:new": "({this.icon, this.iconColor, this.action, this.iconSize = 24.0, this.padding, this.iconWidget})", + "method:toWidget": "Widget toWidget (BuildContext context, {bool isLeft = true})" + } + }, + "after": { + "kind": "class", + "members": { + "field:icon": "final IconData?", + "field:iconColor": "final Color?", + "field:onTap": "final VoidCallback?", + "field:iconSize": "final double?", + "field:padding": "final EdgeInsetsGeometry?", + "field:customWidget": "final Widget?", + "constructor:new": "const ({this.icon, this.iconColor, this.onTap, this.iconSize = 24.0, this.padding, this.customWidget})" + } + }, + "migrationDirection": "TNavBarItem", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDNavBarItemBorder", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "field:width": "double", + "field:radius": "double", + "field:color": "Color?", + "field:padding": "EdgeInsetsGeometry?", + "constructor:new": "({this.width = 1.0, this.radius = 22.0, this.color, this.padding})" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDNoOverlayShape", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "constructor:new": "const ()", + "method:getPreferredSize": "Size getPreferredSize (bool isEnabled, bool isDiscrete)", + "method:paint": "void paint (PaintingContext context, Offset center, {required Animation activationAnimation, required Animation enableAnimation, required bool isDiscrete, required TextPainter labelPainter, required RenderBox parentBox, required SliderThemeData sliderTheme, required TextDirection textDirection, required double value, required double textScaleFactor, required Size sizeWithOverflow})" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDNoneIndicator", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "method:createBoxPainter": "BoxPainter createBoxPainter ([VoidCallback? onChanged])" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDNoticeBar", + "candidate": "TNoticeBar", + "classification": "declaration-changed", + "before": { + "kind": "class", + "members": { + "constructor:new": "const ({super.key, this.content, this.context, this.style, this.left, this.right, this.speed = 50, this.interval = 3000, this.marquee = false, this.direction = Axis.horizontal, this.theme = TDNoticeBarTheme.info, this.prefixIcon, this.suffixIcon, this.onTap, this.height = 22, this.maxLines = 1})", + "field:context": "final dynamic", + "field:content": "final dynamic", + "field:style": "final TDNoticeBarStyle?", + "field:left": "final Widget?", + "field:right": "final Widget?", + "field:marquee": "final bool?", + "field:speed": "final double?", + "field:interval": "final int?", + "field:direction": "final Axis?", + "field:theme": "final TDNoticeBarTheme?", + "field:prefixIcon": "final IconData?", + "field:suffixIcon": "final IconData?", + "field:onTap": "final ValueChanged?", + "field:height": "final double", + "field:maxLines": "final int?", + "method:createState": "State createState ()" + } + }, + "after": { + "kind": "class", + "members": { + "constructor:new": "const ({super.key, this.content = '', this.items = const [], this.status = TNoticeBarStatus.info, this.prefix, this.operation, this.suffixIcon, this.direction = Axis.horizontal, this.maxLines = 1, this.marquee = false, this.speed = 50, this.interval = const Duration(seconds: 2), this.onPressed})", + "field:content": "final String", + "field:items": "final List", + "field:status": "final TNoticeBarStatus", + "field:prefix": "final Widget?", + "field:operation": "final Widget?", + "field:suffixIcon": "final IconData?", + "field:direction": "final Axis", + "field:maxLines": "final int", + "field:marquee": "final bool", + "field:speed": "final double", + "field:interval": "final Duration", + "field:onPressed": "final ValueChanged?", + "method:createState": "State createState ()" + } + }, + "migrationDirection": "TNoticeBar", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDNoticeBarStyle", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "constructor:new": "({this.context, this.backgroundColor, this.textStyle, this.leftIconColor, this.rightIconColor, this.padding})", + "field:context": "BuildContext?", + "field:backgroundColor": "Color?", + "field:leftIconColor": "Color?", + "field:rightIconColor": "Color?", + "field:padding": "EdgeInsetsGeometry?", + "field:textStyle": "TextStyle?", + "get:getPadding": "EdgeInsetsGeometry getPadding", + "constructor:generateTheme": "(BuildContext context, {TDNoticeBarTheme? theme = TDNoticeBarTheme.info})" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDNoticeBarTheme", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "enum", + "members": { + "value:info": "info", + "value:success": "success", + "value:warning": "warning", + "value:error": "error" + } + }, + "after": null, + "migrationDirection": "TNoticeBarStatus", + "migrationNote": "入口重组,见对应组件;不保证参数/行为兼容" + }, + { + "old": "TDNoticeBarType", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "enum", + "members": { + "value:none": "none", + "value:scroll": "scroll", + "value:step": "step" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDPageTransformer", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "field:scale": "final double?", + "field:fade": "final double?", + "field:margin": "final double?", + "constructor:margin": "({this.margin = 6.0})", + "constructor:scaleAndFade": "({this.fade = 1, this.scale = 0.8})", + "constructor:new": "({this.fade, this.scale, this.margin})", + "method:transform": "Widget transform (Widget item, TransformInfo info)" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDPicker", + "candidate": "TPicker", + "classification": "declaration-changed", + "before": { + "kind": "class", + "members": { + "method:showDatePicker": "static void showDatePicker (context, {String? title, double? titleHeight, Color? titleDividerColor, required DatePickerCallback? onConfirm, DatePickerCallback? onCancel, DatePickerCallback? onChange, Function(int wheelIndex, int index)? onSelectedItemChanged, String? leftText, TextStyle? leftTextStyle, TextStyle? centerTextStyle, String? rightText, TextStyle? rightTextStyle, EdgeInsets? padding, double? leftPadding, double? topPadding, double? rightPadding, double? topRadius, Color? backgroundColor, Widget? customSelectWidget, bool useYear = true, bool useMonth = true, bool useDay = true, bool useHour = false, bool useMinute = false, bool useSecond = false, bool useWeekDay = false, List dateStart = const [1970, 1, 1], List? dateEnd, List? initialDate, List Function(DateTypeKey key, List nums)? filterItems, double pickerHeight = 200, int pickerItemCount = 5, bool isTimeUnit = true, ItemBuilderType? itemBuilder, Color? barrierColor, Duration duration = const Duration(milliseconds: 100)})", + "method:showMultiPicker": "static void showMultiPicker (context, {String? title, required MultiPickerCallback? onConfirm, MultiPickerCallback? onCancel, required List> data, double pickerHeight = 200, int pickerItemCount = 5, List? initialIndexes, String? rightText, String? leftText, TextStyle? leftTextStyle, TextStyle? centerTextStyle, TextStyle? rightTextStyle, double? titleHeight, double? topPadding, double? leftPadding, double? rightPadding, Color? titleDividerColor, Color? backgroundColor, double? topRadius, EdgeInsets? padding, Widget? customSelectWidget, ItemBuilderType? itemBuilder, Duration duration = const Duration(milliseconds: 100), Color? barrierColor})", + "method:showMultiLinkedPicker": "static void showMultiLinkedPicker (context, {String? title, required MultiPickerCallback? onConfirm, MultiPickerCallback? onCancel, required List initialData, required Map data, required int columnNum, double pickerHeight = 200, int pickerItemCount = 5, Widget? customSelectWidget, String? rightText, String? leftText, TextStyle? leftTextStyle, TextStyle? centerTextStyle, TextStyle? rightTextStyle, double? titleHeight, double? topPadding, double? leftPadding, double? rightPadding, Color? titleDividerColor, Color? backgroundColor, double? topRadius, EdgeInsets? padding, ItemBuilderType? itemBuilder, bool keepSameSelection = false, Color? barrierColor, Duration duration = const Duration(milliseconds: 100)})" + } + }, + "after": { + "kind": "class", + "members": { + "constructor:new": "const ({super.key, required this.items, required this.value, this.onChanged, this.onColumnScrollEnd, this.itemBuilder})", + "field:items": "final TPickerItems", + "field:value": "final List", + "field:onChanged": "final ValueChanged?", + "field:onColumnScrollEnd": "final void Function(int columnIndex, TPickerValue value)?", + "field:itemBuilder": "final TPickerItemBuilder?", + "method:createState": "State createState ()" + } + }, + "migrationDirection": "TPicker", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDPopover", + "candidate": "TPopover", + "classification": "declaration-changed", + "before": { + "kind": "class", + "members": { + "method:showPopover": "static Future showPopover ({required BuildContext context, String? content, Widget? contentWidget, double offset = 4, TDPopoverTheme? theme, bool closeOnClickOutside = true, TDPopoverPlacement? placement, bool? showArrow = true, double arrowSize = 8, EdgeInsetsGeometry? padding, double? width, double? height, Color? overlayColor = Colors.transparent, OnTap? onTap, OnLongTap? onLongTap, BorderRadius? radius})" + } + }, + "after": { + "kind": "class", + "members": { + "method:showPopover": "static Future showPopover ({required BuildContext context, required Widget content, TPopoverColorPreset colorPreset = TPopoverColorPreset.defaultTheme, bool closeOnClickOutside = true, bool closeOnScroll = true, TPopoverPlacement placement = TPopoverPlacement.top, bool? showArrow, double? width, double? height, VoidCallback? onTap, VoidCallback? onLongTap})" + } + }, + "migrationDirection": "TPopover", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDPopoverPlacement", + "candidate": "TPopoverPlacement", + "classification": "declaration-shape-unchanged", + "before": { + "kind": "enum", + "members": { + "value:topLeft": "topLeft", + "value:top": "top", + "value:topRight": "topRight", + "value:rightTop": "rightTop", + "value:right": "right", + "value:rightBottom": "rightBottom", + "value:bottomRight": "bottomRight", + "value:bottom": "bottom", + "value:bottomLeft": "bottomLeft", + "value:leftBottom": "leftBottom", + "value:left": "left", + "value:leftTop": "leftTop" + } + }, + "after": { + "kind": "enum", + "members": { + "value:topLeft": "topLeft", + "value:top": "top", + "value:topRight": "topRight", + "value:rightTop": "rightTop", + "value:right": "right", + "value:rightBottom": "rightBottom", + "value:bottomRight": "bottomRight", + "value:bottom": "bottom", + "value:bottomLeft": "bottomLeft", + "value:leftBottom": "leftBottom", + "value:left": "left", + "value:leftTop": "leftTop" + } + }, + "migrationDirection": "TPopoverPlacement", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDPopoverTheme", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "enum", + "members": { + "value:dark": "dark", + "value:light": "light", + "value:info": "info", + "value:success": "success", + "value:warning": "warning", + "value:error": "error" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDPopoverWidget", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "constructor:new": "const ({super.key, required this.context, this.content, this.contentWidget, this.offset = 4, this.theme, this.placement, this.showArrow = true, this.arrowSize = 8, this.padding, this.width, this.height, this.onTap, this.onLongTap, this.radius})", + "field:context": "final BuildContext", + "field:content": "final String?", + "field:contentWidget": "final Widget?", + "field:offset": "final double", + "field:theme": "final TDPopoverTheme?", + "field:placement": "final TDPopoverPlacement?", + "field:showArrow": "final bool?", + "field:arrowSize": "final double", + "field:padding": "final EdgeInsetsGeometry?", + "field:width": "final double?", + "field:height": "final double?", + "field:onTap": "final OnTap?", + "field:onLongTap": "final OnLongTap?", + "field:radius": "final BorderRadius?", + "method:createState": "State createState ()" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDPopupBasePanel", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "constructor:new": "const ({Key? key, required this.child, this.title, this.titleColor, this.backgroundColor, this.radius, this.draggable = false, this.maxHeightRatio = 0.9, this.minHeightRatio = 0.3})", + "field:child": "final Widget", + "field:title": "final String?", + "field:titleColor": "final Color?", + "field:backgroundColor": "final Color?", + "field:radius": "final double?", + "field:draggable": "final bool", + "field:maxHeightRatio": "final double", + "field:minHeightRatio": "final double", + "method:createState": "State createState ()" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDPopupBottomConfirmPanel", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "constructor:new": "const ({super.key, required super.child, super.title, super.titleColor, this.leftText, this.leftTextColor, this.leftClick, this.rightText, this.rightTextColor, this.rightClick, this.titleFontSize, this.leftTextFontSize, this.rightTextFontSize, super.backgroundColor, super.radius, super.draggable, super.maxHeightRatio, super.minHeightRatio})", + "field:titleFontSize": "final double?", + "field:leftText": "final String?", + "field:leftTextFontSize": "final double?", + "field:leftTextColor": "final Color?", + "field:leftClick": "final PopupClick?", + "field:rightText": "final String?", + "field:rightTextFontSize": "final double?", + "field:rightTextColor": "final Color?", + "field:rightClick": "final PopupClick?", + "method:createState": "State createState ()" + } + }, + "after": null, + "migrationDirection": "TPickerPopup", + "migrationNote": "入口重组,见对应组件;不保证参数/行为兼容" + }, + { + "old": "TDPopupBottomDisplayPanel", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "constructor:new": "const ({super.key, required super.child, super.title, super.titleColor, this.titleFontSize, this.titleLeft = false, this.hideClose = false, this.closeColor, this.closeSize, this.closeClick, super.backgroundColor, super.radius, super.draggable, super.maxHeightRatio, super.minHeightRatio})", + "field:titleFontSize": "final double?", + "field:titleLeft": "final bool", + "field:hideClose": "final bool", + "field:closeColor": "final Color?", + "field:closeSize": "final double?", + "field:closeClick": "final PopupClick?", + "method:createState": "State createState ()" + } + }, + "after": null, + "migrationDirection": "TPopupOptions", + "migrationNote": "入口重组,见对应组件;不保证参数/行为兼容" + }, + { + "old": "TDPopupCenterPanel", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "constructor:new": "const ({super.key, required this.child, this.closeUnderBottom = false, this.closeColor, this.closeClick, this.backgroundColor, this.radius, this.closeSize})", + "field:child": "final Widget", + "field:closeUnderBottom": "final bool", + "field:closeColor": "final Color?", + "field:closeSize": "final double?", + "field:closeClick": "final PopupClick?", + "field:backgroundColor": "final Color?", + "field:radius": "final double?", + "method:build": "Widget build (BuildContext context)" + } + }, + "after": null, + "migrationDirection": "TPopupOptions", + "migrationNote": "入口重组,见对应组件;不保证参数/行为兼容" + }, + { + "old": "TDProgress", + "candidate": "TProgress", + "classification": "declaration-changed", + "before": { + "kind": "class", + "members": { + "constructor:new": "({Key? key, required this.type, double? value, this.label, this.progressStatus = TDProgressStatus.primary, this.progressLabelPosition = TDProgressLabelPosition.inside, double? strokeWidth, this.color, this.backgroundColor, this.linearBorderRadius, double? circleRadius, this.showLabel = true, this.customProgressLabel, this.labelWidgetWidth, this.labelWidgetAlignment, this.onTap, this.onLongPress, int animationDuration = 300})", + "field:type": "final TDProgressType", + "field:value": "final double?", + "field:label": "final TDLabelWidget?", + "field:progressStatus": "final TDProgressStatus", + "field:progressLabelPosition": "final TDProgressLabelPosition", + "field:strokeWidth": "final double?", + "field:color": "final Color?", + "field:backgroundColor": "final Color?", + "field:linearBorderRadius": "final BorderRadiusGeometry?", + "field:circleRadius": "final double?", + "field:showLabel": "final bool", + "field:customProgressLabel": "final Widget?", + "field:labelWidgetWidth": "final double?", + "field:labelWidgetAlignment": "final Alignment?", + "field:onTap": "final VoidCallback?", + "field:onLongPress": "final VoidCallback?", + "field:animationDuration": "final int?", + "method:build": "Widget build (BuildContext context)" + } + }, + "after": { + "kind": "class", + "members": { + "constructor:linear": "({Key? key, double? value, TProgressStatus status = TProgressStatus.normal, Widget? label, LinearGradient? gradient, String? semanticsLabel, String? semanticsValue})", + "constructor:plump": "({Key? key, double? value, TProgressStatus status = TProgressStatus.normal, Widget? label, LinearGradient? gradient, String? semanticsLabel, String? semanticsValue})", + "constructor:circular": "({Key? key, double? value, TProgressStatus status = TProgressStatus.normal, Widget? label, String? semanticsLabel, String? semanticsValue})", + "constructor:microCircular": "({Key? key, double? value, TProgressStatus status = TProgressStatus.normal, Widget? label, String? semanticsLabel, String? semanticsValue})", + "constructor:button": "({Key? key, double? value, TProgressStatus status = TProgressStatus.normal, Widget? label, LinearGradient? gradient, String? semanticsLabel, String? semanticsValue, VoidCallback? onTap, VoidCallback? onLongPress})", + "constructor:microButton": "({Key? key, double? value, TProgressStatus status = TProgressStatus.normal, Widget? label, String? semanticsLabel, String? semanticsValue, VoidCallback? onTap, VoidCallback? onLongPress})", + "field:variant": "final TProgressVariant", + "field:value": "final double?", + "field:status": "final TProgressStatus", + "field:label": "final Widget?", + "field:gradient": "final LinearGradient?", + "field:semanticsLabel": "final String?", + "field:semanticsValue": "final String?", + "field:onTap": "final VoidCallback?", + "field:onLongPress": "final VoidCallback?", + "method:build": "Widget build (BuildContext context)" + } + }, + "migrationDirection": "TProgress", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDProgressLabelPosition", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "enum", + "members": { + "value:inside": "inside", + "value:left": "left", + "value:right": "right" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDProgressStatus", + "candidate": "TProgressStatus", + "classification": "declaration-changed", + "before": { + "kind": "enum", + "members": { + "value:primary": "primary", + "value:warning": "warning", + "value:danger": "danger", + "value:success": "success" + } + }, + "after": { + "kind": "enum", + "members": { + "value:normal": "normal", + "value:warning": "warning", + "value:error": "error", + "value:success": "success" + } + }, + "migrationDirection": "TProgressStatus", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDProgressType", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "enum", + "members": { + "value:linear": "linear", + "value:circular": "circular", + "value:micro": "micro", + "value:button": "button" + } + }, + "after": null, + "migrationDirection": "TProgressVariant", + "migrationNote": "入口重组,见对应组件;不保证参数/行为兼容" + }, + { + "old": "TDRadio", + "candidate": "TRadio", + "classification": "declaration-changed", + "before": { + "kind": "class", + "members": { + "field:radioStyle": "final TDRadioStyle", + "constructor:new": "const ({String? id, Key? key, String? title, Font? titleFont, String? subTitle, Font? subTitleFont, bool enable = true, int subTitleMaxLine = 1, int titleMaxLine = 1, Color? selectColor, Color? disableColor, ContentBuilder? customContentBuilder, double? spacing, bool? cardMode, bool? showDivider, TDCheckBoxSize size = TDCheckBoxSize.small, this.radioStyle = TDRadioStyle.circle, TDContentDirection contentDirection = TDContentDirection.right, IconBuilder? customIconBuilder, Color? titleColor, Color? subTitleColor, Color? backgroundColor, double? checkBoxLeftSpace, double? insetSpacing, EdgeInsetsGeometry? customSpace})", + "method:buildDefaultIcon": "Widget buildDefaultIcon (BuildContext context, TDCheckboxGroupState? groupState, bool isSelected)", + "method:createState": "State createState ()" + } + }, + "after": { + "kind": "class", + "members": { + "constructor:new": "const ({super.key, required this.value, this.title, this.subTitle, this.size = TRadioSize.medium, this.iconType = TRadioIconType.fill, this.variant = TRadioVariant.block, this.disabled = false, this.contentDirection = TContentDirection.right, this.titleMaxLines = 3, this.subTitleMaxLines = 5, this.customIconBuilder})", + "field:value": "final T", + "field:title": "final String?", + "field:subTitle": "final String?", + "field:size": "final TRadioSize", + "field:iconType": "final TRadioIconType", + "field:variant": "final TRadioVariant", + "field:disabled": "final bool", + "field:contentDirection": "final TContentDirection", + "field:titleMaxLines": "final int", + "field:subTitleMaxLines": "final int", + "field:customIconBuilder": "final TRadioIconBuilder?", + "method:build": "Widget build (BuildContext context)" + } + }, + "migrationDirection": "TRadio", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDRadioGroup", + "candidate": "TRadioGroup", + "classification": "declaration-changed", + "before": { + "kind": "class", + "members": { + "field:strictMode": "final bool", + "field:radioCheckStyle": "final TDRadioStyle?", + "field:showDivider": "final bool", + "field:divider": "final Widget?", + "field:rowCount": "final int", + "constructor:new": "({Key? key, Widget? child, Axis? direction, List? directionalTdRadios, String? selectId, bool? passThrough, bool cardMode = false, this.strictMode = true, this.radioCheckStyle, int? titleMaxLine, IconBuilder? customIconBuilder, ContentBuilder? customContentBuilder, double? spacing, this.rowCount = 1, TDContentDirection? contentDirection, OnRadioGroupChange? onRadioGroupChange, this.showDivider = false, this.divider, TDCheckboxGroupController? controller})", + "method:createState": "State createState ()" + } + }, + "after": { + "kind": "class", + "members": { + "constructor:new": "const ({super.key, required this.value, this.onChanged, required this.child})", + "constructor:options": "const ({super.key, required this.value, required List> options, this.onChanged, Axis direction = Axis.vertical, int columns = 1, TRadioVariant variant = TRadioVariant.block, bool? showDivider, TContentDirection contentDirection = TContentDirection.right, TRadioSize size = TRadioSize.medium, TRadioIconType iconType = TRadioIconType.fill, int titleMaxLines = 3, int subTitleMaxLines = 5})", + "field:value": "final T?", + "field:onChanged": "final ValueChanged?", + "field:child": "final Widget", + "method:build": "Widget build (BuildContext context)" + } + }, + "migrationDirection": "TRadioGroup", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDRadioGroupState", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "method:toggle": "bool toggle (String id, bool check, [bool notify = false])" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDRadioState", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "method:build": "Widget build (BuildContext context)" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDRadioStyle", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "enum", + "members": { + "value:circle": "circle", + "value:square": "square", + "value:check": "check", + "value:hollowCircle": "hollowCircle" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDRadius", + "candidate": "TRadius", + "classification": "declaration-shape-unchanged", + "before": { + "kind": "extension", + "members": { + "member:radiusSmall": "double radiusSmall", + "member:radiusDefault": "double radiusDefault", + "member:radiusLarge": "double radiusLarge", + "member:radiusExtraLarge": "double radiusExtraLarge", + "member:radiusRound": "double radiusRound", + "member:radiusCircle": "double radiusCircle" + } + }, + "after": { + "kind": "extension", + "members": { + "member:radiusSmall": "double radiusSmall", + "member:radiusDefault": "double radiusDefault", + "member:radiusLarge": "double radiusLarge", + "member:radiusExtraLarge": "double radiusExtraLarge", + "member:radiusRound": "double radiusRound", + "member:radiusCircle": "double radiusCircle" + } + }, + "migrationDirection": "TRadius", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDRangeSlider", + "candidate": "TRangeSlider", + "classification": "declaration-changed", + "before": { + "kind": "class", + "members": { + "field:value": "final RangeValues", + "field:boxDecoration": "final Decoration?", + "field:leftLabel": "final String?", + "field:rightLabel": "final String?", + "field:onChanged": "final ValueChanged?", + "field:onChangeStart": "final ValueChanged?", + "field:onChangeEnd": "final ValueChanged?", + "field:sliderThemeData": "final TDSliderThemeData?", + "field:onTap": "final Function(Position position, Offset offset, double value)?", + "field:onThumbTextTap": "final Function(Position position, Offset offset, double value)?", + "constructor:new": "const ({Key? key, required this.value, this.boxDecoration, this.onChanged, this.sliderThemeData, this.leftLabel, this.rightLabel, this.onChangeStart, this.onChangeEnd, this.onTap, this.onThumbTextTap})", + "method:createState": "State createState ()" + } + }, + "after": { + "kind": "class", + "members": { + "constructor:new": "const ({super.key, required this.value, this.onChanged, this.onChangeStart, this.onChangeEnd, this.min = 0, this.max = 1, this.divisions, this.showThumbValue = false, this.thumbFormatter, this.showScaleValue = false, this.scaleFormatter, this.variant = TSliderVariant.normal})", + "field:value": "final RangeValues", + "field:onChanged": "final ValueChanged?", + "field:onChangeStart": "final ValueChanged?", + "field:onChangeEnd": "final ValueChanged?", + "field:min": "final double", + "field:max": "final double", + "field:divisions": "final int?", + "field:showThumbValue": "final bool", + "field:thumbFormatter": "final TSliderThumbFormatter?", + "field:showScaleValue": "final bool", + "field:scaleFormatter": "final TSliderThumbFormatter?", + "field:variant": "final TSliderVariant", + "method:build": "Widget build (BuildContext context)" + } + }, + "migrationDirection": "TRangeSlider", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDRate", + "candidate": "TRate", + "classification": "declaration-changed", + "before": { + "kind": "class", + "members": { + "constructor:new": "const ({super.key, this.allowHalf = false, this.color, this.count = 5, this.disabled = false, this.gap, this.icon, this.placement = PlacementEnum.top, this.showText = false, this.size = 24.0, this.texts = const ['极差', '失望', '一般', '满意', '惊喜'], this.textWidth = 48.0, this.builderText, this.value = 0, this.onChange, this.direction = Axis.horizontal, this.mainAxisAlignment = MainAxisAlignment.start, this.crossAxisAlignment = CrossAxisAlignment.center, this.mainAxisSize = MainAxisSize.min, this.iconTextGap})", + "field:allowHalf": "final bool?", + "field:color": "final List?", + "field:count": "final int?", + "field:disabled": "final bool?", + "field:gap": "final double?", + "field:icon": "final List?", + "field:placement": "final PlacementEnum?", + "field:showText": "final bool?", + "field:size": "final double?", + "field:texts": "final List?", + "field:textWidth": "final double?", + "field:builderText": "final Widget Function(BuildContext context, double value)?", + "field:value": "final double?", + "field:onChange": "final void Function(double value)?", + "field:direction": "final Axis?", + "field:mainAxisAlignment": "final MainAxisAlignment?", + "field:crossAxisAlignment": "final CrossAxisAlignment?", + "field:mainAxisSize": "final MainAxisSize?", + "field:iconTextGap": "final double?", + "method:createState": "_TDRateState createState ()" + } + }, + "after": { + "kind": "class", + "members": { + "constructor:new": "const ({super.key, required this.value, this.onChanged, this.onChangeStart, this.onChangeEnd, this.count = 5, this.allowHalf = false, this.showValueIndicator = true, this.icon, this.texts})", + "field:value": "final double", + "field:onChanged": "final ValueChanged?", + "field:onChangeStart": "final ValueChanged?", + "field:onChangeEnd": "final ValueChanged?", + "field:count": "final int", + "field:allowHalf": "final bool", + "field:showValueIndicator": "final bool", + "field:icon": "final TRateIconBuilder?", + "field:texts": "final List?", + "method:createState": "State createState ()" + } + }, + "migrationDirection": "TRate", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDRefreshHeader", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "constructor:new": "({this.key, this.extent = 48.0, double? triggerOffset, this.triggerDistance = 48.0, bool? clamping, this.float = false, Duration? processedDuration, this.completeDuration, bool? hapticFeedback, this.enableHapticFeedback = true, this.infiniteOffset, this.enableInfiniteRefresh = false, bool? infiniteHitOver, this.overScroll = true, this.loadingIcon = TDLoadingIcon.circle, this.backgroundColor, super.spring, super.horizontalSpring, super.readySpringBuilder, super.horizontalReadySpringBuilder, super.springRebound, super.frictionFactor, super.horizontalFrictionFactor, super.safeArea = false, super.hitOver, super.position, super.secondaryTriggerOffset, super.secondaryVelocity, super.secondaryDimension, super.secondaryCloseTriggerOffset, super.notifyWhenInvisible, super.listenable, super.triggerWhenReach, super.triggerWhenRelease, super.triggerWhenReleaseNoWait, super.maxOverOffset})", + "field:key": "final Key?", + "field:loadingIcon": "final TDLoadingIcon", + "field:backgroundColor": "final Color?", + "field:extent": "final double?", + "field:triggerDistance": "final double", + "field:float": "final bool", + "field:completeDuration": "final Duration?", + "field:enableHapticFeedback": "final bool", + "field:enableInfiniteRefresh": "final bool", + "field:infiniteOffset": "final double?", + "field:overScroll": "final bool", + "method:build": "Widget build (BuildContext context, IndicatorState state)" + } + }, + "after": null, + "migrationDirection": "TPullDownRefresh", + "migrationNote": "入口重组,见对应组件;不保证参数/行为兼容" + }, + { + "old": "TDResourceDelegate", + "candidate": "TResourceDelegate", + "classification": "declaration-changed", + "before": { + "kind": "class", + "members": { + "get:open": "String open", + "get:close": "String close", + "get:badgeZero": "String badgeZero", + "get:cancel": "String cancel", + "get:confirm": "String confirm", + "get:other": "String other", + "get:reset": "String reset", + "get:loading": "String loading", + "get:loadingWithPoint": "String loadingWithPoint", + "get:knew": "String knew", + "get:refreshing": "String refreshing", + "get:releaseRefresh": "String releaseRefresh", + "get:pullToRefresh": "String pullToRefresh", + "get:completeRefresh": "String completeRefresh", + "get:days": "String days", + "get:hours": "String hours", + "get:minutes": "String minutes", + "get:seconds": "String seconds", + "get:milliseconds": "String milliseconds", + "get:yearLabel": "String yearLabel", + "get:monthLabel": "String monthLabel", + "get:dateLabel": "String dateLabel", + "get:weeksLabel": "String weeksLabel", + "get:sunday": "String sunday", + "get:monday": "String monday", + "get:tuesday": "String tuesday", + "get:wednesday": "String wednesday", + "get:thursday": "String thursday", + "get:friday": "String friday", + "get:saturday": "String saturday", + "get:year": "String year", + "get:january": "String january", + "get:february": "String february", + "get:march": "String march", + "get:april": "String april", + "get:may": "String may", + "get:june": "String june", + "get:july": "String july", + "get:august": "String august", + "get:september": "String september", + "get:october": "String october", + "get:november": "String november", + "get:december": "String december", + "get:time": "String time", + "get:start": "String start", + "get:end": "String end", + "get:notRated": "String notRated", + "get:cascadeLabel": "String cascadeLabel", + "get:back": "String back", + "get:top": "String top", + "get:emptyData": "String emptyData" + } + }, + "after": { + "kind": "class", + "members": { + "get:uploading": "String uploading", + "get:uploadSelect": "String uploadSelect", + "get:uploadPending": "String uploadPending", + "get:uploadFailed": "String uploadFailed", + "get:uploadRetry": "String uploadRetry", + "get:uploadSuccess": "String uploadSuccess", + "get:open": "String open", + "get:close": "String close", + "get:badgeZero": "String badgeZero", + "get:cancel": "String cancel", + "get:confirm": "String confirm", + "get:other": "String other", + "get:reset": "String reset", + "get:loading": "String loading", + "get:loadingWithPoint": "String loadingWithPoint", + "get:knew": "String knew", + "get:refreshing": "String refreshing", + "get:releaseRefresh": "String releaseRefresh", + "get:pullToRefresh": "String pullToRefresh", + "get:completeRefresh": "String completeRefresh", + "get:days": "String days", + "get:hours": "String hours", + "get:minutes": "String minutes", + "get:seconds": "String seconds", + "get:milliseconds": "String milliseconds", + "get:yearLabel": "String yearLabel", + "get:monthLabel": "String monthLabel", + "get:dateLabel": "String dateLabel", + "get:weeksLabel": "String weeksLabel", + "get:sunday": "String sunday", + "get:monday": "String monday", + "get:tuesday": "String tuesday", + "get:wednesday": "String wednesday", + "get:thursday": "String thursday", + "get:friday": "String friday", + "get:saturday": "String saturday", + "get:year": "String year", + "get:january": "String january", + "get:february": "String february", + "get:march": "String march", + "get:april": "String april", + "get:may": "String may", + "get:june": "String june", + "get:july": "String july", + "get:august": "String august", + "get:september": "String september", + "get:october": "String october", + "get:november": "String november", + "get:december": "String december", + "get:time": "String time", + "get:start": "String start", + "get:end": "String end", + "get:notRated": "String notRated", + "get:cascadeLabel": "String cascadeLabel", + "get:back": "String back", + "get:top": "String top", + "get:emptyData": "String emptyData", + "get:picker": "String picker", + "method:pickerColumn": "String pickerColumn (int colIndex)" + } + }, + "migrationDirection": "TResourceDelegate", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDResourceManager", + "candidate": "TResourceManager", + "classification": "declaration-changed", + "before": { + "kind": "class", + "members": { + "method:delegate": "TDResourceDelegate delegate (BuildContext context)", + "get:instance": "static TDResourceManager instance", + "method:setResourceBuilder": "void setResourceBuilder (TDTDResourceBuilder delegate, needAlwaysBuild)" + } + }, + "after": { + "kind": "class", + "members": { + "method:delegate": "TResourceDelegate delegate (BuildContext context)", + "get:instance": "static TResourceManager instance", + "get:defaultDelegate": "static TResourceDelegate defaultDelegate", + "method:setResourceBuilder": "void setResourceBuilder (TResourceBuilder delegate, needAlwaysBuild)" + } + }, + "migrationDirection": "TResourceManager", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDResult", + "candidate": "TResult", + "classification": "declaration-changed", + "before": { + "kind": "class", + "members": { + "constructor:new": "const ({Key? key, this.description, this.icon, this.titleStyle, this.theme = TDResultTheme.defaultTheme, this.title = ''})", + "field:description": "final String?", + "field:icon": "final Widget?", + "field:titleStyle": "final TextStyle?", + "field:theme": "final TDResultTheme", + "field:title": "final String", + "method:build": "Widget build (BuildContext context)" + } + }, + "after": { + "kind": "class", + "members": { + "constructor:new": "const ({Key? key, this.description, this.icon, this.status = TResultStatus.info, this.title = ''})", + "field:description": "final String?", + "field:icon": "final Widget?", + "field:status": "final TResultStatus", + "field:title": "final String", + "method:build": "Widget build (BuildContext context)" + } + }, + "migrationDirection": "TResult", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDResultTheme", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "enum", + "members": { + "value:defaultTheme": "defaultTheme", + "value:success": "success", + "value:warning": "warning", + "value:error": "error" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDRoundRangeSliderThumbShape", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "constructor:new": "const ({this.enabledThumbRadius = 10.0, this.disabledThumbRadius, this.elevation = 3.0, this.pressedElevation = 3.0, required this.themeData, required this.buildContext})", + "field:enabledThumbRadius": "final double", + "field:disabledThumbRadius": "final double?", + "field:elevation": "final double", + "field:pressedElevation": "final double", + "field:themeData": "final TDSliderThemeData", + "field:buildContext": "final BuildContext?", + "method:getPreferredSize": "Size getPreferredSize (bool isEnabled, bool isDiscrete)", + "method:paint": "void paint (PaintingContext context, Offset center, {required Animation activationAnimation, required Animation enableAnimation, bool isDiscrete = false, bool isEnabled = false, bool? isOnTop, required SliderThemeData sliderTheme, TextDirection? textDirection, Thumb? thumb, bool? isPressed})" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDRoundRangeSliderTickMarkShape", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "constructor:new": "const ({this.tickMarkRadius, required this.themeData})", + "field:tickMarkRadius": "final double?", + "field:themeData": "final TDSliderThemeData", + "method:getPreferredSize": "Size getPreferredSize ({required SliderThemeData sliderTheme, bool isEnabled = false})", + "method:paint": "void paint (PaintingContext context, Offset center, {required RenderBox parentBox, required SliderThemeData sliderTheme, required Animation enableAnimation, required Offset startThumbCenter, required Offset endThumbCenter, bool isEnabled = false, required TextDirection textDirection})" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDRoundSliderThumbShape", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "constructor:new": "const ({this.enabledThumbRadius = 10.0, this.disabledThumbRadius, this.elevation = 4.0, this.pressedElevation = 4.0, required this.themeData, required this.buildContext})", + "field:enabledThumbRadius": "final double", + "field:disabledThumbRadius": "final double?", + "field:elevation": "final double", + "field:pressedElevation": "final double", + "field:themeData": "final TDSliderThemeData", + "field:buildContext": "final BuildContext?", + "method:getPreferredSize": "Size getPreferredSize (bool isEnabled, bool isDiscrete)", + "method:paint": "void paint (PaintingContext context, Offset center, {required Animation activationAnimation, required Animation enableAnimation, required bool isDiscrete, required TextPainter labelPainter, required RenderBox parentBox, required SliderThemeData sliderTheme, required TextDirection textDirection, required double value, required double textScaleFactor, required Size sizeWithOverflow})" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDRoundSliderTickMarkShape", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "constructor:new": "const ({this.tickMarkRadius, required this.themeData})", + "field:tickMarkRadius": "final double?", + "field:themeData": "final TDSliderThemeData", + "method:getPreferredSize": "Size getPreferredSize ({required SliderThemeData sliderTheme, required bool isEnabled})", + "method:paint": "void paint (PaintingContext context, Offset center, {required RenderBox parentBox, required SliderThemeData sliderTheme, required Animation enableAnimation, required TextDirection textDirection, required Offset thumbCenter, required bool isEnabled})" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDRoundedRectRangeSliderTrackShape", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "constructor:new": "const ({required this.themeData})", + "field:themeData": "final TDSliderThemeData", + "method:paint": "void paint (PaintingContext context, Offset offset, {required RenderBox parentBox, required SliderThemeData sliderTheme, required Animation enableAnimation, required Offset startThumbCenter, required Offset endThumbCenter, bool isEnabled = false, bool isDiscrete = false, required TextDirection textDirection, double additionalActiveTrackHeight = 0})" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDRoundedRectSliderTrackShape", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "constructor:new": "const ({required this.themeData})", + "field:themeData": "final TDSliderThemeData", + "method:paint": "void paint (PaintingContext context, Offset offset, {required RenderBox parentBox, required SliderThemeData sliderTheme, required Animation enableAnimation, required TextDirection textDirection, required Offset thumbCenter, Offset? secondaryOffset, bool isDiscrete = false, bool isEnabled = false, double additionalActiveTrackHeight = 2})" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDSearchAlignment", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "enum", + "members": { + "value:left": "left", + "value:center": "center" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDSearchBar", + "candidate": "TSearchBar", + "classification": "declaration-changed", + "before": { + "kind": "class", + "members": { + "constructor:new": "const ({Key? key, this.placeHolder, this.style = TDSearchStyle.square, this.alignment = TDSearchAlignment.left, this.onTextChanged, this.onSubmitted, this.onEditComplete, this.onTapOutside, this.onInputClick, this.autoHeight = false, this.padding = const EdgeInsets.symmetric(horizontal: 16, vertical: 8), this.autoFocus = false, this.mediumStyle = false, this.cursorHeight, this.needCancel = false, this.controller, this.backgroundColor, this.action = '', this.onActionClick, this.onClearClick, this.focusNode, this.inputAction, this.enabled, this.readOnly})", + "field:placeHolder": "final String?", + "field:style": "final TDSearchStyle?", + "field:alignment": "final TDSearchAlignment?", + "field:backgroundColor": "final Color?", + "field:autoHeight": "final bool", + "field:padding": "final EdgeInsets", + "field:autoFocus": "final bool", + "field:mediumStyle": "final bool", + "field:cursorHeight": "final double?", + "field:needCancel": "final bool", + "field:controller": "final TextEditingController?", + "field:onTextChanged": "final TDSearchBarEvent?", + "field:onSubmitted": "final TDSearchBarEvent?", + "field:onEditComplete": "final TDSearchBarCallBack?", + "field:onTapOutside": "final TapRegionCallback?", + "field:action": "final String", + "field:onInputClick": "final GestureTapCallback?", + "field:onActionClick": "final TDSearchBarEvent?", + "field:onClearClick": "final TDSearchBarClearEvent?", + "field:focusNode": "final FocusNode?", + "field:inputAction": "final TextInputAction?", + "field:enabled": "final bool?", + "field:readOnly": "final bool?", + "method:createState": "State createState ()" + } + }, + "after": { + "kind": "class", + "members": { + "constructor:new": "const ({super.key, this.controller, this.initialValue, this.onChanged, this.onSubmitted, this.onFocusChanged, this.enabled = true, this.readOnly = false, this.hintText, this.actionText, this.onActionPressed, this.onClearPressed, this.clearable = true, this.autofocus = false, this.inputType = TextInputType.text, this.inputAction = TextInputAction.search, this.maxLength, this.maxCharacter, this.inputFormatters, this.variant, this.textAlignment, this.focusNode})", + "field:controller": "final TextEditingController?", + "field:initialValue": "final String?", + "field:onChanged": "final ValueChanged?", + "field:onSubmitted": "final ValueChanged?", + "field:onFocusChanged": "final ValueChanged?", + "field:enabled": "final bool", + "field:readOnly": "final bool", + "field:hintText": "final String?", + "field:actionText": "final String?", + "field:onActionPressed": "final VoidCallback?", + "field:onClearPressed": "final VoidCallback?", + "field:clearable": "final bool", + "field:autofocus": "final bool", + "field:inputType": "final TextInputType", + "field:inputAction": "final TextInputAction", + "field:maxLength": "final int?", + "field:maxCharacter": "final int?", + "field:inputFormatters": "final List?", + "field:variant": "final TSearchBarVariant?", + "field:textAlignment": "final TSearchBarAlignment?", + "field:focusNode": "final FocusNode?", + "method:createState": "State createState ()" + } + }, + "migrationDirection": "TSearchBar", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDSearchBarCallBack", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "typedef", + "members": { + "signature": "typedef TDSearchBarCallBack = void Function();" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDSearchBarClearEvent", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "typedef", + "members": { + "signature": "typedef TDSearchBarClearEvent = bool? Function(String value);" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDSearchBarEvent", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "typedef", + "members": { + "signature": "typedef TDSearchBarEvent = void Function(String value);" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDSearchStyle", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "enum", + "members": { + "value:square": "square", + "value:round": "round" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDSelectOption", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "constructor:new": "({required this.label, required this.value, this.children = const [], this.multiple = false, this.maxLines = 1, this.columnWidth})", + "field:label": "final String", + "field:value": "final dynamic", + "field:children": "List", + "field:multiple": "final bool", + "field:maxLines": "final int", + "field:columnWidth": "final double?" + } + }, + "after": null, + "migrationDirection": "TTreeSelectOption", + "migrationNote": "入口重组,见对应组件;不保证参数/行为兼容" + }, + { + "old": "TDSelectTag", + "candidate": "TSelectTag", + "classification": "declaration-changed", + "before": { + "kind": "class", + "members": { + "constructor:new": "const (this.text, {this.theme, this.icon, this.iconWidget, this.selectStyle, this.unSelectStyle, this.disableSelectStyle, this.onSelectChanged, this.isSelected = false, this.disableSelect = false, this.size = TDTagSize.medium, this.padding, this.forceVerticalCenter = true, this.isOutline = false, this.shape = TDTagShape.square, this.isLight = false, this.needCloseIcon = false, this.onCloseTap, this.fixedWidth, Key? key})", + "field:text": "final String", + "field:theme": "final TDTagTheme?", + "field:icon": "final IconData?", + "field:iconWidget": "final Widget?", + "field:selectStyle": "final TDTagStyle?", + "field:unSelectStyle": "final TDTagStyle?", + "field:disableSelectStyle": "final TDTagStyle?", + "field:onSelectChanged": "final ValueChanged?", + "field:isSelected": "final bool", + "field:disableSelect": "final bool", + "field:size": "final TDTagSize", + "field:padding": "final EdgeInsets?", + "field:forceVerticalCenter": "final bool", + "field:isOutline": "final bool", + "field:shape": "final TDTagShape", + "field:isLight": "final bool", + "field:needCloseIcon": "final bool", + "field:onCloseTap": "final GestureTapCallback?", + "field:fixedWidth": "final double?", + "method:createState": "_TDClickTagState createState ()" + } + }, + "after": { + "kind": "class", + "members": { + "constructor:new": "const (this.text, {super.key, required this.value, this.onChanged, this.colorPreset = TTagColorPreset.primary, this.variant = TTagVariant.dark, this.icon, this.size = TTagSize.medium, this.shape = TTagShape.square})", + "field:text": "final String", + "field:value": "final bool", + "field:onChanged": "final ValueChanged?", + "field:colorPreset": "final TTagColorPreset", + "field:variant": "final TTagVariant", + "field:icon": "final IconData?", + "field:size": "final TTagSize", + "field:shape": "final TTagShape", + "method:build": "Widget build (BuildContext context)" + } + }, + "migrationDirection": "TSelectTag", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDSideBar", + "candidate": "TSideBar", + "classification": "declaration-changed", + "before": { + "kind": "class", + "members": { + "constructor:new": "const ({Key? key, this.value, this.defaultValue, this.selectedColor, this.children = const [], this.onChanged, this.onSelected, this.height, this.controller, this.contentPadding, this.selectedTextStyle, this.style = TDSideBarStyle.normal, this.loading, this.loadingWidget, this.selectedBgColor, this.unSelectedBgColor, this.unSelectedColor})", + "field:value": "final int?", + "field:defaultValue": "final int?", + "field:children": "final List", + "field:onChanged": "final ValueChanged?", + "field:onSelected": "final ValueChanged?", + "field:selectedColor": "final Color?", + "field:unSelectedColor": "final Color?", + "field:selectedTextStyle": "final TextStyle?", + "field:style": "final TDSideBarStyle", + "field:height": "final double?", + "field:contentPadding": "final EdgeInsetsGeometry?", + "field:controller": "final TDSideBarController?", + "field:loading": "final bool?", + "field:loadingWidget": "final Widget?", + "field:selectedBgColor": "final Color?", + "field:unSelectedBgColor": "final Color?", + "method:createState": "State createState ()" + } + }, + "after": { + "kind": "class", + "members": { + "constructor:new": "const ({Key? key, required this.value, this.children = const [], this.onChanged, this.height, this.variant = TSideBarVariant.line, this.width = 103, this.loading = false, this.loadingWidget})", + "field:value": "final int", + "field:children": "final List", + "field:onChanged": "final ValueChanged?", + "field:variant": "final TSideBarVariant", + "field:width": "final double", + "field:height": "final double?", + "field:loading": "final bool", + "field:loadingWidget": "final Widget?", + "method:createState": "State createState ()" + } + }, + "migrationDirection": "TSideBar", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDSideBarController", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "field:currentValue": "int", + "field:children": "List", + "method:selectTo": "void selectTo (int value)", + "method:init": "void init (List data)", + "method:closeLoading": "void closeLoading (bool load, {bool needNotify = true})", + "set:loading": "loading (bool load)", + "get:loading": "bool loading", + "method:dispose": "void dispose ()" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDSideBarItem", + "candidate": "TSideBarItem", + "classification": "declaration-changed", + "before": { + "kind": "class", + "members": { + "constructor:new": "const ({Key? key, this.badge, this.disabled = false, this.icon, this.textStyle, this.label = '', this.value = -1})", + "field:badge": "final TDBadge?", + "field:disabled": "final bool", + "field:icon": "final IconData?", + "field:label": "final String", + "field:textStyle": "final TextStyle?", + "field:value": "final int" + } + }, + "after": { + "kind": "class", + "members": { + "constructor:new": "const ({this.badge, this.disabled = false, this.icon, this.label = '', this.value = -1})", + "field:badge": "final TBadgeConfig?", + "field:disabled": "final bool", + "field:icon": "final IconData?", + "field:label": "final String", + "field:value": "final int" + } + }, + "migrationDirection": "TSideBarItem", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDSideBarStyle", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "enum", + "members": { + "value:normal": "normal", + "value:outline": "outline" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDSkeleton", + "candidate": "TSkeleton", + "classification": "declaration-changed", + "before": { + "kind": "class", + "members": { + "constructor:new": "factory ({Key? key, TDSkeletonAnimation? animation, int delay = 0, TDSkeletonTheme theme = TDSkeletonTheme.text})", + "constructor:fromRowCol": "const ({super.key, this.animation, this.delay = 0, required this.rowCol})", + "field:animation": "final TDSkeletonAnimation?", + "field:delay": "final int", + "field:rowCol": "final TDSkeletonRowCol", + "method:createState": "_TDSkeletonState createState ()" + } + }, + "after": { + "kind": "class", + "members": { + "constructor:new": "const ({super.key, TSkeletonVariant variant = TSkeletonVariant.text, this.animation, this.delay = Duration.zero})", + "constructor:custom": "const ({super.key, required TSkeletonLayout layout, this.animation, this.delay = Duration.zero})", + "field:variant": "final TSkeletonVariant?", + "field:layout": "final TSkeletonLayout?", + "field:animation": "final TSkeletonAnimation?", + "field:delay": "final Duration", + "method:createState": "State createState ()" + } + }, + "migrationDirection": "TSkeleton", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDSkeletonAnimation", + "candidate": "TSkeletonAnimation", + "classification": "declaration-shape-unchanged", + "before": { + "kind": "enum", + "members": { + "value:gradient": "gradient", + "value:flashed": "flashed" + } + }, + "after": { + "kind": "enum", + "members": { + "value:gradient": "gradient", + "value:flashed": "flashed" + } + }, + "migrationDirection": "TSkeletonAnimation", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDSkeletonRowCol", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "constructor:new": "({required this.objects, this.style = const TDSkeletonRowColStyle()})", + "field:objects": "final List>", + "field:style": "final TDSkeletonRowColStyle", + "method:visualHeight": "double visualHeight (BuildContext context)" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDSkeletonRowColObj", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "constructor:new": "const ({this.width, this.height = 16, this.flex = 1, this.margin = EdgeInsets.zero, this.style = const TDSkeletonRowColObjStyle()})", + "constructor:circle": "const ({this.width = 48, this.height = 48, this.flex, this.margin = EdgeInsets.zero, this.style = const TDSkeletonRowColObjStyle.circle()})", + "constructor:rect": "const ({this.width, this.height = 16, this.flex = 1, this.margin = EdgeInsets.zero, this.style = const TDSkeletonRowColObjStyle.rect()})", + "constructor:text": "const ({this.width, this.height = 16, this.flex = 1, this.margin = EdgeInsets.zero, this.style = const TDSkeletonRowColObjStyle.text()})", + "constructor:spacer": "const ({this.width, this.height, this.flex, this.margin = EdgeInsets.zero})", + "field:width": "final double?", + "field:height": "final double?", + "field:flex": "final int?", + "field:margin": "final EdgeInsets", + "field:style": "final TDSkeletonRowColObjStyle", + "get:visualHeight": "double visualHeight" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDSkeletonRowColObjStyle", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "constructor:new": "const ({this.background = _defaultBackground, this.borderRadius = _textBorderRadius})", + "constructor:circle": "const ({this.background = _defaultBackground})", + "constructor:rect": "const ({this.background = _defaultBackground})", + "constructor:text": "const ({this.background = _defaultBackground})", + "constructor:spacer": "const ()", + "field:background": "final Color Function(BuildContext)", + "field:borderRadius": "final double Function(BuildContext)" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDSkeletonRowColStyle", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "constructor:new": "const ({this.rowSpacing = _defaultRowSpacing})", + "field:rowSpacing": "final double Function(BuildContext)" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDSkeletonTheme", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "enum", + "members": { + "value:avatar": "avatar", + "value:image": "image", + "value:text": "text", + "value:paragraph": "paragraph" + } + }, + "after": null, + "migrationDirection": "TSkeletonVariant", + "migrationNote": "入口重组,见对应组件;不保证参数/行为兼容" + }, + { + "old": "TDSlidePopupRoute", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "constructor:new": "({required this.builder, this.barrierLabel, this.modalBarrierColor = Colors.black54, this.isDismissible = true, this.modalBarrierFull = false, this.slideTransitionFrom = SlideTransitionFrom.bottom, this.modalWidth, this.modalHeight, this.modalTop = 0, this.modalLeft = 0, this.open, this.opened, this.close, this.barrierClick, this.focusMove = false})", + "field:builder": "final WidgetBuilder", + "field:modalBarrierColor": "final Color?", + "field:isDismissible": "final bool", + "field:modalBarrierFull": "final bool", + "field:slideTransitionFrom": "final SlideTransitionFrom", + "field:modalWidth": "final double?", + "field:modalHeight": "final double?", + "field:modalTop": "final double?", + "field:modalLeft": "final double?", + "field:open": "final VoidCallback?", + "field:opened": "final VoidCallback?", + "field:close": "final VoidCallback?", + "field:barrierClick": "final VoidCallback?", + "field:focusMove": "final bool", + "get:transitionDuration": "Duration transitionDuration", + "get:reverseTransitionDuration": "Duration reverseTransitionDuration", + "get:barrierDismissible": "bool barrierDismissible", + "field:barrierLabel": "final String?", + "get:barrierColor": "Color barrierColor", + "method:buildTransitions": "Widget buildTransitions (BuildContext context, Animation animation, Animation secondaryAnimation, Widget child)", + "method:buildPage": "Widget buildPage (BuildContext context, Animation animation, Animation secondaryAnimation)", + "method:didPush": "TickerFuture didPush ()", + "method:dispose": "void dispose ()", + "method:startFocusListener": "void startFocusListener (BuildContext context)", + "method:stopFocusListener": "void stopFocusListener (BuildContext context)", + "method:didPop": "bool didPop (T? result)" + } + }, + "after": null, + "migrationDirection": "TPopup", + "migrationNote": "入口重组,见对应组件;不保证参数/行为兼容" + }, + { + "old": "TDSlider", + "candidate": "TSlider", + "classification": "declaration-changed", + "before": { + "kind": "class", + "members": { + "field:value": "final double", + "field:boxDecoration": "final Decoration?", + "field:leftLabel": "final String?", + "field:rightLabel": "final String?", + "field:onChanged": "final ValueChanged?", + "field:onChangeStart": "final ValueChanged?", + "field:onChangeEnd": "final ValueChanged?", + "field:sliderThemeData": "final TDSliderThemeData?", + "field:onTap": "final Function(Offset offset, double value)?", + "field:onThumbTextTap": "final Function(Offset offset, double value)?", + "constructor:new": "const ({Key? key, required this.value, this.boxDecoration, this.onChanged, this.sliderThemeData, this.leftLabel, this.rightLabel, this.onChangeStart, this.onChangeEnd, this.onTap, this.onThumbTextTap})", + "method:createState": "State createState ()" + } + }, + "after": { + "kind": "class", + "members": { + "constructor:new": "const ({super.key, required this.value, this.onChanged, this.onChangeStart, this.onChangeEnd, this.min = 0, this.max = 1, this.divisions, this.showThumbValue = false, this.thumbFormatter, this.showScaleValue = false, this.scaleFormatter, this.variant = TSliderVariant.normal})", + "field:value": "final double", + "field:onChanged": "final ValueChanged?", + "field:onChangeStart": "final ValueChanged?", + "field:onChangeEnd": "final ValueChanged?", + "field:min": "final double", + "field:max": "final double", + "field:divisions": "final int?", + "field:showThumbValue": "final bool", + "field:thumbFormatter": "final TSliderThumbFormatter?", + "field:showScaleValue": "final bool", + "field:scaleFormatter": "final TSliderThumbFormatter?", + "field:variant": "final TSliderVariant", + "method:build": "Widget build (BuildContext context)" + } + }, + "migrationDirection": "TSlider", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDSliderState", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "field:value": "double", + "method:initState": "void initState ()", + "method:didUpdateWidget": "void didUpdateWidget (covariant TDSlider oldWidget)", + "get:labelTextStyle": "TextStyle labelTextStyle", + "get:leftLabel": "Widget leftLabel", + "get:rightLabel": "Widget rightLabel", + "method:build": "Widget build (BuildContext context)" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDSliderThemeData", + "candidate": "TSliderThemeData", + "classification": "declaration-changed", + "before": { + "kind": "class", + "members": { + "field:showThumbValue": "final bool", + "field:thumbTextStyle": "final TextStyle?", + "field:disabledThumbTextStyle": "final TextStyle", + "field:showScaleValue": "final bool", + "field:scaleFormatter": "final ScaleFormatter?", + "field:scaleTextStyle": "final TextStyle?", + "field:disabledScaleTextStyle": "final TextStyle", + "field:divisions": "final int?", + "field:min": "final double", + "field:max": "final double", + "field:sliderMeasureData": "final SliderMeasureData", + "field:context": "final BuildContext?", + "field:activeTrackColor": "final Color?", + "field:inactiveTrackColor": "final Color?", + "constructor:new": "({this.context, this.showScaleValue = false, this.showThumbValue = false, this.divisions, TextStyle? scaleTextStyle, TextStyle? disabledScaleTextStyle, TextStyle? thumbTextStyle, TextStyle? disabledThumbTextStyle, this.min = 0.0, this.max = 1.0, this.scaleFormatter, this.activeTrackColor, this.inactiveTrackColor, SliderThemeData? sliderThemeData})", + "constructor:capsule": "({this.context, this.showScaleValue = false, this.showThumbValue = false, this.divisions, TextStyle? scaleTextStyle, TextStyle? disabledScaleTextStyle, TextStyle? thumbTextStyle, TextStyle? disabledThumbTextStyle, this.min = 0.0, this.max = 1.0, this.scaleFormatter, this.activeTrackColor, this.inactiveTrackColor, SliderThemeData? sliderThemeData})", + "get:sliderThemeData": "SliderThemeData sliderThemeData", + "method:updateSliderThemeData": "void updateSliderThemeData (OnSliderThemeDataUpdate onSliderThemeDataUpdate)", + "method:normal": "SliderThemeData normal ()", + "method:capsule": "SliderThemeData capsule ()", + "method:copyWith": "TDSliderThemeData copyWith ({SliderThemeData? themeData, bool? showScaleValue, bool? showThumbValue, TextStyle? disabledScaleTextStyle, TextStyle? disabledThumbTextStyle, TextStyle? scaleTextStyle, TextStyle? thumbTextStyle, int? divisions, double? min, double? max, ScaleFormatter? scaleFormatter, Color? activeTrackColor, Color? inactiveTrackColor})" + } + }, + "after": { + "kind": "class", + "members": { + "constructor:new": "const ({this.activeTrackColor, this.inactiveTrackColor, this.thumbColor, this.disabledThumbColor, this.thumbBorderColor, this.disabledThumbBorderColor, this.overlayColor, this.valueIndicatorColor, this.valueIndicatorTextColor, this.trackHeight, this.decoration})", + "field:activeTrackColor": "final Color?", + "field:inactiveTrackColor": "final Color?", + "field:thumbColor": "final Color?", + "field:disabledThumbColor": "final Color?", + "field:thumbBorderColor": "final Color?", + "field:disabledThumbBorderColor": "final Color?", + "field:overlayColor": "final Color?", + "field:valueIndicatorColor": "final Color?", + "field:valueIndicatorTextColor": "final Color?", + "field:trackHeight": "final double?", + "field:decoration": "final Decoration?", + "method:copyWith": "TSliderThemeData copyWith ({Color? activeTrackColor, Color? inactiveTrackColor, Color? thumbColor, Color? disabledThumbColor, Color? thumbBorderColor, Color? disabledThumbBorderColor, Color? overlayColor, Color? valueIndicatorColor, Color? valueIndicatorTextColor, double? trackHeight, Decoration? decoration})", + "method:lerp": "TSliderThemeData lerp (ThemeExtension? other, double t)" + } + }, + "migrationDirection": "TSliderThemeData", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDSpacers", + "candidate": "TSpacers", + "classification": "declaration-changed", + "before": { + "kind": "extension", + "members": { + "member:spacer4": "double spacer4", + "member:spacer8": "double spacer8", + "member:spacer12": "double spacer12", + "member:spacer16": "double spacer16", + "member:spacer24": "double spacer24", + "member:spacer32": "double spacer32", + "member:spacer40": "double spacer40", + "member:spacer48": "double spacer48", + "member:spacer64": "double spacer64", + "member:spacer96": "double spacer96", + "member:spacer160": "double spacer160" + } + }, + "after": { + "kind": "extension", + "members": { + "member:spacer": "double spacer", + "member:spacer1": "double spacer1", + "member:spacer2": "double spacer2", + "member:spacer3": "double spacer3", + "member:spacer4": "double spacer4", + "member:spacer5": "double spacer5", + "member:spacer6": "double spacer6" + } + }, + "migrationDirection": "TSpacers", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDStepper", + "candidate": "TStepper", + "classification": "declaration-changed", + "before": { + "kind": "class", + "members": { + "constructor:new": "const ({Key? key, this.disableInput = false, this.disabled = false, this.inputWidth, this.eventController, this.max = 100, this.min = 0, this.size = TDStepperSize.medium, this.step = 1, this.theme = TDStepperTheme.normal, this.value = 0, this.defaultValue = 0, this.onBlur, this.onChange, this.onOverlimit, this.controller})", + "field:disableInput": "final bool", + "field:disabled": "final bool", + "field:inputWidth": "final double?", + "field:max": "final int", + "field:min": "final int", + "field:size": "final TDStepperSize", + "field:step": "final int", + "field:theme": "final TDStepperTheme", + "field:value": "final int?", + "field:defaultValue": "final int?", + "field:onBlur": "final VoidCallback?", + "field:onChange": "final ValueChanged?", + "field:onOverlimit": "final TDStepperOverlimitFunction?", + "field:eventController": "final StreamController?", + "field:controller": "final TDStepperController?", + "method:createState": "State createState ()" + } + }, + "after": { + "kind": "class", + "members": { + "constructor:new": "const ({super.key, required this.value, this.onChanged, this.min = 0, this.max = 100, this.step = 1, this.size, this.variant})", + "field:value": "final num", + "field:onChanged": "final ValueChanged?", + "field:min": "final num", + "field:max": "final num", + "field:step": "final num", + "field:size": "final TStepperSize?", + "field:variant": "final TStepperVariant?", + "method:createState": "State createState ()" + } + }, + "migrationDirection": "TStepper", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDStepperController", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "get:value": "int value", + "set:value": "value (int value)" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDStepperEventType", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "enum", + "members": { + "value:cleanValue": "cleanValue" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDStepperIconButton", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "constructor:new": "const ({Key? key, this.onTap, this.size = TDStepperSize.medium, this.disabled = false, this.theme = TDStepperTheme.normal, required this.type})", + "field:onTap": "final TDTapFunction?", + "field:size": "final TDStepperSize", + "field:type": "final TDStepperIconType", + "field:disabled": "final bool", + "field:theme": "final TDStepperTheme", + "method:build": "Widget build (BuildContext context)" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDStepperIconType", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "enum", + "members": { + "value:remove": "remove", + "value:add": "add" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDStepperOverlimitFunction", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "typedef", + "members": { + "signature": "typedef TDStepperOverlimitFunction = void Function(TDStepperOverlimitType type);" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDStepperOverlimitType", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "enum", + "members": { + "value:minus": "minus", + "value:plus": "plus" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDStepperSize", + "candidate": "TStepperSize", + "classification": "declaration-shape-unchanged", + "before": { + "kind": "enum", + "members": { + "value:small": "small", + "value:medium": "medium", + "value:large": "large" + } + }, + "after": { + "kind": "enum", + "members": { + "value:small": "small", + "value:medium": "medium", + "value:large": "large" + } + }, + "migrationDirection": "TStepperSize", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDStepperTheme", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "enum", + "members": { + "value:normal": "normal", + "value:filled": "filled", + "value:outline": "outline" + } + }, + "after": null, + "migrationDirection": "TStepperVariant", + "migrationNote": "入口重组,见对应组件;不保证参数/行为兼容" + }, + { + "old": "TDSteps", + "candidate": "TSteps", + "classification": "declaration-changed", + "before": { + "kind": "class", + "members": { + "constructor:new": "const ({super.key, required this.steps, this.activeIndex = 0, this.direction = TDStepsDirection.horizontal, this.status = TDStepsStatus.success, this.simple = false, this.readOnly = false, this.verticalSelect = false})", + "field:steps": "final List", + "field:direction": "final TDStepsDirection", + "field:activeIndex": "final int", + "field:status": "final TDStepsStatus", + "field:simple": "final bool", + "field:readOnly": "final bool", + "field:verticalSelect": "final bool", + "method:createState": "_TDStepsState createState ()" + } + }, + "after": { + "kind": "class", + "members": { + "constructor:progress": "const ({super.key, required this.steps, this.value = 0, this.direction = TStepsDirection.horizontal, this.status = TStepsStatus.process, this.indicator = TStepsIndicator.standard, this.onChange})", + "constructor:selectable": "const ({super.key, required this.steps, required this.value, required ValueChanged onChange})", + "constructor:display": "const ({super.key, required this.steps, this.direction = TStepsDirection.vertical})", + "field:steps": "final List", + "field:direction": "final TStepsDirection", + "field:value": "final int", + "field:status": "final TStepsStatus", + "field:indicator": "final TStepsIndicator", + "field:onChange": "final ValueChanged?", + "method:build": "Widget build (BuildContext context)" + } + }, + "migrationDirection": "TSteps", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDStepsDirection", + "candidate": "TStepsDirection", + "classification": "declaration-shape-unchanged", + "before": { + "kind": "enum", + "members": { + "value:horizontal": "horizontal", + "value:vertical": "vertical" + } + }, + "after": { + "kind": "enum", + "members": { + "value:horizontal": "horizontal", + "value:vertical": "vertical" + } + }, + "migrationDirection": "TStepsDirection", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDStepsItemData", + "candidate": "TStepsItemData", + "classification": "declaration-changed", + "before": { + "kind": "class", + "members": { + "constructor:new": "({this.title, this.content, this.successIcon, this.errorIcon, this.customContent, this.customTitle})", + "field:title": "final String?", + "field:content": "final String?", + "field:successIcon": "final IconData?", + "field:errorIcon": "final IconData?", + "field:customContent": "final Widget?", + "field:customTitle": "final Widget?" + } + }, + "after": { + "kind": "class", + "members": { + "constructor:new": "const ({this.title, this.content, this.icon, this.errorIcon, this.customContent, this.customTitle})", + "field:title": "final String?", + "field:content": "final String?", + "field:icon": "final IconData?", + "field:errorIcon": "final IconData?", + "field:customContent": "final Widget?", + "field:customTitle": "final Widget?" + } + }, + "migrationDirection": "TStepsItemData", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDStepsStatus", + "candidate": "TStepsStatus", + "classification": "declaration-changed", + "before": { + "kind": "enum", + "members": { + "value:success": "success", + "value:error": "error" + } + }, + "after": { + "kind": "enum", + "members": { + "value:process": "process", + "value:error": "error" + } + }, + "migrationDirection": "TStepsStatus", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDSwipeCell", + "candidate": "TSwipeCell", + "classification": "declaration-changed", + "before": { + "kind": "class", + "members": { + "constructor:new": "const ({Key? key, this.slidableKey, required this.cell, this.disabled = false, this.opened = const [false, false], this.right, this.left, this.onChange, this.controller, this.groupTag, this.closeWhenOpened = true, this.closeWhenTapped = true, this.dragStartBehavior = DragStartBehavior.start, this.direction = Axis.horizontal, this.duration = const Duration(milliseconds: 200)})", + "field:slidableKey": "final Key?", + "field:cell": "final Widget", + "field:disabled": "final bool?", + "field:opened": "final List?", + "field:right": "final TDSwipeCellPanel?", + "field:left": "final TDSwipeCellPanel?", + "field:onChange": "final Function(TDSwipeDirection direction, bool open)?", + "field:controller": "final SlidableController?", + "field:groupTag": "final Object?", + "field:closeWhenOpened": "final bool?", + "field:closeWhenTapped": "final bool?", + "field:dragStartBehavior": "final DragStartBehavior?", + "field:direction": "final Axis?", + "field:duration": "final Duration?", + "get:getDuration": "Duration getDuration", + "method:close": "static void close (Object? tag, {SlidableController? current})", + "method:of": "static SlidableController? of (BuildContext context)", + "method:createState": "_TDSwipeCellState createState ()" + } + }, + "after": { + "kind": "class", + "members": { + "constructor:new": "const ({Key? key, required this.child, this.enabled = true, this.start, this.end, this.onOpenChanged, this.controller, this.initialOpenSide, this.closeOnScroll = true})", + "field:child": "final Widget", + "field:enabled": "final bool", + "field:start": "final TSwipeCellPanel?", + "field:end": "final TSwipeCellPanel?", + "field:onOpenChanged": "final TSwipeCellChanged?", + "field:controller": "final TSwipeCellController?", + "field:initialOpenSide": "final TSwipeCellSide?", + "field:closeOnScroll": "final bool", + "method:createState": "State createState ()" + } + }, + "migrationDirection": "TSwipeCell", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDSwipeCellAction", + "candidate": "TSwipeCellAction", + "classification": "declaration-changed", + "before": { + "kind": "class", + "members": { + "constructor:new": "const ({Key? key, this.flex = 1, this.backgroundColor, this.autoClose = true, this.onPressed, this.icon, this.iconColor, this.iconSize = 18, this.spacing = 2, this.label, this.labelStyle, this.direction = Axis.horizontal, this.confirmIndex, this.builder})", + "field:flex": "final int?", + "field:backgroundColor": "final Color?", + "field:autoClose": "final bool?", + "field:onPressed": "final void Function(BuildContext context)?", + "field:icon": "final IconData?", + "field:iconColor": "final Color?", + "field:iconSize": "final double?", + "field:spacing": "final double?", + "field:label": "final String?", + "field:labelStyle": "final TextStyle?", + "field:direction": "final Axis?", + "field:confirmIndex": "final List?", + "field:builder": "final WidgetBuilder?", + "method:build": "Widget build (BuildContext context)" + } + }, + "after": { + "kind": "class", + "members": { + "constructor:new": "const ({Key? key, this.backgroundColor, this.onPressed, this.icon, this.iconColor, this.iconSize, this.iconLabelSpacing, this.label, this.labelStyle, this.builder})", + "field:backgroundColor": "final Color?", + "field:onPressed": "final void Function(BuildContext context)?", + "field:icon": "final IconData?", + "field:iconColor": "final Color?", + "field:iconSize": "final double?", + "field:iconLabelSpacing": "final double?", + "field:label": "final String?", + "field:labelStyle": "final TextStyle?", + "field:builder": "final WidgetBuilder?", + "method:build": "Widget build (BuildContext context)" + } + }, + "migrationDirection": "TSwipeCellAction", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDSwipeCellInherited", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "constructor:new": "const ({Key? key, required Widget child, required this.cellClick, required this.actionClick, required this.duration, required this.controller})", + "field:duration": "final Duration", + "field:cellClick": "final void Function()", + "field:actionClick": "final bool Function(TDSwipeCellAction action)", + "field:controller": "final SlidableController", + "method:updateShouldNotify": "bool updateShouldNotify (covariant TDSwipeCellInherited oldWidget)", + "method:of": "static TDSwipeCellInherited? of (BuildContext context)" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDSwipeCellPanel", + "candidate": "TSwipeCellPanel", + "classification": "declaration-changed", + "before": { + "kind": "class", + "members": { + "constructor:new": "({this.extentRatio = 0.3, this.openThreshold, this.closeThreshold, this.motionType, this.dragDismissible = false, this.dismissThreshold = 0.75, this.dismissalDuration = const Duration(milliseconds: 300), this.resizeDuration = const Duration(milliseconds: 300), this.closeOnCancel = false, this.confirmDismiss, this.onDismissed, required this.children, this.confirms})", + "field:extentRatio": "final double?", + "field:openThreshold": "final double?", + "field:closeThreshold": "final double?", + "field:motionType": "final SwipeMotion?", + "field:children": "final List", + "field:confirms": "final List?", + "field:dragDismissible": "final bool?", + "field:dismissThreshold": "final double?", + "field:dismissalDuration": "final Duration?", + "field:resizeDuration": "final Duration?", + "field:closeOnCancel": "final bool?", + "field:confirmDismiss": "final Future Function(BuildContext context)?", + "field:onDismissed": "final void Function(BuildContext context)?", + "method:build": "ActionPane build (BuildContext context)", + "method:getMotionWidget": "Widget getMotionWidget ()" + } + }, + "after": { + "kind": "class", + "members": { + "constructor:new": "({required this.children})", + "field:children": "final List", + "method:build": "Widget build (BuildContext context)" + } + }, + "migrationDirection": "TSwipeCellPanel", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDSwipeDirection", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "enum", + "members": { + "value:right": "right", + "value:left": "left" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDSwiperArrowPagination", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "field:autoHideWhenAtBoundary": "final bool?", + "field:backArrow": "final Widget?", + "field:forwardArrow": "final Widget?", + "field:radius": "final double?", + "field:backgroundColor": "final Color?", + "constructor:new": "const ({this.radius, this.backgroundColor, this.backArrow, this.forwardArrow, this.autoHideWhenAtBoundary = true})", + "method:build": "Widget build (BuildContext context, SwiperPluginConfig config)" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDSwiperDotsPagination", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "field:activeColor": "final Color?", + "field:color": "final Color?", + "field:activeSize": "final double", + "field:size": "final double", + "field:space": "final double", + "field:roundedRectangleWidth": "final double?", + "field:animationDuration": "final int?", + "field:key": "final Key?", + "constructor:new": "const ({this.activeColor, this.color, this.key, this.size = 6.0, this.activeSize = 6.0, this.space = 8.0, this.roundedRectangleWidth, this.animationDuration})", + "method:build": "Widget build (BuildContext context, SwiperPluginConfig config)" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDSwiperPagination", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "constructor:new": "const ({this.alignment, this.key, this.margin = const EdgeInsets.all(10.0), this.builder = TDSwiperPagination.dots})", + "field:dots": "static const SwiperPlugin", + "field:dotsBar": "static const SwiperPlugin", + "field:fraction": "static const SwiperPlugin", + "field:controls": "static const SwiperPlugin", + "field:alignment": "final Alignment?", + "field:margin": "final EdgeInsetsGeometry", + "field:builder": "final SwiperPlugin", + "field:key": "final Key?", + "method:build": "Widget build (BuildContext context, SwiperPluginConfig config)" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDSwitch", + "candidate": "TSwitch", + "classification": "declaration-changed", + "before": { + "kind": "class", + "members": { + "constructor:new": "const ({Key? key, this.enable = true, this.isOn = false, this.size = TDSwitchSize.medium, this.type = TDSwitchType.fill, this.trackOnColor, this.trackOffColor, this.thumbContentOnColor, this.thumbContentOffColor, this.thumbContentOnFont, this.thumbContentOffFont, this.onChanged, this.openText, this.closeText})", + "field:enable": "final bool", + "field:isOn": "final bool", + "field:trackOnColor": "final Color?", + "field:trackOffColor": "final Color?", + "field:thumbContentOnColor": "final Color?", + "field:thumbContentOffColor": "final Color?", + "field:thumbContentOnFont": "final TextStyle?", + "field:thumbContentOffFont": "final TextStyle?", + "field:size": "final TDSwitchSize?", + "field:type": "final TDSwitchType?", + "field:onChanged": "final OnSwitchChanged?", + "field:openText": "final String?", + "field:closeText": "final String?", + "method:createState": "State createState ()" + } + }, + "after": { + "kind": "class", + "members": { + "constructor:new": "const ({super.key, required this.value, this.onChanged, this.size, this.variant, this.loading = false, this.openText, this.closeText})", + "field:value": "final bool", + "field:onChanged": "final ValueChanged?", + "field:size": "final TSwitchSize?", + "field:variant": "final TSwitchVariant?", + "field:loading": "final bool", + "field:openText": "final String?", + "field:closeText": "final String?", + "method:build": "Widget build (BuildContext context)" + } + }, + "migrationDirection": "TSwitch", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDSwitchSize", + "candidate": "TSwitchSize", + "classification": "declaration-shape-unchanged", + "before": { + "kind": "enum", + "members": { + "value:large": "large", + "value:medium": "medium", + "value:small": "small" + } + }, + "after": { + "kind": "enum", + "members": { + "value:large": "large", + "value:medium": "medium", + "value:small": "small" + } + }, + "migrationDirection": "TSwitchSize", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDSwitchState", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "field:isOn": "bool", + "method:initState": "void initState ()", + "method:didUpdateWidget": "void didUpdateWidget (covariant TDSwitch oldWidget)", + "method:build": "Widget build (BuildContext context)" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDSwitchType", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "enum", + "members": { + "value:fill": "fill", + "value:text": "text", + "value:loading": "loading", + "value:icon": "icon" + } + }, + "after": null, + "migrationDirection": "TSwitchVariant", + "migrationNote": "入口重组,见对应组件;不保证参数/行为兼容" + }, + { + "old": "TDTDResourceBuilder", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "typedef", + "members": { + "signature": "typedef TDTDResourceBuilder = TDResourceDelegate? Function(BuildContext context);" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDTab", + "candidate": "TTab", + "classification": "declaration-changed", + "before": { + "kind": "class", + "members": { + "field:text": "final String?", + "field:child": "final Widget?", + "field:icon": "final Widget?", + "field:badge": "final TDBadge?", + "field:iconMargin": "final EdgeInsetsGeometry", + "field:height": "final double?", + "field:contentHeight": "final double?", + "field:textMargin": "final EdgeInsetsGeometry?", + "field:enable": "final bool", + "field:size": "final TDTabSize", + "field:outlineType": "final TDTabOutlineType", + "constructor:new": "const ({Key? key, this.text, this.child, this.icon, this.badge, this.height, this.contentHeight, this.textMargin, this.size = TDTabSize.small, this.outlineType = TDTabOutlineType.filled, this.enable = true, this.iconMargin = const EdgeInsets.only(bottom: 4.0, right: 4.0)})", + "method:build": "Widget build (BuildContext context)" + } + }, + "after": { + "kind": "class", + "members": { + "field:text": "final String?", + "field:child": "final Widget?", + "field:icon": "final Widget?", + "field:enabled": "final bool", + "constructor:new": "const ({Key? key, this.text, this.child, this.icon, this.enabled = true})", + "get:preferredSize": "Size preferredSize", + "method:build": "Widget build (BuildContext context)" + } + }, + "migrationDirection": "TTab", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDTabBar", + "candidate": "TTabBar", + "classification": "declaration-changed", + "before": { + "kind": "class", + "members": { + "constructor:new": "const ({Key? key, required this.tabs, this.controller, this.decoration, this.backgroundColor, this.indicatorColor, this.indicatorWidth, this.indicatorHeight, this.labelColor, this.unselectedLabelColor, this.isScrollable = false, this.unselectedLabelStyle, this.labelStyle, this.width, this.height, this.indicatorPadding, this.labelPadding, this.indicator, this.physics, this.onTap, this.outlineType = TDTabBarOutlineType.filled, this.showIndicator = false, this.dividerColor, this.dividerHeight = 0.5, this.selectedBgColor, this.unSelectedBgColor, this.tabAlignment})", + "field:tabs": "final List", + "field:controller": "final TabController?", + "field:decoration": "final Decoration?", + "field:backgroundColor": "final Color?", + "field:indicatorColor": "final Color?", + "field:indicatorHeight": "final double?", + "field:indicatorWidth": "final double?", + "field:labelColor": "final Color?", + "field:unselectedLabelColor": "final Color?", + "field:isScrollable": "final bool", + "field:labelStyle": "final TextStyle?", + "field:unselectedLabelStyle": "final TextStyle?", + "field:width": "final double?", + "field:height": "final double?", + "field:indicatorPadding": "final EdgeInsets?", + "field:indicator": "final Decoration?", + "field:showIndicator": "final bool", + "field:physics": "final ScrollPhysics?", + "field:onTap": "final Function(int)?", + "field:labelPadding": "final EdgeInsetsGeometry?", + "field:outlineType": "final TDTabBarOutlineType", + "field:dividerColor": "final Color?", + "field:dividerHeight": "final double", + "field:selectedBgColor": "final Color?", + "field:unSelectedBgColor": "final Color?", + "field:tabAlignment": "final TabAlignment?", + "method:createState": "State createState ()" + } + }, + "after": { + "kind": "class", + "members": { + "constructor:new": "({Key? key, required this.type, required this.navigationTabs, this.itemStyle = TTabBarItemStyle.label, this.style = TTabBarStyle.filled, this.iconTextLayout = TTabBarIconTextLayout.stacked, this.split = false, this.useSafeArea = true, this.needInkWell = false, this.indicatorAnimation = TTabBarIndicatorAnimation.none, this.animationDuration, this.animationCurve, required this.value, this.onChanged})", + "field:type": "final TTabBarType", + "field:itemStyle": "final TTabBarItemStyle", + "field:style": "final TTabBarStyle", + "field:iconTextLayout": "final TTabBarIconTextLayout", + "field:navigationTabs": "final List", + "field:split": "final bool", + "field:useSafeArea": "final bool", + "field:needInkWell": "final bool", + "field:indicatorAnimation": "final TTabBarIndicatorAnimation", + "field:animationDuration": "final Duration?", + "field:animationCurve": "final Curve?", + "field:value": "final int", + "field:onChanged": "final ValueChanged?", + "method:createState": "State createState ()" + } + }, + "migrationDirection": "TTabsBar", + "migrationNote": "入口重组,见对应组件;不保证参数/行为兼容" + }, + { + "old": "TDTabBarIndicator", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "field:context": "final BuildContext?", + "field:indicatorWidth": "final double?", + "field:indicatorHeight": "final double?", + "field:indicatorColor": "final Color?", + "constructor:new": "const ({this.context, this.indicatorWidth, this.indicatorHeight, this.indicatorColor})", + "method:createBoxPainter": "BoxPainter createBoxPainter ([VoidCallback? onChanged])" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDTabBarOutlineType", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "enum", + "members": { + "value:filled": "filled", + "value:capsule": "capsule", + "value:card": "card" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDTabBarVerticalIndicator", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "field:context": "final BuildContext?", + "field:indicatorWidth": "final double?", + "field:indicatorHeight": "final double?", + "constructor:new": "const ({this.context, this.indicatorWidth, this.indicatorHeight})", + "method:createBoxPainter": "BoxPainter createBoxPainter ([VoidCallback? onChanged])" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDTabBarView", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "field:children": "final List", + "field:controller": "final TabController?", + "field:isSlideSwitch": "final bool", + "constructor:new": "const ({Key? key, required this.children, this.controller, this.isSlideSwitch = false})", + "method:build": "Widget build (BuildContext context)" + } + }, + "after": null, + "migrationDirection": "TTabsBarView", + "migrationNote": "入口重组,见对应组件;不保证参数/行为兼容" + }, + { + "old": "TDTabOutlineType", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "enum", + "members": { + "value:filled": "filled", + "value:capsule": "capsule", + "value:card": "card" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDTabSize", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "enum", + "members": { + "value:large": "large", + "value:small": "small" + } + }, + "after": null, + "migrationDirection": "TTabsBarSize", + "migrationNote": "入口重组,见对应组件;不保证参数/行为兼容" + }, + { + "old": "TDTable", + "candidate": "TTable", + "classification": "declaration-changed", + "before": { + "kind": "class", + "members": { + "constructor:new": "const ({super.key, this.bordered, required this.columns, this.data, this.empty, this.height, this.rowHeight, this.loading = false, this.loadingWidget, this.showHeader = true, this.footerWidget, this.stripe = false, this.backgroundColor, this.width, this.defaultSort, this.onCellTap, this.onScroll, this.onSelect, this.onRowSelect})", + "field:bordered": "final bool?", + "field:columns": "final List", + "field:data": "final List?", + "field:empty": "final TDTableEmpty?", + "field:height": "final double?", + "field:rowHeight": "final double?", + "field:loading": "final bool?", + "field:loadingWidget": "final Widget?", + "field:showHeader": "final bool?", + "field:footerWidget": "final Widget?", + "field:stripe": "final bool?", + "field:backgroundColor": "final Color?", + "field:width": "final double?", + "field:defaultSort": "final String?", + "field:onCellTap": "final OnCellTap?", + "field:onScroll": "final OnScroll?", + "field:onSelect": "final OnSelect?", + "field:onRowSelect": "final OnRowSelect?", + "method:createState": "State createState ()" + } + }, + "after": { + "kind": "class", + "members": { + "constructor:new": "const ({required this.columns, required this.data, this.rowKey, this.cellSpanBuilder, this.selectionMode = TTableSelectionMode.none, this.selectedRows = const {}, this.onSelectionChanged, this.rowSelectable, this.sort, this.onSortChanged, this.loading = false, this.loadingWidget, this.empty, this.footer, this.showHeader = true, this.height, this.maxHeight, this.bordered, this.stripe, this.onCellTap, this.onRowTap, this.onScroll, super.key})", + "field:columns": "final List>", + "field:data": "final List", + "field:rowKey": "final TTableRowKey?", + "field:cellSpanBuilder": "final TTableCellSpanBuilder?", + "field:selectionMode": "final TTableSelectionMode", + "field:selectedRows": "final Set", + "field:onSelectionChanged": "final ValueChanged>?", + "field:rowSelectable": "final bool Function(T row, int index)?", + "field:sort": "final TTableSort?", + "field:onSortChanged": "final ValueChanged?", + "field:loading": "final bool", + "field:loadingWidget": "final Widget?", + "field:empty": "final Widget?", + "field:footer": "final Widget?", + "field:showHeader": "final bool", + "field:height": "final double?", + "field:maxHeight": "final double?", + "field:bordered": "final bool?", + "field:stripe": "final bool?", + "field:onCellTap": "final TTableCellTap?", + "field:onRowTap": "final TTableRowTap?", + "field:onScroll": "final ValueChanged?", + "method:createState": "State> createState ()" + } + }, + "migrationDirection": "TTable", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDTableCol", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "constructor:new": "({this.title, this.colKey, this.width, this.fixed = TDTableColFixed.none, this.ellipsis, this.ellipsisTitle, this.cellBuilder, this.align = TDTableColAlign.left, this.sortable = false, this.selection, this.selectable, this.checked})", + "field:selection": "bool?", + "field:title": "String?", + "field:colKey": "String?", + "field:width": "double?", + "field:fixed": "TDTableColFixed?", + "field:ellipsis": "bool?", + "field:ellipsisTitle": "bool?", + "field:cellBuilder": "IndexedWidgetBuilder?", + "field:align": "TDTableColAlign?", + "field:sortable": "bool?", + "field:selectable": "SelectableFunc?", + "field:checked": "RowCheckFunc?", + "get:widthPx": "double? widthPx" + } + }, + "after": null, + "migrationDirection": "TTableColumn", + "migrationNote": "入口重组,见对应组件;不保证参数/行为兼容" + }, + { + "old": "TDTableColAlign", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "enum", + "members": { + "value:left": "left", + "value:center": "center", + "value:right": "right" + } + }, + "after": null, + "migrationDirection": "TTableColumnAlign", + "migrationNote": "入口重组,见对应组件;不保证参数/行为兼容" + }, + { + "old": "TDTableColFixed", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "enum", + "members": { + "value:left": "left", + "value:right": "right", + "value:none": "none" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDTableEmpty", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "constructor:new": "({this.assetUrl, this.text})", + "field:assetUrl": "String?", + "field:text": "String?" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDTableState", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "method:initState": "void initState ()", + "method:didUpdateWidget": "void didUpdateWidget (covariant TDTable oldWidget)", + "method:getAllIcon": "Widget getAllIcon (bool checked, bool halfSelected)", + "method:build": "Widget build (BuildContext context)" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDTag", + "candidate": "TTag", + "classification": "declaration-changed", + "before": { + "kind": "class", + "members": { + "constructor:new": "const (this.text, {this.theme, this.icon, this.iconWidget, this.textColor, this.backgroundColor, this.font, this.fontWeight, this.style, this.size = TDTagSize.medium, this.padding, this.forceVerticalCenter = true, this.isOutline = false, this.shape = TDTagShape.square, this.isLight = false, this.disable = false, this.needCloseIcon = false, this.onCloseTap, this.overflow, this.fixedWidth, Key? key})", + "field:text": "final String", + "field:theme": "final TDTagTheme?", + "field:icon": "final IconData?", + "field:iconWidget": "final Widget?", + "field:textColor": "final Color?", + "field:backgroundColor": "final Color?", + "field:font": "final Font?", + "field:fontWeight": "final FontWeight?", + "field:style": "final TDTagStyle?", + "field:size": "final TDTagSize", + "field:padding": "final EdgeInsets?", + "field:forceVerticalCenter": "final bool", + "field:isOutline": "final bool", + "field:shape": "final TDTagShape", + "field:isLight": "final bool", + "field:disable": "final bool", + "field:needCloseIcon": "final bool", + "field:overflow": "final TextOverflow?", + "field:onCloseTap": "final GestureTapCallback?", + "field:fixedWidth": "final double?", + "method:build": "Widget build (BuildContext context)", + "method:getIcon": "Widget? getIcon (TDTagStyle innerStyle)" + } + }, + "after": { + "kind": "class", + "members": { + "constructor:new": "const (this.text, {this.colorPreset = TTagColorPreset.defaultTheme, this.variant = TTagVariant.dark, this.icon, this.size = TTagSize.medium, this.shape = TTagShape.square, this.needCloseIcon = false, this.enabled = true, this.onTap, this.onCloseTap, Key? key})", + "field:text": "final String", + "field:colorPreset": "final TTagColorPreset", + "field:variant": "final TTagVariant", + "field:icon": "final IconData?", + "field:size": "final TTagSize", + "field:shape": "final TTagShape", + "field:needCloseIcon": "final bool", + "field:enabled": "final bool", + "field:onTap": "final GestureTapCallback?", + "field:onCloseTap": "final GestureTapCallback?", + "method:build": "Widget build (BuildContext context)" + } + }, + "migrationDirection": "TTag", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDTagShape", + "candidate": "TTagShape", + "classification": "declaration-shape-unchanged", + "before": { + "kind": "enum", + "members": { + "value:square": "square", + "value:round": "round", + "value:mark": "mark" + } + }, + "after": { + "kind": "enum", + "members": { + "value:square": "square", + "value:round": "round", + "value:mark": "mark" + } + }, + "migrationDirection": "TTagShape", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDTagSize", + "candidate": "TTagSize", + "classification": "declaration-shape-unchanged", + "before": { + "kind": "enum", + "members": { + "value:extraLarge": "extraLarge", + "value:large": "large", + "value:medium": "medium", + "value:small": "small", + "value:custom": "custom" + } + }, + "after": { + "kind": "enum", + "members": { + "value:extraLarge": "extraLarge", + "value:large": "large", + "value:medium": "medium", + "value:small": "small", + "value:custom": "custom" + } + }, + "migrationDirection": "TTagSize", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDTagStyle", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "constructor:new": "({this.context, this.textColor, this.backgroundColor, this.font, this.fontWeight, this.border = 0, this.borderColor, this.borderRadius})", + "field:context": "BuildContext?", + "field:textColor": "Color?", + "field:backgroundColor": "Color?", + "field:borderColor": "Color?", + "field:closeIconColor": "Color?", + "field:borderRadius": "BorderRadiusGeometry?", + "field:font": "Font?", + "field:fontWeight": "FontWeight?", + "field:border": "double", + "get:getTextColor": "Color getTextColor", + "get:getBackgroundColor": "Color getBackgroundColor", + "get:getBorderColor": "Color getBorderColor", + "get:getBorderRadius": "BorderRadiusGeometry getBorderRadius", + "constructor:generateFillStyleByTheme": "(BuildContext context, TDTagTheme? theme, bool light, TDTagShape shape)", + "constructor:generateOutlineStyleByTheme": "(BuildContext context, TDTagTheme? theme, bool light, TDTagShape shape)", + "constructor:generateDisableSelectStyle": "(BuildContext context, bool isLight, bool isOutline, TDTagShape shape)" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDTagTheme", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "enum", + "members": { + "value:defaultTheme": "defaultTheme", + "value:primary": "primary", + "value:warning": "warning", + "value:danger": "danger", + "value:success": "success" + } + }, + "after": null, + "migrationDirection": "TTagColorPreset", + "migrationNote": "入口重组,见对应组件;不保证参数/行为兼容" + }, + { + "old": "TDTapEvent", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "typedef", + "members": { + "signature": "typedef TDTapEvent = void Function();" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDTapFunction", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "typedef", + "members": { + "signature": "typedef TDTapFunction = void Function();" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDText", + "candidate": "TText", + "classification": "declaration-changed", + "before": { + "kind": "class", + "members": { + "constructor:new": "const (this.data, {this.font, this.fontWeight, this.fontFamily, this.textColor, this.backgroundColor, this.isTextThrough = false, this.lineThroughColor, this.package, this.style, this.strutStyle, this.textAlign, this.textDirection, this.locale, this.softWrap, this.overflow, this.textScaleFactor, this.maxLines, this.semanticsLabel, this.textWidthBasis, this.textHeightBehavior, this.forceVerticalCenter = false, this.isInFontLoader = false, this.fontFamilyUrl, Key? key})", + "constructor:rich": "const (this.textSpan, {this.font, this.fontWeight, this.fontFamily, this.textColor, this.backgroundColor, this.isTextThrough = false, this.lineThroughColor, this.package, Key? key, this.style, this.strutStyle, this.textAlign, this.textDirection, this.locale, this.softWrap, this.overflow, this.textScaleFactor, this.maxLines, this.semanticsLabel, this.textWidthBasis, this.textHeightBehavior, this.forceVerticalCenter = false, this.isInFontLoader = false, this.fontFamilyUrl})", + "field:font": "final Font?", + "field:fontWeight": "final FontWeight?", + "field:fontFamily": "final FontFamily?", + "field:textColor": "final Color?", + "field:backgroundColor": "final Color?", + "field:package": "final String?", + "field:isTextThrough": "final bool?", + "field:lineThroughColor": "final Color?", + "field:style": "final TextStyle?", + "field:data": "final", + "field:strutStyle": "final StrutStyle?", + "field:textAlign": "final TextAlign?", + "field:textDirection": "final TextDirection?", + "field:locale": "final Locale?", + "field:softWrap": "final bool?", + "field:overflow": "final TextOverflow?", + "field:textScaleFactor": "final double?", + "field:maxLines": "final int?", + "field:semanticsLabel": "final String?", + "field:textWidthBasis": "final TextWidthBasis?", + "field:textHeightBehavior": "final ui.TextHeightBehavior?", + "field:textSpan": "final InlineSpan?", + "field:forceVerticalCenter": "final bool", + "field:isInFontLoader": "final bool", + "field:fontFamilyUrl": "final String?", + "method:build": "Widget build (BuildContext context)", + "method:getConfiguration": "TDTextConfiguration? getConfiguration (BuildContext context)", + "method:getTextStyle": "TextStyle? getTextStyle (BuildContext context, {double? height, Color? backgroundColor})", + "method:getRawText": "Text getRawText ({required BuildContext context})" + } + }, + "after": { + "kind": "class", + "members": { + "constructor:new": "const (String this.data, {this.font, this.style, this.strutStyle, this.textAlign, this.textDirection, this.locale, this.softWrap, this.overflow, this.textScaler, this.maxLines, this.semanticsLabel, this.semanticsIdentifier, this.textWidthBasis, this.textHeightBehavior, this.selectionColor, super.key})", + "constructor:rich": "const (InlineSpan this.textSpan, {this.font, this.style, this.strutStyle, this.textAlign, this.textDirection, this.locale, this.softWrap, this.overflow, this.textScaler, this.maxLines, this.semanticsLabel, this.semanticsIdentifier, this.textWidthBasis, this.textHeightBehavior, this.selectionColor, super.key})", + "field:font": "final Font?", + "field:style": "final TextStyle?", + "field:data": "final String?", + "field:textSpan": "final InlineSpan?", + "field:strutStyle": "final StrutStyle?", + "field:textAlign": "final TextAlign?", + "field:textDirection": "final TextDirection?", + "field:locale": "final Locale?", + "field:softWrap": "final bool?", + "field:overflow": "final TextOverflow?", + "field:textScaler": "final TextScaler?", + "field:maxLines": "final int?", + "field:semanticsLabel": "final String?", + "field:semanticsIdentifier": "final String?", + "field:textWidthBasis": "final TextWidthBasis?", + "field:textHeightBehavior": "final ui.TextHeightBehavior?", + "field:selectionColor": "final Color?", + "method:build": "Widget build (BuildContext context)", + "method:getRawText": "Text getRawText ({required BuildContext context})", + "method:getTextStyle": "TextStyle getTextStyle (BuildContext context)" + } + }, + "migrationDirection": "TText", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDTextConfiguration", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "field:paddingConfig": "final TDTextPaddingConfig?", + "field:globalFontFamily": "final FontFamily?", + "constructor:new": "const ({Key? key, required Widget child, this.paddingConfig, this.globalFontFamily})", + "method:updateShouldNotify": "bool updateShouldNotify (covariant TDTextConfiguration oldWidget)" + } + }, + "after": null, + "migrationDirection": "TTextThemeData", + "migrationNote": "入口重组,见对应组件;不保证参数/行为兼容" + }, + { + "old": "TDTextLabel", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "constructor:new": "const (String data, {Key? key, TextStyle? style})" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDTextPaddingConfig", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "method:getDefaultConfig": "static TDTextPaddingConfig getDefaultConfig ()", + "method:getPadding": "EdgeInsetsGeometry getPadding (String? data, double fontSize, double height)", + "get:paddingRate": "double paddingRate", + "get:paddingExtraRate": "double paddingExtraRate", + "get:heightRate": "double heightRate" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDTextSpan", + "candidate": "TTextSpan", + "classification": "declaration-changed", + "before": { + "kind": "class", + "members": { + "constructor:new": "({BuildContext? context, Font? font, FontWeight? fontWeight, FontFamily? fontFamily, Color? textColor, bool? isTextThrough = false, Color? lineThroughColor, String? package, String? text, List? children, TextStyle? style, GestureRecognizer? recognizer, MouseCursor? mouseCursor, PointerEnterEventListener? onEnter, PointerExitEventListener? onExit, String? semanticsLabel})" + } + }, + "after": { + "kind": "class", + "members": { + "constructor:new": "const ({String? text, List? children, TextStyle? style, GestureRecognizer? recognizer, MouseCursor? mouseCursor, PointerEnterEventListener? onEnter, PointerExitEventListener? onExit, String? semanticsLabel, String? semanticsIdentifier, Locale? locale, bool? spellOut})" + } + }, + "migrationDirection": "TTextSpan", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDTextarea", + "candidate": "TTextarea", + "classification": "declaration-changed", + "before": { + "kind": "class", + "members": { + "constructor:new": "const ({Key? key, this.width, this.textStyle, this.backgroundColor, this.decoration, this.labelStyle, this.required, this.readOnly = false, this.autofocus = false, this.onEditingComplete, this.onSubmitted, this.hintText, this.inputType, this.onChanged, this.inputFormatters, this.inputDecoration, this.maxLines, this.minLines = 4, this.focusNode, this.controller, this.cursorColor, this.hintTextStyle, this.labelWidget, this.textInputBackgroundColor, this.size = TDInputSize.large, this.maxLength, this.maxLengthEnforcement, this.allowInputOverMax = false, this.additionInfo = '', this.additionInfoColor, this.textAlign, this.label, this.indicator = false, this.layout = TDTextareaLayout.horizontal, this.autosize, this.labelIcon, this.labelWidth, this.margin, this.padding, this.textareaDecoration, this.bordered, this.showBottomDivider = true})", + "field:width": "final double?", + "field:backgroundColor": "final Color?", + "field:decoration": "final Decoration?", + "field:textareaDecoration": "final Decoration?", + "field:label": "final String?", + "field:labelIcon": "final Widget?", + "field:labelWidth": "final double?", + "field:labelWidget": "final Widget?", + "field:required": "final bool?", + "field:readOnly": "final bool?", + "field:hintText": "final String?", + "field:inputType": "final TextInputType?", + "field:onChanged": "final ValueChanged?", + "field:inputFormatters": "final List?", + "field:controller": "final TextEditingController?", + "field:maxLines": "final int?", + "field:minLines": "final int?", + "field:focusNode": "final FocusNode?", + "field:autofocus": "final bool?", + "field:onEditingComplete": "final VoidCallback?", + "field:onSubmitted": "final ValueChanged?", + "field:inputDecoration": "final InputDecoration?", + "field:textStyle": "final TextStyle?", + "field:hintTextStyle": "final TextStyle?", + "field:textInputBackgroundColor": "final Color?", + "field:cursorColor": "final Color?", + "field:size": "final TDInputSize?", + "field:maxLength": "final int?", + "field:maxLengthEnforcement": "final MaxLengthEnforcement?", + "field:allowInputOverMax": "final bool?", + "field:additionInfo": "final String?", + "field:additionInfoColor": "final Color?", + "field:textAlign": "final TextAlign?", + "field:labelStyle": "final TextStyle?", + "field:indicator": "final bool?", + "field:layout": "final TDTextareaLayout?", + "field:autosize": "final bool?", + "field:margin": "final EdgeInsetsGeometry?", + "field:padding": "final EdgeInsetsGeometry?", + "field:bordered": "final bool?", + "field:showBottomDivider": "final bool?", + "method:createState": "_TDTextareaState createState ()" + } + }, + "after": { + "kind": "class", + "members": { + "constructor:new": "const ({super.key, this.controller, this.initialValue, this.onChanged, this.onSubmitted, this.onEditingComplete, this.enabled = true, this.readOnly = false, this.hintText, this.label, this.layout = TTextareaLayout.horizontal, this.prefix, this.suffix, this.clearButtonMode, this.status = TInputStatus.normal, this.bordered = false, this.maxLines, this.minLines, this.maxLength, this.maxCharacter, this.indicator = false, this.autofocus = false, this.focusNode, this.inputType = TextInputType.multiline, this.inputAction, this.textAlign = TextAlign.start, this.inputFormatters})", + "field:controller": "final TextEditingController?", + "field:initialValue": "final String?", + "field:onChanged": "final ValueChanged?", + "field:onSubmitted": "final ValueChanged?", + "field:onEditingComplete": "final VoidCallback?", + "field:enabled": "final bool", + "field:readOnly": "final bool", + "field:hintText": "final String?", + "field:label": "final String?", + "field:layout": "final TTextareaLayout", + "field:prefix": "final Widget?", + "field:suffix": "final Widget?", + "field:clearButtonMode": "final TInputClearButtonMode?", + "field:status": "final TInputStatus", + "field:bordered": "final bool", + "field:maxLines": "final int?", + "field:minLines": "final int?", + "field:maxLength": "final int?", + "field:maxCharacter": "final int?", + "field:indicator": "final bool", + "field:autofocus": "final bool", + "field:focusNode": "final FocusNode?", + "field:inputType": "final TextInputType", + "field:inputAction": "final TextInputAction?", + "field:textAlign": "final TextAlign", + "field:inputFormatters": "final List?", + "method:createState": "State createState ()" + } + }, + "migrationDirection": "TTextarea", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDTextareaLayout", + "candidate": "TTextareaLayout", + "classification": "declaration-changed", + "before": { + "kind": "enum", + "members": { + "value:vertical": "vertical", + "value:horizontal": "horizontal" + } + }, + "after": { + "kind": "enum", + "members": { + "value:horizontal": "horizontal", + "value:vertical": "vertical" + } + }, + "migrationDirection": "TTextareaLayout", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDTheme", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "constructor:new": "const ({required this.data, required this.child, this.systemData, Key? key})", + "field:child": "final Widget", + "field:data": "final TDThemeData", + "field:systemData": "final ThemeData?", + "method:build": "Widget build (BuildContext context)", + "method:needMultiTheme": "static void needMultiTheme ([bool value = true])", + "method:setResourceBuilder": "static void setResourceBuilder (TDTDResourceBuilder delegate, {bool needAlwaysBuild = false})", + "method:defaultData": "static TDThemeData defaultData ()", + "method:of": "static TDThemeData of ([BuildContext? context])", + "method:ofNullable": "static TDThemeData? ofNullable ([BuildContext? context])" + } + }, + "after": null, + "migrationDirection": "TThemeData", + "migrationNote": "入口重组,见对应组件;不保证参数/行为兼容" + }, + { + "old": "TDThemeData", + "candidate": "TThemeData", + "classification": "declaration-changed", + "before": { + "kind": "class", + "members": { + "field:dark": "TDThemeData?", + "field:light": "TDThemeData", + "field:name": "String", + "field:colorMap": "TDMap", + "field:fontMap": "TDMap", + "field:radiusMap": "TDMap", + "field:fontFamilyMap": "TDMap", + "field:shadowMap": "TDMap>", + "field:spacerMap": "TDMap", + "field:refMap": "TDMap", + "field:extraThemeData": "TDExtraThemeData?", + "constructor:new": "({required this.name, required this.colorMap, required this.fontMap, required this.radiusMap, required this.fontFamilyMap, required this.shadowMap, required this.spacerMap, required this.refMap, this.extraThemeData})", + "method:defaultData": "static TDThemeData defaultData ({TDExtraThemeData? extraThemeData})", + "method:copyWithTDThemeData": "TDThemeData copyWithTDThemeData (String name, {Map? colorMap, Map? fontMap, Map? radiusMap, Map? fontFamilyMap, Map>? shadowMap, Map? marginMap, TDExtraThemeData? extraThemeData})", + "get:systemThemeDataLight": "ThemeData? systemThemeDataLight", + "get:systemThemeDataDark": "ThemeData? systemThemeDataDark", + "method:copyWith": "ThemeExtension copyWith ({String? name, Map? colorMap, Map? fontMap, Map? radiusMap, Map? fontFamilyMap, Map>? shadowMap, Map? marginMap, TDExtraThemeData? extraThemeData})", + "method:fromJson": "static TDThemeData? fromJson (String name, String themeJson, {String? darkName, var recoverDefault = false, TDExtraThemeData? extraThemeData})", + "method:parseThemeData": "static TDThemeData parseThemeData (String name, themeConfig, TDExtraThemeData? extraThemeData)", + "method:ofColor": "Color? ofColor (String? key)", + "method:ofFont": "Font? ofFont (String? key)", + "method:ofCorner": "double? ofCorner (String? key)", + "method:ofFontFamily": "FontFamily? ofFontFamily (String? key)", + "method:ofShadow": "List? ofShadow (String? key)", + "method:ofExtra": "T? ofExtra ()", + "method:lerp": "ThemeExtension lerp (ThemeExtension? other, double t)" + } + }, + "after": { + "kind": "class", + "members": { + "field:dark": "TThemeData?", + "field:light": "TThemeData", + "field:name": "String", + "field:colorMap": "TMap", + "field:fontMap": "TMap", + "field:fontMetricMap": "TMap", + "field:radiusMap": "TMap", + "field:fontFamilyMap": "TMap", + "field:shadowMap": "TMap>", + "field:insetShadowMap": "TMap", + "field:spacerMap": "TMap", + "field:refMap": "TMap", + "field:extraThemeData": "TExtraThemeData?", + "constructor:new": "({required this.name, required this.colorMap, required this.fontMap, TMap? fontMetricMap, required this.radiusMap, required this.fontFamilyMap, required this.shadowMap, TMap? insetShadowMap, required this.spacerMap, required this.refMap, this.extraThemeData})", + "method:defaultData": "static TThemeData defaultData ({TExtraThemeData? extraThemeData})", + "method:copyWith": "TThemeData copyWith ({String? name, Map? colorMap, Map? fontMap, Map? fontMetricMap, Map? radiusMap, Map? fontFamilyMap, Map>? shadowMap, Map? insetShadowMap, Map? spacerMap, TExtraThemeData? extraThemeData})", + "method:fromJson": "static TThemeData? fromJson (String name, String themeJson, {String? darkName, bool recoverDefault = false, TExtraThemeData? extraThemeData})", + "method:lerp": "TThemeData lerp (ThemeExtension? other, double t)" + } + }, + "migrationDirection": "TThemeData", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDTimeCounter", + "candidate": "TTimeCounter", + "classification": "declaration-changed", + "before": { + "kind": "class", + "members": { + "constructor:new": "const ({Key? key, this.autoStart = true, this.content = 'default', this.format = 'HH:mm:ss', this.millisecond = false, this.size = TDTimeCounterSize.medium, this.splitWithUnit = false, this.theme = TDTimeCounterTheme.defaultTheme, required this.time, this.style, this.onChange, this.onFinish, this.direction = TDTimeCounterDirection.down, this.controller})", + "field:autoStart": "final bool", + "field:content": "final dynamic", + "field:format": "final String", + "field:millisecond": "final bool", + "field:size": "final TDTimeCounterSize", + "field:splitWithUnit": "final bool", + "field:theme": "final TDTimeCounterTheme", + "field:time": "final int", + "field:style": "final TDTimeCounterStyle?", + "field:onChange": "final Function(int time)?", + "field:onFinish": "final VoidCallback?", + "field:direction": "final TDTimeCounterDirection", + "field:controller": "final TDTimeCounterController?", + "method:createState": "_TDTimeCounterState createState ()" + } + }, + "after": { + "kind": "class", + "members": { + "constructor:new": "const ({super.key, this.autoStart = true, this.content, this.format = 'HH:mm:ss', this.size, this.splitWithUnit = false, this.variant, required this.time, this.onChanged, this.onFinish, this.direction = TTimeCounterDirection.down, this.controller})", + "field:autoStart": "final bool", + "field:content": "final TTimeCounterBuilder?", + "field:format": "final String", + "field:size": "final TTimeCounterSize?", + "field:splitWithUnit": "final bool", + "field:variant": "final TTimeCounterVariant?", + "field:time": "final int", + "field:onChanged": "final ValueChanged?", + "field:onFinish": "final VoidCallback?", + "field:direction": "final TTimeCounterDirection", + "field:controller": "final TTimeCounterController?", + "method:createState": "State createState ()" + } + }, + "migrationDirection": "TTimeCounter", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDTimeCounterController", + "candidate": "TTimeCounterController", + "classification": "declaration-changed", + "before": { + "kind": "class", + "members": { + "constructor:new": "()", + "get:time": "int? time", + "method:start": "void start ()", + "method:pause": "void pause ()", + "method:resume": "void resume ()", + "method:reset": "void reset ([int? time])" + } + }, + "after": { + "kind": "class", + "members": { + "method:start": "void start ()", + "method:pause": "void pause ()", + "method:reset": "void reset ([int? time])" + } + }, + "migrationDirection": "TTimeCounterController", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDTimeCounterDirection", + "candidate": "TTimeCounterDirection", + "classification": "declaration-shape-unchanged", + "before": { + "kind": "enum", + "members": { + "value:down": "down", + "value:up": "up" + } + }, + "after": { + "kind": "enum", + "members": { + "value:down": "down", + "value:up": "up" + } + }, + "migrationDirection": "TTimeCounterDirection", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDTimeCounterSize", + "candidate": "TTimeCounterSize", + "classification": "declaration-shape-unchanged", + "before": { + "kind": "enum", + "members": { + "value:small": "small", + "value:medium": "medium", + "value:large": "large" + } + }, + "after": { + "kind": "enum", + "members": { + "value:small": "small", + "value:medium": "medium", + "value:large": "large" + } + }, + "migrationDirection": "TTimeCounterSize", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDTimeCounterStatus", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "enum", + "members": { + "value:start": "start", + "value:pause": "pause", + "value:resume": "resume", + "value:reset": "reset", + "value:idle": "idle" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDTimeCounterStyle", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "constructor:new": "({this.timeWidth, this.timeHeight, this.timePadding, this.timeMargin, this.timeBox, this.timeFontFamily, this.timeFontSize, this.timeFontHeight, this.timeFontWeight, this.timeColor, this.splitFontSize, this.splitFontHeight, this.splitFontWeight, this.splitColor, this.space})", + "field:timeWidth": "double?", + "field:timeHeight": "double?", + "field:timePadding": "EdgeInsets?", + "field:timeMargin": "EdgeInsets?", + "field:timeBox": "BoxDecoration?", + "field:timeFontFamily": "FontFamily?", + "field:timeFontSize": "double?", + "field:timeFontHeight": "double?", + "field:timeFontWeight": "FontWeight?", + "field:timeColor": "Color?", + "field:splitFontSize": "double?", + "field:splitFontHeight": "double?", + "field:splitFontWeight": "FontWeight?", + "field:splitColor": "Color?", + "field:space": "double?", + "constructor:generateStyle": "(BuildContext context, {TDTimeCounterSize? size, TDTimeCounterTheme? theme, bool? splitWithUnit})" + } + }, + "after": null, + "migrationDirection": "TTimeCounterVariant", + "migrationNote": "入口重组,见对应组件;不保证参数/行为兼容" + }, + { + "old": "TDTimeCounterTheme", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "enum", + "members": { + "value:defaultTheme": "defaultTheme", + "value:round": "round", + "value:square": "square" + } + }, + "after": null, + "migrationDirection": "TTimeCounterVariant", + "migrationNote": "入口重组,见对应组件;不保证参数/行为兼容" + }, + { + "old": "TDToast", + "candidate": "TToast", + "classification": "declaration-changed", + "before": { + "kind": "class", + "members": { + "method:showText": "static String showText (String? text, {required BuildContext context, Duration duration = const Duration(milliseconds: 3000), int? maxLines, BoxConstraints? constraints, bool? preventTap, Widget? customWidget, Color? backgroundColor, TextStyle? textStyle, String? toastId})", + "method:showIconText": "static String showIconText (String? text, {IconData? icon, IconTextDirection direction = IconTextDirection.horizontal, required BuildContext context, Duration duration = const Duration(milliseconds: 3000), bool? preventTap, Color? backgroundColor, int? maxLines, TextStyle? textStyle, double? iconSize, Color? iconColor, String? toastId})", + "method:showSuccess": "static String showSuccess (String? text, {IconTextDirection direction = IconTextDirection.horizontal, required BuildContext context, Duration duration = const Duration(milliseconds: 3000), bool? preventTap, Color? backgroundColor, int? maxLines, TextStyle? textStyle, double? iconSize, Color? iconColor, String? toastId})", + "method:showWarning": "static String showWarning (String? text, {IconTextDirection direction = IconTextDirection.horizontal, required BuildContext context, Duration duration = const Duration(milliseconds: 3000), bool? preventTap, Color? backgroundColor, int? maxLines, TextStyle? textStyle, double? iconSize, Color? iconColor, String? toastId})", + "method:showFail": "static String showFail (String? text, {IconTextDirection direction = IconTextDirection.horizontal, required BuildContext context, Duration duration = const Duration(milliseconds: 3000), bool? preventTap, Color? backgroundColor, int? maxLines, TextStyle? textStyle, double? iconSize, Color? iconColor, String? toastId})", + "method:showLoading": "static String showLoading ({required BuildContext context, String? text, Duration duration = const Duration(seconds: 99999999), bool? preventTap, Widget? customWidget, Color? backgroundColor, TextStyle? textStyle, double? iconSize, Color? iconColor, String? toastId})", + "method:showLoadingWithoutText": "static String showLoadingWithoutText ({required BuildContext context, Duration duration = const Duration(seconds: 99999999), bool? preventTap, Color? backgroundColor, double? iconSize, Color? iconColor, String? toastId})", + "method:dismissToast": "static void dismissToast (String toastId)", + "method:dismissAll": "static void dismissAll ()", + "method:dismissLoading": "static void dismissLoading ()" + } + }, + "after": { + "kind": "class", + "members": { + "method:showText": "static String showText (String? text, {required BuildContext context, Duration duration = const Duration(milliseconds: 2000), int? maxLines, BoxConstraints? constraints, TOverlayConfig? overlay, TToastPlacement placement = TToastPlacement.middle, Widget? customWidget, Color? backgroundColor, TextStyle? textStyle, String? toastId})", + "method:showIconText": "static String showIconText (String? text, {IconData? icon, IconTextDirection direction = IconTextDirection.horizontal, required BuildContext context, Duration duration = const Duration(milliseconds: 2000), TOverlayConfig? overlay, TToastPlacement placement = TToastPlacement.middle, Color? backgroundColor, int? maxLines, TextStyle? textStyle, double? iconSize, Color? iconColor, String? toastId})", + "method:showSuccess": "static String showSuccess (String? text, {IconTextDirection direction = IconTextDirection.horizontal, required BuildContext context, Duration duration = const Duration(milliseconds: 2000), TOverlayConfig? overlay, TToastPlacement placement = TToastPlacement.middle, Color? backgroundColor, int? maxLines, TextStyle? textStyle, double? iconSize, Color? iconColor, String? toastId})", + "method:showWarning": "static String showWarning (String? text, {IconTextDirection direction = IconTextDirection.horizontal, required BuildContext context, Duration duration = const Duration(milliseconds: 2000), TOverlayConfig? overlay, TToastPlacement placement = TToastPlacement.middle, Color? backgroundColor, int? maxLines, TextStyle? textStyle, double? iconSize, Color? iconColor, String? toastId})", + "method:showFail": "static String showFail (String? text, {IconTextDirection direction = IconTextDirection.horizontal, required BuildContext context, Duration duration = const Duration(milliseconds: 2000), TOverlayConfig? overlay, TToastPlacement placement = TToastPlacement.middle, Color? backgroundColor, int? maxLines, TextStyle? textStyle, double? iconSize, Color? iconColor, String? toastId})", + "method:showLoading": "static String showLoading ({required BuildContext context, String? text, Duration duration = const Duration(milliseconds: 2000), TOverlayConfig? overlay, TToastPlacement placement = TToastPlacement.middle, Widget? customWidget, Color? backgroundColor, TextStyle? textStyle, double? iconSize, Color? iconColor, String? toastId})", + "method:showLoadingWithoutText": "static String showLoadingWithoutText ({required BuildContext context, Duration duration = const Duration(milliseconds: 2000), TOverlayConfig? overlay, TToastPlacement placement = TToastPlacement.middle, Color? backgroundColor, double? iconSize, Color? iconColor, String? toastId})", + "method:dismissToast": "static void dismissToast (String toastId)", + "method:dismissAll": "static void dismissAll ()" + } + }, + "migrationDirection": "TToast", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDToastConfig", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "field:backgroundColor": "final Color?", + "field:textStyle": "final TextStyle?", + "field:iconSize": "final double?", + "field:iconColor": "final Color?", + "field:duration": "final Duration", + "field:preventTap": "final bool", + "constructor:new": "const ({this.backgroundColor, this.textStyle, this.iconSize, this.iconColor, this.duration = const Duration(milliseconds: 3000), this.preventTap = false})" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDTreeSelect", + "candidate": "TTreeSelect", + "classification": "declaration-changed", + "before": { + "kind": "class", + "members": { + "constructor:new": "const ({Key? key, this.options = const [], this.defaultValue = const [], this.onChange, this.multiple = false, this.style = TDTreeSelectStyle.normal, this.height = 336})", + "field:options": "final List", + "field:defaultValue": "final List", + "field:onChange": "final TDTreeSelectChangeEvent?", + "field:height": "final double", + "field:multiple": "final bool", + "field:style": "final TDTreeSelectStyle", + "method:createState": "State createState ()" + } + }, + "after": { + "kind": "class", + "members": { + "constructor:new": "const ({super.key, required this.options, required this.value, this.onChanged, this.multiple = false})", + "field:options": "final List", + "field:value": "final List>", + "field:onChanged": "final ValueChanged>>?", + "field:multiple": "final bool", + "method:createState": "State createState ()" + } + }, + "migrationDirection": "TTreeSelect", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDTreeSelectChangeEvent", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "typedef", + "members": { + "signature": "typedef TDTreeSelectChangeEvent = void Function(List, int level);" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDTreeSelectStyle", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "enum", + "members": { + "value:normal": "normal", + "value:outline": "outline" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDUpload", + "candidate": "TUpload", + "classification": "declaration-changed", + "before": { + "kind": "class", + "members": { + "constructor:new": "const ({Key? key, this.max = 0, this.mediaType = const [TDUploadMediaType.image, TDUploadMediaType.video], this.sizeLimit, this.onCancel, this.onError, this.onValidate, this.onClick, this.onMaxLimitReached, required this.files, this.onChange, this.multiple = false, this.width = 80.0, this.height = 80.0, this.type = TDUploadBoxType.roundedSquare, this.disabled = false, this.enabledReplaceType = false, this.wrapSpacing, this.wrapRunSpacing, this.wrapAlignment, this.onUploadTap})", + "field:files": "final List", + "field:max": "final int", + "field:mediaType": "final List", + "field:sizeLimit": "final double?", + "field:multiple": "final bool", + "field:onCancel": "final VoidCallback?", + "field:onError": "final TDUploadErrorEvent?", + "field:onValidate": "final TDUploadValidatorEvent?", + "field:onClick": "final TDUploadClickEvent?", + "field:onMaxLimitReached": "final VoidCallback?", + "field:onChange": "final TDUploadValueChangedEvent?", + "field:width": "final double?", + "field:height": "final double?", + "field:type": "final TDUploadBoxType", + "field:enabledReplaceType": "final bool?", + "field:disabled": "final bool?", + "field:wrapSpacing": "final double?", + "field:wrapRunSpacing": "final double?", + "field:wrapAlignment": "final WrapAlignment?", + "field:onUploadTap": "final VoidCallback?", + "method:createState": "State createState ()" + } + }, + "after": { + "kind": "class", + "members": { + "constructor:new": "const ({super.key, required this.files, this.onChanged, this.mediaType = TUploadMediaType.image, this.layout = TUploadLayout.grid, this.draggable = false, this.maxFiles = 1, this.maxFileSize, this.picker, this.onFileTap, this.onValidationError, this.onError})", + "field:files": "final List", + "field:onChanged": "final ValueChanged>?", + "field:mediaType": "final TUploadMediaType", + "field:layout": "final TUploadLayout", + "field:draggable": "final bool", + "field:maxFiles": "final int?", + "field:maxFileSize": "final int?", + "field:picker": "final TUploadPicker?", + "field:onFileTap": "final ValueChanged?", + "field:onValidationError": "final ValueChanged?", + "field:onError": "final ValueChanged?", + "method:build": "Widget build (BuildContext context)" + } + }, + "migrationDirection": "TUpload", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDUploadBoxType", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "enum", + "members": { + "value:roundedSquare": "roundedSquare", + "value:circle": "circle" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDUploadClickEvent", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "typedef", + "members": { + "signature": "typedef TDUploadClickEvent = void Function(int value);" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDUploadErrorEvent", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "typedef", + "members": { + "signature": "typedef TDUploadErrorEvent = void Function(Object e);" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDUploadFile", + "candidate": "TUploadFile", + "classification": "declaration-changed", + "before": { + "kind": "class", + "members": { + "constructor:new": "({required this.key, this.remotePath, this.assetPath, this.file, this.progress, this.status = TDUploadFileStatus.success, this.loadingText = 'Loading...', this.retryText = 'Re-Upload', this.errorText = 'Error', this.canDelete = true})", + "field:key": "final int", + "field:remotePath": "final String?", + "field:assetPath": "final String?", + "field:file": "final File?", + "field:canDelete": "final bool", + "field:progress": "final int?", + "field:loadingText": "final String", + "field:retryText": "final String", + "field:errorText": "final String", + "field:status": "TDUploadFileStatus" + } + }, + "after": { + "kind": "class", + "members": { + "constructor:new": "const ({required this.id, required this.name, this.url, this.bytes, this.size, this.status = TUploadFileStatus.ready, this.progress, this.errorText, this.canRemove = true})", + "field:id": "final String", + "field:name": "final String", + "field:url": "final String?", + "field:bytes": "final Uint8List?", + "field:size": "final int?", + "field:status": "final TUploadFileStatus", + "field:progress": "final double?", + "field:errorText": "final String?", + "field:canRemove": "final bool", + "method:copyWith": "TUploadFile copyWith ({String? id, String? name, String? url, Uint8List? bytes, int? size, TUploadFileStatus? status, double? progress, String? errorText, bool? canRemove})" + } + }, + "migrationDirection": "TUploadFile", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDUploadFileStatus", + "candidate": "TUploadFileStatus", + "classification": "declaration-changed", + "before": { + "kind": "enum", + "members": { + "value:success": "success", + "value:loading": "loading", + "value:error": "error", + "value:retry": "retry" + } + }, + "after": { + "kind": "enum", + "members": { + "value:ready": "ready", + "value:uploading": "uploading", + "value:success": "success", + "value:error": "error", + "value:retryableError": "retryableError" + } + }, + "migrationDirection": "TUploadFileStatus", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDUploadMediaType", + "candidate": "TUploadMediaType", + "classification": "declaration-shape-unchanged", + "before": { + "kind": "enum", + "members": { + "value:image": "image", + "value:video": "video" + } + }, + "after": { + "kind": "enum", + "members": { + "value:image": "image", + "value:video": "video" + } + }, + "migrationDirection": "TUploadMediaType", + "migrationNote": "同名或前缀对应,仍需核对参数/默认行为" + }, + { + "old": "TDUploadType", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "enum", + "members": { + "value:add": "add", + "value:remove": "remove", + "value:replace": "replace" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDUploadValidatorError", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "enum", + "members": { + "value:overSize": "overSize", + "value:overQuantity": "overQuantity" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDUploadValidatorEvent", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "typedef", + "members": { + "signature": "typedef TDUploadValidatorEvent = void Function(TDUploadValidatorError e);" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDUploadValueChangedEvent", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "typedef", + "members": { + "signature": "typedef TDUploadValueChangedEvent = void Function(List files, TDUploadType type);" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TDate", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "constructor:new": "({required this.date, required this.typeNotifier, this.prefix, this.prefixStyle, this.prefixWidget, this.suffix, this.suffixStyle, this.suffixWidget, this.style, this.decoration, required this.isLastDayOfMonth})", + "field:date": "final DateTime", + "field:typeNotifier": "final DateSelectTypeNotifier", + "field:prefix": "String?", + "field:prefixStyle": "TextStyle?", + "field:prefixWidget": "Widget?", + "field:suffix": "String?", + "field:suffixStyle": "TextStyle?", + "field:suffixWidget": "Widget?", + "field:style": "TextStyle?", + "field:decoration": "BoxDecoration?", + "field:isLastDayOfMonth": "final bool" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TGIconHeaderWidget", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "field:loadingIcon": "final TDLoadingIcon", + "field:backgroundColor": "final Color?", + "field:state": "final IndicatorState", + "field:refreshIndicatorExtent": "final double", + "constructor:new": "const ({Key? key, this.backgroundColor, required this.state, required this.refreshIndicatorExtent, required this.loadingIcon})", + "method:createState": "TGIconHeaderWidgetState createState ()" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TGIconHeaderWidgetState", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "method:build": "Widget build (BuildContext context)" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TapCallback", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "typedef", + "members": { + "signature": "typedef TapCallback = void Function(int index);" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TextAlignment", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "enum", + "members": { + "value:left": "left", + "value:center": "center", + "value:right": "right" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "TrapezoidPath", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "class", + "members": { + "field:widthLarge": "final double", + "field:widthSmall": "final double", + "constructor:new": "(this.widthLarge, this.widthSmall)", + "method:getClip": "Path getClip (Size size)", + "method:shouldReclip": "bool shouldReclip (CustomClipper oldClipper)" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "horizontalChild", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "function", + "members": { + "signature": "Iterable horizontalChild (Widget child)" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + }, + { + "old": "slideTransitionFromToAlignment", + "candidate": null, + "classification": "requires-manual-mapping", + "before": { + "kind": "function", + "members": { + "signature": "Alignment slideTransitionFromToAlignment (SlideTransitionFrom from)" + } + }, + "after": null, + "migrationDirection": null, + "migrationNote": "无此旧名的兼容入口;旧辅助/State/回调/绘制类需人工迁移" + } + ] +} diff --git a/specs/058-release-preparation/release-notes-draft.md b/specs/058-release-preparation/release-notes-draft.md new file mode 100644 index 0000000000..5b26894c8f --- /dev/null +++ b/specs/058-release-preparation/release-notes-draft.md @@ -0,0 +1,28 @@ +# 1.0.0 发布说明草稿 + +仅供最终 release PR 整理;不替代自动生成的 CHANGELOG,目标版本尚未发布。 + +## Breaking Changes + +- 最低环境调整为 Flutter 3.32.0、Dart 3.8.0。组件统一迁移至 T 前缀,删除旧参数/样式/辅助类型的兼容入口;按 [0.2.7 → 1.0 迁移指南](../../MIGRATION_1_0.md) 迁移,不能批量替换前缀后直接上线。 +- 全局 Token、TD 组件 Theme 与显式实例配置分层;TD 默认视觉不再反向读取外部 Material/M2/M3 配置。文字使用 style/textScaler 与显式布局,自定义内容仍保留自己的主题及原生编辑能力。 +- 表单改为声明式字段树,选择与输入组件按当前受控值契约回写;父级创建的 Controller 按其类型负责释放。 +- Picker/DateTimePicker/Calendar 的选择与业务确认分开;Popup 采用 Options/Handle,Dialog 使用内容槽与 Action,底部导航和顶部页签分别为 TTabBar 与 TTabsBar。 +- Swiper 使用独立控制器和分页配置;Upload 使用不可变 files/onChanged 与明确的数量/大小限制。Toast/Message 时长使用 Duration,持续加载须显式设置 Duration.zero。 +- 多组件主题字段、默认尺寸、字体行盒、状态色与安全区行为调整;无等价替代的删除能力在迁移指南中单列,不承诺旧视觉和全部旧控制入口保留。 + +## 用户可见改进 + +- 统一 TD/Material 导出入口与主题配置方式,提供迁移说明及可验证的新调用示例。 +- 修复输入、日期选择、异步文件选择及内置文字排版等已纳入 1.0 候选的回归,具体范围由最终 release PR 的更新日志生成。 +- 放宽相册插件依赖约束,允许业务按 SDK 解析兼容版本,减少精确版本依赖冲突。 + +## 发布前仍需确认 + +最终候选的真实设备、设计对照和残余 Review 记录尚需核销;本轮排除的 CI/发布流程问题仍另行跟进。正式 pub.dev 包、站点和 APK 交付后的消费/下载验证也必须执行。不得把本草稿视为已经可以发布的声明。 + +## 消费证据补核后的修复补充(Spec060) + +- fix(button): 修复默认幽灵按钮的文字与描边未跟随自定义反色主题的问题;禁用样式与实例状态样式优先级保持原约定。 + +该草稿不代替自动生成的CHANGELOG。其他运行差异仍以Spec060逐项方案及待验收状态为准。 diff --git a/specs/058-release-preparation/spec.md b/specs/058-release-preparation/spec.md new file mode 100644 index 0000000000..48f08bf57a --- /dev/null +++ b/specs/058-release-preparation/spec.md @@ -0,0 +1,19 @@ +# 正式 1.0 发布准备(排除 CI 修改) + +## 授权与范围 + +2026-10-15 维护者授权实施上一轮第 1~4 项:Spec 核销、仅从 0.2.7 到 1.0 的迁移说明、依赖兼容处理、可执行的发布前验证与材料。明确不实施第 5 项:不修改 .github/workflows、.cnb、测试调度清单、远端分支规则或发布自动化。 + +基线 develop@30767a55;保留先前 Spec 清理的工作区改动。正式上传、tag 和版本号切换由最终发布执行,本次不发布。 + +## 交付契约 + +- 根目录唯一迁移正文,包内和站点由同步脚本维护;包含 0.2.7 实际发布接口与当前候选的对照、行为/删除能力、可复制的新用法及验收边界。 +- image_picker 放宽为 ^1.1.2,移除没有生产导入的 Android 实现包直接 pin;保持 Flutter >=3.32.0。双 SDK 解析、分析、Upload 回归和消费验证,记录真实解析版本与原生下限。 +- 用已有独立消费 runner 扩展迁移用例,不改 CI 调度。只读盘点公开接口,未证明等价的条目标明需要业务改写,不新增兼容别名。 +- 发布材料包含候选版本、检查结果、实际待设备/设计/Review 的项目以及验收表。缺证不等于完成,不以文档清理消除真实任务。 +- 第 5 项的已知 CI 问题保留为发布边界,本轮不处理。 + +## 干净包预检追加修复 + +发布副本没有仓库内分析配置,暴露24条unused_import警告。仅移除这些无用导入,保留全部声明、函数体、注释与公开导出;不通过改变发布忽略规则或CI配置掩盖问题。针对受影响组件执行双版本回归,并在干净运行时文件副本重新分析/打包,记录结果。 diff --git a/specs/058-release-preparation/tasks.md b/specs/058-release-preparation/tasks.md new file mode 100644 index 0000000000..9fb5dedd4f --- /dev/null +++ b/specs/058-release-preparation/tasks.md @@ -0,0 +1,9 @@ +# 任务 + +- [x] 0.2.7发布包与tag的159个库文件一致;盘点383个旧公开声明与369个当前声明、57个组件入口。 +- [x] 根迁移正文、包/站点副本、导航与同步已完成;示例代码从已编译消费夹具提取。 +- [x] 新增10项迁移消费测试,连同既有11项,双版本各21项通过。 +- [x] image_picker放宽为^1.1.2并移除Android pin;双SDK分析/Upload/Demo及业务最低/较新依赖消费验证通过。 +- [x] 验证打包、可用平台构建与站点,记录原生平台下限。 +- [x] 核销证据充分的任务,提供最终候选人工验收表及剩余边界。 +- [x] 复核没有修改 CI/远端规则/测试调度或发布版本。 diff --git a/specs/058-release-preparation/token-status.md b/specs/058-release-preparation/token-status.md new file mode 100644 index 0000000000..85102440a0 --- /dev/null +++ b/specs/058-release-preparation/token-status.md @@ -0,0 +1,78 @@ +> 最新处置(2026-10-15,Spec060):已实修Ghost语义回退的2个观察项,8项由既有Flutter契约及运行断言支持;21项差异与1项平台几何已有具体方案,524项仍待补运行。当前代码为30767a55上的未提交工作区,本地新指纹验证见 [Spec060](../060-token-difference-resolution/acceptance.md),不沿用旧远端CI作为本次修复通过证据。 + +# Token 审查现状(发布准备补核) + +本轮复核了当前默认主题 JSON 与已冻结证据的 216 个全局键:计入 scrollbarHoverColor 的公开 getter 回退后,有效默认值与既有 Flutter 记录全部一致。该键暗色 JSON 缺省,但 getter 明确回退 Color(0x4D000000),不能仅因 JSON 没有键就报缺陷。 + +对 804 项组件变量重新定位当前 Flutter 源码中的 getter/Theme 名称,保存 current-token-verification.json。定位仅用于更新审查入口,未取得新的冻结小程序源码/设计像素,因此不更改原有 reviewDecision 或 finalPaintVerified。 + +- 24 项原记录为默认 Widget 值验证;12 项为回退 Widget 已验证、视觉待核。 +- 10 项冻结源码未找到消费者;81 项不属于当前 Flutter 组件表面。 +- 677 项仍是待审队列,不是 677 个已复现缺陷。本轮不能用同名引用或 95% 行覆盖率把它们标为完成。 + +## 待审分批顺序 + +| 小程序组件 | 阶段性待审项 | +|---|---:| +| button | 86 | +| switch | 31 | +| step-item | 26 | +| input | 24 | +| cell | 23 | +| cascader | 19 | +| avatar | 18 | +| checkbox | 17 | +| radio | 17 | +| slider | 16 | +| link | 15 | +| search | 15 | +| tabs | 15 | +| badge | 14 | +| calendar | 13 | +| collapse-panel | 13 | +| navbar | 13 | +| popover | 13 | +| footer | 12 | +| tag | 12 | +| action-sheet | 11 | +| drawer | 11 | +| indexes | 11 | +| notice-bar | 11 | +| picker | 11 | +| swiper-nav | 11 | +| result | 10 | +| skeleton | 10 | +| table | 10 | +| indexes-anchor | 9 | +| message-item | 9 | +| progress | 9 | +| textarea | 9 | +| upload | 9 | +| dialog | 8 | +| divider | 8 | +| dropdown-menu | 8 | +| image-viewer | 8 | +| tree-select | 8 | +| rate | 7 | +| side-bar-item | 7 | +| tab-bar-item | 7 | +| back-top | 6 | +| cell-group | 6 | +| toast | 6 | +| avatar-group | 5 | +| empty | 5 | +| form-item | 5 | +| loading | 5 | +| popup | 5 | +| image | 4 | +| picker-item | 3 | +| side-bar | 3 | +| stepper | 3 | +| tab-bar | 3 | +| swiper | 2 | +| date-time-picker | 1 | +| paragraph | 1 | + +先审涉及公开 API、默认状态、禁用/按压和 Theme 覆盖的项目;每项记录目标浅/暗最终值、当前 Widget/Painter 的实际来源以及运行断言。明确不属于本次1.0承诺的项目须有范围裁定,不能由自动脚本自行延期。 + +本轮没有擅自修改 Token、添加 Theme 字段、更新 Golden 或标记全量跨端像素完成。真实剩余验收见 manual-acceptance.md。 diff --git a/specs/059-component-token-runtime-evidence/acceptance.md b/specs/059-component-token-runtime-evidence/acceptance.md new file mode 100644 index 0000000000..77d5b00ce7 --- /dev/null +++ b/specs/059-component-token-runtime-evidence/acceptance.md @@ -0,0 +1,65 @@ +> 历史快照:本文对应Ghost修复前的Spec059指纹与比较目标。最新32项处置、修复后验证及未实施方案见 [Spec060](../060-token-difference-resolution/acceptance.md)。原始观察和机器数据保留,不用旧日志验证新源码。 + +# 2026-10-15 组件消费证据补齐记录 + +## 本批结论 + +原677项已逐条登记目标、冻结源码选择器/属性、当前Flutter名称定位、运行证据或缺口。当前阶段统计见[runtime-review.md](runtime-review.md),机器可读数据见[runtime-review.json](runtime-review.json)。本批完成证据补核工具及七个组件的首批运行验证,整个677项任务尚未完成。 + +| 当前阶段 | 数量 | +|---|---:| +| 默认运行已验证,视觉待验收 | 116 | +| 运行差异待处理 | 31 | +| 平台边框几何待裁定 | 1 | +| 冻结源码未找到消费者 | 5 | +| 待补运行证据 | 524 | + +原始Spec048静态盘点及Spec058名称定位文件保留为历史基线。这里的阶段状态不把原reviewDecision中的pending直接改为最终通过;finalPaintVerified也未改为true。新增运行验证检查实际Material/Text/布局/绘制输入,仍不等于最终合成像素一致。custom=true为独立改变色板、字号、圆角和间距的测试哨兵,不是建议采用的设计值。 + +## 冻结目标证据 + +- 目标为小程序1a1c5ca135b0e9bf19abc43a59870c4908a28ad5,通过该完整SHA的codeload源码归档读取;归档SHA256记入runtime-review.json。 +- 初次部分Git克隆遇到远端缺失对象,未用不完整checkout作为证据;编译使用完整冻结归档。 +- `node tool/audit_compiled_token_consumption.mjs <冻结小程序根目录>`使用站点锁定的Less4.5.1编译全部213个Less文件,0失败;789项找到CSS渲染属性或自定义属性转发引用,15项在编译CSS及其他源文件中均未找到消费。 +- 自定义属性转发也保留为消费候选,例如Switch的loading色经--td-loading-color转给子组件,不能因为它不直接写color就判无消费者。 +- 原677项中新增确认5项无冻结消费者:buttonIconSpacer、inputErrorTextColor、inputSuccessTextColor、inputWarningTextColor、progressCircleIconSize。其余10项在原台账已有相同结论;不重复计数。 +- [编译证据](compiled-consumption.json)含每个输入文件摘要、输出CSS摘要、选择器、属性和值;编译不证明小程序宿主所有动态CSS路径或Flutter像素。 + +## 运行验证 + +在现有已调度的Button、Switch、Input、Link、Avatar、Empty、Progress测试文件内新增46项检查;共享helper只在显式环境变量TDESIGN_TOKEN_EVIDENCE=1时输出结构化观察。没有增加或修改CI调度清单。 + +- Flutter3.32.0/Dart3.8.0与Flutter3.47.7/Dart3.13.5,严格analyze均0问题。 +- 按现有manifest运行上述七组件的16个功能测试文件,排除demo标签,双版本各439项通过。46项新增检查是439项的子集。 +- 逐SDK采集1008条观察,涉及150个变量名;其中149个来自原677项,另1个为原已审的switchUncheckedColor。两套观察逐条完全相同。 +- 原始样本见[runtime-observations.json](runtime-observations.json)。enforce=false表示尚未裁定的差异诊断,不是已通过断言;这类观察保留实际/比较目标和场景并进入差异队列。未将其写成与当前实现相同的期望值来伪造对齐。 +- 初次只运行七个主测试文件时,Switch/Link覆盖率不足;改按已有完整manifest文件集合运行后达标。下表是完整范围的最终结果,未降低阈值或缩小生产源码范围。 + +| 组件 | LH/LF(两版本相同) | 覆盖率 | +|---|---:|---:| +| Button | 471/474 | 99.37% | +| Switch | 385/401 | 96.01% | +| Input | 321/330 | 97.27% | +| Link | 114/116 | 98.28% | +| Avatar | 281/285 | 98.60% | +| Empty | 33/33 | 100.00% | +| Progress | 646/655 | 98.63% | + +两环境的270个相关lib/资源/测试/清单/pubspec文件摘要完全一致;SDK与实际lock摘要分别记录,不能把不同依赖解析组合误称为同一组合。SDK使用可写临时副本,配置写入临时XDG_CONFIG_HOME,没有改用户SDK/配置目录。本轮所有生产源码保持上一轮准备后的内容,未新增生产行为变更;测试和证据工具不涉及Golden更新。 + +## 可重复检查 + +1. 在两个隔离、源码一致的工程中分别解析并记录依赖、Flutter/Dart版本;使用当前manifest中上述七组件的全部16个componentTests文件。 +2. 运行`flutter analyze --no-pub --fatal-infos`、`flutter test --no-pub --exclude-tags demo --coverage <16个文件>`;分别运行`dart run tool/check_component_coverage.dart <组件名>`核对七组件。 +3. 运行`TDESIGN_TOKEN_EVIDENCE=1 flutter test --no-pub --reporter expanded --plain-name 'token consumption' <七个t_*_test.dart主文件>`收集focus-low.log/focus-high.log。 +4. 编译冻结Less并保存compiled-consumption.json。将analyze-low/high.log、full-low/high.log、focus-low/high.log、coverage-low/high-组件.log、SDK机器输出sdk-low/high.json、pubspec-high.lock、冻结归档frozen-source.tar.gz及manifest-files.txt存于同一日志目录。 +5. 运行`node tool/summarize_component_token_evidence.mjs <日志目录>`。工具校验46项聚焦测试、完整回归、严格分析、各组件95%阈值、双SDK样本一致性,然后输出阶段报告。完整命令/文件集合见[validation-commands.json](validation-commands.json)。 +6. 加`--require-complete`执行最终验收检查。本次实际执行返回1,报告672项仍需适用的运行/契约/视觉证据;它不会把439项功能测试通过解释成Token任务全部完成。5项无消费者仅关闭冻结版本适用性审查。 + +工具记录源码/资源/测试摘要和日志摘要。相关源码、依赖、主题环境或字体变化后,应复验受影响层级,不能只重生成文案沿用旧结果。 + +## 后续处置 + +31项差异分组、修复边界及524项后续顺序见[next-batches.md](next-batches.md)。190个尚未运行验证的条目已补充现有测试候选位置,只作为后续人工核对入口,不算运行证据。 + +本轮未改正式版本号、公开API、生成CHANGELOG、CI/工作流/测试清单、远端规则;未提交、推送、建tag或发布。最终设计/设备/审查仍按Spec048与发布验收表执行。 diff --git a/specs/059-component-token-runtime-evidence/compiled-consumption.json b/specs/059-component-token-runtime-evidence/compiled-consumption.json new file mode 100644 index 0000000000..54c2ba08e1 --- /dev/null +++ b/specs/059-component-token-runtime-evidence/compiled-consumption.json @@ -0,0 +1,20367 @@ +{ + "miniprogramCommit": "1a1c5ca135b0e9bf19abc43a59870c4908a28ad5", + "lessVersion": "4.5.1", + "caveat": "Compilation proves selector/property consumption, not browser runtime, CSS host overrides, Flutter parity or design pixels. Source root must be the recorded frozen archive.", + "compiled": [ + { + "file": "packages/components/action-sheet/_example/action-sheet.less", + "sha256": "e99cd90a08b11703b85faca434c262c62ec9d55e2a9a93ea29f63d01826874da", + "cssSha256": "afdaba9d79af30fc9accb9b77d022b076afbc8399311304559bcc7c1c599040f" + }, + { + "file": "packages/components/action-sheet/action-sheet.less", + "sha256": "d672167fb898f93f3e54538267d1ac27b24fa37cd9ce7b8c25e75c0132d69a79", + "cssSha256": "a1166e291eb48de66f1675fe44fb983c65e5ebcb06f2e6b628edcefacc0eb4ba" + }, + { + "file": "packages/components/avatar/_example/avatar.less", + "sha256": "ca135334fdf2afc4751f1c1ba4f82fde564580b942b438a1be974f0fd9b3144b", + "cssSha256": "2e0aae769418254df642b58ad2cd02890ddaa0a0170913a115d9b8c27a1403ee" + }, + { + "file": "packages/components/avatar/_example/skyline/avatar.less", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "cssSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + { + "file": "packages/components/avatar/avatar.less", + "sha256": "cfc20bb97dec61e99eb11967b8fdee838bfc59da4b3b37b67929db2ed3025a68", + "cssSha256": "b47379f7fba9a3bd769365c7714b0b911806e93d6bf6163e4c19d9bb32ba23f5" + }, + { + "file": "packages/components/avatar-group/avatar-group.less", + "sha256": "907825274a19c6491aebd73d7a758f4597f861ae181c2722f7af5d1f10b3115e", + "cssSha256": "496ec96cd2a23dbc85a8aca7a5db24486d6b61a19125ef27f23134f70e0892dc" + }, + { + "file": "packages/components/back-top/_example/back-top.less", + "sha256": "ca9c34e44878ccd353e7ab01ece1ab26b15b2eaf300634967c196ffe4afe24b4", + "cssSha256": "39bdc482395efb0ebb5de3cff379397095a30b3d1c3d529620c2a767dfea3f3e" + }, + { + "file": "packages/components/back-top/_example/skyline/back-top.less", + "sha256": "ca9c34e44878ccd353e7ab01ece1ab26b15b2eaf300634967c196ffe4afe24b4", + "cssSha256": "39bdc482395efb0ebb5de3cff379397095a30b3d1c3d529620c2a767dfea3f3e" + }, + { + "file": "packages/components/back-top/back-top.less", + "sha256": "b3b4ac38942baaadd5134ebfd7a654e17ff0ad541e7c68eb4e108f37afe6bd5b", + "cssSha256": "b4fab8805acad59eb151b14dab481f1d1111577773ae9dbd1c743b1795f7769b" + }, + { + "file": "packages/components/badge/_example/badge.less", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "cssSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + { + "file": "packages/components/badge/_example/skyline/badge.less", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "cssSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + { + "file": "packages/components/badge/badge.less", + "sha256": "7782ff06e0185b58fb4bf011d9a223822a466967c7276a1169e8b31fb9986103", + "cssSha256": "ccaa96fdc3028d8970d1a4084c6e00269a053dd83486807528ce11ab654bcccd" + }, + { + "file": "packages/components/button/_example/button.less", + "sha256": "240300963257087394b393e239291e32a88b44e6dd619db0be5c16a903088ed1", + "cssSha256": "91f052657f6444a14eae393c908c1d1f07b513d0c93806fe7410969cf93e92d8" + }, + { + "file": "packages/components/button/_example/skyline/button.less", + "sha256": "4c2c6770efa96d01d153bf7e648d613cabce1b277c87e078a36eba76743985c1", + "cssSha256": "2ecd2d3a33801b1af97d3b1c277bf9701444473f408630b4b87c40905d39dd88" + }, + { + "file": "packages/components/button/button.less", + "sha256": "205ed51cd17438ac0f6236527c89dbf0d6ac603042f7aef147606b1ed5a6985a", + "cssSha256": "a0501e43a2a411e74ae586d55d160678823c755b7d81a1c454bc3dbe5add6f69" + }, + { + "file": "packages/components/calendar/calendar.less", + "sha256": "a5fa4e73723e96869a18e6ad110f43231d49f543e39ff8a47967eca997ab852f", + "cssSha256": "6b8f98193b96357925fdc3e51176f75af47208ffb0543436c4838ce612fa6b89" + }, + { + "file": "packages/components/cascader/cascader.less", + "sha256": "67c56b2cadd148c0b4b1ea9bbc334d0ea55a6ab3cc1890987f55bfa66875f487", + "cssSha256": "f1eba82e364773aa73ddd58d98a3e60f0ffd2a61e08c3a8c523c005e26806e95" + }, + { + "file": "packages/components/cell/_example/cell.less", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "cssSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + { + "file": "packages/components/cell/_example/skyline/cell.less", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "cssSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + { + "file": "packages/components/cell/cell.less", + "sha256": "a7e67581c2e60b2246e2dbde49b5779e1731fb6b333054396f1ddc2384d52090", + "cssSha256": "25006378e6993239dfab84f2280bec4ce9bf30908cf33e8fd8a44415b86624ec" + }, + { + "file": "packages/components/cell-group/_example/cell-group.less", + "sha256": "07d3d0e69e842b78b67394632fabeb1c82294cb23fab979ebbcb5416b41f4bf8", + "cssSha256": "82dc015ee027c765782caa443bbabb764df5cc7e32a348dfb8d93eca956e8019" + }, + { + "file": "packages/components/cell-group/cell-group.less", + "sha256": "3471997876a84d3c742f10a1a2a74253f34e2250a194811ea3e724be1fe886ba", + "cssSha256": "7e5efaa069453842415eb910119154400d15326898d3abd8d2659500384c009f" + }, + { + "file": "packages/components/check-tag/check-tag.less", + "sha256": "a8245814618aed78fd8cd007eeb830bc3a4f8c6a34e6895c1adcba0f73ca4cb1", + "cssSha256": "1897c7799c658a80d6e147507559ecb629fe067de2c745fcd3f68f4538e1c89e" + }, + { + "file": "packages/components/checkbox/_example/checkbox.less", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "cssSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + { + "file": "packages/components/checkbox/_example/skyline/checkbox.less", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "cssSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + { + "file": "packages/components/checkbox/checkbox.less", + "sha256": "77527eeab35fa4fd54fee5dd79996271e7f361ddadebdf10e1af9b4b22aa97df", + "cssSha256": "518af5140b77ba639c074411985f496b27601d836179873226fa561e32dfbbc5" + }, + { + "file": "packages/components/checkbox-group/checkbox-group.less", + "sha256": "8d8f19100050626464241fe4609a3f118fa18e36970aa9d697c863af4b5a6dc5", + "cssSha256": "0cf0292ec78b7920add14f5872b189c74e0894b94768b7a3f4e0c804ee3fdc7c" + }, + { + "file": "packages/components/col/_example/col.less", + "sha256": "ea528e31487fe755c61375dba457253e3d36ae758a4bbee97c1540d5f1e0f1c6", + "cssSha256": "a9c0532e9e208a9fb5d8753f88c0f5dff72bc9b4fa19f072ddc1f3c8bfda5c83" + }, + { + "file": "packages/components/col/col.less", + "sha256": "85c5487c081ce90567c4b055bac2694e257894900b47a582377fe1cc254a00d9", + "cssSha256": "740e1b305333d92d4273a12d0ff91cb234efca03373aebf9b2509ee893703f67" + }, + { + "file": "packages/components/collapse/_example/collapse.less", + "sha256": "2309a6bec65d590cf84e7543f81a69712dd3d9e963572bf9ad10a37be1f0dd98", + "cssSha256": "06ef414594fc0ebeefceeeefdbe096798e45c1910a55be52d81897309bfa8bd7" + }, + { + "file": "packages/components/collapse/collapse.less", + "sha256": "4a90b09086641667d310bdade5d3d806ffe358c608607c2fb346700213a6de10", + "cssSha256": "6f288d2518c5d9f0af9692e5ec8141c21252594d212cb8b30efea4b868c14f4e" + }, + { + "file": "packages/components/collapse-panel/collapse-panel.less", + "sha256": "f11b6ca2f38f3e65497889129fb12bd3b0fd781f8cadea5de4f867d37ae76993", + "cssSha256": "73634ed649c529bef39dbdabdeb1f402f4ef89c6192e7d4c668d19fd8114f23a" + }, + { + "file": "packages/components/color-picker/_example/color-picker.less", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "cssSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + { + "file": "packages/components/color-picker/color-picker.less", + "sha256": "d89577db0686bfac8e87e0c4d799481aad3734648d6e3bf55df94dc65b01ad5a", + "cssSha256": "ae71b142ad9c18f91de69a73cd5d759678a9eb90eae69eeaca89caf82f00f1c6" + }, + { + "file": "packages/components/common/style/_variables.less", + "sha256": "80f98ee6d396a7b9497f3c8997598f283be0e803180ac6aaabdbeb16db275f48", + "cssSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + { + "file": "packages/components/common/style/base.less", + "sha256": "09bfc0702fcf2f73433397c3810e7b7990ac054bf581960539544639aa04e3f2", + "cssSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + { + "file": "packages/components/common/style/icons.less", + "sha256": "0039932868bb4ae5c6a52a25b2eee49bdac1ad6db81838623fa7aa05190bdfe9", + "cssSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + { + "file": "packages/components/common/style/index.less", + "sha256": "9ebd26d58636b0043c87d4cec51a98495ff1a4b34e4a2ebe85157c13fcf86e14", + "cssSha256": "c38c1d52fdff7aacbf191f2be182b842063abed053fa7554e0bfc8cb222f680a" + }, + { + "file": "packages/components/common/style/mixins/_border.less", + "sha256": "3b9ea67329b4b0cf8be8053d3aa9220a3f4d165c23c6d4d21f6b14b0a2eb668c", + "cssSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + { + "file": "packages/components/common/style/mixins/_clearfix.less", + "sha256": "4ebd0a0a2f24bcb8089df0f4c1b4d672091ad075518ae54bb4973d36bc06f2d1", + "cssSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + { + "file": "packages/components/common/style/mixins/_cursor.less", + "sha256": "4589e0078078eebf8acba819bb63471d23d63cd3cbbed3cc99b9c69a612cd9f4", + "cssSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + { + "file": "packages/components/common/style/mixins/_ellipsis.less", + "sha256": "10dca0f91fd58e872f615e1cd267cf6e95d7f69a4dbec16f06571b97237a0603", + "cssSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + { + "file": "packages/components/common/style/mixins/_hairline.less", + "sha256": "191b56e1b56672006392784bac232cb2083979fd6b0eb0decd5409aea39c38b5", + "cssSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + { + "file": "packages/components/common/style/mixins/_index.less", + "sha256": "78d9ae9bd4e1d3566f6e8e2a81cdc8fd2b576e7219390d711047888445165350", + "cssSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + { + "file": "packages/components/common/style/mixins/_other.less", + "sha256": "3e468327a83b8ba2bcf327e33d932d539f03befa128a437d6b338c430c2306a3", + "cssSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + { + "file": "packages/components/common/style/theme/_components.less", + "sha256": "27a7a4d3b2b6b3b1e6162bacf12a4ddbac8f8f077eabd1e63beb36efd6ca0783", + "cssSha256": "4fbceef62fde257098a032ee70f499bbd3baf3afff1ea87ad534408a82ba353c" + }, + { + "file": "packages/components/common/style/theme/_dark.less", + "sha256": "a8d77d3bdb0d482c04473168dca3a3364708d3e55fbfc3fef5382f967d063f73", + "cssSha256": "07de2ece0a3f38e0a8643a6b0841fcb080512afb4bcac9d5e3013e24af1529f0" + }, + { + "file": "packages/components/common/style/theme/_font.less", + "sha256": "f5825f640d7b28764f1ea2839fe113698280948030e752eea816a1cdf3816e91", + "cssSha256": "284aa1eeb3617cc95a1194fb359595962b23ba995d0c1247976476fbf32edab3" + }, + { + "file": "packages/components/common/style/theme/_index.less", + "sha256": "2c95f3f4a087a5c1fac3532cb155fb2d04a16ff2b2d4c6138561161b00aa3656", + "cssSha256": "caf482b750a7f831365fc5151327ee25c59cf5e38f19cf2030b9909988f60373" + }, + { + "file": "packages/components/common/style/theme/_light.less", + "sha256": "4cc36f9fc18e1653c1e0efbe11368add7675306f5ce4b8ed59ff08a40ab40d20", + "cssSha256": "a89756b35ea655171e01fb3428be6e757a02c72c6406236b55e289852f13bc0d" + }, + { + "file": "packages/components/common/style/theme/_radius.less", + "sha256": "8038fda82e248e28dc9412de13cdf889c6603bf72658d0773a7b4e86b4ea19ae", + "cssSha256": "de94236dcac3b95241c0847d7627c79db87880f07c0c032eccc1a5ba61b6f0dc" + }, + { + "file": "packages/components/common/style/theme/_spacer.less", + "sha256": "591b3251e93d1e7c2128211dbc14d421574dc0b6a62d656b1a254319c958dfc9", + "cssSha256": "ab63ad4cdeb384c56b83c6eed60aef423997a43b0005b39b316ce26db9205b2b" + }, + { + "file": "packages/components/common/style/utilities/_index.less", + "sha256": "dde2e54f20fb7292e353932c913f434441f07545dff1f6f3207547af1fd3c898", + "cssSha256": "c38c1d52fdff7aacbf191f2be182b842063abed053fa7554e0bfc8cb222f680a" + }, + { + "file": "packages/components/config-provider/_example/config-provider.less", + "sha256": "b1b6c3cf0698f1ecb6129cff051d6cffec8015c788cd31de3867c8e27aea06c4", + "cssSha256": "afd50302b92f17bf7ec50f40a062017385c3c630c5b5f772f5a5d29a8d6f3626" + }, + { + "file": "packages/components/config-provider/config-provider.less", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "cssSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + { + "file": "packages/components/count-down/_example/count-down.less", + "sha256": "89930b554fecc04538a47b1fa46a866fdef1c11e9f6e1ad869d49a13a35d546e", + "cssSha256": "4c67dd251b72af5a85455e6757f15c8c9a8223004dececee58d0046352867c62" + }, + { + "file": "packages/components/count-down/_example/skyline/count-down.less", + "sha256": "f2c0f9b063939d61d688d4fdf61379de7a8552014facb23f26ee9cfaf7602d77", + "cssSha256": "f2c0f9b063939d61d688d4fdf61379de7a8552014facb23f26ee9cfaf7602d77" + }, + { + "file": "packages/components/count-down/count-down.less", + "sha256": "818a44c1433997fab3eaca4b05378886449697dde295e4da7059493287b9f836", + "cssSha256": "6c6f72f953ac923e53d9837185d2f5afac442059abd55da570c2615b6ffcf0d1" + }, + { + "file": "packages/components/date-time-picker/_example/date-time-picker.less", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "cssSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + { + "file": "packages/components/date-time-picker/_example/skyline/date-time-picker.less", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "cssSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + { + "file": "packages/components/date-time-picker/date-time-picker.less", + "sha256": "1bcfaa4721a0ff8352dc431dd1c6d71cdc74c91a242005b882738218b518133b", + "cssSha256": "e646f20c6a790554c6a75cbeba0436a070b091550fe6341ec01e8c39b4828ec7" + }, + { + "file": "packages/components/dialog/_example/dialog.less", + "sha256": "f2c0f9b063939d61d688d4fdf61379de7a8552014facb23f26ee9cfaf7602d77", + "cssSha256": "f2c0f9b063939d61d688d4fdf61379de7a8552014facb23f26ee9cfaf7602d77" + }, + { + "file": "packages/components/dialog/_example/skyline/dialog.less", + "sha256": "f2c0f9b063939d61d688d4fdf61379de7a8552014facb23f26ee9cfaf7602d77", + "cssSha256": "f2c0f9b063939d61d688d4fdf61379de7a8552014facb23f26ee9cfaf7602d77" + }, + { + "file": "packages/components/dialog/dialog.less", + "sha256": "cc62cf6045e4836a5831f66cfecbef245166c5637c966abd8467abf4d1abb9f0", + "cssSha256": "b888ec971c115e915d169ce9aa76d6c6f52e7add462ee64d0ab47e379e5d09e9" + }, + { + "file": "packages/components/divider/_example/divider.less", + "sha256": "f2c0f9b063939d61d688d4fdf61379de7a8552014facb23f26ee9cfaf7602d77", + "cssSha256": "f2c0f9b063939d61d688d4fdf61379de7a8552014facb23f26ee9cfaf7602d77" + }, + { + "file": "packages/components/divider/_example/skyline/divider.less", + "sha256": "f2c0f9b063939d61d688d4fdf61379de7a8552014facb23f26ee9cfaf7602d77", + "cssSha256": "f2c0f9b063939d61d688d4fdf61379de7a8552014facb23f26ee9cfaf7602d77" + }, + { + "file": "packages/components/divider/divider.less", + "sha256": "92a5c13ba65b9aa2efa515eaa37dabbccf1e2e1cecae19d7bc03c7c1143e9492", + "cssSha256": "f931613b1544a28eb345017fd6bb895ceff3908702d31dd2352a74de83ab820b" + }, + { + "file": "packages/components/drawer/_example/drawer.less", + "sha256": "f2c0f9b063939d61d688d4fdf61379de7a8552014facb23f26ee9cfaf7602d77", + "cssSha256": "f2c0f9b063939d61d688d4fdf61379de7a8552014facb23f26ee9cfaf7602d77" + }, + { + "file": "packages/components/drawer/_example/skyline/drawer.less", + "sha256": "24826121c16bb41a25384550827eaec41c2df8ea7f9b4392e772ff14d2038f4b", + "cssSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + { + "file": "packages/components/drawer/drawer.less", + "sha256": "d546ac5d410b941b3da10d17c845ab8870d9a76f47e925474d0765f648f366ec", + "cssSha256": "1f6348dfca79cbfba5ff41ad8dcea22495c879a4cf05943db1a41ad9ebacda18" + }, + { + "file": "packages/components/dropdown-item/dropdown-item.less", + "sha256": "a6aa6f713f003d40f1587ac2141ff5e92548067b4f17c7ec473c3dbc5e4ec51e", + "cssSha256": "d56d65130305dc293430a5019e587ee0a419d343a854803d73a78acf87f3e963" + }, + { + "file": "packages/components/dropdown-menu/_example/dropdown-menu.less", + "sha256": "b3465e97f8b921b371b992a462a62cd3d4332b83ffeda6e10b75245f959e0af0", + "cssSha256": "a412dc93650dc401b2bb9e432a9a755deb9488732e99e2d0f3358dbdd6385e16" + }, + { + "file": "packages/components/dropdown-menu/dropdown-menu.less", + "sha256": "af86dadf4dfe27a39f591f57aa5e118c7801f379fd47fa1af2e865ec15963d5b", + "cssSha256": "b22ecaeeb11464aea0199e825a4a13490ce205500e1f8afb92ca6fe794b1caa2" + }, + { + "file": "packages/components/empty/_example/empty.less", + "sha256": "f2c0f9b063939d61d688d4fdf61379de7a8552014facb23f26ee9cfaf7602d77", + "cssSha256": "f2c0f9b063939d61d688d4fdf61379de7a8552014facb23f26ee9cfaf7602d77" + }, + { + "file": "packages/components/empty/_example/skyline/empty.less", + "sha256": "f2c0f9b063939d61d688d4fdf61379de7a8552014facb23f26ee9cfaf7602d77", + "cssSha256": "f2c0f9b063939d61d688d4fdf61379de7a8552014facb23f26ee9cfaf7602d77" + }, + { + "file": "packages/components/empty/empty.less", + "sha256": "2d27de9c799686066db39e418465292c0c5fd4dffe0c44402c3e9604e5e408eb", + "cssSha256": "1ca3258feb39519691cad33201f0554670c63da90f4670932670a64945c37b29" + }, + { + "file": "packages/components/fab/_example/fab.less", + "sha256": "1c845cc2bb1ec712043279e9788ea299885792eff56db5ef97124da6c2c29500", + "cssSha256": "94b569d6596ac1ec39f645bd1a0890ee28d4d4d465135316a33540c700332208" + }, + { + "file": "packages/components/fab/_example/skyline/fab.less", + "sha256": "982dc155c8dfd40008929afe1d9ec1a2ed87253224668375d176f75c8b2518ad", + "cssSha256": "033497ece1023353abc6446bde4d0a48bc0005cd7b7a5f0b641e86caa08b9cd9" + }, + { + "file": "packages/components/fab/draggable/draggable.less", + "sha256": "37b7ceca28f30bd9bbec05eceb24bd98af6bc7f0f8fd9b39c4a0eb841689911d", + "cssSha256": "5fb6f3574145a06796cc1aef5eb9bf0ff80db563e6872725cf06be33a05cc6e0" + }, + { + "file": "packages/components/fab/fab.less", + "sha256": "e1910afe325e90161b5639d3f5962b185ccc0bb11d01a43810e52de7c9dbb0a8", + "cssSha256": "8bfa5c761331996539e7fe3cd913b6cee259b15fe5e3f7b6a37bf8f6b99729e6" + }, + { + "file": "packages/components/footer/_example/footer.less", + "sha256": "f2c0f9b063939d61d688d4fdf61379de7a8552014facb23f26ee9cfaf7602d77", + "cssSha256": "f2c0f9b063939d61d688d4fdf61379de7a8552014facb23f26ee9cfaf7602d77" + }, + { + "file": "packages/components/footer/_example/skyline/footer.less", + "sha256": "f2c0f9b063939d61d688d4fdf61379de7a8552014facb23f26ee9cfaf7602d77", + "cssSha256": "f2c0f9b063939d61d688d4fdf61379de7a8552014facb23f26ee9cfaf7602d77" + }, + { + "file": "packages/components/footer/footer.less", + "sha256": "8d4fb46a04427c63e0d62aff6aa815247c34c87a1f317104a12eaf703cdbe58c", + "cssSha256": "c54f78a5ccbaa39d3cdc901522f7e878bcee05880d17997539dafac766fb8133" + }, + { + "file": "packages/components/form/form.less", + "sha256": "7b2d47162f25257c1039d6ac960fbf9f892bbd62704d38432d2786d36fcdc43c", + "cssSha256": "8fa7b5bb079d66949e9932695b7528e298261efdc8d6085e315343e220ea32ac" + }, + { + "file": "packages/components/form-item/form-item.less", + "sha256": "c5590afe6705d02d367ced90b1e1cbf1537cb6e9cba4fe4338d5f3b017632fc4", + "cssSha256": "ccd1cd1c23a6643dd56266f7b1c64d1a3dfcb2d06b51817ff5f980bbacdbb66f" + }, + { + "file": "packages/components/grid/_example/grid.less", + "sha256": "9e86b2f6e643007e36969ce96634099e1bb8da681458c3bf910532cd58eec613", + "cssSha256": "33b925428ab07a3d513daa9fe32164cc1d6b7e7c27c3e48374c86e4a782dab79" + }, + { + "file": "packages/components/grid/grid.less", + "sha256": "3820468bcf72a24d8e96a1328eefaaf22b24ed3991625cb2b6c9c75caf3f7530", + "cssSha256": "5388b332c0907cea8bd41264f98249517b6b0da4f898e18478ea2f16ca2ecc2e" + }, + { + "file": "packages/components/grid-item/grid-item.less", + "sha256": "c7ea0cba16005d17dc27d928283c43c31e6ff2a6817f04d0761ae34f59c40ac9", + "cssSha256": "f13bde54d07e62e4faa7009d4868e163ea67badb3de10042fd51403471740960" + }, + { + "file": "packages/components/guide/_example/guide.less", + "sha256": "f2c0f9b063939d61d688d4fdf61379de7a8552014facb23f26ee9cfaf7602d77", + "cssSha256": "f2c0f9b063939d61d688d4fdf61379de7a8552014facb23f26ee9cfaf7602d77" + }, + { + "file": "packages/components/guide/guide.less", + "sha256": "bc954b9e2cb683ed2c3c30434ebb54ab59138917050b666a7fd6598ca8705de9", + "cssSha256": "6ccbfca51ff41c4c70b54d80fd9a33c1205a6cbeb2926b42069182de458e851a" + }, + { + "file": "packages/components/icon/_example/icon.less", + "sha256": "d8af3c37be1f8f8c36da1f9ac7c7d791d4aaba9671eaf331c7f51cf1e5a87aa2", + "cssSha256": "70b4c2e33c5403d6132524664ff9f94530a61760b644e8c664dcd609afec2250" + }, + { + "file": "packages/components/icon/_example/skyline/icon.less", + "sha256": "8c74291b87e860b66340b07d294e9f1e51d00d7fcda64d24801a6e78cf879a28", + "cssSha256": "70b4c2e33c5403d6132524664ff9f94530a61760b644e8c664dcd609afec2250" + }, + { + "file": "packages/components/icon/icon.less", + "sha256": "74c702b39295ea2e0f9f25e4fc4ca106e8cca3701668f185eaff89c246805046", + "cssSha256": "66a681a34866456e0b0bf42cbefc64a17fcda73c34bd78938695f6b795846dd7" + }, + { + "file": "packages/components/image/_example/image.less", + "sha256": "2b7109a6c985ab4fd417f3c4d41d30d0c1e73bd22b31ee8393328f2b8db52d99", + "cssSha256": "01ccd6c556902b93d12ed9dcba80511fe2f2904fe3f5324b8cdf8d16a42b2ed6" + }, + { + "file": "packages/components/image/_example/skyline/image.less", + "sha256": "f2c0f9b063939d61d688d4fdf61379de7a8552014facb23f26ee9cfaf7602d77", + "cssSha256": "f2c0f9b063939d61d688d4fdf61379de7a8552014facb23f26ee9cfaf7602d77" + }, + { + "file": "packages/components/image/image.less", + "sha256": "8bda21d39dc6803088697a8108a48784caec7a3129be4c4899197d8777f7803d", + "cssSha256": "e9750ebe842c3e889499d90212c28007a6ee71fc5c90ce5f697b98fcd69f3c50" + }, + { + "file": "packages/components/image-viewer/_example/image-viewer.less", + "sha256": "f2c0f9b063939d61d688d4fdf61379de7a8552014facb23f26ee9cfaf7602d77", + "cssSha256": "f2c0f9b063939d61d688d4fdf61379de7a8552014facb23f26ee9cfaf7602d77" + }, + { + "file": "packages/components/image-viewer/_example/skyline/image-viewer.less", + "sha256": "f2c0f9b063939d61d688d4fdf61379de7a8552014facb23f26ee9cfaf7602d77", + "cssSha256": "f2c0f9b063939d61d688d4fdf61379de7a8552014facb23f26ee9cfaf7602d77" + }, + { + "file": "packages/components/image-viewer/image-viewer.less", + "sha256": "0edc59ec65c5aee82b8294717c93049fb7cb6a2a33db2fa6dfcd0fc1654adaa6", + "cssSha256": "b3feabf86e2f96288ab0540d5c789ca3d5a74627509e5003ae071fadebe2360e" + }, + { + "file": "packages/components/indexes/_example/indexes.less", + "sha256": "c6e6aeae64e12ebdff45d561bdf4e68ef802358df112e994387a26a2eea9fa78", + "cssSha256": "b0f282872bd1926cabb05916469d728f0bc1d5fc02c4da3fe8ffca0469185120" + }, + { + "file": "packages/components/indexes/indexes.less", + "sha256": "38dc49b18c267366165cd59eb91afb0cf12a6e0a94630ee6f758168017e1f2a9", + "cssSha256": "35247491b2106bf5bfd56c6dc8bab1dde238661a6f3952d65644ca048f65eefe" + }, + { + "file": "packages/components/indexes-anchor/indexes-anchor.less", + "sha256": "6d746ee31ad7c80054e35c6bd0c5408b7519f44408e1451ca306f9d8030875b9", + "cssSha256": "c6a26582938defb26081e16eae5dc60cfa036dff4b17a91242f90e3f249e68b9" + }, + { + "file": "packages/components/input/_example/input.less", + "sha256": "f5fba5e51fd42e7dabef309db101d8e63501e48f2a8a04502ae98510d434e00d", + "cssSha256": "7f9849ddb65266e8e973bd46fd8fea5c685587fb05caecf227e1736b2d2ae3ae" + }, + { + "file": "packages/components/input/_example/skyline/input.less", + "sha256": "f5fba5e51fd42e7dabef309db101d8e63501e48f2a8a04502ae98510d434e00d", + "cssSha256": "7f9849ddb65266e8e973bd46fd8fea5c685587fb05caecf227e1736b2d2ae3ae" + }, + { + "file": "packages/components/input/input.less", + "sha256": "bf12fd1ae534fbe76e5f66402a256032f6b474064e3707b307cba25e57380eb6", + "cssSha256": "1306677c5e850f863fbd7bc726ecb67d0514d7e81947525cdb8cf5f42d0b4390" + }, + { + "file": "packages/components/link/_example/link.less", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "cssSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + { + "file": "packages/components/link/_example/skyline/link.less", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "cssSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + { + "file": "packages/components/link/link.less", + "sha256": "c8d26b9e2d4d811c469725c1b35d7ad7b8eefb50128a4c80f3f9dd2484f028aa", + "cssSha256": "216bb862b0b8a44ea0504e6f40b8976de1bbf2e14838448968649df0a35ce574" + }, + { + "file": "packages/components/loading/_example/loading.less", + "sha256": "f2c0f9b063939d61d688d4fdf61379de7a8552014facb23f26ee9cfaf7602d77", + "cssSha256": "f2c0f9b063939d61d688d4fdf61379de7a8552014facb23f26ee9cfaf7602d77" + }, + { + "file": "packages/components/loading/_example/skyline/loading.less", + "sha256": "f2c0f9b063939d61d688d4fdf61379de7a8552014facb23f26ee9cfaf7602d77", + "cssSha256": "f2c0f9b063939d61d688d4fdf61379de7a8552014facb23f26ee9cfaf7602d77" + }, + { + "file": "packages/components/loading/loading.less", + "sha256": "fd11dc693848b87ae8b5b64a91793994f84ed18f2ca1e5425222f32e5ec66595", + "cssSha256": "1b816623334eac926ddac240042f2faca5ff6bdde1c8fa5789f6a32598f51131" + }, + { + "file": "packages/components/message/_example/message.less", + "sha256": "767d20bb8b553f26d5d4a2c7f3cf3c8336c06570877b954c0e1201f2139d4ca6", + "cssSha256": "a50f635ef680782abc5ebd82536a4028d8a102f7abb514b5cb197b227bd99290" + }, + { + "file": "packages/components/message/message.less", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "cssSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + { + "file": "packages/components/message-item/message-item.less", + "sha256": "8b9ec505efefde0bb7aab3a6ffa715445f6fa18a111eb5c8f82ccddda00de935", + "cssSha256": "e8a49cab922f93734b07df293221284808b4f0e6d73550973e2034313b552609" + }, + { + "file": "packages/components/navbar/_example/navbar.less", + "sha256": "26fcd4adee03ee5437d16f9afccedea965b6a3bdc47780307a68a91571311ec3", + "cssSha256": "0849d7b86f2d03c28821448eaad157acf411704d2c5c302ff524b50c3121f3ca" + }, + { + "file": "packages/components/navbar/_example/skyline/navbar.less", + "sha256": "2ea0a3355a8d8c4f31f263ab0ac6c9483bb01d641e4d61843ca9bcc2cdf5e552", + "cssSha256": "210a1189da0368b180fd1ede4091cc0093b245c17f613796d097f3f8a3e11af7" + }, + { + "file": "packages/components/navbar/navbar.less", + "sha256": "8f8c4ed0757b0ebbd32c219e635745eaa9e8b9d1b57aec7e6252bcb63da88f41", + "cssSha256": "38311d241a19e46b428d7631868176f3f722be3db6696510e0cf1afb20e74d87" + }, + { + "file": "packages/components/notice-bar/_example/notice-bar.less", + "sha256": "a72cb16c94d19fa25b680e0a6c0da7962534152f585ffe28abb7cf2a7c8ebfeb", + "cssSha256": "dda8fcfacbabe330b8b54247bca895c4e67be183de5b05aa90a6654fa8ae9720" + }, + { + "file": "packages/components/notice-bar/notice-bar.less", + "sha256": "c6130189c5a172026dab3ba8570d3b78f392fd56e1838fc11254c7dd7e0f6095", + "cssSha256": "2bb60d77640bd27bb2e7c53f8e239597676e75da083b4bf91068ef8a7eb38592" + }, + { + "file": "packages/components/overlay/_example/overlay.less", + "sha256": "f2c0f9b063939d61d688d4fdf61379de7a8552014facb23f26ee9cfaf7602d77", + "cssSha256": "f2c0f9b063939d61d688d4fdf61379de7a8552014facb23f26ee9cfaf7602d77" + }, + { + "file": "packages/components/overlay/_example/skyline/overlay.less", + "sha256": "f2c0f9b063939d61d688d4fdf61379de7a8552014facb23f26ee9cfaf7602d77", + "cssSha256": "f2c0f9b063939d61d688d4fdf61379de7a8552014facb23f26ee9cfaf7602d77" + }, + { + "file": "packages/components/overlay/overlay.less", + "sha256": "0ee2b0b1c038bda6f728ec35593edd2abdc446ccf0f335ae52219d310d72d8a7", + "cssSha256": "033c17ea9342a2184b36de6a810e5f263ad57780fa4871f8339464a6416b12b3" + }, + { + "file": "packages/components/paragraph/_example/paragraph.less", + "sha256": "e48b80a0e340c81e6947c4d296503a1fd2a70dfb635e7a7c6d264eef29313bb9", + "cssSha256": "82025b2c0135204370515bd82b895c3fc997356b43796d201c2e7ec898e16709" + }, + { + "file": "packages/components/paragraph/paragraph.less", + "sha256": "bfe9da03e6c73c3b51397ba2cb31dab0bd4a3e5163f34527efefc3b75e66f897", + "cssSha256": "6e32f4030fb84fd10b952a26b897d4c3b2875db4f3fdd65e32b7c6d85f61ef3a" + }, + { + "file": "packages/components/picker/_example/picker.less", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "cssSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + { + "file": "packages/components/picker/_example/skyline/picker.less", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "cssSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + { + "file": "packages/components/picker/picker.less", + "sha256": "19bc07faeb1453b2c4685b74f6cf6b576796422359c0459092a3bcfe1b942d20", + "cssSha256": "d87b659cf0a8b9bba40a190f63d03c862132043cf01819544da72796069209ca" + }, + { + "file": "packages/components/picker-item/picker-item.less", + "sha256": "2e16f05595c4e6547905420daec38e94a605a5a77236dfa49779a1770a697c4e", + "cssSha256": "188d04bbbc92c541c34f81abcbdfbb305692b4c08194f56d0314e668a3370392" + }, + { + "file": "packages/components/popover/_example/popover.less", + "sha256": "10fe305ba965f8a47ad0ad069f3def12764a80bb43423eae39d27c2c222f4bf2", + "cssSha256": "10fe305ba965f8a47ad0ad069f3def12764a80bb43423eae39d27c2c222f4bf2" + }, + { + "file": "packages/components/popover/popover.less", + "sha256": "e7cfd5a895d138dd059806a9c30753076cb0aecbfb78f2a4dc32dcbc671ace26", + "cssSha256": "0dea37bd685471816a8439e70650f6ffbdccc20855b4c38a5ed7a610b0bf916c" + }, + { + "file": "packages/components/popup/_example/popup.less", + "sha256": "10fe305ba965f8a47ad0ad069f3def12764a80bb43423eae39d27c2c222f4bf2", + "cssSha256": "10fe305ba965f8a47ad0ad069f3def12764a80bb43423eae39d27c2c222f4bf2" + }, + { + "file": "packages/components/popup/_example/skyline/popup.less", + "sha256": "24826121c16bb41a25384550827eaec41c2df8ea7f9b4392e772ff14d2038f4b", + "cssSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + { + "file": "packages/components/popup/popup.less", + "sha256": "0c81e81630a21600914aabfe872908e576e3727eec1b51f519205c8dfd82cfd8", + "cssSha256": "679f7e3ca014b1f6e80410096d00d6fd7a05af8b8cb0d20c0ccaef9a63478054" + }, + { + "file": "packages/components/progress/_example/progress.less", + "sha256": "8eaeb037b219923ff082dd78668a23c726bc70ab8f82128381034b1701c91324", + "cssSha256": "a774cacc3a4109a55fd8fff1696a772208489b4d26112fa1381f25dbcb9b8434" + }, + { + "file": "packages/components/progress/_example/skyline/progress.less", + "sha256": "8eaeb037b219923ff082dd78668a23c726bc70ab8f82128381034b1701c91324", + "cssSha256": "a774cacc3a4109a55fd8fff1696a772208489b4d26112fa1381f25dbcb9b8434" + }, + { + "file": "packages/components/progress/progress.less", + "sha256": "ecfbc8ecdbab32daf39b45fb7d62a9eed98ec585c69e934e2932a40e1460b63a", + "cssSha256": "dcfb24f3880cb92db5ac3e678712de1dce4e102c40895efbcdf065a8b6412791" + }, + { + "file": "packages/components/pull-down-refresh/_example/pull-down-refresh.less", + "sha256": "f2c0f9b063939d61d688d4fdf61379de7a8552014facb23f26ee9cfaf7602d77", + "cssSha256": "f2c0f9b063939d61d688d4fdf61379de7a8552014facb23f26ee9cfaf7602d77" + }, + { + "file": "packages/components/pull-down-refresh/pull-down-refresh.less", + "sha256": "afdc910bc22dd063d4e11bc9256ad4a0c04eba25daf6f865eb0b80ae54faf22f", + "cssSha256": "893cc16fe7b78e9be4870a73382463c7b674da6f1baf0e3a701276ead0712045" + }, + { + "file": "packages/components/qrcode/_example/qrcode.less", + "sha256": "f2c0f9b063939d61d688d4fdf61379de7a8552014facb23f26ee9cfaf7602d77", + "cssSha256": "f2c0f9b063939d61d688d4fdf61379de7a8552014facb23f26ee9cfaf7602d77" + }, + { + "file": "packages/components/qrcode/components/qrcode-canvas/qrcode-canvas.less", + "sha256": "c6f92b23a03120acd47e6327cb56d7baf03465f3f6e9c7ca4bf221e668ea0ae3", + "cssSha256": "96caed5807f50accf1f9d43a7fbbadaec23e618fa24d7a64f9ec32d9be741fd4" + }, + { + "file": "packages/components/qrcode/components/qrcode-status/qrcode-status.less", + "sha256": "9c4c7f3db92e6e017cb756dc52e7f09ffcb128b70f7c40247687c8153ecb3415", + "cssSha256": "a52fa84614b69b9eaeed56e075290cd294cede04f6caa66f47ffcbdd2d9aacab" + }, + { + "file": "packages/components/qrcode/qrcode.less", + "sha256": "55a5716a939feae32fa24766b978bc3355fb3c7f91c9e66240bdaf46d7361548", + "cssSha256": "e7ca66f32f5753483fd56bad7ef60bea3a75204e26b0bc6b496ae851fb477fdc" + }, + { + "file": "packages/components/radio/_example/radio.less", + "sha256": "5ab03ae6c28779b5a70f57aa107e59c1a56f6d1285217985b417b6cadc6adb51", + "cssSha256": "c0796bd7816190cfc1996c14714278217d02f2bbf23df7bf9425b7ef6cb227a0" + }, + { + "file": "packages/components/radio/_example/skyline/radio.less", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "cssSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + { + "file": "packages/components/radio/radio.less", + "sha256": "731808c9d2ccdbc410f0aa464696ba72dbbbc271aeeda6178a8fa9b35f9ef251", + "cssSha256": "1b8aa7dbfe5624e555afc706fa4c2e80093760fede8f8947c0f779c08b61777c" + }, + { + "file": "packages/components/radio-group/radio-group.less", + "sha256": "cc25a57b676f2f90206d763ecb107431e138258d6cc455470102b8b446b8aabe", + "cssSha256": "d3ab937def756b648e98730123a361467a5bf63808d54918f8522edda7e65b90" + }, + { + "file": "packages/components/rate/_example/rate.less", + "sha256": "19c10eb78874b144283074308f30b88f46e33ac4833aa99929340efdffeaf013", + "cssSha256": "05e0d736365e8942ccde7df0f9901de0d0a4a3ff0aca6d1f626ec87d8b4b8010" + }, + { + "file": "packages/components/rate/rate.less", + "sha256": "34599026d301589b870cc5b3653b509da86f1699d645f4c5bd50f74763079912", + "cssSha256": "fcfd95f8124e82d701310274d4890e16a67013d077fd5ac98bce25e2380d29f8" + }, + { + "file": "packages/components/result/_example/result-page.less", + "sha256": "2d6fbc51e6b93bec7fa4d4e580a30390f8c40fcff9d9dde06c0990816c492439", + "cssSha256": "16df1a55891151b168cc3bb503a209b0c73000a5ad257eba85c62cbd873e800e" + }, + { + "file": "packages/components/result/_example/result.less", + "sha256": "5ea58c2eda1248b9a4fce5643ac6776116d07d655c5c5f84af212a10e6ea1b08", + "cssSha256": "7a6f4f51199cb5a521454c1801da786c35571669dd3cb0d0bb0de6fad7d8fe5c" + }, + { + "file": "packages/components/result/_example/skyline/result.less", + "sha256": "5ea58c2eda1248b9a4fce5643ac6776116d07d655c5c5f84af212a10e6ea1b08", + "cssSha256": "7a6f4f51199cb5a521454c1801da786c35571669dd3cb0d0bb0de6fad7d8fe5c" + }, + { + "file": "packages/components/result/result.less", + "sha256": "a889b43ea4aa6f869af7958b4f5eef2cec43ae29d2f7f075e744699da8df0c40", + "cssSha256": "3b8fa9453d350505c0519a812b0171629edc0b6a34db8ba0d724354a27b961d2" + }, + { + "file": "packages/components/row/row.less", + "sha256": "025ece42b9b5acf99a0bb2658a460f33515a743ad7f7a14e1a3c87aa3a29c363", + "cssSha256": "025ece42b9b5acf99a0bb2658a460f33515a743ad7f7a14e1a3c87aa3a29c363" + }, + { + "file": "packages/components/scroll-view/scroll-view.less", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "cssSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + { + "file": "packages/components/search/_example/search.less", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "cssSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + { + "file": "packages/components/search/_example/skyline/search.less", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "cssSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + { + "file": "packages/components/search/search.less", + "sha256": "e4302e413145aed6d4cde65c3ffd508a2818f31ee32e889617d94fa5aa44da17", + "cssSha256": "2735d8df784ab6f221fde547026a02d47ebb6de5379210b37b7532512f34f88b" + }, + { + "file": "packages/components/segmented/_example/segmented.less", + "sha256": "29d4f5ce251f196a10ba3a0e92cf1ecb9460baa266094d34b7ce721bf0c21e5e", + "cssSha256": "88014527542ab0ed976ba2c1cef2331ef4d877d603db2d91ad361364484391b3" + }, + { + "file": "packages/components/segmented/segmented.less", + "sha256": "702a2de49e7a69f6d2df930bd97e77da63fed637604db33fa7b99e42699dd8c1", + "cssSha256": "141b6e38b5795ffd18d34be98b7d9762bce7bc28e6011bada64b89a91cb96e90" + }, + { + "file": "packages/components/side-bar/_example/side-bar.less", + "sha256": "c6e6aeae64e12ebdff45d561bdf4e68ef802358df112e994387a26a2eea9fa78", + "cssSha256": "b0f282872bd1926cabb05916469d728f0bc1d5fc02c4da3fe8ffca0469185120" + }, + { + "file": "packages/components/side-bar/side-bar.less", + "sha256": "29c60aa81606ac14f422064f558c38d7d7cfd44f1fc8337952a59cfd36762e3b", + "cssSha256": "aa8126cbf15af4d7350091cb15440144e2d6238df384dad588252129299ff37a" + }, + { + "file": "packages/components/side-bar-item/side-bar-item.less", + "sha256": "ac3e4cc80bc0d16a38e73aba9ee93bb68792f410470bffa1894d8e7ac8fcd9da", + "cssSha256": "7a29708b15d1b2c2d81b8a9036f710f34c261127be13773d858a7ea1d7c52d31" + }, + { + "file": "packages/components/skeleton/_example/skeleton.less", + "sha256": "f2c0f9b063939d61d688d4fdf61379de7a8552014facb23f26ee9cfaf7602d77", + "cssSha256": "f2c0f9b063939d61d688d4fdf61379de7a8552014facb23f26ee9cfaf7602d77" + }, + { + "file": "packages/components/skeleton/_example/skyline/skeleton.less", + "sha256": "f2c0f9b063939d61d688d4fdf61379de7a8552014facb23f26ee9cfaf7602d77", + "cssSha256": "f2c0f9b063939d61d688d4fdf61379de7a8552014facb23f26ee9cfaf7602d77" + }, + { + "file": "packages/components/skeleton/skeleton.less", + "sha256": "05cb130ac339c981fe6794cbc590d9e797ac4e30a7c60624034c1b091ce108e4", + "cssSha256": "4ebb8adfb8ee90ba5a95b00447d49431a2a0af1aff04bfefce7c9c2abefa2838" + }, + { + "file": "packages/components/slider/_example/skyline/slider.less", + "sha256": "24eda20b6cfb3de9e719fe6c10499bcc4607a5c9d3d0d0de4064480c51f247ac", + "cssSha256": "e5a469e79ac5cdd85534600ee128cf6a2b0871c695aec86dfeb726bc6702ae28" + }, + { + "file": "packages/components/slider/_example/slider.less", + "sha256": "c8704c5162963637c3031ccf52ec5f03a3e21978f31620dc5d0543e77cfb64ec", + "cssSha256": "3934f0270208f97aaf738959c8a91d25e17bc6aca0a217922e8e1cbf0e896641" + }, + { + "file": "packages/components/slider/slider.less", + "sha256": "0ea297b15f94c84760f0c41a3200b5b0ae369941ac149e7d6961aa4d8c2d3a3c", + "cssSha256": "d91ff54e85b8b955ea3fd0ab9b58d9a3bb2c8b1b1b82982e94d2ae92a0f8960e" + }, + { + "file": "packages/components/step-item/step-item.less", + "sha256": "adb04e295a13d0ea103d016e28c7f20557f0b6a522486dee6e2f824941897255", + "cssSha256": "1468dc8ae8a18eb703846ed3cc91534371224b5cf3418b0b148b5dbd5e605fdc" + }, + { + "file": "packages/components/stepper/_example/skyline/stepper.less", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "cssSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + { + "file": "packages/components/stepper/_example/stepper.less", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "cssSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + { + "file": "packages/components/stepper/stepper.less", + "sha256": "8b66a36df85e4630d641199218538a9336282b13036fa50e68d168d132bf9ad6", + "cssSha256": "fce7db5b87262984e55a047d89581b39e8e8d31354d695ea23a86ce8e17c00ff" + }, + { + "file": "packages/components/steps/_example/skyline/steps.less", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "cssSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + { + "file": "packages/components/steps/_example/steps.less", + "sha256": "f4a60451f55133c8037ceba1406861f3d57deed2571f582a1279b27cfeb7a6b4", + "cssSha256": "26be894133d589bc82630b553f05a805b9b423f8d61b64d7833839d2f01414fa" + }, + { + "file": "packages/components/steps/steps.less", + "sha256": "0f630016a5716e5ac75c92b2dccfde269f2e45a1d3c0e4291d57670bf525f8d7", + "cssSha256": "6ed2ed1e312b70b71d4d8140d1d3f4422050ec7971b0d6cbc3b0f5d3ba016b1d" + }, + { + "file": "packages/components/sticky/_example/sticky.less", + "sha256": "7f21b68987db8121e4da778610afb0dba96b2821315d9082f2252fb3c167033e", + "cssSha256": "7f21b68987db8121e4da778610afb0dba96b2821315d9082f2252fb3c167033e" + }, + { + "file": "packages/components/sticky/sticky.less", + "sha256": "47fcb1b562d030c3e24b50da4be29c450a72062368edd37f095b2aa9db7663ba", + "cssSha256": "f12f2ae23472705e8c92abe54637b96eb13df6c15bd4dcbc3e1029bc5c5ad8df" + }, + { + "file": "packages/components/swipe-cell/_example/swipe-cell.less", + "sha256": "16fd55648add5d99a6c1d9eba8d0e676833261e0313ce1d85e134929873fb75f", + "cssSha256": "3efcabd3832c3947fed1468d9ce485c83455812a0f058bb5eb73fd2b867fcbb7" + }, + { + "file": "packages/components/swipe-cell/swipe-cell.less", + "sha256": "ae3caafe5f94648fa95b550ae33f6890d2d9a538e189e9ca72e1c53a413497a3", + "cssSha256": "410068854676cd39fa4effb8a50a1d2474cef1eaa66ec84ac7b9cab06ecd130e" + }, + { + "file": "packages/components/swiper/_example/skyline/swiper.less", + "sha256": "f2c0f9b063939d61d688d4fdf61379de7a8552014facb23f26ee9cfaf7602d77", + "cssSha256": "f2c0f9b063939d61d688d4fdf61379de7a8552014facb23f26ee9cfaf7602d77" + }, + { + "file": "packages/components/swiper/_example/swiper.less", + "sha256": "f2c0f9b063939d61d688d4fdf61379de7a8552014facb23f26ee9cfaf7602d77", + "cssSha256": "f2c0f9b063939d61d688d4fdf61379de7a8552014facb23f26ee9cfaf7602d77" + }, + { + "file": "packages/components/swiper/swiper.less", + "sha256": "feece2e7d376e839e0040027315d0af926ad043296943c35f836b6ddd84d0fee", + "cssSha256": "d9256607bfdd0e1485a7c26042a497dc051ece8dfcacf3a15fcd1f04eedb67c6" + }, + { + "file": "packages/components/swiper-nav/swiper-nav.less", + "sha256": "37a39ab21753884cfc6de2e4701030b435536b35a1042857f03ab797636e090c", + "cssSha256": "fc87728cc66d9237b56fa623ea87e1085eeec17add1f87536b3ef2efd8d6e286" + }, + { + "file": "packages/components/switch/_example/skyline/switch.less", + "sha256": "4da9fe93c9250c50e8586014056c10a2fa2a9c513652d8202d9ebd73e8bcf4d9", + "cssSha256": "4da9fe93c9250c50e8586014056c10a2fa2a9c513652d8202d9ebd73e8bcf4d9" + }, + { + "file": "packages/components/switch/_example/switch.less", + "sha256": "4da9fe93c9250c50e8586014056c10a2fa2a9c513652d8202d9ebd73e8bcf4d9", + "cssSha256": "4da9fe93c9250c50e8586014056c10a2fa2a9c513652d8202d9ebd73e8bcf4d9" + }, + { + "file": "packages/components/switch/switch.less", + "sha256": "5f34a7f269fd651d37dd049a0265c09881180c91d1c51dddee8e5555a718793d", + "cssSha256": "c346612154803d757a9d95ab948d91d96715f83a51b995d36ca39f9aefa7b26d" + }, + { + "file": "packages/components/tab-bar/_example/skyline/tab-bar.less", + "sha256": "3dbaf95f9d16a4c71e5ab6ced999cd14397634a10a9dcbe513740d8082429c41", + "cssSha256": "de49a0eda3b81721dc391cd3742e27b0d5610aabfc1914d4e8e05a9b303090bf" + }, + { + "file": "packages/components/tab-bar/_example/tab-bar.less", + "sha256": "3dbaf95f9d16a4c71e5ab6ced999cd14397634a10a9dcbe513740d8082429c41", + "cssSha256": "de49a0eda3b81721dc391cd3742e27b0d5610aabfc1914d4e8e05a9b303090bf" + }, + { + "file": "packages/components/tab-bar/tab-bar.less", + "sha256": "0478967d2242c607e14163360f580a81b50f71674fd87525bbd65ee01ffa3e8a", + "cssSha256": "30fea7ba9d6a17293ff6770d6af8a1451aef026e4a13c2460babe5a5242aae75" + }, + { + "file": "packages/components/tab-bar-item/tab-bar-item.less", + "sha256": "7b8f6ed2a66dfc5f991474c3ffa51aaf80c234f23314e1f209d3c77777952fff", + "cssSha256": "61d59f83db2a1991efbe1ded0e17bb8b9dda1284e0c19e2d169502a7a62438d4" + }, + { + "file": "packages/components/tab-panel/tab-panel.less", + "sha256": "0f448f07353010e626997e056f739caae6c0419dd33e0c8323d222445bf0a569", + "cssSha256": "a3f9465d8d59bb6892d660bd17dde1f67d82cfecf061a0b0188e3671b0880877" + }, + { + "file": "packages/components/table/_example/table.less", + "sha256": "06ecefc77ce77c1cada1e5c95bf59ce12355ade38e20858049d3fc227e9bb21a", + "cssSha256": "06ecefc77ce77c1cada1e5c95bf59ce12355ade38e20858049d3fc227e9bb21a" + }, + { + "file": "packages/components/table/table.less", + "sha256": "ea1e3513a1ad77095f830b4251a81e263e956d8f63fcfd3499b8ab9dd9ca4a61", + "cssSha256": "ea0327b81b3221a833ba6709ac72cf01c68a2e0f5c6d4bd110a860f4402d0657" + }, + { + "file": "packages/components/tabs/_example/tabs.less", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "cssSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + { + "file": "packages/components/tabs/tabs.less", + "sha256": "dd31325fb820e81e3e3a4529350cb6876402c656f2bd9244005cac23744dd41c", + "cssSha256": "52ebe1d124e1c0aef67b7ee1a1a8e650e9d4a6738ae55cbfdf6e38a35e29ea13" + }, + { + "file": "packages/components/tag/_example/skyline/tag.less", + "sha256": "f2c0f9b063939d61d688d4fdf61379de7a8552014facb23f26ee9cfaf7602d77", + "cssSha256": "f2c0f9b063939d61d688d4fdf61379de7a8552014facb23f26ee9cfaf7602d77" + }, + { + "file": "packages/components/tag/_example/tag.less", + "sha256": "f2c0f9b063939d61d688d4fdf61379de7a8552014facb23f26ee9cfaf7602d77", + "cssSha256": "f2c0f9b063939d61d688d4fdf61379de7a8552014facb23f26ee9cfaf7602d77" + }, + { + "file": "packages/components/tag/tag.less", + "sha256": "bac0b08fc3db6f4a8fcd446c25b485250d4a35329a35c6c5b07fc862ea567f2c", + "cssSha256": "9add7c47bc7e059c94bdc9360958aa0cdebae0c72f01bcc3718d87b903eae015" + }, + { + "file": "packages/components/text/text.less", + "sha256": "f6c6fdc95fae7bda9ca0a0960b2a3d178b840f1e6c971e2330371335c342b0e3", + "cssSha256": "6e32f4030fb84fd10b952a26b897d4c3b2875db4f3fdd65e32b7c6d85f61ef3a" + }, + { + "file": "packages/components/textarea/_example/skyline/textarea.less", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "cssSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + { + "file": "packages/components/textarea/_example/textarea.less", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "cssSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + { + "file": "packages/components/textarea/textarea.less", + "sha256": "472e11e2ca7b28e094334a3e74c61caab14db664ce31fd03e11f5763ec04f5d5", + "cssSha256": "194177c919fd5f883bc008795fff8b8ca219ca0a95b1ce62336c611b5ddf22ba" + }, + { + "file": "packages/components/title/title.less", + "sha256": "f6c6fdc95fae7bda9ca0a0960b2a3d178b840f1e6c971e2330371335c342b0e3", + "cssSha256": "6e32f4030fb84fd10b952a26b897d4c3b2875db4f3fdd65e32b7c6d85f61ef3a" + }, + { + "file": "packages/components/toast/_example/skyline/toast.less", + "sha256": "2e143d7209caf6e54b3b27fa10e2ce0254f2e1e4ce0cee4f5be4ce10a54fa6f2", + "cssSha256": "134171f27970d3a6fe54c652d0ccd434e8e99ff1744e6dfec413802a342b1577" + }, + { + "file": "packages/components/toast/_example/toast.less", + "sha256": "d15ef72a5b476b359b625458370d08e8f411c68f3199b5d9286892a362a2e269", + "cssSha256": "bc771d135b1aa6df6b3fae8591f48d861ee03e0ec5cb5890563142c67ad2be20" + }, + { + "file": "packages/components/toast/toast.less", + "sha256": "5656f16fa58dc93c25fdfab79cea7faee0330bbc88d6155246bbee47f413482c", + "cssSha256": "3fdff3be8dc960d6979cce0b729b790e72250ea6229b465365baae0d6d83812d" + }, + { + "file": "packages/components/transition/_example/custom/index.less", + "sha256": "9d2d8f2b6adafd7f596c2db394eb3946c78cf65bbbe4c74bfbad5b8eba1a73c4", + "cssSha256": "bf7b72399a7c300655fa5672c178b9cdf8abb9e3b6d1e64ba2c1f82b4263fc7c" + }, + { + "file": "packages/components/transition/_example/transition.less", + "sha256": "c7513d31ab460a6841e6f63497faa6f0a3c890106acd5849e61c6e27fe3551f9", + "cssSha256": "6089f730ab4c7898352a9498872cab3e101b9d94d5608102442135ecdb5d1862" + }, + { + "file": "packages/components/transition/transition.less", + "sha256": "141dfa891d5fa371bc732893801c19eb2efbac8c72792d7a02afe7ecce75b73a", + "cssSha256": "ac47adbc526934535ed06dc5ba30ad1834430482462560c0aad319490396cd4c" + }, + { + "file": "packages/components/tree-select/tree-select.less", + "sha256": "1e9a69ecf2a692f862d88a7bd1a9ea51159cbd49c2f21210921efb60b5449938", + "cssSha256": "7887d32e9c7e19944d442c51dc2747254861b0cb468cccf703df5d30eb0a79ce" + }, + { + "file": "packages/components/upload/_example/upload.less", + "sha256": "70adffca1f8c766a99441382747ecb936fa726a2838e9b9b744543c8b47fbc30", + "cssSha256": "4a2c118248bc650846b56d6947cf3e5dff8c5067805fc031135d291265de5f7b" + }, + { + "file": "packages/components/upload/upload.less", + "sha256": "b90c288a1a6641a90556d0ce6ffb10fa16f66a9563dddac20aea9a0e30e0a61f", + "cssSha256": "39389a50c0b7270b4ffcb02b21893603be786727615cf708209ebecfab406739" + }, + { + "file": "packages/components/watermark/watermark.less", + "sha256": "bcb352722e7e1a03bf929554af30fa4aac4adbd2be58db5ace1999ea06241704", + "cssSha256": "7d2ed98b2b0f14aae6b425d55541a5cc104161df9d5a492213bb03a18cc493f4" + } + ], + "failures": [], + "counts": { + "compiled-css-consumer-found": 789, + "no-consumer-in-compiled-css-or-other-source": 15 + }, + "rows": [ + { + "name": "actionSheetBorderColor", + "miniComponent": "action-sheet", + "cssName": "--td-action-sheet-border-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/action-sheet/action-sheet.less", + "selector": ".t-action-sheet__description::after", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-action-sheet-border-color, var(--td-component-stroke, var(--td-gray-color-3, #e7e7e7)))" + }, + { + "file": "packages/components/action-sheet/action-sheet.less", + "selector": ".t-action-sheet__list-item:not(:last-child)::after", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-action-sheet-border-color, var(--td-component-stroke, var(--td-gray-color-3, #e7e7e7)))" + }, + { + "file": "packages/components/action-sheet/action-sheet.less", + "selector": ".t-action-sheet__gap-grid", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-action-sheet-border-color, var(--td-component-stroke, var(--td-gray-color-3, #e7e7e7)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "actionSheetBorderRadius", + "miniComponent": "action-sheet", + "cssName": "--td-action-sheet-border-radius", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/action-sheet/action-sheet.less", + "selector": ".t-action-sheet__content", + "property": "border-top-left-radius", + "kind": "render-property", + "value": "var(--td-action-sheet-border-radius, var(--td-radius-extraLarge, 24rpx))" + }, + { + "file": "packages/components/action-sheet/action-sheet.less", + "selector": ".t-action-sheet__content", + "property": "border-top-right-radius", + "kind": "render-property", + "value": "var(--td-action-sheet-border-radius, var(--td-radius-extraLarge, 24rpx))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "actionSheetCancelColor", + "miniComponent": "action-sheet", + "cssName": "--td-action-sheet-cancel-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/action-sheet/action-sheet.less", + "selector": ".t-action-sheet__cancel", + "property": "color", + "kind": "render-property", + "value": "var(--td-action-sheet-cancel-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "actionSheetColor", + "miniComponent": "action-sheet", + "cssName": "--td-action-sheet-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/action-sheet/action-sheet.less", + "selector": ".t-action-sheet__content", + "property": "color", + "kind": "render-property", + "value": "var(--td-action-sheet-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "actionSheetDescriptionColor", + "miniComponent": "action-sheet", + "cssName": "--td-action-sheet-description-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/action-sheet/action-sheet.less", + "selector": ".t-action-sheet__description", + "property": "color", + "kind": "render-property", + "value": "var(--td-action-sheet-description-color, var(--td-text-color-placeholder, var(--td-font-gray-3, rgba(0, 0, 0, 0.4))))" + }, + { + "file": "packages/components/action-sheet/action-sheet.less", + "selector": ".t-action-sheet__list-item-desc", + "property": "color", + "kind": "render-property", + "value": "var(--td-action-sheet-description-color, var(--td-text-color-placeholder, var(--td-font-gray-3, rgba(0, 0, 0, 0.4))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "actionSheetDescriptionFont", + "miniComponent": "action-sheet", + "cssName": "--td-action-sheet-description-font", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/action-sheet/action-sheet.less", + "selector": ".t-action-sheet__description", + "property": "font", + "kind": "render-property", + "value": "var(--td-action-sheet-description-font, var(--td-font-body-medium, 28rpx / 44rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "actionSheetDisabledColor", + "miniComponent": "action-sheet", + "cssName": "--td-action-sheet-disabled-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/action-sheet/action-sheet.less", + "selector": ".t-action-sheet__list-item--disabled", + "property": "color", + "kind": "render-property", + "value": "var(--td-action-sheet-disabled-color, var(--td-text-color-disabled, var(--td-font-gray-4, rgba(0, 0, 0, 0.26))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "actionSheetDotActiveColor", + "miniComponent": "action-sheet", + "cssName": "--td-action-sheet-dot-active-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/action-sheet/action-sheet.less", + "selector": ".t-action-sheet__dots-item.t-is-active", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-action-sheet-dot-active-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "actionSheetDotColor", + "miniComponent": "action-sheet", + "cssName": "--td-action-sheet-dot-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/action-sheet/action-sheet.less", + "selector": ".t-action-sheet__dots-item", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-action-sheet-dot-color, var(--td-text-color-disabled, var(--td-font-gray-4, rgba(0, 0, 0, 0.26))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "actionSheetDotSize", + "miniComponent": "action-sheet", + "cssName": "--td-action-sheet-dot-size", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/action-sheet/action-sheet.less", + "selector": ".t-action-sheet__dots-item", + "property": "width", + "kind": "render-property", + "value": "var(--td-action-sheet-dot-size, 16rpx)" + }, + { + "file": "packages/components/action-sheet/action-sheet.less", + "selector": ".t-action-sheet__dots-item", + "property": "height", + "kind": "render-property", + "value": "var(--td-action-sheet-dot-size, 16rpx)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "actionSheetGapColor", + "miniComponent": "action-sheet", + "cssName": "--td-action-sheet-gap-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/action-sheet/action-sheet.less", + "selector": ".t-action-sheet__gap-list", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-action-sheet-gap-color, var(--td-bg-color-page, var(--td-gray-color-1, #f3f3f3)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "avatarBgColor", + "miniComponent": "avatar", + "cssName": "--td-avatar-bg-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/avatar/avatar.less", + "selector": ".t-avatar", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-avatar-bg-color, var(--td-brand-color-light-active, var(--td-primary-color-2, #d9e1ff)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "avatarBorderColor", + "miniComponent": "avatar", + "cssName": "--td-avatar-border-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/avatar/avatar.less", + "selector": ".t-avatar--border", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-avatar-border-color, #fff)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "avatarBorderWidthLarge", + "miniComponent": "avatar", + "cssName": "--td-avatar-border-width-large", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/avatar/avatar.less", + "selector": ".t-avatar--border-large", + "property": "border-width", + "kind": "render-property", + "value": "var(--td-avatar-border-width-large, 6rpx)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "avatarBorderWidthMedium", + "miniComponent": "avatar", + "cssName": "--td-avatar-border-width-medium", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/avatar/avatar.less", + "selector": ".t-avatar--border-medium", + "property": "border-width", + "kind": "render-property", + "value": "var(--td-avatar-border-width-medium, 4rpx)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "avatarBorderWidthSmall", + "miniComponent": "avatar", + "cssName": "--td-avatar-border-width-small", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/avatar/avatar.less", + "selector": ".t-avatar--border-small", + "property": "border-width", + "kind": "render-property", + "value": "var(--td-avatar-border-width-small, 2rpx)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "avatarCircleBorderRadius", + "miniComponent": "avatar", + "cssName": "--td-avatar-circle-border-radius", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/avatar/avatar.less", + "selector": ".t-avatar--circle", + "property": "border-radius", + "kind": "render-property", + "value": "var(--td-avatar-circle-border-radius, var(--td-radius-circle, 50%))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "avatarContentColor", + "miniComponent": "avatar", + "cssName": "--td-avatar-content-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/avatar/avatar.less", + "selector": ".t-avatar", + "property": "color", + "kind": "render-property", + "value": "var(--td-avatar-content-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "avatarGroupInitZIndex", + "miniComponent": "avatar-group", + "cssName": "--td-avatar-group-init-z-index", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/avatar-group/avatar-group.less", + "selector": ".t-avatar-group-offset-left .t-avatar__wrapper:nth-child(1)", + "property": "z-index", + "kind": "render-property", + "value": "calc(var(--td-avatar-group-init-z-index, 50) - 1)" + }, + { + "file": "packages/components/avatar-group/avatar-group.less", + "selector": ".t-avatar-group-offset-left .t-avatar__wrapper:nth-child(2)", + "property": "z-index", + "kind": "render-property", + "value": "calc(var(--td-avatar-group-init-z-index, 50) - 2)" + }, + { + "file": "packages/components/avatar-group/avatar-group.less", + "selector": ".t-avatar-group-offset-left .t-avatar__wrapper:nth-child(3)", + "property": "z-index", + "kind": "render-property", + "value": "calc(var(--td-avatar-group-init-z-index, 50) - 3)" + }, + { + "file": "packages/components/avatar-group/avatar-group.less", + "selector": ".t-avatar-group-offset-left .t-avatar__wrapper:nth-child(4)", + "property": "z-index", + "kind": "render-property", + "value": "calc(var(--td-avatar-group-init-z-index, 50) - 4)" + }, + { + "file": "packages/components/avatar-group/avatar-group.less", + "selector": ".t-avatar-group-offset-left .t-avatar__wrapper:nth-child(5)", + "property": "z-index", + "kind": "render-property", + "value": "calc(var(--td-avatar-group-init-z-index, 50) - 5)" + }, + { + "file": "packages/components/avatar-group/avatar-group.less", + "selector": ".t-avatar-group-offset-left .t-avatar__wrapper:nth-child(6)", + "property": "z-index", + "kind": "render-property", + "value": "calc(var(--td-avatar-group-init-z-index, 50) - 6)" + }, + { + "file": "packages/components/avatar-group/avatar-group.less", + "selector": ".t-avatar-group-offset-left .t-avatar__wrapper:nth-child(7)", + "property": "z-index", + "kind": "render-property", + "value": "calc(var(--td-avatar-group-init-z-index, 50) - 7)" + }, + { + "file": "packages/components/avatar-group/avatar-group.less", + "selector": ".t-avatar-group-offset-left .t-avatar__wrapper:nth-child(8)", + "property": "z-index", + "kind": "render-property", + "value": "calc(var(--td-avatar-group-init-z-index, 50) - 8)" + }, + { + "file": "packages/components/avatar-group/avatar-group.less", + "selector": ".t-avatar-group-offset-left .t-avatar__wrapper:nth-child(9)", + "property": "z-index", + "kind": "render-property", + "value": "calc(var(--td-avatar-group-init-z-index, 50) - 9)" + }, + { + "file": "packages/components/avatar-group/avatar-group.less", + "selector": ".t-avatar-group-offset-left .t-avatar__wrapper:nth-child(10)", + "property": "z-index", + "kind": "render-property", + "value": "calc(var(--td-avatar-group-init-z-index, 50) - 10)" + }, + { + "file": "packages/components/avatar-group/avatar-group.less", + "selector": ".t-avatar-group-offset-left .t-avatar__wrapper:nth-child(11)", + "property": "z-index", + "kind": "render-property", + "value": "calc(var(--td-avatar-group-init-z-index, 50) - 11)" + }, + { + "file": "packages/components/avatar-group/avatar-group.less", + "selector": ".t-avatar-group-offset-left .t-avatar__wrapper:nth-child(12)", + "property": "z-index", + "kind": "render-property", + "value": "calc(var(--td-avatar-group-init-z-index, 50) - 12)" + }, + { + "file": "packages/components/avatar-group/avatar-group.less", + "selector": ".t-avatar-group-offset-left .t-avatar__wrapper:nth-child(13)", + "property": "z-index", + "kind": "render-property", + "value": "calc(var(--td-avatar-group-init-z-index, 50) - 13)" + }, + { + "file": "packages/components/avatar-group/avatar-group.less", + "selector": ".t-avatar-group-offset-left .t-avatar__wrapper:nth-child(14)", + "property": "z-index", + "kind": "render-property", + "value": "calc(var(--td-avatar-group-init-z-index, 50) - 14)" + }, + { + "file": "packages/components/avatar-group/avatar-group.less", + "selector": ".t-avatar-group-offset-left .t-avatar__wrapper:nth-child(15)", + "property": "z-index", + "kind": "render-property", + "value": "calc(var(--td-avatar-group-init-z-index, 50) - 15)" + }, + { + "file": "packages/components/avatar-group/avatar-group.less", + "selector": ".t-avatar-group-offset-left .t-avatar__wrapper:nth-child(16)", + "property": "z-index", + "kind": "render-property", + "value": "calc(var(--td-avatar-group-init-z-index, 50) - 16)" + }, + { + "file": "packages/components/avatar-group/avatar-group.less", + "selector": ".t-avatar-group-offset-left .t-avatar__wrapper:nth-child(17)", + "property": "z-index", + "kind": "render-property", + "value": "calc(var(--td-avatar-group-init-z-index, 50) - 17)" + }, + { + "file": "packages/components/avatar-group/avatar-group.less", + "selector": ".t-avatar-group-offset-left .t-avatar__wrapper:nth-child(18)", + "property": "z-index", + "kind": "render-property", + "value": "calc(var(--td-avatar-group-init-z-index, 50) - 18)" + }, + { + "file": "packages/components/avatar-group/avatar-group.less", + "selector": ".t-avatar-group-offset-left .t-avatar__wrapper:nth-child(19)", + "property": "z-index", + "kind": "render-property", + "value": "calc(var(--td-avatar-group-init-z-index, 50) - 19)" + }, + { + "file": "packages/components/avatar-group/avatar-group.less", + "selector": ".t-avatar-group-offset-left .t-avatar__wrapper:nth-child(20)", + "property": "z-index", + "kind": "render-property", + "value": "calc(var(--td-avatar-group-init-z-index, 50) - 20)" + }, + { + "file": "packages/components/avatar-group/avatar-group.less", + "selector": ".t-avatar-group-offset-left .t-avatar__wrapper:nth-child(21)", + "property": "z-index", + "kind": "render-property", + "value": "calc(var(--td-avatar-group-init-z-index, 50) - 21)" + }, + { + "file": "packages/components/avatar-group/avatar-group.less", + "selector": ".t-avatar-group-offset-left .t-avatar__wrapper:nth-child(22)", + "property": "z-index", + "kind": "render-property", + "value": "calc(var(--td-avatar-group-init-z-index, 50) - 22)" + }, + { + "file": "packages/components/avatar-group/avatar-group.less", + "selector": ".t-avatar-group-offset-left .t-avatar__wrapper:nth-child(23)", + "property": "z-index", + "kind": "render-property", + "value": "calc(var(--td-avatar-group-init-z-index, 50) - 23)" + }, + { + "file": "packages/components/avatar-group/avatar-group.less", + "selector": ".t-avatar-group-offset-left .t-avatar__wrapper:nth-child(24)", + "property": "z-index", + "kind": "render-property", + "value": "calc(var(--td-avatar-group-init-z-index, 50) - 24)" + }, + { + "file": "packages/components/avatar-group/avatar-group.less", + "selector": ".t-avatar-group-offset-left .t-avatar__wrapper:nth-child(25)", + "property": "z-index", + "kind": "render-property", + "value": "calc(var(--td-avatar-group-init-z-index, 50) - 25)" + }, + { + "file": "packages/components/avatar-group/avatar-group.less", + "selector": ".t-avatar-group-offset-left .t-avatar__wrapper:nth-child(26)", + "property": "z-index", + "kind": "render-property", + "value": "calc(var(--td-avatar-group-init-z-index, 50) - 26)" + }, + { + "file": "packages/components/avatar-group/avatar-group.less", + "selector": ".t-avatar-group-offset-left .t-avatar__wrapper:nth-child(27)", + "property": "z-index", + "kind": "render-property", + "value": "calc(var(--td-avatar-group-init-z-index, 50) - 27)" + }, + { + "file": "packages/components/avatar-group/avatar-group.less", + "selector": ".t-avatar-group-offset-left .t-avatar__wrapper:nth-child(28)", + "property": "z-index", + "kind": "render-property", + "value": "calc(var(--td-avatar-group-init-z-index, 50) - 28)" + }, + { + "file": "packages/components/avatar-group/avatar-group.less", + "selector": ".t-avatar-group-offset-left .t-avatar__wrapper:nth-child(29)", + "property": "z-index", + "kind": "render-property", + "value": "calc(var(--td-avatar-group-init-z-index, 50) - 29)" + }, + { + "file": "packages/components/avatar-group/avatar-group.less", + "selector": ".t-avatar-group-offset-left .t-avatar__wrapper:nth-child(30)", + "property": "z-index", + "kind": "render-property", + "value": "calc(var(--td-avatar-group-init-z-index, 50) - 30)" + }, + { + "file": "packages/components/avatar-group/avatar-group.less", + "selector": ".t-avatar-group-offset-left .t-avatar__wrapper:nth-child(31)", + "property": "z-index", + "kind": "render-property", + "value": "calc(var(--td-avatar-group-init-z-index, 50) - 31)" + }, + { + "file": "packages/components/avatar-group/avatar-group.less", + "selector": ".t-avatar-group-offset-left .t-avatar__wrapper:nth-child(32)", + "property": "z-index", + "kind": "render-property", + "value": "calc(var(--td-avatar-group-init-z-index, 50) - 32)" + }, + { + "file": "packages/components/avatar-group/avatar-group.less", + "selector": ".t-avatar-group-offset-left .t-avatar__wrapper:nth-child(33)", + "property": "z-index", + "kind": "render-property", + "value": "calc(var(--td-avatar-group-init-z-index, 50) - 33)" + }, + { + "file": "packages/components/avatar-group/avatar-group.less", + "selector": ".t-avatar-group-offset-left .t-avatar__wrapper:nth-child(34)", + "property": "z-index", + "kind": "render-property", + "value": "calc(var(--td-avatar-group-init-z-index, 50) - 34)" + }, + { + "file": "packages/components/avatar-group/avatar-group.less", + "selector": ".t-avatar-group-offset-left .t-avatar__wrapper:nth-child(35)", + "property": "z-index", + "kind": "render-property", + "value": "calc(var(--td-avatar-group-init-z-index, 50) - 35)" + }, + { + "file": "packages/components/avatar-group/avatar-group.less", + "selector": ".t-avatar-group-offset-left .t-avatar__wrapper:nth-child(36)", + "property": "z-index", + "kind": "render-property", + "value": "calc(var(--td-avatar-group-init-z-index, 50) - 36)" + }, + { + "file": "packages/components/avatar-group/avatar-group.less", + "selector": ".t-avatar-group-offset-left .t-avatar__wrapper:nth-child(37)", + "property": "z-index", + "kind": "render-property", + "value": "calc(var(--td-avatar-group-init-z-index, 50) - 37)" + }, + { + "file": "packages/components/avatar-group/avatar-group.less", + "selector": ".t-avatar-group-offset-left .t-avatar__wrapper:nth-child(38)", + "property": "z-index", + "kind": "render-property", + "value": "calc(var(--td-avatar-group-init-z-index, 50) - 38)" + }, + { + "file": "packages/components/avatar-group/avatar-group.less", + "selector": ".t-avatar-group-offset-left .t-avatar__wrapper:nth-child(39)", + "property": "z-index", + "kind": "render-property", + "value": "calc(var(--td-avatar-group-init-z-index, 50) - 39)" + }, + { + "file": "packages/components/avatar-group/avatar-group.less", + "selector": ".t-avatar-group-offset-left .t-avatar__wrapper:nth-child(40)", + "property": "z-index", + "kind": "render-property", + "value": "calc(var(--td-avatar-group-init-z-index, 50) - 40)" + }, + { + "file": "packages/components/avatar-group/avatar-group.less", + "selector": ".t-avatar-group-offset-left .t-avatar__wrapper:nth-child(41)", + "property": "z-index", + "kind": "render-property", + "value": "calc(var(--td-avatar-group-init-z-index, 50) - 41)" + }, + { + "file": "packages/components/avatar-group/avatar-group.less", + "selector": ".t-avatar-group-offset-left .t-avatar__wrapper:nth-child(42)", + "property": "z-index", + "kind": "render-property", + "value": "calc(var(--td-avatar-group-init-z-index, 50) - 42)" + }, + { + "file": "packages/components/avatar-group/avatar-group.less", + "selector": ".t-avatar-group-offset-left .t-avatar__wrapper:nth-child(43)", + "property": "z-index", + "kind": "render-property", + "value": "calc(var(--td-avatar-group-init-z-index, 50) - 43)" + }, + { + "file": "packages/components/avatar-group/avatar-group.less", + "selector": ".t-avatar-group-offset-left .t-avatar__wrapper:nth-child(44)", + "property": "z-index", + "kind": "render-property", + "value": "calc(var(--td-avatar-group-init-z-index, 50) - 44)" + }, + { + "file": "packages/components/avatar-group/avatar-group.less", + "selector": ".t-avatar-group-offset-left .t-avatar__wrapper:nth-child(45)", + "property": "z-index", + "kind": "render-property", + "value": "calc(var(--td-avatar-group-init-z-index, 50) - 45)" + }, + { + "file": "packages/components/avatar-group/avatar-group.less", + "selector": ".t-avatar-group-offset-left .t-avatar__wrapper:nth-child(46)", + "property": "z-index", + "kind": "render-property", + "value": "calc(var(--td-avatar-group-init-z-index, 50) - 46)" + }, + { + "file": "packages/components/avatar-group/avatar-group.less", + "selector": ".t-avatar-group-offset-left .t-avatar__wrapper:nth-child(47)", + "property": "z-index", + "kind": "render-property", + "value": "calc(var(--td-avatar-group-init-z-index, 50) - 47)" + }, + { + "file": "packages/components/avatar-group/avatar-group.less", + "selector": ".t-avatar-group-offset-left .t-avatar__wrapper:nth-child(48)", + "property": "z-index", + "kind": "render-property", + "value": "calc(var(--td-avatar-group-init-z-index, 50) - 48)" + }, + { + "file": "packages/components/avatar-group/avatar-group.less", + "selector": ".t-avatar-group-offset-left .t-avatar__wrapper:nth-child(49)", + "property": "z-index", + "kind": "render-property", + "value": "calc(var(--td-avatar-group-init-z-index, 50) - 49)" + }, + { + "file": "packages/components/avatar-group/avatar-group.less", + "selector": ".t-avatar-group-offset-left .t-avatar__wrapper:nth-child(50)", + "property": "z-index", + "kind": "render-property", + "value": "calc(var(--td-avatar-group-init-z-index, 50) - 50)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "avatarGroupLineSpacing", + "miniComponent": "avatar-group", + "cssName": "--td-avatar-group-line-spacing", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/avatar-group/avatar-group.less", + "selector": ".t-avatar-group-offset-left .t-avatar__wrapper,\n.t-avatar-group-offset-right .t-avatar__wrapper", + "property": "padding", + "kind": "render-property", + "value": "var(--td-avatar-group-line-spacing, calc(var(--td-spacer, 16rpx) / 4)) 0" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "avatarGroupMarginLeftLarge", + "miniComponent": "avatar-group", + "cssName": "--td-avatar-group-margin-left-large", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/avatar-group/avatar-group.less", + "selector": ".t-avatar-group-offset-left-large,\n.t-avatar-group-offset-right-large", + "property": "--td-avatar-margin-left", + "kind": "custom-property-forward", + "value": "var(--td-avatar-group-margin-left-large, calc(-1 * var(--td-spacer, 16rpx)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "avatarGroupMarginLeftMedium", + "miniComponent": "avatar-group", + "cssName": "--td-avatar-group-margin-left-medium", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/avatar-group/avatar-group.less", + "selector": ".t-avatar-group-offset-left-medium,\n.t-avatar-group-offset-right-medium", + "property": "--td-avatar-margin-left", + "kind": "custom-property-forward", + "value": "var(--td-avatar-group-margin-left-medium, calc(-1 * var(--td-spacer, 16rpx)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "avatarGroupMarginLeftSmall", + "miniComponent": "avatar-group", + "cssName": "--td-avatar-group-margin-left-small", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/avatar-group/avatar-group.less", + "selector": ".t-avatar-group-offset-left-small,\n.t-avatar-group-offset-right-small", + "property": "--td-avatar-margin-left", + "kind": "custom-property-forward", + "value": "var(--td-avatar-group-margin-left-small, calc(-1 * var(--td-spacer, 16rpx)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "avatarIconLargeFontSize", + "miniComponent": "avatar", + "cssName": "--td-avatar-icon-large-font-size", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/avatar/avatar.less", + "selector": ".t-avatar--large .t-avatar__icon", + "property": "font-size", + "kind": "render-property", + "value": "var(--td-avatar-icon-large-font-size, 64rpx)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "avatarIconMediumFontSize", + "miniComponent": "avatar", + "cssName": "--td-avatar-icon-medium-font-size", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/avatar/avatar.less", + "selector": ".t-avatar--medium .t-avatar__icon", + "property": "font-size", + "kind": "render-property", + "value": "var(--td-avatar-icon-medium-font-size, 48rpx)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "avatarIconSmallFontSize", + "miniComponent": "avatar", + "cssName": "--td-avatar-icon-small-font-size", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/avatar/avatar.less", + "selector": ".t-avatar--small .t-avatar__icon", + "property": "font-size", + "kind": "render-property", + "value": "var(--td-avatar-icon-small-font-size, var(--td-font-size-xl, 40rpx))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "avatarLargeWidth", + "miniComponent": "avatar", + "cssName": "--td-avatar-large-width", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/avatar/avatar.less", + "selector": ".t-avatar--large", + "property": "width", + "kind": "render-property", + "value": "var(--td-avatar-large-width, 128rpx)" + }, + { + "file": "packages/components/avatar/avatar.less", + "selector": ".t-avatar--large", + "property": "height", + "kind": "render-property", + "value": "var(--td-avatar-large-width, 128rpx)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "avatarMarginLeft", + "miniComponent": "avatar", + "cssName": "--td-avatar-margin-left", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/avatar/avatar.less", + "selector": ".t-avatar__wrapper", + "property": "margin-left", + "kind": "render-property", + "value": "var(--td-avatar-margin-left, 0)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "avatarMediumWidth", + "miniComponent": "avatar", + "cssName": "--td-avatar-medium-width", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/avatar/avatar.less", + "selector": ".t-avatar--medium", + "property": "width", + "kind": "render-property", + "value": "var(--td-avatar-medium-width, 96rpx)" + }, + { + "file": "packages/components/avatar/avatar.less", + "selector": ".t-avatar--medium", + "property": "height", + "kind": "render-property", + "value": "var(--td-avatar-medium-width, 96rpx)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "avatarRoundBorderRadius", + "miniComponent": "avatar", + "cssName": "--td-avatar-round-border-radius", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/avatar/avatar.less", + "selector": ".t-avatar--round", + "property": "border-radius", + "kind": "render-property", + "value": "var(--td-avatar-round-border-radius, var(--td-radius-default, 12rpx))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "avatarSmallWidth", + "miniComponent": "avatar", + "cssName": "--td-avatar-small-width", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/avatar/avatar.less", + "selector": ".t-avatar--small", + "property": "width", + "kind": "render-property", + "value": "var(--td-avatar-small-width, 80rpx)" + }, + { + "file": "packages/components/avatar/avatar.less", + "selector": ".t-avatar--small", + "property": "height", + "kind": "render-property", + "value": "var(--td-avatar-small-width, 80rpx)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "avatarTextLargeFontSize", + "miniComponent": "avatar", + "cssName": "--td-avatar-text-large-font-size", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/avatar/avatar.less", + "selector": ".t-avatar--large", + "property": "font-size", + "kind": "render-property", + "value": "var(--td-avatar-text-large-font-size, var(--td-font-size-xl, 40rpx))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "avatarTextMediumFontSize", + "miniComponent": "avatar", + "cssName": "--td-avatar-text-medium-font-size", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/avatar/avatar.less", + "selector": ".t-avatar--medium", + "property": "font-size", + "kind": "render-property", + "value": "var(--td-avatar-text-medium-font-size, var(--td-font-size-m, 32rpx))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "avatarTextSmallFontSize", + "miniComponent": "avatar", + "cssName": "--td-avatar-text-small-font-size", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/avatar/avatar.less", + "selector": ".t-avatar--small", + "property": "font-size", + "kind": "render-property", + "value": "var(--td-avatar-text-small-font-size, var(--td-font-size-base, 28rpx))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "backTopRoundBgColor", + "miniComponent": "back-top", + "cssName": "--td-back-top-round-bg-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/back-top/back-top.less", + "selector": ".t-back-top--round,\n.t-back-top--half-round", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-back-top-round-bg-color, var(--td-bg-color-container, var(--td-font-white-1, #ffffff)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "backTopRoundBorderColor", + "miniComponent": "back-top", + "cssName": "--td-back-top-round-border-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/back-top/back-top.less", + "selector": ".t-back-top--round,\n.t-back-top--half-round", + "property": "border", + "kind": "render-property", + "value": "1rpx solid var(--td-back-top-round-border-color, var(--td-component-border, var(--td-gray-color-4, #dcdcdc)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "backTopRoundBorderRadius", + "miniComponent": "back-top", + "cssName": "--td-back-top-round-border-radius", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/back-top/back-top.less", + "selector": ".t-back-top--round,\n.t-back-top--round-dark", + "property": "border-radius", + "kind": "render-property", + "value": "var(--td-back-top-round-border-radius, var(--td-radius-circle, 50%))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "backTopRoundColor", + "miniComponent": "back-top", + "cssName": "--td-back-top-round-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/back-top/back-top.less", + "selector": ".t-back-top--round,\n.t-back-top--half-round", + "property": "color", + "kind": "render-property", + "value": "var(--td-back-top-round-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "backTopRoundDarkBgColor", + "miniComponent": "back-top", + "cssName": "--td-back-top-round-dark-bg-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/back-top/back-top.less", + "selector": ".t-back-top--round-dark,\n.t-back-top--half-round-dark", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-back-top-round-dark-bg-color, var(--td-gray-color-13, #242424))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "backTopRoundDarkColor", + "miniComponent": "back-top", + "cssName": "--td-back-top-round-dark-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/back-top/back-top.less", + "selector": ".t-back-top--round-dark,\n.t-back-top--half-round-dark", + "property": "color", + "kind": "render-property", + "value": "var(--td-back-top-round-dark-color, var(--td-text-color-anti, var(--td-font-white-1, #ffffff)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "badgeBasicHeight", + "miniComponent": "badge", + "cssName": "--td-badge-basic-height", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/badge/badge.less", + "selector": ".t-badge--basic", + "property": "height", + "kind": "render-property", + "value": "var(--td-badge-basic-height, 32rpx)" + }, + { + "file": "packages/components/badge/badge.less", + "selector": ".t-badge--circle", + "property": "border-radius", + "kind": "render-property", + "value": "calc(var(--td-badge-basic-height, 32rpx) / 2)" + }, + { + "file": "packages/components/badge/badge.less", + "selector": ".t-badge--ribbon,\n.t-badge--ribbon-right,\n.t-badge--ribbon-left,\n.t-badge--triangle-left,\n.t-badge--triangle-right", + "property": "width", + "kind": "render-property", + "value": "calc(var(--td-badge-basic-height, 32rpx) * 2)" + }, + { + "file": "packages/components/badge/badge.less", + "selector": ".t-badge--ribbon,\n.t-badge--ribbon-right,\n.t-badge--ribbon-left,\n.t-badge--triangle-left,\n.t-badge--triangle-right", + "property": "height", + "kind": "render-property", + "value": "calc(var(--td-badge-basic-height, 32rpx) * 2)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "badgeBasicPadding", + "miniComponent": "badge", + "cssName": "--td-badge-basic-padding", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/badge/badge.less", + "selector": ".t-badge--basic", + "property": "padding", + "kind": "render-property", + "value": "0 var(--td-badge-basic-padding, calc(var(--td-spacer, 16rpx) / 2))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "badgeBasicWidth", + "miniComponent": "badge", + "cssName": "--td-badge-basic-width", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/badge/badge.less", + "selector": ".t-badge--count", + "property": "min-width", + "kind": "render-property", + "value": "var(--td-badge-basic-width, 32rpx)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "badgeBgColor", + "miniComponent": "badge", + "cssName": "--td-badge-bg-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/badge/badge.less", + "selector": ".t-badge--basic", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-badge-bg-color, var(--td-error-color, var(--td-error-color-6, #d54941)))" + }, + { + "file": "packages/components/badge/badge.less", + "selector": ".t-badge--ribbon,\n.t-badge--ribbon-right", + "property": "background", + "kind": "render-property", + "value": "linear-gradient(45deg, transparent 50%, var(--td-badge-bg-color, var(--td-error-color, var(--td-error-color-6, #d54941))) 50%, var(--td-badge-bg-color, var(--td-error-color, var(--td-error-color-6, #d54941))) 85%, transparent 85%)" + }, + { + "file": "packages/components/badge/badge.less", + "selector": ".t-badge--triangle-right", + "property": "background", + "kind": "render-property", + "value": "linear-gradient(45deg, transparent 50%, var(--td-badge-bg-color, var(--td-error-color, var(--td-error-color-6, #d54941))) 50%)" + }, + { + "file": "packages/components/badge/badge.less", + "selector": ".t-badge--ribbon-left", + "property": "background", + "kind": "render-property", + "value": "linear-gradient(-45deg, transparent 50%, var(--td-badge-bg-color, var(--td-error-color, var(--td-error-color-6, #d54941))) 50%, var(--td-badge-bg-color, var(--td-error-color, var(--td-error-color-6, #d54941))) 85%, transparent 85%)" + }, + { + "file": "packages/components/badge/badge.less", + "selector": ".t-badge--triangle-left", + "property": "background", + "kind": "render-property", + "value": "linear-gradient(-45deg, transparent 50%, var(--td-badge-bg-color, var(--td-error-color, var(--td-error-color-6, #d54941))) 50%)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "badgeBorderRadius", + "miniComponent": "badge", + "cssName": "--td-badge-border-radius", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/badge/badge.less", + "selector": ".t-badge--basic", + "property": "border-radius", + "kind": "render-property", + "value": "var(--td-badge-border-radius, 4rpx)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "badgeBubbleBorderRadius", + "miniComponent": "badge", + "cssName": "--td-badge-bubble-border-radius", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/badge/badge.less", + "selector": ".t-badge--bubble", + "property": "border-radius", + "kind": "render-property", + "value": "var(--td-badge-bubble-border-radius, 20rpx 20rpx 20rpx 1px)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "badgeContentTextColor", + "miniComponent": "badge", + "cssName": "--td-badge-content-text-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/badge/badge.less", + "selector": ".t-badge__content-text", + "property": "color", + "kind": "render-property", + "value": "var(--td-badge-content-text-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "badgeContentTextFont", + "miniComponent": "badge", + "cssName": "--td-badge-content-text-font", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/badge/badge.less", + "selector": ".t-badge__content-text", + "property": "font", + "kind": "render-property", + "value": "var(--td-badge-content-text-font, var(--td-font-body-large, 32rpx / 48rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "badgeDotSize", + "miniComponent": "badge", + "cssName": "--td-badge-dot-size", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/badge/badge.less", + "selector": ".t-badge--dot", + "property": "height", + "kind": "render-property", + "value": "var(--td-badge-dot-size, 16rpx)" + }, + { + "file": "packages/components/badge/badge.less", + "selector": ".t-badge--dot", + "property": "min-width", + "kind": "render-property", + "value": "var(--td-badge-dot-size, 16rpx)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "badgeFont", + "miniComponent": "badge", + "cssName": "--td-badge-font", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/badge/badge.less", + "selector": ".t-badge--basic", + "property": "font", + "kind": "render-property", + "value": "var(--td-badge-font, var(--td-font-mark-extraSmall, 600 20rpx / 32rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "badgeLargeFont", + "miniComponent": "badge", + "cssName": "--td-badge-large-font", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/badge/badge.less", + "selector": ".t-badge--large", + "property": "font", + "kind": "render-property", + "value": "var(--td-badge-large-font, var(--td-font-mark-small, 600 24rpx / 40rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "badgeLargeHeight", + "miniComponent": "badge", + "cssName": "--td-badge-large-height", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/badge/badge.less", + "selector": ".t-badge--large", + "property": "height", + "kind": "render-property", + "value": "var(--td-badge-large-height, 40rpx)" + }, + { + "file": "packages/components/badge/badge.less", + "selector": ".t-badge--large", + "property": "min-width", + "kind": "render-property", + "value": "var(--td-badge-large-height, 40rpx)" + }, + { + "file": "packages/components/badge/badge.less", + "selector": ".t-badge--large.t-badge--circle", + "property": "border-radius", + "kind": "render-property", + "value": "calc(var(--td-badge-large-height, 40rpx) / 2)" + }, + { + "file": "packages/components/badge/badge.less", + "selector": ".t-badge--large.t-badge--ribbon,\n.t-badge--large.t-badge--ribbon-right,\n.t-badge--large.t-badge--ribbon-left,\n.t-badge--large.t-badge--triangle-right,\n.t-badge--large.t-badge--triangle-left", + "property": "width", + "kind": "render-property", + "value": "calc(var(--td-badge-large-height, 40rpx) * 2)" + }, + { + "file": "packages/components/badge/badge.less", + "selector": ".t-badge--large.t-badge--ribbon,\n.t-badge--large.t-badge--ribbon-right,\n.t-badge--large.t-badge--ribbon-left,\n.t-badge--large.t-badge--triangle-right,\n.t-badge--large.t-badge--triangle-left", + "property": "height", + "kind": "render-property", + "value": "calc(var(--td-badge-large-height, 40rpx) * 2)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "badgeLargePadding", + "miniComponent": "badge", + "cssName": "--td-badge-large-padding", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/badge/badge.less", + "selector": ".t-badge--large", + "property": "padding", + "kind": "render-property", + "value": "0 var(--td-badge-large-padding, 10rpx)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "badgeTextColor", + "miniComponent": "badge", + "cssName": "--td-badge-text-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/badge/badge.less", + "selector": ".t-badge--basic", + "property": "color", + "kind": "render-property", + "value": "var(--td-badge-text-color, var(--td-text-color-anti, var(--td-font-white-1, #ffffff)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "buttonBorderRadius", + "miniComponent": "button", + "cssName": "--td-button-border-radius", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button", + "property": "border-radius", + "kind": "render-property", + "value": "var(--td-button-border-radius, var(--td-radius-default, 12rpx))" + }, + { + "file": "packages/components/button/button.less", + "selector": ".t-button::after", + "property": "border-radius", + "kind": "render-property", + "value": "calc(var(--td-button-border-radius, var(--td-radius-default, 12rpx)) * 2)" + } + ], + "nonLessReferences": [ + { + "file": "packages/components/qrcode/_example/size/index.wxss", + "line": 24, + "text": "--td-button-border-radius: 0px;" + } + ], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "buttonBorderWidth", + "miniComponent": "button", + "cssName": "--td-button-border-width", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--default::after", + "property": "border-width", + "kind": "render-property", + "value": "var(--td-button-border-width, 4rpx)" + }, + { + "file": "packages/components/button/button.less", + "selector": ".t-button--primary::after", + "property": "border-width", + "kind": "render-property", + "value": "var(--td-button-border-width, 4rpx)" + }, + { + "file": "packages/components/button/button.less", + "selector": ".t-button--light::after", + "property": "border-width", + "kind": "render-property", + "value": "var(--td-button-border-width, 4rpx)" + }, + { + "file": "packages/components/button/button.less", + "selector": ".t-button--danger::after", + "property": "border-width", + "kind": "render-property", + "value": "var(--td-button-border-width, 4rpx)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "buttonDangerActiveBgColor", + "miniComponent": "button", + "cssName": "--td-button-danger-active-bg-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--danger.t-button--hover,\n.t-button--danger.t-button--hover::after", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-button-danger-active-bg-color, var(--td-error-color-active, var(--td-error-color-7, #ad352f)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "buttonDangerActiveBorderColor", + "miniComponent": "button", + "cssName": "--td-button-danger-active-border-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--danger.t-button--hover,\n.t-button--danger.t-button--hover::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-button-danger-active-border-color, var(--td-error-color-active, var(--td-error-color-7, #ad352f)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "buttonDangerBgColor", + "miniComponent": "button", + "cssName": "--td-button-danger-bg-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--danger", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-button-danger-bg-color, var(--td-error-color, var(--td-error-color-6, #d54941)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "buttonDangerBorderColor", + "miniComponent": "button", + "cssName": "--td-button-danger-border-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--danger", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-button-danger-border-color, var(--td-error-color, var(--td-error-color-6, #d54941)))" + }, + { + "file": "packages/components/button/button.less", + "selector": ".t-button--danger::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-button-danger-border-color, var(--td-error-color, var(--td-error-color-6, #d54941)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "buttonDangerColor", + "miniComponent": "button", + "cssName": "--td-button-danger-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--danger", + "property": "color", + "kind": "render-property", + "value": "var(--td-button-danger-color, var(--td-text-color-anti, var(--td-font-white-1, #ffffff)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "buttonDangerDashedBorderColor", + "miniComponent": "button", + "cssName": "--td-button-danger-dashed-border-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--dashed.t-button--danger,\n.t-button--dashed.t-button--danger::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-button-danger-dashed-border-color, var(--td-button-danger-dashed-color, var(--td-error-color, var(--td-error-color-6, #d54941))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "buttonDangerDashedColor", + "miniComponent": "button", + "cssName": "--td-button-danger-dashed-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--dashed.t-button--danger", + "property": "color", + "kind": "render-property", + "value": "var(--td-button-danger-dashed-color, var(--td-error-color, var(--td-error-color-6, #d54941)))" + }, + { + "file": "packages/components/button/button.less", + "selector": ".t-button--dashed.t-button--danger,\n.t-button--dashed.t-button--danger::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-button-danger-dashed-border-color, var(--td-button-danger-dashed-color, var(--td-error-color, var(--td-error-color-6, #d54941))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "buttonDangerDashedDisabledColor", + "miniComponent": "button", + "cssName": "--td-button-danger-dashed-disabled-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--dashed.t-button--danger.t-button--disabled", + "property": "color", + "kind": "render-property", + "value": "var(--td-button-danger-dashed-disabled-color, var(--td-button-danger-disabled-color, var(--td-font-white-1, #ffffff)))" + }, + { + "file": "packages/components/button/button.less", + "selector": ".t-button--dashed.t-button--danger.t-button--disabled::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-button-danger-dashed-disabled-color, var(--td-button-danger-disabled-color, var(--td-font-white-1, #ffffff)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "buttonDangerDisabledBg", + "miniComponent": "button", + "cssName": "--td-button-danger-disabled-bg", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--danger.t-button--disabled", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-button-danger-disabled-bg, var(--td-error-color-3, #ffb9b0))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "buttonDangerDisabledBorderColor", + "miniComponent": "button", + "cssName": "--td-button-danger-disabled-border-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--danger.t-button--disabled,\n.t-button--danger.t-button--disabled::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-button-danger-disabled-border-color, var(--td-error-color-3, #ffb9b0))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "buttonDangerDisabledColor", + "miniComponent": "button", + "cssName": "--td-button-danger-disabled-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--danger.t-button--disabled", + "property": "color", + "kind": "render-property", + "value": "var(--td-button-danger-disabled-color, var(--td-font-white-1, #ffffff))" + }, + { + "file": "packages/components/button/button.less", + "selector": ".t-button--text.t-button--danger.t-button--disabled", + "property": "color", + "kind": "render-property", + "value": "var(--td-button-danger-text-disabled-color, var(--td-button-danger-disabled-color, var(--td-font-white-1, #ffffff)))" + }, + { + "file": "packages/components/button/button.less", + "selector": ".t-button--dashed.t-button--danger.t-button--disabled", + "property": "color", + "kind": "render-property", + "value": "var(--td-button-danger-dashed-disabled-color, var(--td-button-danger-disabled-color, var(--td-font-white-1, #ffffff)))" + }, + { + "file": "packages/components/button/button.less", + "selector": ".t-button--dashed.t-button--danger.t-button--disabled::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-button-danger-dashed-disabled-color, var(--td-button-danger-disabled-color, var(--td-font-white-1, #ffffff)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "buttonDangerOutlineActiveBgColor", + "miniComponent": "button", + "cssName": "--td-button-danger-outline-active-bg-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--outline.t-button--danger.t-button--hover::after", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-button-danger-outline-active-bg-color, var(--td-bg-color-container-active, var(--td-gray-color-3, #e7e7e7)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "buttonDangerOutlineActiveBorderColor", + "miniComponent": "button", + "cssName": "--td-button-danger-outline-active-border-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--outline.t-button--danger.t-button--hover", + "property": "color", + "kind": "render-property", + "value": "var(--td-button-danger-outline-active-border-color, var(--td-error-color-active, var(--td-error-color-7, #ad352f)))" + }, + { + "file": "packages/components/button/button.less", + "selector": ".t-button--outline.t-button--danger.t-button--hover::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-button-danger-outline-active-border-color, var(--td-error-color-active, var(--td-error-color-7, #ad352f)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "buttonDangerOutlineBorderColor", + "miniComponent": "button", + "cssName": "--td-button-danger-outline-border-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--outline.t-button--danger,\n.t-button--outline.t-button--danger::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-button-danger-outline-border-color, var(--td-button-danger-outline-color, var(--td-error-color, var(--td-error-color-6, #d54941))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "buttonDangerOutlineColor", + "miniComponent": "button", + "cssName": "--td-button-danger-outline-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--outline.t-button--danger", + "property": "color", + "kind": "render-property", + "value": "var(--td-button-danger-outline-color, var(--td-error-color, var(--td-error-color-6, #d54941)))" + }, + { + "file": "packages/components/button/button.less", + "selector": ".t-button--outline.t-button--danger,\n.t-button--outline.t-button--danger::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-button-danger-outline-border-color, var(--td-button-danger-outline-color, var(--td-error-color, var(--td-error-color-6, #d54941))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "buttonDangerOutlineDisabledColor", + "miniComponent": "button", + "cssName": "--td-button-danger-outline-disabled-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--outline.t-button--danger.t-button--disabled", + "property": "color", + "kind": "render-property", + "value": "var(--td-button-danger-outline-disabled-color, var(--td-error-color-3, #ffb9b0))" + }, + { + "file": "packages/components/button/button.less", + "selector": ".t-button--outline.t-button--danger.t-button--disabled,\n.t-button--outline.t-button--danger.t-button--disabled::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-button-danger-outline-disabled-color, var(--td-error-color-3, #ffb9b0))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "buttonDangerTextActiveBgColor", + "miniComponent": "button", + "cssName": "--td-button-danger-text-active-bg-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--text.t-button--danger.t-button--hover,\n.t-button--text.t-button--danger.t-button--hover::after", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-button-danger-text-active-bg-color, var(--td-bg-color-container-active, var(--td-gray-color-3, #e7e7e7)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "buttonDangerTextColor", + "miniComponent": "button", + "cssName": "--td-button-danger-text-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--text.t-button--danger", + "property": "color", + "kind": "render-property", + "value": "var(--td-button-danger-text-color, var(--td-error-color, var(--td-error-color-6, #d54941)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "buttonDangerTextDisabledColor", + "miniComponent": "button", + "cssName": "--td-button-danger-text-disabled-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--text.t-button--danger.t-button--disabled", + "property": "color", + "kind": "render-property", + "value": "var(--td-button-danger-text-disabled-color, var(--td-button-danger-disabled-color, var(--td-font-white-1, #ffffff)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "buttonDefaultActiveBgColor", + "miniComponent": "button", + "cssName": "--td-button-default-active-bg-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--default.t-button--hover,\n.t-button--default.t-button--hover::after", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-button-default-active-bg-color, var(--td-bg-color-component-active, var(--td-gray-color-6, #a6a6a6)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "buttonDefaultActiveBorderColor", + "miniComponent": "button", + "cssName": "--td-button-default-active-border-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--default.t-button--hover,\n.t-button--default.t-button--hover::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-button-default-active-border-color, var(--td-bg-color-component-active, var(--td-gray-color-6, #a6a6a6)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "buttonDefaultBgColor", + "miniComponent": "button", + "cssName": "--td-button-default-bg-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--default", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-button-default-bg-color, var(--td-bg-color-component, var(--td-gray-color-3, #e7e7e7)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "buttonDefaultBorderColor", + "miniComponent": "button", + "cssName": "--td-button-default-border-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--default", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-button-default-border-color, var(--td-bg-color-component, var(--td-gray-color-3, #e7e7e7)))" + }, + { + "file": "packages/components/button/button.less", + "selector": ".t-button--default::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-button-default-border-color, var(--td-bg-color-component, var(--td-gray-color-3, #e7e7e7)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "buttonDefaultColor", + "miniComponent": "button", + "cssName": "--td-button-default-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--default", + "property": "color", + "kind": "render-property", + "value": "var(--td-button-default-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + }, + { + "file": "packages/components/button/button.less", + "selector": ".t-button--text", + "property": "color", + "kind": "render-property", + "value": "var(--td-button-default-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "buttonDefaultDisabledBg", + "miniComponent": "button", + "cssName": "--td-button-default-disabled-bg", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--default.t-button--disabled", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-button-default-disabled-bg, var(--td-bg-color-component-disabled, var(--td-gray-color-2, #eeeeee)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "buttonDefaultDisabledBorderColor", + "miniComponent": "button", + "cssName": "--td-button-default-disabled-border-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--default.t-button--disabled,\n.t-button--default.t-button--disabled::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-button-default-disabled-border-color, var(--td-bg-color-component-disabled, var(--td-gray-color-2, #eeeeee)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "buttonDefaultDisabledColor", + "miniComponent": "button", + "cssName": "--td-button-default-disabled-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--default.t-button--disabled", + "property": "color", + "kind": "render-property", + "value": "var(--td-button-default-disabled-color, var(--td-text-color-disabled, var(--td-font-gray-4, rgba(0, 0, 0, 0.26))))" + }, + { + "file": "packages/components/button/button.less", + "selector": ".t-button--text.t-button--disabled", + "property": "color", + "kind": "render-property", + "value": "var(--td-button-default-disabled-color, var(--td-text-color-disabled, var(--td-font-gray-4, rgba(0, 0, 0, 0.26))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "buttonDefaultOutlineActiveBgColor", + "miniComponent": "button", + "cssName": "--td-button-default-outline-active-bg-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--outline.t-button--hover,\n.t-button--outline.t-button--hover::after", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-button-default-outline-active-bg-color, var(--td-bg-color-container-active, var(--td-gray-color-3, #e7e7e7)))" + }, + { + "file": "packages/components/button/button.less", + "selector": ".t-button--dashed.t-button--hover,\n.t-button--dashed.t-button--hover::after", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-button-default-outline-active-bg-color, var(--td-bg-color-container-active, var(--td-gray-color-3, #e7e7e7)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "buttonDefaultOutlineActiveBorderColor", + "miniComponent": "button", + "cssName": "--td-button-default-outline-active-border-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--outline.t-button--hover,\n.t-button--outline.t-button--hover::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-button-default-outline-active-border-color, var(--td-component-border, var(--td-gray-color-4, #dcdcdc)))" + }, + { + "file": "packages/components/button/button.less", + "selector": ".t-button--dashed.t-button--hover,\n.t-button--dashed.t-button--hover::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-button-default-outline-active-border-color, var(--td-component-border, var(--td-gray-color-4, #dcdcdc)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "buttonDefaultOutlineBorderColor", + "miniComponent": "button", + "cssName": "--td-button-default-outline-border-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--outline,\n.t-button--outline::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-button-default-outline-border-color, var(--td-component-border, var(--td-gray-color-4, #dcdcdc)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "buttonDefaultOutlineColor", + "miniComponent": "button", + "cssName": "--td-button-default-outline-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--outline", + "property": "color", + "kind": "render-property", + "value": "var(--td-button-default-outline-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "buttonDefaultOutlineDisabledColor", + "miniComponent": "button", + "cssName": "--td-button-default-outline-disabled-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--outline.t-button--disabled", + "property": "color", + "kind": "render-property", + "value": "var(--td-button-default-outline-disabled-color, var(--td-component-border, var(--td-gray-color-4, #dcdcdc)))" + }, + { + "file": "packages/components/button/button.less", + "selector": ".t-button--outline.t-button--disabled,\n.t-button--outline.t-button--disabled::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-button-default-outline-disabled-color, var(--td-component-border, var(--td-gray-color-4, #dcdcdc)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "buttonDefaultTextActiveBgColor", + "miniComponent": "button", + "cssName": "--td-button-default-text-active-bg-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--text.t-button--hover,\n.t-button--text.t-button--hover::after", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-button-default-text-active-bg-color, var(--td-bg-color-container-active, var(--td-gray-color-3, #e7e7e7)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "buttonExtraSmallFont", + "miniComponent": "button", + "cssName": "--td-button-extra-small-font", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--size-extra-small", + "property": "font", + "kind": "render-property", + "value": "var(--td-button-extra-small-font, var(--td-font-mark-medium, 600 28rpx / 44rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "buttonExtraSmallHeight", + "miniComponent": "button", + "cssName": "--td-button-extra-small-height", + "previousDecision": "default-widget-value-verified", + "compiledUses": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--size-extra-small", + "property": "height", + "kind": "render-property", + "value": "var(--td-button-extra-small-height, 56rpx)" + }, + { + "file": "packages/components/button/button.less", + "selector": ".t-button--round.t-button--size-extra-small", + "property": "border-radius", + "kind": "render-property", + "value": "calc(var(--td-button-extra-small-height, 56rpx) / 2)" + }, + { + "file": "packages/components/button/button.less", + "selector": ".t-button--round.t-button--size-extra-small::after", + "property": "border-radius", + "kind": "render-property", + "value": "var(--td-button-extra-small-height, 56rpx)" + }, + { + "file": "packages/components/button/button.less", + "selector": ".t-button--square.t-button--size-extra-small", + "property": "width", + "kind": "render-property", + "value": "var(--td-button-extra-small-height, 56rpx)" + }, + { + "file": "packages/components/button/button.less", + "selector": ".t-button--circle.t-button--size-extra-small", + "property": "width", + "kind": "render-property", + "value": "var(--td-button-extra-small-height, 56rpx)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "buttonExtraSmallIconSize", + "miniComponent": "button", + "cssName": "--td-button-extra-small-icon-size", + "previousDecision": "default-widget-value-verified", + "compiledUses": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--size-extra-small .t-button__icon", + "property": "font-size", + "kind": "render-property", + "value": "var(--td-button-extra-small-icon-size, 36rpx)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "buttonExtraSmallPaddingHorizontal", + "miniComponent": "button", + "cssName": "--td-button-extra-small-padding-horizontal", + "previousDecision": "default-widget-value-verified", + "compiledUses": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--size-extra-small", + "property": "padding-left", + "kind": "render-property", + "value": "var(--td-button-extra-small-padding-horizontal, var(--td-spacer, 16rpx))" + }, + { + "file": "packages/components/button/button.less", + "selector": ".t-button--size-extra-small", + "property": "padding-right", + "kind": "render-property", + "value": "var(--td-button-extra-small-padding-horizontal, var(--td-spacer, 16rpx))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "buttonGhostBorderColor", + "miniComponent": "button", + "cssName": "--td-button-ghost-border-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--ghost,\n.t-button--ghost::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-button-ghost-border-color, var(--td-button-ghost-color, var(--td-text-color-anti, var(--td-font-white-1, #ffffff))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "buttonGhostColor", + "miniComponent": "button", + "cssName": "--td-button-ghost-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--ghost", + "property": "color", + "kind": "render-property", + "value": "var(--td-button-ghost-color, var(--td-text-color-anti, var(--td-font-white-1, #ffffff)))" + }, + { + "file": "packages/components/button/button.less", + "selector": ".t-button--ghost,\n.t-button--ghost::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-button-ghost-border-color, var(--td-button-ghost-color, var(--td-text-color-anti, var(--td-font-white-1, #ffffff))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "buttonGhostDangerBorderColor", + "miniComponent": "button", + "cssName": "--td-button-ghost-danger-border-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--ghost.t-button--danger,\n.t-button--ghost.t-button--danger::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-button-ghost-danger-border-color, var(--td-error-color, var(--td-error-color-6, #d54941)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "buttonGhostDangerColor", + "miniComponent": "button", + "cssName": "--td-button-ghost-danger-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--ghost.t-button--danger", + "property": "color", + "kind": "render-property", + "value": "var(--td-button-ghost-danger-color, var(--td-error-color, var(--td-error-color-6, #d54941)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "buttonGhostDangerHoverColor", + "miniComponent": "button", + "cssName": "--td-button-ghost-danger-hover-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--ghost.t-button--danger.t-button--hover", + "property": "color", + "kind": "render-property", + "value": "var(--td-button-ghost-danger-hover-color, var(--td-error-color-active, var(--td-error-color-7, #ad352f)))" + }, + { + "file": "packages/components/button/button.less", + "selector": ".t-button--ghost.t-button--danger.t-button--hover,\n.t-button--ghost.t-button--danger.t-button--hover::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-button-ghost-danger-hover-color, var(--td-error-color-active, var(--td-error-color-7, #ad352f)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "buttonGhostDisabledColor", + "miniComponent": "button", + "cssName": "--td-button-ghost-disabled-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--ghost.t-button--primary.t-button--disabled", + "property": "color", + "kind": "render-property", + "value": "var(--td-button-ghost-disabled-color, var(--td-font-white-4, rgba(255, 255, 255, 0.22)))" + }, + { + "file": "packages/components/button/button.less", + "selector": ".t-button--ghost.t-button--primary.t-button--disabled,\n.t-button--ghost.t-button--primary.t-button--disabled::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-button-ghost-disabled-color, var(--td-font-white-4, rgba(255, 255, 255, 0.22)))" + }, + { + "file": "packages/components/button/button.less", + "selector": ".t-button--ghost.t-button--danger.t-button--disabled", + "property": "color", + "kind": "render-property", + "value": "var(--td-button-ghost-disabled-color, var(--td-font-white-4, rgba(255, 255, 255, 0.22)))" + }, + { + "file": "packages/components/button/button.less", + "selector": ".t-button--ghost.t-button--danger.t-button--disabled,\n.t-button--ghost.t-button--danger.t-button--disabled::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-button-ghost-disabled-color, var(--td-font-white-4, rgba(255, 255, 255, 0.22)))" + }, + { + "file": "packages/components/button/button.less", + "selector": ".t-button--ghost.t-button--default.t-button--disabled", + "property": "color", + "kind": "render-property", + "value": "var(--td-button-ghost-disabled-color, var(--td-font-white-4, rgba(255, 255, 255, 0.22)))" + }, + { + "file": "packages/components/button/button.less", + "selector": ".t-button--ghost.t-button--default.t-button--disabled,\n.t-button--ghost.t-button--default.t-button--disabled::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-button-ghost-disabled-color, var(--td-font-white-4, rgba(255, 255, 255, 0.22)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "buttonGhostHoverColor", + "miniComponent": "button", + "cssName": "--td-button-ghost-hover-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--ghost.t-button--default.t-button--hover", + "property": "color", + "kind": "render-property", + "value": "var(--td-button-ghost-hover-color, var(--td-font-white-2, rgba(255, 255, 255, 0.55)))" + }, + { + "file": "packages/components/button/button.less", + "selector": ".t-button--ghost.t-button--default.t-button--hover,\n.t-button--ghost.t-button--default.t-button--hover::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-button-ghost-hover-color, var(--td-font-white-2, rgba(255, 255, 255, 0.55)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "buttonGhostPrimaryBorderColor", + "miniComponent": "button", + "cssName": "--td-button-ghost-primary-border-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--ghost.t-button--primary,\n.t-button--ghost.t-button--primary::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-button-ghost-primary-border-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "buttonGhostPrimaryColor", + "miniComponent": "button", + "cssName": "--td-button-ghost-primary-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--ghost.t-button--primary", + "property": "color", + "kind": "render-property", + "value": "var(--td-button-ghost-primary-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "buttonGhostPrimaryHoverColor", + "miniComponent": "button", + "cssName": "--td-button-ghost-primary-hover-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--ghost.t-button--primary.t-button--hover", + "property": "color", + "kind": "render-property", + "value": "var(--td-button-ghost-primary-hover-color, var(--td-brand-color-active, var(--td-primary-color-8, #003cab)))" + }, + { + "file": "packages/components/button/button.less", + "selector": ".t-button--ghost.t-button--primary.t-button--hover,\n.t-button--ghost.t-button--primary.t-button--hover::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-button-ghost-primary-hover-color, var(--td-brand-color-active, var(--td-primary-color-8, #003cab)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "buttonIconBorderRadius", + "miniComponent": "button", + "cssName": "--td-button-icon-border-radius", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button__icon", + "property": "border-radius", + "kind": "render-property", + "value": "var(--td-button-icon-border-radius, 8rpx)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "buttonIconSpacer", + "miniComponent": "button", + "cssName": "--td-button-icon-spacer", + "previousDecision": "pending", + "compiledUses": [], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "no-consumer-in-compiled-css-or-other-source", + "finalPaintVerified": false + }, + { + "name": "buttonLargeFont", + "miniComponent": "button", + "cssName": "--td-button-large-font", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--size-large", + "property": "font", + "kind": "render-property", + "value": "var(--td-button-large-font, var(--td-font-mark-large, 600 32rpx / 48rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "buttonLargeHeight", + "miniComponent": "button", + "cssName": "--td-button-large-height", + "previousDecision": "default-widget-value-verified", + "compiledUses": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--size-large", + "property": "height", + "kind": "render-property", + "value": "var(--td-button-large-height, 96rpx)" + }, + { + "file": "packages/components/button/button.less", + "selector": ".t-button--round.t-button--size-large", + "property": "border-radius", + "kind": "render-property", + "value": "calc(var(--td-button-large-height, 96rpx) / 2)" + }, + { + "file": "packages/components/button/button.less", + "selector": ".t-button--round.t-button--size-large::after", + "property": "border-radius", + "kind": "render-property", + "value": "var(--td-button-large-height, 96rpx)" + }, + { + "file": "packages/components/button/button.less", + "selector": ".t-button--square.t-button--size-large", + "property": "width", + "kind": "render-property", + "value": "var(--td-button-large-height, 96rpx)" + }, + { + "file": "packages/components/button/button.less", + "selector": ".t-button--circle.t-button--size-large", + "property": "width", + "kind": "render-property", + "value": "var(--td-button-large-height, 96rpx)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "buttonLargeIconSize", + "miniComponent": "button", + "cssName": "--td-button-large-icon-size", + "previousDecision": "default-widget-value-verified", + "compiledUses": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--size-large .t-button__icon", + "property": "font-size", + "kind": "render-property", + "value": "var(--td-button-large-icon-size, 48rpx)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "buttonLargePaddingHorizontal", + "miniComponent": "button", + "cssName": "--td-button-large-padding-horizontal", + "previousDecision": "default-widget-value-verified", + "compiledUses": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--size-large", + "property": "padding-left", + "kind": "render-property", + "value": "var(--td-button-large-padding-horizontal, 40rpx)" + }, + { + "file": "packages/components/button/button.less", + "selector": ".t-button--size-large", + "property": "padding-right", + "kind": "render-property", + "value": "var(--td-button-large-padding-horizontal, 40rpx)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "buttonLightActiveBgColor", + "miniComponent": "button", + "cssName": "--td-button-light-active-bg-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--light.t-button--hover,\n.t-button--light.t-button--hover::after", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-button-light-active-bg-color, var(--td-brand-color-light-active, var(--td-primary-color-2, #d9e1ff)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "buttonLightActiveBorderColor", + "miniComponent": "button", + "cssName": "--td-button-light-active-border-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--light.t-button--hover,\n.t-button--light.t-button--hover::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-button-light-active-border-color, var(--td-brand-color-light-active, var(--td-primary-color-2, #d9e1ff)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "buttonLightBgColor", + "miniComponent": "button", + "cssName": "--td-button-light-bg-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--light", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-button-light-bg-color, var(--td-brand-color-light, var(--td-primary-color-1, #f2f3ff)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "buttonLightBorderColor", + "miniComponent": "button", + "cssName": "--td-button-light-border-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--light", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-button-light-border-color, var(--td-brand-color-light, var(--td-primary-color-1, #f2f3ff)))" + }, + { + "file": "packages/components/button/button.less", + "selector": ".t-button--light::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-button-light-border-color, var(--td-brand-color-light, var(--td-primary-color-1, #f2f3ff)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "buttonLightColor", + "miniComponent": "button", + "cssName": "--td-button-light-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--light", + "property": "color", + "kind": "render-property", + "value": "var(--td-button-light-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "buttonLightDisabledBg", + "miniComponent": "button", + "cssName": "--td-button-light-disabled-bg", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--light.t-button--disabled", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-button-light-disabled-bg, var(--td-brand-color-light, var(--td-primary-color-1, #f2f3ff)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "buttonLightDisabledBorderColor", + "miniComponent": "button", + "cssName": "--td-button-light-disabled-border-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--light.t-button--disabled,\n.t-button--light.t-button--disabled::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-button-light-disabled-border-color, var(--td-brand-color-light, var(--td-primary-color-1, #f2f3ff)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "buttonLightDisabledColor", + "miniComponent": "button", + "cssName": "--td-button-light-disabled-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--light.t-button--disabled", + "property": "color", + "kind": "render-property", + "value": "var(--td-button-light-disabled-color, var(--td-brand-color-disabled, var(--td-primary-color-3, #b5c7ff)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "buttonLightOutlineActiveBgColor", + "miniComponent": "button", + "cssName": "--td-button-light-outline-active-bg-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--outline.t-button--light.t-button--hover,\n.t-button--outline.t-button--light.t-button--hover::after", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-button-light-outline-active-bg-color, var(--td-brand-color-light-active, var(--td-primary-color-2, #d9e1ff)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "buttonLightOutlineActiveBorderColor", + "miniComponent": "button", + "cssName": "--td-button-light-outline-active-border-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--outline.t-button--light.t-button--hover", + "property": "color", + "kind": "render-property", + "value": "var(--td-button-light-outline-active-border-color, var(--td-brand-color-active, var(--td-primary-color-8, #003cab)))" + }, + { + "file": "packages/components/button/button.less", + "selector": ".t-button--outline.t-button--light.t-button--hover,\n.t-button--outline.t-button--light.t-button--hover::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-button-light-outline-active-border-color, var(--td-brand-color-active, var(--td-primary-color-8, #003cab)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "buttonLightOutlineBgColor", + "miniComponent": "button", + "cssName": "--td-button-light-outline-bg-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--outline.t-button--light", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-button-light-outline-bg-color, var(--td-brand-color-light, var(--td-primary-color-1, #f2f3ff)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "buttonLightOutlineBorderColor", + "miniComponent": "button", + "cssName": "--td-button-light-outline-border-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--outline.t-button--light,\n.t-button--outline.t-button--light::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-button-light-outline-border-color, var(--td-button-light-outline-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "buttonLightOutlineColor", + "miniComponent": "button", + "cssName": "--td-button-light-outline-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--outline.t-button--light", + "property": "color", + "kind": "render-property", + "value": "var(--td-button-light-outline-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + }, + { + "file": "packages/components/button/button.less", + "selector": ".t-button--outline.t-button--light,\n.t-button--outline.t-button--light::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-button-light-outline-border-color, var(--td-button-light-outline-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "buttonLightOutlineDisabledColor", + "miniComponent": "button", + "cssName": "--td-button-light-outline-disabled-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--outline.t-button--light.t-button--disabled", + "property": "color", + "kind": "render-property", + "value": "var(--td-button-light-outline-disabled-color, var(--td-brand-color-disabled, var(--td-primary-color-3, #b5c7ff)))" + }, + { + "file": "packages/components/button/button.less", + "selector": ".t-button--outline.t-button--light.t-button--disabled,\n.t-button--outline.t-button--light.t-button--disabled::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-button-light-outline-disabled-color, var(--td-brand-color-disabled, var(--td-primary-color-3, #b5c7ff)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "buttonLightTextActiveBgColor", + "miniComponent": "button", + "cssName": "--td-button-light-text-active-bg-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--text.t-button--light.t-button--hover,\n.t-button--text.t-button--light.t-button--hover::after", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-button-light-text-active-bg-color, var(--td-bg-color-container-active, var(--td-gray-color-3, #e7e7e7)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "buttonLightTextColor", + "miniComponent": "button", + "cssName": "--td-button-light-text-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--text.t-button--light", + "property": "color", + "kind": "render-property", + "value": "var(--td-button-light-text-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "buttonMediumFont", + "miniComponent": "button", + "cssName": "--td-button-medium-font", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--size-medium", + "property": "font", + "kind": "render-property", + "value": "var(--td-button-medium-font, var(--td-font-mark-large, 600 32rpx / 48rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "buttonMediumHeight", + "miniComponent": "button", + "cssName": "--td-button-medium-height", + "previousDecision": "default-widget-value-verified", + "compiledUses": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--size-medium", + "property": "height", + "kind": "render-property", + "value": "var(--td-button-medium-height, 80rpx)" + }, + { + "file": "packages/components/button/button.less", + "selector": ".t-button--round.t-button--size-medium", + "property": "border-radius", + "kind": "render-property", + "value": "calc(var(--td-button-medium-height, 80rpx) / 2)" + }, + { + "file": "packages/components/button/button.less", + "selector": ".t-button--round.t-button--size-medium::after", + "property": "border-radius", + "kind": "render-property", + "value": "var(--td-button-medium-height, 80rpx)" + }, + { + "file": "packages/components/button/button.less", + "selector": ".t-button--square.t-button--size-medium", + "property": "width", + "kind": "render-property", + "value": "var(--td-button-medium-height, 80rpx)" + }, + { + "file": "packages/components/button/button.less", + "selector": ".t-button--circle.t-button--size-medium", + "property": "width", + "kind": "render-property", + "value": "var(--td-button-medium-height, 80rpx)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "buttonMediumIconSize", + "miniComponent": "button", + "cssName": "--td-button-medium-icon-size", + "previousDecision": "default-widget-value-verified", + "compiledUses": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--size-medium .t-button__icon", + "property": "font-size", + "kind": "render-property", + "value": "var(--td-button-medium-icon-size, 40rpx)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "buttonMediumPaddingHorizontal", + "miniComponent": "button", + "cssName": "--td-button-medium-padding-horizontal", + "previousDecision": "default-widget-value-verified", + "compiledUses": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--size-medium", + "property": "padding-left", + "kind": "render-property", + "value": "var(--td-button-medium-padding-horizontal, var(--td-spacer-2, 32rpx))" + }, + { + "file": "packages/components/button/button.less", + "selector": ".t-button--size-medium", + "property": "padding-right", + "kind": "render-property", + "value": "var(--td-button-medium-padding-horizontal, var(--td-spacer-2, 32rpx))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "buttonPrimaryActiveBgColor", + "miniComponent": "button", + "cssName": "--td-button-primary-active-bg-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--primary.t-button--hover,\n.t-button--primary.t-button--hover::after", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-button-primary-active-bg-color, var(--td-brand-color-active, var(--td-primary-color-8, #003cab)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "buttonPrimaryActiveBorderColor", + "miniComponent": "button", + "cssName": "--td-button-primary-active-border-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--primary.t-button--hover,\n.t-button--primary.t-button--hover::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-button-primary-active-border-color, var(--td-brand-color-active, var(--td-primary-color-8, #003cab)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "buttonPrimaryBgColor", + "miniComponent": "button", + "cssName": "--td-button-primary-bg-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--primary", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-button-primary-bg-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + } + ], + "nonLessReferences": [ + { + "file": "packages/components/config-provider/__test__/index.test.js", + "line": 552, + "text": "'--td-button-primary-bg-color-hover': '#ff0000'," + } + ], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "buttonPrimaryBorderColor", + "miniComponent": "button", + "cssName": "--td-button-primary-border-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--primary", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-button-primary-border-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + }, + { + "file": "packages/components/button/button.less", + "selector": ".t-button--primary::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-button-primary-border-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "buttonPrimaryColor", + "miniComponent": "button", + "cssName": "--td-button-primary-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--primary", + "property": "color", + "kind": "render-property", + "value": "var(--td-button-primary-color, var(--td-text-color-anti, var(--td-font-white-1, #ffffff)))" + } + ], + "nonLessReferences": [ + { + "file": "packages/components/config-provider/__test__/index.test.js", + "line": 528, + "text": "expect(result).toEqual({ '--td-button-primary-color': '#ff0000' });" + }, + { + "file": "packages/components/config-provider/__test__/index.test.js", + "line": 533, + "text": "expect(result).toEqual({ '--td-button-primary-color': '#ff0000' });" + }, + { + "file": "packages/components/config-provider/__test__/index.test.js", + "line": 549, + "text": "'--td-button-primary-color': '#ff0000'," + } + ], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "buttonPrimaryDashedBorderColor", + "miniComponent": "button", + "cssName": "--td-button-primary-dashed-border-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--dashed.t-button--primary,\n.t-button--dashed.t-button--primary::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-button-primary-dashed-border-color, var(--td-button-primary-dashed-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "buttonPrimaryDashedColor", + "miniComponent": "button", + "cssName": "--td-button-primary-dashed-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--dashed.t-button--primary", + "property": "color", + "kind": "render-property", + "value": "var(--td-button-primary-dashed-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + }, + { + "file": "packages/components/button/button.less", + "selector": ".t-button--dashed.t-button--primary,\n.t-button--dashed.t-button--primary::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-button-primary-dashed-border-color, var(--td-button-primary-dashed-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "buttonPrimaryDashedDisabledColor", + "miniComponent": "button", + "cssName": "--td-button-primary-dashed-disabled-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--dashed.t-button--primary.t-button--disabled", + "property": "color", + "kind": "render-property", + "value": "var(--td-button-primary-dashed-disabled-color, var(--td-brand-color-disabled, var(--td-primary-color-3, #b5c7ff)))" + }, + { + "file": "packages/components/button/button.less", + "selector": ".t-button--dashed.t-button--primary.t-button--disabled,\n.t-button--dashed.t-button--primary.t-button--disabled::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-button-primary-dashed-disabled-color, var(--td-brand-color-disabled, var(--td-primary-color-3, #b5c7ff)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "buttonPrimaryDisabledBg", + "miniComponent": "button", + "cssName": "--td-button-primary-disabled-bg", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--primary.t-button--disabled", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-button-primary-disabled-bg, var(--td-brand-color-disabled, var(--td-primary-color-3, #b5c7ff)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "buttonPrimaryDisabledBorderColor", + "miniComponent": "button", + "cssName": "--td-button-primary-disabled-border-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--primary.t-button--disabled,\n.t-button--primary.t-button--disabled::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-button-primary-disabled-border-color, var(--td-brand-color-disabled, var(--td-primary-color-3, #b5c7ff)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "buttonPrimaryDisabledColor", + "miniComponent": "button", + "cssName": "--td-button-primary-disabled-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--primary.t-button--disabled", + "property": "color", + "kind": "render-property", + "value": "var(--td-button-primary-disabled-color, var(--td-text-color-anti, var(--td-font-white-1, #ffffff)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "buttonPrimaryOutlineActiveBgColor", + "miniComponent": "button", + "cssName": "--td-button-primary-outline-active-bg-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--outline.t-button--primary.t-button--hover::after", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-button-primary-outline-active-bg-color, var(--td-bg-color-container-active, var(--td-gray-color-3, #e7e7e7)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "buttonPrimaryOutlineActiveBorderColor", + "miniComponent": "button", + "cssName": "--td-button-primary-outline-active-border-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--outline.t-button--primary.t-button--hover", + "property": "color", + "kind": "render-property", + "value": "var(--td-button-primary-outline-active-border-color, var(--td-brand-color-active, var(--td-primary-color-8, #003cab)))" + }, + { + "file": "packages/components/button/button.less", + "selector": ".t-button--outline.t-button--primary.t-button--hover::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-button-primary-outline-active-border-color, var(--td-brand-color-active, var(--td-primary-color-8, #003cab)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "buttonPrimaryOutlineBorderColor", + "miniComponent": "button", + "cssName": "--td-button-primary-outline-border-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--outline.t-button--primary,\n.t-button--outline.t-button--primary::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-button-primary-outline-border-color, var(--td-button-primary-outline-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "buttonPrimaryOutlineColor", + "miniComponent": "button", + "cssName": "--td-button-primary-outline-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--outline.t-button--primary", + "property": "color", + "kind": "render-property", + "value": "var(--td-button-primary-outline-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + }, + { + "file": "packages/components/button/button.less", + "selector": ".t-button--outline.t-button--primary,\n.t-button--outline.t-button--primary::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-button-primary-outline-border-color, var(--td-button-primary-outline-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "buttonPrimaryOutlineDisabledColor", + "miniComponent": "button", + "cssName": "--td-button-primary-outline-disabled-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--outline.t-button--primary.t-button--disabled", + "property": "color", + "kind": "render-property", + "value": "var(--td-button-primary-outline-disabled-color, var(--td-brand-color-disabled, var(--td-primary-color-3, #b5c7ff)))" + }, + { + "file": "packages/components/button/button.less", + "selector": ".t-button--outline.t-button--primary.t-button--disabled,\n.t-button--outline.t-button--primary.t-button--disabled::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-button-primary-outline-disabled-color, var(--td-brand-color-disabled, var(--td-primary-color-3, #b5c7ff)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "buttonPrimaryTextActiveBgColor", + "miniComponent": "button", + "cssName": "--td-button-primary-text-active-bg-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--text.t-button--primary.t-button--hover,\n.t-button--text.t-button--primary.t-button--hover::after", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-button-primary-text-active-bg-color, var(--td-bg-color-container-active, var(--td-gray-color-3, #e7e7e7)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "buttonPrimaryTextColor", + "miniComponent": "button", + "cssName": "--td-button-primary-text-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--text.t-button--primary", + "property": "color", + "kind": "render-property", + "value": "var(--td-button-primary-text-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "buttonPrimaryTextDisabledColor", + "miniComponent": "button", + "cssName": "--td-button-primary-text-disabled-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--text.t-button--primary.t-button--disabled", + "property": "color", + "kind": "render-property", + "value": "var(--td-button-primary-text-disabled-color, var(--td-brand-color-disabled, var(--td-primary-color-3, #b5c7ff)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "buttonSmallFont", + "miniComponent": "button", + "cssName": "--td-button-small-font", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--size-small", + "property": "font", + "kind": "render-property", + "value": "var(--td-button-small-font, var(--td-font-mark-medium, 600 28rpx / 44rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "buttonSmallHeight", + "miniComponent": "button", + "cssName": "--td-button-small-height", + "previousDecision": "default-widget-value-verified", + "compiledUses": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--size-small", + "property": "height", + "kind": "render-property", + "value": "var(--td-button-small-height, 64rpx)" + }, + { + "file": "packages/components/button/button.less", + "selector": ".t-button--round.t-button--size-small", + "property": "border-radius", + "kind": "render-property", + "value": "calc(var(--td-button-small-height, 64rpx) / 2)" + }, + { + "file": "packages/components/button/button.less", + "selector": ".t-button--round.t-button--size-small::after", + "property": "border-radius", + "kind": "render-property", + "value": "var(--td-button-small-height, 64rpx)" + }, + { + "file": "packages/components/button/button.less", + "selector": ".t-button--square.t-button--size-small", + "property": "width", + "kind": "render-property", + "value": "var(--td-button-small-height, 64rpx)" + }, + { + "file": "packages/components/button/button.less", + "selector": ".t-button--circle.t-button--size-small", + "property": "width", + "kind": "render-property", + "value": "var(--td-button-small-height, 64rpx)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "buttonSmallIconSize", + "miniComponent": "button", + "cssName": "--td-button-small-icon-size", + "previousDecision": "default-widget-value-verified", + "compiledUses": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--size-small .t-button__icon", + "property": "font-size", + "kind": "render-property", + "value": "var(--td-button-small-icon-size, 36rpx)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "buttonSmallPaddingHorizontal", + "miniComponent": "button", + "cssName": "--td-button-small-padding-horizontal", + "previousDecision": "default-widget-value-verified", + "compiledUses": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--size-small", + "property": "padding-left", + "kind": "render-property", + "value": "var(--td-button-small-padding-horizontal, var(--td-spacer-1, 24rpx))" + }, + { + "file": "packages/components/button/button.less", + "selector": ".t-button--size-small", + "property": "padding-right", + "kind": "render-property", + "value": "var(--td-button-small-padding-horizontal, var(--td-spacer-1, 24rpx))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "calendarActiveColor", + "miniComponent": "calendar", + "cssName": "--td-calendar-active-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/calendar/calendar.less", + "selector": ".t-calendar__dates-item--selected,\n.t-calendar__dates-item--start-end,\n.t-calendar__dates-item--start,\n.t-calendar__dates-item--end", + "property": "background", + "kind": "render-property", + "value": "var(--td-calendar-active-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + }, + { + "file": "packages/components/calendar/calendar.less", + "selector": ".t-calendar__dates-item--start + .t-calendar__dates-item--end::before", + "property": "background", + "kind": "render-property", + "value": "var(--td-calendar-active-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "calendarBgColor", + "miniComponent": "calendar", + "cssName": "--td-calendar-bg-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/calendar/calendar.less", + "selector": ".t-calendar", + "property": "background", + "kind": "render-property", + "value": "var(--td-calendar-bg-color, var(--td-bg-color-container, var(--td-font-white-1, #ffffff)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "calendarDaysColor", + "miniComponent": "calendar", + "cssName": "--td-calendar-days-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/calendar/calendar.less", + "selector": ".t-calendar__days-item", + "property": "color", + "kind": "render-property", + "value": "var(--td-calendar-days-color, var(--td-text-color-secondary, var(--td-font-gray-2, rgba(0, 0, 0, 0.6))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "calendarItemCentreColor", + "miniComponent": "calendar", + "cssName": "--td-calendar-item-centre-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/calendar/calendar.less", + "selector": ".t-calendar__dates-item--centre", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-calendar-item-centre-color, var(--td-brand-color-light, var(--td-primary-color-1, #f2f3ff)))" + }, + { + "file": "packages/components/calendar/calendar.less", + "selector": ".t-calendar__dates-item--centre::before,\n.t-calendar__dates-item--centre::after", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-calendar-item-centre-color, var(--td-brand-color-light, var(--td-primary-color-1, #f2f3ff)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "calendarItemDisabledColor", + "miniComponent": "calendar", + "cssName": "--td-calendar-item-disabled-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/calendar/calendar.less", + "selector": ".t-calendar__dates-item-suffix--disabled", + "property": "color", + "kind": "render-property", + "value": "var(--td-calendar-item-disabled-color, var(--td-text-color-disabled, var(--td-font-gray-4, rgba(0, 0, 0, 0.26))))" + }, + { + "file": "packages/components/calendar/calendar.less", + "selector": ".t-calendar__dates-item--disabled", + "property": "color", + "kind": "render-property", + "value": "var(--td-calendar-item-disabled-color, var(--td-text-color-disabled, var(--td-font-gray-4, rgba(0, 0, 0, 0.26))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "calendarItemSuffixColor", + "miniComponent": "calendar", + "cssName": "--td-calendar-item-suffix-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/calendar/calendar.less", + "selector": ".t-calendar__dates-item-suffix", + "property": "color", + "kind": "render-property", + "value": "var(--td-calendar-item-suffix-color, var(--td-text-color-placeholder, var(--td-font-gray-3, rgba(0, 0, 0, 0.4))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "calendarRadius", + "miniComponent": "calendar", + "cssName": "--td-calendar-radius", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/calendar/calendar.less", + "selector": ".t-calendar--popup", + "property": "border-top-left-radius", + "kind": "render-property", + "value": "var(--td-calendar-radius, var(--td-radius-extraLarge, 24rpx))" + }, + { + "file": "packages/components/calendar/calendar.less", + "selector": ".t-calendar--popup", + "property": "border-top-right-radius", + "kind": "render-property", + "value": "var(--td-calendar-radius, var(--td-radius-extraLarge, 24rpx))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "calendarSelectedBorderRadius", + "miniComponent": "calendar", + "cssName": "--td-calendar-selected-border-radius", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/calendar/calendar.less", + "selector": ".t-calendar__dates-item", + "property": "border-radius", + "kind": "render-property", + "value": "var(--td-calendar-selected-border-radius, var(--td-radius-default, 12rpx))" + }, + { + "file": "packages/components/calendar/calendar.less", + "selector": ".t-calendar__dates-item--selected,\n.t-calendar__dates-item--start-end,\n.t-calendar__dates-item--start,\n.t-calendar__dates-item--end", + "property": "border-radius", + "kind": "render-property", + "value": "var(--td-calendar-selected-border-radius, var(--td-radius-default, 12rpx))" + }, + { + "file": "packages/components/calendar/calendar.less", + "selector": ".t-calendar__dates-item--start", + "property": "border-radius", + "kind": "render-property", + "value": "var(--td-calendar-selected-border-radius, var(--td-radius-default, 12rpx)) 0 0 var(--td-calendar-selected-border-radius, var(--td-radius-default, 12rpx))" + }, + { + "file": "packages/components/calendar/calendar.less", + "selector": ".t-calendar__dates-item--end", + "property": "border-radius", + "kind": "render-property", + "value": "0 var(--td-calendar-selected-border-radius, var(--td-radius-default, 12rpx)) var(--td-calendar-selected-border-radius, var(--td-radius-default, 12rpx)) 0" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "calendarSelectedColor", + "miniComponent": "calendar", + "cssName": "--td-calendar-selected-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/calendar/calendar.less", + "selector": ".t-calendar__dates-item-suffix--selected,\n.t-calendar__dates-item-suffix--start,\n.t-calendar__dates-item-suffix--end", + "property": "color", + "kind": "render-property", + "value": "var(--td-calendar-selected-color, var(--td-text-color-anti, var(--td-font-white-1, #ffffff)))" + }, + { + "file": "packages/components/calendar/calendar.less", + "selector": ".t-calendar__dates-item--selected,\n.t-calendar__dates-item--start-end,\n.t-calendar__dates-item--start,\n.t-calendar__dates-item--end", + "property": "color", + "kind": "render-property", + "value": "var(--td-calendar-selected-color, var(--td-text-color-anti, var(--td-font-white-1, #ffffff)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "calendarSwitchModeIconColor", + "miniComponent": "calendar", + "cssName": "--td-calendar-switch-mode-icon-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/calendar/calendar.less", + "selector": ".t-calendar-header__action", + "property": "color", + "kind": "render-property", + "value": "var(--td-calendar-switch-mode-icon-color, var(--td-text-color-secondary, var(--td-font-gray-2, rgba(0, 0, 0, 0.6))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "calendarSwitchModeIconDisabledColor", + "miniComponent": "calendar", + "cssName": "--td-calendar-switch-mode-icon-disabled-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/calendar/calendar.less", + "selector": ".t-calendar-header__icon--disabled", + "property": "color", + "kind": "render-property", + "value": "var(--td-calendar-switch-mode-icon-disabled-color, var(--td-text-color-disabled, var(--td-font-gray-4, rgba(0, 0, 0, 0.26))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "calendarTitleColor", + "miniComponent": "calendar", + "cssName": "--td-calendar-title-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/calendar/calendar.less", + "selector": ".t-calendar__title", + "property": "color", + "kind": "render-property", + "value": "var(--td-calendar-title-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + }, + { + "file": "packages/components/calendar/calendar.less", + "selector": ".t-calendar__close-btn", + "property": "color", + "kind": "render-property", + "value": "var(--td-calendar-title-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + }, + { + "file": "packages/components/calendar/calendar.less", + "selector": ".t-calendar__month", + "property": "color", + "kind": "render-property", + "value": "var(--td-calendar-title-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + }, + { + "file": "packages/components/calendar/calendar.less", + "selector": ".t-calendar__dates-item", + "property": "color", + "kind": "render-property", + "value": "var(--td-calendar-title-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "calendarTitleFont", + "miniComponent": "calendar", + "cssName": "--td-calendar-title-font", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/calendar/calendar.less", + "selector": ".t-calendar__title", + "property": "font", + "kind": "render-property", + "value": "var(--td-calendar-title-font, var(--td-font-title-large, 600 36rpx / 52rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "cascaderActiveColor", + "miniComponent": "cascader", + "cssName": "--td-cascader-active-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/cascader/cascader.less", + "selector": ".t-cascader", + "property": "--td-radio-icon-checked-color", + "kind": "custom-property-forward", + "value": "var(--td-cascader-active-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + }, + { + "file": "packages/components/cascader/cascader.less", + "selector": ".t-cascader", + "property": "--td-tab-item-active-color", + "kind": "custom-property-forward", + "value": "var(--td-cascader-active-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + }, + { + "file": "packages/components/cascader/cascader.less", + "selector": ".t-cascader", + "property": "--td-tab-track-color", + "kind": "custom-property-forward", + "value": "var(--td-cascader-active-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + }, + { + "file": "packages/components/cascader/cascader.less", + "selector": ".t-cascader__step-dot", + "property": "border", + "kind": "render-property", + "value": "2rpx solid var(--td-cascader-active-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + }, + { + "file": "packages/components/cascader/cascader.less", + "selector": ".t-cascader__step-dot:not(.t-cascader__step-dot--last)::after", + "property": "background", + "kind": "render-property", + "value": "var(--td-cascader-active-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + }, + { + "file": "packages/components/cascader/cascader.less", + "selector": ".t-cascader__step-dot--active", + "property": "background", + "kind": "render-property", + "value": "var(--td-cascader-active-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + }, + { + "file": "packages/components/cascader/cascader.less", + "selector": ".t-cascader__step-dot--active", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-cascader-active-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + }, + { + "file": "packages/components/cascader/cascader.less", + "selector": ".t-cascader__step-label--active", + "property": "color", + "kind": "render-property", + "value": "var(--td-cascader-active-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + } + ], + "nonLessReferences": [ + { + "file": "packages/components/cascader/_example/keys/index.wxss", + "line": 2, + "text": "--td-cascader-active-color: green;" + } + ], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "cascaderBgColor", + "miniComponent": "cascader", + "cssName": "--td-cascader-bg-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/cascader/cascader.less", + "selector": ".t-cascader", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-cascader-bg-color, var(--td-bg-color-container, var(--td-font-white-1, #ffffff)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "cascaderBorderColor", + "miniComponent": "cascader", + "cssName": "--td-cascader-border-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/cascader/cascader.less", + "selector": ".t-cascader__steps::after", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-cascader-border-color, var(--td-component-stroke, var(--td-gray-color-3, #e7e7e7)))" + }, + { + "file": "packages/components/cascader/cascader.less", + "selector": ".t-cascader__filter-result-item::after", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-cascader-border-color, var(--td-component-stroke, var(--td-gray-color-3, #e7e7e7)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "cascaderContentHeight", + "miniComponent": "cascader", + "cssName": "--td-cascader-content-height", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/cascader/cascader.less", + "selector": ".t-cascader__content", + "property": "height", + "kind": "render-property", + "value": "var(--td-cascader-content-height, 78vh)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "cascaderDisabledColor", + "miniComponent": "cascader", + "cssName": "--td-cascader-disabled-color", + "previousDecision": "no-frozen-source-consumer-found", + "compiledUses": [], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "no-consumer-in-compiled-css-or-other-source", + "finalPaintVerified": false + }, + { + "name": "cascaderFilterEmptyColor", + "miniComponent": "cascader", + "cssName": "--td-cascader-filter-empty-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/cascader/cascader.less", + "selector": ".t-cascader__filter-empty", + "property": "color", + "kind": "render-property", + "value": "var(--td-cascader-filter-empty-color, var(--td-text-color-placeholder, var(--td-font-gray-3, rgba(0, 0, 0, 0.4))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "cascaderFilterEmptyPadding", + "miniComponent": "cascader", + "cssName": "--td-cascader-filter-empty-padding", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/cascader/cascader.less", + "selector": ".t-cascader__filter-empty", + "property": "padding", + "kind": "render-property", + "value": "var(--td-cascader-filter-empty-padding, var(--td-spacer-5, 96rpx) var(--td-spacer-2, 32rpx))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "cascaderFilterHighlightColor", + "miniComponent": "cascader", + "cssName": "--td-cascader-filter-highlight-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/cascader/cascader.less", + "selector": ".t-cascader__filter-highlight", + "property": "color", + "kind": "render-property", + "value": "var(--td-cascader-filter-highlight-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "cascaderFilterItemColor", + "miniComponent": "cascader", + "cssName": "--td-cascader-filter-item-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/cascader/cascader.less", + "selector": ".t-cascader__filter-result-item", + "property": "color", + "kind": "render-property", + "value": "var(--td-cascader-filter-item-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "cascaderFilterItemDisabledColor", + "miniComponent": "cascader", + "cssName": "--td-cascader-filter-item-disabled-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/cascader/cascader.less", + "selector": ".t-cascader__filter-result-item--disabled", + "property": "color", + "kind": "render-property", + "value": "var(--td-cascader-filter-item-disabled-color, var(--td-text-color-disabled, var(--td-font-gray-4, rgba(0, 0, 0, 0.26))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "cascaderFilterItemHoverBg", + "miniComponent": "cascader", + "cssName": "--td-cascader-filter-item-hover-bg", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/cascader/cascader.less", + "selector": ".t-cascader__filter-result-item--hover", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-cascader-filter-item-hover-bg, var(--td-bg-color-secondarycontainer, var(--td-gray-color-1, #f3f3f3)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "cascaderFilterItemPadding", + "miniComponent": "cascader", + "cssName": "--td-cascader-filter-item-padding", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/cascader/cascader.less", + "selector": ".t-cascader__filter-result-item", + "property": "padding", + "kind": "render-property", + "value": "var(--td-cascader-filter-item-padding, var(--td-spacer-1, 24rpx) var(--td-spacer-2, 32rpx))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "cascaderFilterPadding", + "miniComponent": "cascader", + "cssName": "--td-cascader-filter-padding", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/cascader/cascader.less", + "selector": ".t-cascader__filter", + "property": "padding", + "kind": "render-property", + "value": "var(--td-cascader-filter-padding, 0 var(--td-spacer-2, 32rpx) var(--td-spacer-1, 24rpx))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "cascaderOptionsHeight", + "miniComponent": "cascader", + "cssName": "--td-cascader-options-height", + "previousDecision": "no-frozen-source-consumer-found", + "compiledUses": [], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "no-consumer-in-compiled-css-or-other-source", + "finalPaintVerified": false + }, + { + "name": "cascaderOptionsTitleColor", + "miniComponent": "cascader", + "cssName": "--td-cascader-options-title-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/cascader/cascader.less", + "selector": ".t-cascader__options-title", + "property": "color", + "kind": "render-property", + "value": "var(--td-cascader-options-title-color, var(--td-text-color-placeholder, var(--td-font-gray-3, rgba(0, 0, 0, 0.4))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "cascaderStepArrowColor", + "miniComponent": "cascader", + "cssName": "--td-cascader-step-arrow-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/cascader/cascader.less", + "selector": ".t-cascader__step-arrow", + "property": "color", + "kind": "render-property", + "value": "var(--td-cascader-step-arrow-color, var(--td-text-color-placeholder, var(--td-font-gray-3, rgba(0, 0, 0, 0.4))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "cascaderStepDotSize", + "miniComponent": "cascader", + "cssName": "--td-cascader-step-dot-size", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/cascader/cascader.less", + "selector": ".t-cascader__step-dot", + "property": "width", + "kind": "render-property", + "value": "var(--td-cascader-step-dot-size, 16rpx)" + }, + { + "file": "packages/components/cascader/cascader.less", + "selector": ".t-cascader__step-dot", + "property": "height", + "kind": "render-property", + "value": "var(--td-cascader-step-dot-size, 16rpx)" + }, + { + "file": "packages/components/cascader/cascader.less", + "selector": ".t-cascader__step-dot:not(.t-cascader__step-dot--last)::after", + "property": "top", + "kind": "render-property", + "value": "calc(var(--td-cascader-step-dot-size, 16rpx) + 14rpx)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "cascaderStepHeight", + "miniComponent": "cascader", + "cssName": "--td-cascader-step-height", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/cascader/cascader.less", + "selector": ".t-cascader__step", + "property": "height", + "kind": "render-property", + "value": "var(--td-cascader-step-height, 88rpx)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "cascaderTitleColor", + "miniComponent": "cascader", + "cssName": "--td-cascader-title-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/cascader/cascader.less", + "selector": ".t-cascader", + "property": "color", + "kind": "render-property", + "value": "var(--td-cascader-title-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "cascaderTitleFont", + "miniComponent": "cascader", + "cssName": "--td-cascader-title-font", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/cascader/cascader.less", + "selector": ".t-cascader__title", + "property": "font", + "kind": "render-property", + "value": "var(--td-cascader-title-font, var(--td-font-title-large, 600 36rpx / 52rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "cascaderTitlePadding", + "miniComponent": "cascader", + "cssName": "--td-cascader-title-padding", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/cascader/cascader.less", + "selector": ".t-cascader__title", + "property": "padding", + "kind": "render-property", + "value": "var(--td-cascader-title-padding, var(--td-spacer-2, 32rpx))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "cellBgColor", + "miniComponent": "cell", + "cssName": "--td-cell-bg-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/cell/cell.less", + "selector": ".t-cell", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-cell-bg-color, var(--td-bg-color-container, var(--td-font-white-1, #ffffff)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "cellBorderColor", + "miniComponent": "cell", + "cssName": "--td-cell-border-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/cell/cell.less", + "selector": ".t-cell--bordered::after", + "property": "border-bottom", + "kind": "render-property", + "value": "var(--td-cell-border-width, 1px) solid var(--td-cell-border-color, var(--td-component-stroke, var(--td-gray-color-3, #e7e7e7)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "cellBorderLeftSpace", + "miniComponent": "cell", + "cssName": "--td-cell-border-left-space", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/cell/cell.less", + "selector": ".t-cell--bordered::after", + "property": "left", + "kind": "render-property", + "value": "var(--td-cell-border-left-space, var(--td-cell-horizontal-padding, var(--td-spacer-2, 32rpx)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "cellBorderRightSpace", + "miniComponent": "cell", + "cssName": "--td-cell-border-right-space", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/cell/cell.less", + "selector": ".t-cell--bordered::after", + "property": "right", + "kind": "render-property", + "value": "var(--td-cell-border-right-space, 0)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "cellBorderWidth", + "miniComponent": "cell", + "cssName": "--td-cell-border-width", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/cell/cell.less", + "selector": ".t-cell--bordered::after", + "property": "border-bottom", + "kind": "render-property", + "value": "var(--td-cell-border-width, 1px) solid var(--td-cell-border-color, var(--td-component-stroke, var(--td-gray-color-3, #e7e7e7)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "cellDescriptionColor", + "miniComponent": "cell", + "cssName": "--td-cell-description-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/cell/cell.less", + "selector": ".t-cell__description", + "property": "color", + "kind": "render-property", + "value": "var(--td-cell-description-color, var(--td-text-color-secondary, var(--td-font-gray-2, rgba(0, 0, 0, 0.6))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "cellDescriptionFont", + "miniComponent": "cell", + "cssName": "--td-cell-description-font", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/cell/cell.less", + "selector": ".t-cell__description", + "property": "font", + "kind": "render-property", + "value": "var(--td-cell-description-font, var(--td-font-body-medium, 28rpx / 44rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "cellGroupBorderColor", + "miniComponent": "cell-group", + "cssName": "--td-cell-group-border-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/cell-group/cell-group.less", + "selector": ".t-cell-group--bordered::before", + "property": "border-top", + "kind": "render-property", + "value": "1px solid var(--td-cell-group-border-color, var(--td-component-stroke, var(--td-gray-color-3, #e7e7e7)))" + }, + { + "file": "packages/components/cell-group/cell-group.less", + "selector": ".t-cell-group--bordered::after", + "property": "border-bottom", + "kind": "render-property", + "value": "1px solid var(--td-cell-group-border-color, var(--td-component-stroke, var(--td-gray-color-3, #e7e7e7)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "cellGroupTitleBgColor", + "miniComponent": "cell-group", + "cssName": "--td-cell-group-title-bg-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/cell-group/cell-group.less", + "selector": ".t-cell-group__title", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-cell-group-title-bg-color, var(--td-bg-color-secondarycontainer, var(--td-gray-color-1, #f3f3f3)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "cellGroupTitleColor", + "miniComponent": "cell-group", + "cssName": "--td-cell-group-title-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/cell-group/cell-group.less", + "selector": ".t-cell-group__title", + "property": "color", + "kind": "render-property", + "value": "var(--td-cell-group-title-color, var(--td-text-color-placeholder, var(--td-font-gray-3, rgba(0, 0, 0, 0.4))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "cellGroupTitleFontSize", + "miniComponent": "cell-group", + "cssName": "--td-cell-group-title-font-size", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/cell-group/cell-group.less", + "selector": ".t-cell-group__title", + "property": "font-size", + "kind": "render-property", + "value": "var(--td-cell-group-title-font-size, var(--td-font-size-base, 28rpx))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "cellGroupTitleLineHeight", + "miniComponent": "cell-group", + "cssName": "--td-cell-group-title-line-height", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/cell-group/cell-group.less", + "selector": ".t-cell-group__title", + "property": "line-height", + "kind": "render-property", + "value": "var(--td-cell-group-title-line-height, 90rpx)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "cellGroupTitlePaddingLeft", + "miniComponent": "cell-group", + "cssName": "--td-cell-group-title-padding-left", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/cell-group/cell-group.less", + "selector": ".t-cell-group__title", + "property": "padding-left", + "kind": "render-property", + "value": "var(--td-cell-group-title-padding-left, var(--td-spacer-2, 32rpx))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "cellHeight", + "miniComponent": "cell", + "cssName": "--td-cell-height", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/cell/cell.less", + "selector": ".t-cell", + "property": "height", + "kind": "render-property", + "value": "var(--td-cell-height, auto)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "cellHorizontalPadding", + "miniComponent": "cell", + "cssName": "--td-cell-horizontal-padding", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/cell/cell.less", + "selector": ".t-cell", + "property": "padding", + "kind": "render-property", + "value": "var(--td-cell-vertical-padding, var(--td-spacer-2, 32rpx)) var(--td-cell-horizontal-padding, var(--td-spacer-2, 32rpx))" + }, + { + "file": "packages/components/cell/cell.less", + "selector": ".t-cell--bordered::after", + "property": "left", + "kind": "render-property", + "value": "var(--td-cell-border-left-space, var(--td-cell-horizontal-padding, var(--td-spacer-2, 32rpx)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "cellHoverColor", + "miniComponent": "cell", + "cssName": "--td-cell-hover-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/cell/cell.less", + "selector": ".t-cell--hover", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-cell-hover-color, var(--td-bg-color-secondarycontainer, var(--td-gray-color-1, #f3f3f3)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "cellImageHeight", + "miniComponent": "cell", + "cssName": "--td-cell-image-height", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/cell/cell.less", + "selector": ".t-cell__left-image", + "property": "height", + "kind": "render-property", + "value": "var(--td-cell-image-height, 96rpx)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "cellImageWidth", + "miniComponent": "cell", + "cssName": "--td-cell-image-width", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/cell/cell.less", + "selector": ".t-cell__left-image", + "property": "width", + "kind": "render-property", + "value": "var(--td-cell-image-width, 96rpx)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "cellLeftIconColor", + "miniComponent": "cell", + "cssName": "--td-cell-left-icon-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/cell/cell.less", + "selector": ".t-cell__left-icon", + "property": "color", + "kind": "render-property", + "value": "var(--td-cell-left-icon-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "cellLeftIconSize", + "miniComponent": "cell", + "cssName": "--td-cell-left-icon-size", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/cell/cell.less", + "selector": ".t-cell__left-icon", + "property": "font-size", + "kind": "render-property", + "value": "var(--td-cell-left-icon-size, 48rpx)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "cellNoteColor", + "miniComponent": "cell", + "cssName": "--td-cell-note-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/cell/cell.less", + "selector": ".t-cell__note", + "property": "color", + "kind": "render-property", + "value": "var(--td-cell-note-color, var(--td-text-color-placeholder, var(--td-font-gray-3, rgba(0, 0, 0, 0.4))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "cellNoteFontSize", + "miniComponent": "cell", + "cssName": "--td-cell-note-font-size", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/cell/cell.less", + "selector": ".t-cell__note", + "property": "font-size", + "kind": "render-property", + "value": "var(--td-cell-note-font-size, var(--td-font-size-m, 32rpx))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "cellRequiredColor", + "miniComponent": "cell", + "cssName": "--td-cell-required-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/cell/cell.less", + "selector": ".t-cell--required", + "property": "color", + "kind": "render-property", + "value": "var(--td-cell-required-color, var(--td-error-color, var(--td-error-color-6, #d54941)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "cellRequiredFontSize", + "miniComponent": "cell", + "cssName": "--td-cell-required-font-size", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/cell/cell.less", + "selector": ".t-cell--required", + "property": "font-size", + "kind": "render-property", + "value": "var(--td-cell-required-font-size, var(--td-font-size-m, 32rpx))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "cellRightIconColor", + "miniComponent": "cell", + "cssName": "--td-cell-right-icon-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/cell/cell.less", + "selector": ".t-cell__right-icon", + "property": "color", + "kind": "render-property", + "value": "var(--td-cell-right-icon-color, var(--td-text-color-placeholder, var(--td-font-gray-3, rgba(0, 0, 0, 0.4))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "cellRightIconSize", + "miniComponent": "cell", + "cssName": "--td-cell-right-icon-size", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/cell/cell.less", + "selector": ".t-cell__right-icon", + "property": "font-size", + "kind": "render-property", + "value": "var(--td-cell-right-icon-size, 48rpx)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "cellTitleColor", + "miniComponent": "cell", + "cssName": "--td-cell-title-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/cell/cell.less", + "selector": ".t-cell__title-text", + "property": "color", + "kind": "render-property", + "value": "var(--td-cell-title-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "cellTitleFont", + "miniComponent": "cell", + "cssName": "--td-cell-title-font", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/cell/cell.less", + "selector": ".t-cell__title-text", + "property": "font", + "kind": "render-property", + "value": "var(--td-cell-title-font, var(--td-font-body-large, 32rpx / 48rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "cellVerticalPadding", + "miniComponent": "cell", + "cssName": "--td-cell-vertical-padding", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/cell/cell.less", + "selector": ".t-cell", + "property": "padding", + "kind": "render-property", + "value": "var(--td-cell-vertical-padding, var(--td-spacer-2, 32rpx)) var(--td-cell-horizontal-padding, var(--td-spacer-2, 32rpx))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "checkboxBgColor", + "miniComponent": "checkbox", + "cssName": "--td-checkbox-bg-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/checkbox/checkbox.less", + "selector": ".t-checkbox", + "property": "background", + "kind": "render-property", + "value": "var(--td-checkbox-bg-color, var(--td-bg-color-container, var(--td-font-white-1, #ffffff)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "checkboxBorderColor", + "miniComponent": "checkbox", + "cssName": "--td-checkbox-border-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/checkbox/checkbox.less", + "selector": ".t-checkbox__border", + "property": "background", + "kind": "render-property", + "value": "var(--td-checkbox-border-color, var(--td-component-stroke, var(--td-gray-color-3, #e7e7e7)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "checkboxDescriptionColor", + "miniComponent": "checkbox", + "cssName": "--td-checkbox-description-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/checkbox/checkbox.less", + "selector": ".t-checkbox__description", + "property": "color", + "kind": "render-property", + "value": "var(--td-checkbox-description-color, var(--td-text-color-secondary, var(--td-font-gray-2, rgba(0, 0, 0, 0.6))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "checkboxDescriptionDisabledColor", + "miniComponent": "checkbox", + "cssName": "--td-checkbox-description-disabled-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/checkbox/checkbox.less", + "selector": ".t-checkbox__description--disabled", + "property": "color", + "kind": "render-property", + "value": "var(--td-checkbox-description-disabled-color, var(--td-text-color-disabled, var(--td-font-gray-4, rgba(0, 0, 0, 0.26))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "checkboxDescriptionFont", + "miniComponent": "checkbox", + "cssName": "--td-checkbox-description-font", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/checkbox/checkbox.less", + "selector": ".t-checkbox__description", + "property": "font", + "kind": "render-property", + "value": "var(--td-checkbox-description-font, var(--td-font-body-medium, 28rpx / 44rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "checkboxIconCheckedColor", + "miniComponent": "checkbox", + "cssName": "--td-checkbox-icon-checked-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/checkbox/checkbox.less", + "selector": ".t-checkbox__icon--checked", + "property": "color", + "kind": "render-property", + "value": "var(--td-checkbox-icon-checked-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + }, + { + "file": "packages/components/checkbox/checkbox.less", + "selector": ".t-checkbox__icon-line::before,\n.t-checkbox__icon-line::after", + "property": "background", + "kind": "render-property", + "value": "var(--td-checkbox-icon-checked-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "checkboxIconColor", + "miniComponent": "checkbox", + "cssName": "--td-checkbox-icon-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/checkbox/checkbox.less", + "selector": ".t-checkbox__icon", + "property": "color", + "kind": "render-property", + "value": "var(--td-checkbox-icon-color, var(--td-component-border, var(--td-gray-color-4, #dcdcdc)))" + }, + { + "file": "packages/components/checkbox/checkbox.less", + "selector": ".t-checkbox__icon-circle", + "property": "border", + "kind": "render-property", + "value": "calc(4rpx * 2) solid var(--td-checkbox-icon-color, var(--td-component-border, var(--td-gray-color-4, #dcdcdc)))" + }, + { + "file": "packages/components/checkbox/checkbox.less", + "selector": ".t-checkbox__icon-rectangle", + "property": "border", + "kind": "render-property", + "value": "calc(4rpx * 2) solid var(--td-checkbox-icon-color, var(--td-component-border, var(--td-gray-color-4, #dcdcdc)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "checkboxIconDisabledBgColor", + "miniComponent": "checkbox", + "cssName": "--td-checkbox-icon-disabled-bg-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/checkbox/checkbox.less", + "selector": ".t-checkbox__icon-circle--disabled", + "property": "background", + "kind": "render-property", + "value": "var(--td-checkbox-icon-disabled-bg-color, var(--td-bg-color-component-disabled, var(--td-gray-color-2, #eeeeee)))" + }, + { + "file": "packages/components/checkbox/checkbox.less", + "selector": ".t-checkbox__icon-rectangle--disabled", + "property": "background", + "kind": "render-property", + "value": "var(--td-checkbox-icon-disabled-bg-color, var(--td-bg-color-component-disabled, var(--td-gray-color-2, #eeeeee)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "checkboxIconDisabledColor", + "miniComponent": "checkbox", + "cssName": "--td-checkbox-icon-disabled-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/checkbox/checkbox.less", + "selector": ".t-checkbox__icon--disabled", + "property": "color", + "kind": "render-property", + "value": "var(--td-checkbox-icon-disabled-color, var(--td-brand-color-disabled, var(--td-primary-color-3, #b5c7ff)))" + }, + { + "file": "packages/components/checkbox/checkbox.less", + "selector": ".t-checkbox__icon-line--disabled::before,\n.t-checkbox__icon-line--disabled::after", + "property": "background", + "kind": "render-property", + "value": "var(--td-checkbox-icon-disabled-color, var(--td-brand-color-disabled, var(--td-primary-color-3, #b5c7ff)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "checkboxIconSize", + "miniComponent": "checkbox", + "cssName": "--td-checkbox-icon-size", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/checkbox/checkbox.less", + "selector": ".t-checkbox__icon-image", + "property": "width", + "kind": "render-property", + "value": "var(--td-checkbox-icon-size, 48rpx)" + }, + { + "file": "packages/components/checkbox/checkbox.less", + "selector": ".t-checkbox__icon-image", + "property": "height", + "kind": "render-property", + "value": "var(--td-checkbox-icon-size, 48rpx)" + }, + { + "file": "packages/components/checkbox/checkbox.less", + "selector": ".t-checkbox__icon", + "property": "width", + "kind": "render-property", + "value": "var(--td-checkbox-icon-size, 48rpx)" + }, + { + "file": "packages/components/checkbox/checkbox.less", + "selector": ".t-checkbox__icon", + "property": "height", + "kind": "render-property", + "value": "var(--td-checkbox-icon-size, 48rpx)" + }, + { + "file": "packages/components/checkbox/checkbox.less", + "selector": ".t-checkbox__icon", + "property": "font-size", + "kind": "render-property", + "value": "var(--td-checkbox-icon-size, 48rpx)" + }, + { + "file": "packages/components/checkbox/checkbox.less", + "selector": ".t-checkbox__icon", + "property": "margin-top", + "kind": "render-property", + "value": "calc((var(--td-checkbox-title-line-height, var(--td-line-height-title-medium, 48rpx)) - var(--td-checkbox-icon-size, 48rpx)) / 2)" + }, + { + "file": "packages/components/checkbox/checkbox.less", + "selector": ".t-checkbox__icon-circle", + "property": "width", + "kind": "render-property", + "value": "calc((var(--td-checkbox-icon-size, 48rpx) - 4rpx) * 2)" + }, + { + "file": "packages/components/checkbox/checkbox.less", + "selector": ".t-checkbox__icon-circle", + "property": "height", + "kind": "render-property", + "value": "calc((var(--td-checkbox-icon-size, 48rpx) - 4rpx) * 2)" + }, + { + "file": "packages/components/checkbox/checkbox.less", + "selector": ".t-checkbox__icon-rectangle", + "property": "width", + "kind": "render-property", + "value": "calc((var(--td-checkbox-icon-size, 48rpx) - 4rpx * 2) * 2)" + }, + { + "file": "packages/components/checkbox/checkbox.less", + "selector": ".t-checkbox__icon-rectangle", + "property": "height", + "kind": "render-property", + "value": "calc((var(--td-checkbox-icon-size, 48rpx) - 4rpx * 2) * 2)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "checkboxTagActiveBgColor", + "miniComponent": "checkbox", + "cssName": "--td-checkbox-tag-active-bg-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/checkbox/checkbox.less", + "selector": ".t-checkbox--tag.t-checkbox--checked", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-checkbox-tag-active-bg-color, var(--td-brand-color-light, var(--td-primary-color-1, #f2f3ff)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "checkboxTagActiveColor", + "miniComponent": "checkbox", + "cssName": "--td-checkbox-tag-active-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/checkbox/checkbox.less", + "selector": ".t-checkbox--tag.t-checkbox--checked", + "property": "color", + "kind": "render-property", + "value": "var(--td-checkbox-tag-active-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + }, + { + "file": "packages/components/checkbox/checkbox.less", + "selector": ".t-checkbox--tag .t-checkbox__title--checked", + "property": "color", + "kind": "render-property", + "value": "var(--td-checkbox-tag-active-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "checkboxTitleColor", + "miniComponent": "checkbox", + "cssName": "--td-checkbox-title-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/checkbox/checkbox.less", + "selector": ".t-checkbox__title", + "property": "color", + "kind": "render-property", + "value": "var(--td-checkbox-title-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "checkboxTitleDisabledColor", + "miniComponent": "checkbox", + "cssName": "--td-checkbox-title-disabled-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/checkbox/checkbox.less", + "selector": ".t-checkbox__title--disabled", + "property": "color", + "kind": "render-property", + "value": "var(--td-checkbox-title-disabled-color, var(--td-text-color-disabled, var(--td-font-gray-4, rgba(0, 0, 0, 0.26))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "checkboxTitleFont", + "miniComponent": "checkbox", + "cssName": "--td-checkbox-title-font", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/checkbox/checkbox.less", + "selector": ".t-checkbox__title", + "property": "font", + "kind": "render-property", + "value": "var(--td-checkbox-title-font, var(--td-font-body-large, 32rpx / 48rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "checkboxTitleLineHeight", + "miniComponent": "checkbox", + "cssName": "--td-checkbox-title-line-height", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/checkbox/checkbox.less", + "selector": ".t-checkbox__icon", + "property": "margin-top", + "kind": "render-property", + "value": "calc((var(--td-checkbox-title-line-height, var(--td-line-height-title-medium, 48rpx)) - var(--td-checkbox-icon-size, 48rpx)) / 2)" + }, + { + "file": "packages/components/checkbox/checkbox.less", + "selector": ".t-checkbox__title", + "property": "line-height", + "kind": "render-property", + "value": "var(--td-checkbox-title-line-height, var(--td-line-height-title-medium, 48rpx))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "checkboxVerticalPadding", + "miniComponent": "checkbox", + "cssName": "--td-checkbox-vertical-padding", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/checkbox/checkbox.less", + "selector": ".t-checkbox--block", + "property": "padding", + "kind": "render-property", + "value": "var(--td-checkbox-vertical-padding, var(--td-spacer-2, 32rpx))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "collapseBorderColor", + "miniComponent": "collapse-panel", + "cssName": "--td-collapse-border-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/collapse-panel/collapse-panel.less", + "selector": ".t-collapse-panel__header--top::after", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-collapse-border-color, var(--td-border-level-1-color, var(--td-gray-color-3, #e7e7e7)))" + }, + { + "file": "packages/components/collapse-panel/collapse-panel.less", + "selector": ".t-collapse-panel__header--bottom::after", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-collapse-border-color, var(--td-border-level-1-color, var(--td-gray-color-3, #e7e7e7)))" + }, + { + "file": "packages/components/collapse-panel/collapse-panel.less", + "selector": ".t-collapse-panel__body::after", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-collapse-border-color, var(--td-border-level-1-color, var(--td-gray-color-3, #e7e7e7)))" + }, + { + "file": "packages/components/collapse-panel/collapse-panel.less", + "selector": ".t-collapse-panel__content--expanded.t-collapse-panel__content--bottom::after", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-collapse-border-color, var(--td-border-level-1-color, var(--td-gray-color-3, #e7e7e7)))" + }, + { + "file": "packages/components/collapse-panel/collapse-panel.less", + "selector": ".t-collapse-panel__content--expanded.t-collapse-panel__content--top::after", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-collapse-border-color, var(--td-border-level-1-color, var(--td-gray-color-3, #e7e7e7)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "collapseContentFont", + "miniComponent": "collapse-panel", + "cssName": "--td-collapse-content-font", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/collapse-panel/collapse-panel.less", + "selector": ".t-collapse-panel__content", + "property": "font", + "kind": "render-property", + "value": "var(--td-collapse-content-font, var(--td-font-body-medium, 28rpx / 44rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "collapseContentPadding", + "miniComponent": "collapse-panel", + "cssName": "--td-collapse-content-padding", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/collapse-panel/collapse-panel.less", + "selector": ".t-collapse-panel__content", + "property": "padding", + "kind": "render-property", + "value": "var(--td-collapse-content-padding, var(--td-spacer-2, 32rpx))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "collapseContentTextColor", + "miniComponent": "collapse-panel", + "cssName": "--td-collapse-content-text-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/collapse-panel/collapse-panel.less", + "selector": ".t-collapse-panel__content", + "property": "color", + "kind": "render-property", + "value": "var(--td-collapse-content-text-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "collapseDisabledColor", + "miniComponent": "collapse-panel", + "cssName": "--td-collapse-disabled-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/collapse-panel/collapse-panel.less", + "selector": ".t-collapse-panel__content--disabled", + "property": "color", + "kind": "render-property", + "value": "var(--td-collapse-disabled-color, var(--td-text-color-disabled, var(--td-font-gray-4, rgba(0, 0, 0, 0.26))))" + }, + { + "file": "packages/components/collapse-panel/collapse-panel.less", + "selector": ".class-title--disabled,\n.class-note--disabled,\n.class-left-icon--disabled,\n.class-right-icon--disabled", + "property": "color", + "kind": "render-property", + "value": "var(--td-collapse-disabled-color, var(--td-text-color-disabled, var(--td-font-gray-4, rgba(0, 0, 0, 0.26))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "collapseExtraFont", + "miniComponent": "collapse-panel", + "cssName": "--td-collapse-extra-font", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/collapse-panel/collapse-panel.less", + "selector": ".t-collapse-panel__extra", + "property": "font", + "kind": "render-property", + "value": "var(--td-collapse-extra-font, var(--td-font-body-large, 32rpx / 48rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "collapseHeaderHeight", + "miniComponent": "collapse-panel", + "cssName": "--td-collapse-header-height", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/collapse-panel/collapse-panel.less", + "selector": ".t-collapse-panel__header", + "property": "height", + "kind": "render-property", + "value": "var(--td-collapse-header-height, auto)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "collapseHeaderTextColor", + "miniComponent": "collapse-panel", + "cssName": "--td-collapse-header-text-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/collapse-panel/collapse-panel.less", + "selector": ".class-title", + "property": "color", + "kind": "render-property", + "value": "var(--td-collapse-header-text-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "collapseHeaderTextDisabledColor", + "miniComponent": "collapse-panel", + "cssName": "--td-collapse-header-text-disabled-color", + "previousDecision": "no-frozen-source-consumer-found", + "compiledUses": [], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "no-consumer-in-compiled-css-or-other-source", + "finalPaintVerified": false + }, + { + "name": "collapseHorizontalPadding", + "miniComponent": "collapse-panel", + "cssName": "--td-collapse-horizontal-padding", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/collapse-panel/collapse-panel.less", + "selector": ".t-collapse-panel__header", + "property": "padding-left", + "kind": "render-property", + "value": "var(--td-collapse-horizontal-padding, var(--td-spacer-2, 32rpx))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "collapseIconColor", + "miniComponent": "collapse-panel", + "cssName": "--td-collapse-icon-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/collapse-panel/collapse-panel.less", + "selector": ".class-right-icon", + "property": "color", + "kind": "render-property", + "value": "var(--td-collapse-icon-color, var(--td-text-color-placeholder, var(--td-font-gray-3, rgba(0, 0, 0, 0.4))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "collapseLeftIconColor", + "miniComponent": "collapse-panel", + "cssName": "--td-collapse-left-icon-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/collapse-panel/collapse-panel.less", + "selector": ".class-left-icon", + "property": "color", + "kind": "render-property", + "value": "var(--td-collapse-left-icon-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "collapsePanelBgColor", + "miniComponent": "collapse-panel", + "cssName": "--td-collapse-panel-bg-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/collapse-panel/collapse-panel.less", + "selector": ".t-collapse-panel", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-collapse-panel-bg-color, var(--td-bg-color-container, var(--td-font-white-1, #ffffff)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "collapseTitleFont", + "miniComponent": "collapse-panel", + "cssName": "--td-collapse-title-font", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/collapse-panel/collapse-panel.less", + "selector": ".class-title", + "property": "font", + "kind": "render-property", + "value": "var(--td-collapse-title-font, var(--td-font-body-large, 32rpx / 48rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "colorPickerGradientPreviewHeight", + "miniComponent": "color-picker", + "cssName": "--td-color-picker-gradient-preview-height", + "previousDecision": "outside-current-flutter-component-surface", + "compiledUses": [ + { + "file": "packages/components/color-picker/color-picker.less", + "selector": ".t-color-picker__sliders-preview", + "property": "height", + "kind": "render-property", + "value": "var(--td-color-picker-gradient-preview-height, 56rpx)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "colorPickerGradientPreviewRadius", + "miniComponent": "color-picker", + "cssName": "--td-color-picker-gradient-preview-radius", + "previousDecision": "outside-current-flutter-component-surface", + "compiledUses": [ + { + "file": "packages/components/color-picker/color-picker.less", + "selector": ".t-color-picker__sliders-preview", + "property": "border-radius", + "kind": "render-property", + "value": "var(--td-color-picker-gradient-preview-radius, var(--td-radius-small, 6rpx))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "colorPickerGradientPreviewWidth", + "miniComponent": "color-picker", + "cssName": "--td-color-picker-gradient-preview-width", + "previousDecision": "outside-current-flutter-component-surface", + "compiledUses": [ + { + "file": "packages/components/color-picker/color-picker.less", + "selector": ".t-color-picker__sliders-preview", + "property": "width", + "kind": "render-property", + "value": "var(--td-color-picker-gradient-preview-width, 56rpx)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "colorPickerInputFormatMarginLeft", + "miniComponent": "color-picker", + "cssName": "--td-color-picker-input-format-margin-left", + "previousDecision": "no-frozen-source-consumer-found", + "compiledUses": [], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "no-consumer-in-compiled-css-or-other-source", + "finalPaintVerified": false + }, + { + "name": "colorPickerPanelBackground", + "miniComponent": "color-picker", + "cssName": "--td-color-picker-panel-background", + "previousDecision": "outside-current-flutter-component-surface", + "compiledUses": [ + { + "file": "packages/components/color-picker/color-picker.less", + "selector": ".t-color-picker__panel", + "property": "background", + "kind": "render-property", + "value": "var(--td-color-picker-panel-background, var(--td-bg-color-container, var(--td-font-white-1, #ffffff)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "colorPickerPanelPadding", + "miniComponent": "color-picker", + "cssName": "--td-color-picker-panel-padding", + "previousDecision": "outside-current-flutter-component-surface", + "compiledUses": [ + { + "file": "packages/components/color-picker/color-picker.less", + "selector": ".t-color-picker__body", + "property": "padding", + "kind": "render-property", + "value": "var(--td-color-picker-panel-padding, var(--td-spacer-2, 32rpx))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "colorPickerPanelRadius", + "miniComponent": "color-picker", + "cssName": "--td-color-picker-panel-radius", + "previousDecision": "outside-current-flutter-component-surface", + "compiledUses": [ + { + "file": "packages/components/color-picker/color-picker.less", + "selector": ".t-color-picker__panel", + "property": "border-top-left-radius", + "kind": "render-property", + "value": "var(--td-color-picker-panel-radius, var(--td-radius-extraLarge, 24rpx))" + }, + { + "file": "packages/components/color-picker/color-picker.less", + "selector": ".t-color-picker__panel", + "property": "border-top-right-radius", + "kind": "render-property", + "value": "var(--td-color-picker-panel-radius, var(--td-radius-extraLarge, 24rpx))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "colorPickerPanelWidth", + "miniComponent": "color-picker", + "cssName": "--td-color-picker-panel-width", + "previousDecision": "outside-current-flutter-component-surface", + "compiledUses": [ + { + "file": "packages/components/color-picker/color-picker.less", + "selector": ".t-color-picker__panel", + "property": "width", + "kind": "render-property", + "value": "var(--td-color-picker-panel-width, 750rpx)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "colorPickerSaturationHeight", + "miniComponent": "color-picker", + "cssName": "--td-color-picker-saturation-height", + "previousDecision": "outside-current-flutter-component-surface", + "compiledUses": [ + { + "file": "packages/components/color-picker/color-picker.less", + "selector": ".t-color-picker__saturation", + "property": "height", + "kind": "render-property", + "value": "var(--td-color-picker-saturation-height, 288rpx)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "colorPickerSaturationRadius", + "miniComponent": "color-picker", + "cssName": "--td-color-picker-saturation-radius", + "previousDecision": "outside-current-flutter-component-surface", + "compiledUses": [ + { + "file": "packages/components/color-picker/color-picker.less", + "selector": ".t-color-picker__saturation", + "property": "border-radius", + "kind": "render-property", + "value": "var(--td-color-picker-saturation-radius, var(--td-radius-default, 12rpx))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "colorPickerSaturationThumbSize", + "miniComponent": "color-picker", + "cssName": "--td-color-picker-saturation-thumb-size", + "previousDecision": "outside-current-flutter-component-surface", + "compiledUses": [ + { + "file": "packages/components/color-picker/color-picker.less", + "selector": ".t-color-picker__saturation .t-color-picker__thumb", + "property": "width", + "kind": "render-property", + "value": "var(--td-color-picker-saturation-thumb-size, 48rpx)" + }, + { + "file": "packages/components/color-picker/color-picker.less", + "selector": ".t-color-picker__saturation .t-color-picker__thumb", + "property": "height", + "kind": "render-property", + "value": "var(--td-color-picker-saturation-thumb-size, 48rpx)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "colorPickerSliderHeight", + "miniComponent": "color-picker", + "cssName": "--td-color-picker-slider-height", + "previousDecision": "outside-current-flutter-component-surface", + "compiledUses": [ + { + "file": "packages/components/color-picker/color-picker.less", + "selector": ".t-color-picker__slider-wrapper", + "property": "border-radius", + "kind": "render-property", + "value": "calc(var(--td-color-picker-slider-height, 16rpx) / 2)" + }, + { + "file": "packages/components/color-picker/color-picker.less", + "selector": ".t-color-picker__slider-padding", + "property": "height", + "kind": "render-property", + "value": "var(--td-color-picker-slider-height, 16rpx)" + }, + { + "file": "packages/components/color-picker/color-picker.less", + "selector": ".t-color-picker__slider-padding", + "property": "border-radius", + "kind": "render-property", + "value": "calc(var(--td-color-picker-slider-height, 16rpx) / 2)" + }, + { + "file": "packages/components/color-picker/color-picker.less", + "selector": ".t-color-picker__slider", + "property": "height", + "kind": "render-property", + "value": "var(--td-color-picker-slider-height, 16rpx)" + }, + { + "file": "packages/components/color-picker/color-picker.less", + "selector": ".t-color-picker__slider", + "property": "border-radius", + "kind": "render-property", + "value": "calc(var(--td-color-picker-slider-height, 16rpx) / 2)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "colorPickerSliderThumbPadding", + "miniComponent": "color-picker", + "cssName": "--td-color-picker-slider-thumb-padding", + "previousDecision": "outside-current-flutter-component-surface", + "compiledUses": [ + { + "file": "packages/components/color-picker/color-picker.less", + "selector": ".t-color-picker__thumb::after", + "property": "padding", + "kind": "render-property", + "value": "var(--td-color-picker-slider-thumb-padding, 6rpx)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "colorPickerSliderThumbSize", + "miniComponent": "color-picker", + "cssName": "--td-color-picker-slider-thumb-size", + "previousDecision": "outside-current-flutter-component-surface", + "compiledUses": [ + { + "file": "packages/components/color-picker/color-picker.less", + "selector": ".t-color-picker__thumb", + "property": "width", + "kind": "render-property", + "value": "var(--td-color-picker-slider-thumb-size, 48rpx)" + }, + { + "file": "packages/components/color-picker/color-picker.less", + "selector": ".t-color-picker__thumb", + "property": "height", + "kind": "render-property", + "value": "var(--td-color-picker-slider-thumb-size, 48rpx)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "colorPickerSliderThumbTransformX", + "miniComponent": "color-picker", + "cssName": "--td-color-picker-slider-thumb-transform-x", + "previousDecision": "outside-current-flutter-component-surface", + "compiledUses": [ + { + "file": "packages/components/color-picker/color-picker.less", + "selector": ".t-color-picker__slider .t-color-picker__thumb", + "property": "transform", + "kind": "render-property", + "value": "translate(var(--td-color-picker-slider-thumb-transform-x, -18rpx), -50%)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "colorPickerSliderWrapperPadding", + "miniComponent": "color-picker", + "cssName": "--td-color-picker-slider-wrapper-padding", + "previousDecision": "outside-current-flutter-component-surface", + "compiledUses": [ + { + "file": "packages/components/color-picker/color-picker.less", + "selector": ".t-color-picker__slider-wrapper", + "property": "padding", + "kind": "render-property", + "value": "var(--td-color-picker-slider-wrapper-padding, 0 18rpx)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "colorPickerSwatchBorderRadius", + "miniComponent": "color-picker", + "cssName": "--td-color-picker-swatch-border-radius", + "previousDecision": "outside-current-flutter-component-surface", + "compiledUses": [ + { + "file": "packages/components/color-picker/color-picker.less", + "selector": ".t-color-picker__swatches-item", + "property": "border-radius", + "kind": "render-property", + "value": "var(--td-color-picker-swatch-border-radius, var(--td-radius-small, 6rpx))" + }, + { + "file": "packages/components/color-picker/color-picker.less", + "selector": ".t-color-picker__swatches-inner", + "property": "border-radius", + "kind": "render-property", + "value": "var(--td-color-picker-swatch-border-radius, var(--td-radius-small, 6rpx))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "colorPickerSwatchesTitleFont", + "miniComponent": "color-picker", + "cssName": "--td-color-picker-swatches-title-font", + "previousDecision": "outside-current-flutter-component-surface", + "compiledUses": [ + { + "file": "packages/components/color-picker/color-picker.less", + "selector": ".t-color-picker__swatches-title", + "property": "font", + "kind": "render-property", + "value": "var(--td-color-picker-swatches-title-font, var(--td-font-title-medium, 600 32rpx / 48rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "colorPickerSwatchHeight", + "miniComponent": "color-picker", + "cssName": "--td-color-picker-swatch-height", + "previousDecision": "outside-current-flutter-component-surface", + "compiledUses": [ + { + "file": "packages/components/color-picker/color-picker.less", + "selector": ".t-color-picker__swatches-item", + "property": "height", + "kind": "render-property", + "value": "var(--td-color-picker-swatch-height, 48rpx)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "colorPickerSwatchPadding", + "miniComponent": "color-picker", + "cssName": "--td-color-picker-swatch-padding", + "previousDecision": "outside-current-flutter-component-surface", + "compiledUses": [ + { + "file": "packages/components/color-picker/color-picker.less", + "selector": ".t-color-picker__swatches-item", + "property": "padding", + "kind": "render-property", + "value": "var(--td-color-picker-swatch-padding, 0)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "colorPickerSwatchWidth", + "miniComponent": "color-picker", + "cssName": "--td-color-picker-swatch-width", + "previousDecision": "outside-current-flutter-component-surface", + "compiledUses": [ + { + "file": "packages/components/color-picker/color-picker.less", + "selector": ".t-color-picker__swatches-item", + "property": "width", + "kind": "render-property", + "value": "var(--td-color-picker-swatch-width, 48rpx)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "countdownBgColor", + "miniComponent": "count-down", + "cssName": "--td-countdown-bg-color", + "previousDecision": "outside-current-flutter-component-surface", + "compiledUses": [ + { + "file": "packages/components/count-down/count-down.less", + "selector": ".t-count-down--square > .t-count-down__item", + "property": "background", + "kind": "render-property", + "value": "var(--td-countdown-bg-color, var(--td-error-color, var(--td-error-color-6, #d54941)))" + }, + { + "file": "packages/components/count-down/count-down.less", + "selector": ".t-count-down--round > .t-count-down__item", + "property": "background", + "kind": "render-property", + "value": "var(--td-countdown-bg-color, var(--td-error-color, var(--td-error-color-6, #d54941)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "countdownDefaultColor", + "miniComponent": "count-down", + "cssName": "--td-countdown-default-color", + "previousDecision": "outside-current-flutter-component-surface", + "compiledUses": [ + { + "file": "packages/components/count-down/count-down.less", + "selector": ".t-count-down--default", + "property": "color", + "kind": "render-property", + "value": "var(--td-countdown-default-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "countdownRoundBorderRadius", + "miniComponent": "count-down", + "cssName": "--td-countdown-round-border-radius", + "previousDecision": "outside-current-flutter-component-surface", + "compiledUses": [ + { + "file": "packages/components/count-down/count-down.less", + "selector": ".t-count-down--round > .t-count-down__item", + "property": "border-radius", + "kind": "render-property", + "value": "var(--td-countdown-round-border-radius, var(--td-radius-circle, 50%))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "countdownRoundColor", + "miniComponent": "count-down", + "cssName": "--td-countdown-round-color", + "previousDecision": "outside-current-flutter-component-surface", + "compiledUses": [ + { + "file": "packages/components/count-down/count-down.less", + "selector": ".t-count-down--square", + "property": "color", + "kind": "render-property", + "value": "var(--td-countdown-round-color, var(--td-text-color-anti, var(--td-font-white-1, #ffffff)))" + }, + { + "file": "packages/components/count-down/count-down.less", + "selector": ".t-count-down--round", + "property": "color", + "kind": "render-property", + "value": "var(--td-countdown-round-color, var(--td-text-color-anti, var(--td-font-white-1, #ffffff)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "countdownSquareBorderRadius", + "miniComponent": "count-down", + "cssName": "--td-countdown-square-border-radius", + "previousDecision": "outside-current-flutter-component-surface", + "compiledUses": [ + { + "file": "packages/components/count-down/count-down.less", + "selector": ".t-count-down--square > .t-count-down__item", + "property": "border-radius", + "kind": "render-property", + "value": "var(--td-countdown-square-border-radius, var(--td-radius-small, 6rpx))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "dataTimePickerYearWidth", + "miniComponent": "date-time-picker", + "cssName": "--td-data-time-picker-year-width", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/date-time-picker/date-time-picker.less", + "selector": ".t-date-time-picker__item--roomly", + "property": "width", + "kind": "render-property", + "value": "var(--td-data-time-picker-year-width, 128rpx)" + }, + { + "file": "packages/components/date-time-picker/date-time-picker.less", + "selector": ".t-date-time-picker__item--roomly", + "property": "flex", + "kind": "render-property", + "value": "0 0 var(--td-data-time-picker-year-width, 128rpx)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "dialogBodyMaxHeight", + "miniComponent": "dialog", + "cssName": "--td-dialog-body-max-height", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/dialog/dialog.less", + "selector": ".t-dialog__content", + "property": "max-height", + "kind": "render-property", + "value": "var(--td-dialog-body-max-height, 912rpx)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "dialogBorderRadius", + "miniComponent": "dialog", + "cssName": "--td-dialog-border-radius", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/dialog/dialog.less", + "selector": ".t-dialog", + "property": "border-radius", + "kind": "render-property", + "value": "var(--td-dialog-border-radius, var(--td-radius-extraLarge, 24rpx))" + }, + { + "file": "packages/components/dialog/dialog.less", + "selector": ".t-dialog__wrapper", + "property": "--td-popup-border-radius", + "kind": "custom-property-forward", + "value": "var(--td-dialog-border-radius, var(--td-radius-extraLarge, 24rpx))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "dialogCloseColor", + "miniComponent": "dialog", + "cssName": "--td-dialog-close-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/dialog/dialog.less", + "selector": ".t-dialog__close-btn", + "property": "color", + "kind": "render-property", + "value": "var(--td-dialog-close-color, var(--td-text-color-placeholder, var(--td-font-gray-3, rgba(0, 0, 0, 0.4))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "dialogContentColor", + "miniComponent": "dialog", + "cssName": "--td-dialog-content-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/dialog/dialog.less", + "selector": ".t-dialog__body", + "property": "color", + "kind": "render-property", + "value": "var(--td-dialog-content-color, var(--td-text-color-secondary, var(--td-font-gray-2, rgba(0, 0, 0, 0.6))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "dialogContentFont", + "miniComponent": "dialog", + "cssName": "--td-dialog-content-font", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/dialog/dialog.less", + "selector": ".t-dialog__body", + "property": "font", + "kind": "render-property", + "value": "var(--td-dialog-content-font, var(--td-font-body-large, 32rpx / 48rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "dialogTitleColor", + "miniComponent": "dialog", + "cssName": "--td-dialog-title-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/dialog/dialog.less", + "selector": ".t-dialog__header", + "property": "color", + "kind": "render-property", + "value": "var(--td-dialog-title-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "dialogTitleFont", + "miniComponent": "dialog", + "cssName": "--td-dialog-title-font", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/dialog/dialog.less", + "selector": ".t-dialog__header", + "property": "font", + "kind": "render-property", + "value": "var(--td-dialog-title-font, var(--td-font-title-large, 600 36rpx / 52rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "dialogWidth", + "miniComponent": "dialog", + "cssName": "--td-dialog-width", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/dialog/dialog.less", + "selector": ".t-dialog", + "property": "width", + "kind": "render-property", + "value": "var(--td-dialog-width, 622rpx)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "dividerBorderWidth", + "miniComponent": "divider", + "cssName": "--td-divider-border-width", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/divider/divider.less", + "selector": ".t-divider--horizontal::before,\n.t-divider--horizontal::after", + "property": "border-top-width", + "kind": "render-property", + "value": "var(--td-divider-border-width, 2rpx)" + }, + { + "file": "packages/components/divider/divider.less", + "selector": ".t-divider--vertical::before,\n.t-divider--vertical::after", + "property": "border-left-width", + "kind": "render-property", + "value": "var(--td-divider-border-width, 2rpx)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "dividerColor", + "miniComponent": "divider", + "cssName": "--td-divider-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/divider/divider.less", + "selector": ".t-divider", + "property": "color", + "kind": "render-property", + "value": "var(--td-divider-color, var(--td-bg-color-component, var(--td-gray-color-3, #e7e7e7)))" + }, + { + "file": "packages/components/divider/divider.less", + "selector": ".t-divider", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-divider-color, var(--td-bg-color-component, var(--td-gray-color-3, #e7e7e7)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "dividerContentColor", + "miniComponent": "divider", + "cssName": "--td-divider-content-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/divider/divider.less", + "selector": ".t-divider__content", + "property": "color", + "kind": "render-property", + "value": "var(--td-divider-content-color, var(--td-text-color-placeholder, var(--td-font-gray-3, rgba(0, 0, 0, 0.4))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "dividerContentFont", + "miniComponent": "divider", + "cssName": "--td-divider-content-font", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/divider/divider.less", + "selector": ".t-divider__content", + "property": "font", + "kind": "render-property", + "value": "var(--td-divider-content-font, var(--td-font-body-small, 24rpx / 40rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "dividerContentLineStyle", + "miniComponent": "divider", + "cssName": "--td-divider-content-line-style", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/divider/divider.less", + "selector": ".t-divider", + "property": "border-style", + "kind": "render-property", + "value": "var(--td-divider-content-line-style, solid)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "dividerContentMargin", + "miniComponent": "divider", + "cssName": "--td-divider-content-margin", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/divider/divider.less", + "selector": ".t-divider--horizontal .t-divider__content:not(:empty)", + "property": "margin", + "kind": "render-property", + "value": "0 var(--td-divider-content-margin, var(--td-spacer-1, 24rpx))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "dividerHorizontalMargin", + "miniComponent": "divider", + "cssName": "--td-divider-horizontal-margin", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/divider/divider.less", + "selector": ".t-divider--horizontal", + "property": "margin", + "kind": "render-property", + "value": "var(--td-divider-horizontal-margin, 20rpx) 0" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "dividerVerticalMargin", + "miniComponent": "divider", + "cssName": "--td-divider-vertical-margin", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/divider/divider.less", + "selector": ".t-divider--vertical", + "property": "margin", + "kind": "render-property", + "value": "0 var(--td-divider-vertical-margin, var(--td-spacer, 16rpx))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "drawerBgColor", + "miniComponent": "drawer", + "cssName": "--td-drawer-bg-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/drawer/drawer.less", + "selector": ".t-drawer", + "property": "background", + "kind": "render-property", + "value": "var(--td-drawer-bg-color, var(--td-bg-color-container, var(--td-font-white-1, #ffffff)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "drawerBorderColor", + "miniComponent": "drawer", + "cssName": "--td-drawer-border-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/drawer/drawer.less", + "selector": ".t-drawer__sidebar-item::after", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-drawer-border-color, var(--td-border-level-1-color, var(--td-gray-color-3, #e7e7e7)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "drawerFooterPaddingBottom", + "miniComponent": "drawer", + "cssName": "--td-drawer-footer-padding-bottom", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/drawer/drawer.less", + "selector": ".t-drawer__footer", + "property": "padding-bottom", + "kind": "render-property", + "value": "var(--td-drawer-footer-padding-bottom, 40rpx)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "drawerHoverColor", + "miniComponent": "drawer", + "cssName": "--td-drawer-hover-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/drawer/drawer.less", + "selector": ".t-drawer--hover", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-drawer-hover-color, var(--td-bg-color-secondarycontainer, var(--td-gray-color-1, #f3f3f3)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "drawerItemIconColor", + "miniComponent": "drawer", + "cssName": "--td-drawer-item-icon-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/drawer/drawer.less", + "selector": ".t-drawer__sidebar-item-icon", + "property": "color", + "kind": "render-property", + "value": "var(--td-drawer-item-icon-color, var(--td-drawer-title-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9)))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "drawerItemIconSize", + "miniComponent": "drawer", + "cssName": "--td-drawer-item-icon-size", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/drawer/drawer.less", + "selector": ".t-drawer__sidebar-item-icon", + "property": "font-size", + "kind": "render-property", + "value": "var(--td-drawer-item-icon-size, 48rpx)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "drawerItemPadding", + "miniComponent": "drawer", + "cssName": "--td-drawer-item-padding", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/drawer/drawer.less", + "selector": ".t-drawer__sidebar-item", + "property": "padding-top", + "kind": "render-property", + "value": "var(--td-drawer-item-padding, var(--td-spacer-2, 32rpx))" + }, + { + "file": "packages/components/drawer/drawer.less", + "selector": ".t-drawer__sidebar-item", + "property": "padding-bottom", + "kind": "render-property", + "value": "var(--td-drawer-item-padding, var(--td-spacer-2, 32rpx))" + }, + { + "file": "packages/components/drawer/drawer.less", + "selector": ".t-drawer__sidebar-item", + "property": "padding-left", + "kind": "render-property", + "value": "var(--td-drawer-item-padding, var(--td-spacer-2, 32rpx))" + }, + { + "file": "packages/components/drawer/drawer.less", + "selector": ".t-drawer__sidebar-item::after", + "property": "left", + "kind": "render-property", + "value": "var(--td-drawer-item-padding, var(--td-spacer-2, 32rpx))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "drawerSidebarHeight", + "miniComponent": "drawer", + "cssName": "--td-drawer-sidebar-height", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/drawer/drawer.less", + "selector": ".t-drawer__sidebar", + "property": "height", + "kind": "render-property", + "value": "var(--td-drawer-sidebar-height, 70vh)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "drawerTitleColor", + "miniComponent": "drawer", + "cssName": "--td-drawer-title-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/drawer/drawer.less", + "selector": ".t-drawer__title", + "property": "color", + "kind": "render-property", + "value": "var(--td-drawer-title-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + }, + { + "file": "packages/components/drawer/drawer.less", + "selector": ".t-drawer__sidebar-item-title", + "property": "color", + "kind": "render-property", + "value": "var(--td-drawer-title-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + }, + { + "file": "packages/components/drawer/drawer.less", + "selector": ".t-drawer__sidebar-item-icon", + "property": "color", + "kind": "render-property", + "value": "var(--td-drawer-item-icon-color, var(--td-drawer-title-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9)))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "drawerTitleFont", + "miniComponent": "drawer", + "cssName": "--td-drawer-title-font", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/drawer/drawer.less", + "selector": ".t-drawer__title", + "property": "font", + "kind": "render-property", + "value": "var(--td-drawer-title-font, var(--td-font-title-large, 600 36rpx / 52rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "drawerTitlePadding", + "miniComponent": "drawer", + "cssName": "--td-drawer-title-padding", + "previousDecision": "no-frozen-source-consumer-found", + "compiledUses": [], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "no-consumer-in-compiled-css-or-other-source", + "finalPaintVerified": false + }, + { + "name": "drawerWidth", + "miniComponent": "drawer", + "cssName": "--td-drawer-width", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/drawer/drawer.less", + "selector": ".t-drawer", + "property": "width", + "kind": "render-property", + "value": "var(--td-drawer-width, 560rpx)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "dropdownBodyMaxHeight", + "miniComponent": "dropdown-item", + "cssName": "--td-dropdown-body-max-height", + "previousDecision": "fallback-widget-verified-visual-pending", + "compiledUses": [ + { + "file": "packages/components/dropdown-item/dropdown-item.less", + "selector": ".t-dropdown-item__body", + "property": "max-height", + "kind": "render-property", + "value": "var(--td-dropdown-body-max-height, 560rpx)" + }, + { + "file": "packages/components/dropdown-item/dropdown-item.less", + "selector": ".t-dropdown-item__scroll", + "property": "max-height", + "kind": "render-property", + "value": "var(--td-dropdown-body-max-height, 560rpx)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "dropdownMenuActiveColor", + "miniComponent": "dropdown-menu", + "cssName": "--td-dropdown-menu-active-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/dropdown-menu/dropdown-menu.less", + "selector": ".t-dropdown-menu__item--active", + "property": "color", + "kind": "render-property", + "value": "var(--td-dropdown-menu-active-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "dropdownMenuBgColor", + "miniComponent": "dropdown-menu", + "cssName": "--td-dropdown-menu-bg-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/dropdown-item/dropdown-item.less", + "selector": ".t-dropdown-item__body", + "property": "background", + "kind": "render-property", + "value": "var(--td-dropdown-menu-bg-color, var(--td-bg-color-container, var(--td-font-white-1, #ffffff)))" + }, + { + "file": "packages/components/dropdown-item/dropdown-item.less", + "selector": ".t-dropdown-item__footer", + "property": "background", + "kind": "render-property", + "value": "var(--td-dropdown-menu-bg-color, var(--td-bg-color-container, var(--td-font-white-1, #ffffff)))" + }, + { + "file": "packages/components/dropdown-menu/dropdown-menu.less", + "selector": ".t-dropdown-menu", + "property": "background", + "kind": "render-property", + "value": "var(--td-dropdown-menu-bg-color, var(--td-bg-color-container, var(--td-font-white-1, #ffffff)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "dropdownMenuBorderWidth", + "miniComponent": "dropdown-menu", + "cssName": "--td-dropdown-menu-border-width", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/dropdown-menu/dropdown-menu.less", + "selector": ".t-dropdown-menu:after", + "property": "height", + "kind": "render-property", + "value": "var(--td-dropdown-menu-border-width, 1px)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "dropdownMenuColor", + "miniComponent": "dropdown-menu", + "cssName": "--td-dropdown-menu-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/dropdown-menu/dropdown-menu.less", + "selector": ".t-dropdown-menu__item", + "property": "color", + "kind": "render-property", + "value": "var(--td-dropdown-menu-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "dropdownMenuDisabledColor", + "miniComponent": "dropdown-menu", + "cssName": "--td-dropdown-menu-disabled-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/dropdown-menu/dropdown-menu.less", + "selector": ".t-dropdown-menu__item--disabled", + "property": "color", + "kind": "render-property", + "value": "var(--td-dropdown-menu-disabled-color, var(--td-text-color-disabled, var(--td-font-gray-4, rgba(0, 0, 0, 0.26))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "dropdownMenuFontSize", + "miniComponent": "dropdown-menu", + "cssName": "--td-dropdown-menu-font-size", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/dropdown-menu/dropdown-menu.less", + "selector": ".t-dropdown-menu__title", + "property": "font-size", + "kind": "render-property", + "value": "var(--td-dropdown-menu-font-size, var(--td-font-size-base, 28rpx))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "dropdownMenuHeight", + "miniComponent": "dropdown-menu", + "cssName": "--td-dropdown-menu-height", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/dropdown-menu/dropdown-menu.less", + "selector": ".t-dropdown-menu", + "property": "height", + "kind": "render-property", + "value": "var(--td-dropdown-menu-height, 96rpx)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "dropdownMenuIconSize", + "miniComponent": "dropdown-menu", + "cssName": "--td-dropdown-menu-icon-size", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/dropdown-menu/dropdown-menu.less", + "selector": ".t-dropdown-menu__icon", + "property": "font-size", + "kind": "render-property", + "value": "var(--td-dropdown-menu-icon-size, 40rpx)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "emptyActionMarginTop", + "miniComponent": "empty", + "cssName": "--td-empty-action-margin-top", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/empty/empty.less", + "selector": ".t-empty__description + .t-empty__actions:not(:empty)", + "property": "margin-top", + "kind": "render-property", + "value": "var(--td-empty-action-margin-top, var(--td-spacer-4, 64rpx))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "emptyDescriptionColor", + "miniComponent": "empty", + "cssName": "--td-empty-description-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/empty/empty.less", + "selector": ".t-empty__description", + "property": "color", + "kind": "render-property", + "value": "var(--td-empty-description-color, var(--td-text-color-placeholder, var(--td-font-gray-3, rgba(0, 0, 0, 0.4))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "emptyDescriptionFont", + "miniComponent": "empty", + "cssName": "--td-empty-description-font", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/empty/empty.less", + "selector": ".t-empty__description", + "property": "font", + "kind": "render-property", + "value": "var(--td-empty-description-font, var(--td-font-body-medium, 28rpx / 44rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "emptyDescriptionMarginTop", + "miniComponent": "empty", + "cssName": "--td-empty-description-margin-top", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/empty/empty.less", + "selector": ".t-empty__thumb + .t-empty__description:not(:empty)", + "property": "margin-top", + "kind": "render-property", + "value": "var(--td-empty-description-margin-top, var(--td-spacer-2, 32rpx))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "emptyIconColor", + "miniComponent": "empty", + "cssName": "--td-empty-icon-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/empty/empty.less", + "selector": ".t-empty__icon", + "property": "color", + "kind": "render-property", + "value": "var(--td-empty-icon-color, var(--td-text-color-placeholder, var(--td-font-gray-3, rgba(0, 0, 0, 0.4))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "fabShadow", + "miniComponent": "fab", + "cssName": "--td-fab-shadow", + "previousDecision": "fallback-widget-verified-visual-pending", + "compiledUses": [ + { + "file": "packages/components/fab/fab.less", + "selector": ".t-fab__button", + "property": "box-shadow", + "kind": "render-property", + "value": "var(--td-fab-shadow, var(--td-shadow-2, 0 3px 14px 2px rgba(0, 0, 0, 0.05), 0 8px 10px 1px rgba(0, 0, 0, 0.06), 0 5px 5px -3px rgba(0, 0, 0, 0.1)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "footerLinkColor", + "miniComponent": "footer", + "cssName": "--td-footer-link-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/footer/footer.less", + "selector": ".t-footer__link-item", + "property": "color", + "kind": "render-property", + "value": "var(--td-footer-link-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "footerLinkDividingLineColor", + "miniComponent": "footer", + "cssName": "--td-footer-link-dividing-line-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/footer/footer.less", + "selector": ".t-footer__link-line", + "property": "color", + "kind": "render-property", + "value": "var(--td-footer-link-dividing-line-color, var(--td-text-color-placeholder, var(--td-font-gray-3, rgba(0, 0, 0, 0.4))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "footerLinkDividingLinePadding", + "miniComponent": "footer", + "cssName": "--td-footer-link-dividing-line-padding", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/footer/footer.less", + "selector": ".t-footer__link-line", + "property": "padding", + "kind": "render-property", + "value": "0 var(--td-footer-link-dividing-line-padding, var(--td-spacer-1, 24rpx))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "footerLinkFont", + "miniComponent": "footer", + "cssName": "--td-footer-link-font", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/footer/footer.less", + "selector": ".t-footer__link-item", + "property": "font", + "kind": "render-property", + "value": "var(--td-footer-link-font, var(--td-font-body-medium, 28rpx / 44rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "footerLogoIconHeight", + "miniComponent": "footer", + "cssName": "--td-footer-logo-icon-height", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/footer/footer.less", + "selector": ".t-footer__icon", + "property": "height", + "kind": "render-property", + "value": "var(--td-footer-logo-icon-height, 48rpx)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "footerLogoIconMarginRight", + "miniComponent": "footer", + "cssName": "--td-footer-logo-icon-margin-right", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/footer/footer.less", + "selector": ".t-footer__icon", + "property": "margin-right", + "kind": "render-property", + "value": "var(--td-footer-logo-icon-margin-right, var(--td-spacer, 16rpx))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "footerLogoIconWidth", + "miniComponent": "footer", + "cssName": "--td-footer-logo-icon-width", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/footer/footer.less", + "selector": ".t-footer__icon", + "property": "width", + "kind": "render-property", + "value": "var(--td-footer-logo-icon-width, 48rpx)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "footerLogoTitleFont", + "miniComponent": "footer", + "cssName": "--td-footer-logo-title-font", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/footer/footer.less", + "selector": ".t-footer__title", + "property": "font", + "kind": "render-property", + "value": "var(--td-footer-logo-title-font, var(--td-font-title-medium, 600 32rpx / 48rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "footerLogoTitleUrlWidth", + "miniComponent": "footer", + "cssName": "--td-footer-logo-title-url-width", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/footer/footer.less", + "selector": ".t-footer__title-url", + "property": "width", + "kind": "render-property", + "value": "var(--td-footer-logo-title-url-width, 256rpx)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "footerTextColor", + "miniComponent": "footer", + "cssName": "--td-footer-text-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/footer/footer.less", + "selector": ".t-footer__text", + "property": "color", + "kind": "render-property", + "value": "var(--td-footer-text-color, var(--td-text-color-placeholder, var(--td-font-gray-3, rgba(0, 0, 0, 0.4))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "footerTextFont", + "miniComponent": "footer", + "cssName": "--td-footer-text-font", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/footer/footer.less", + "selector": ".t-footer__text", + "property": "font", + "kind": "render-property", + "value": "var(--td-footer-text-font, var(--td-font-body-small, 24rpx / 40rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "footerTextMarginTop", + "miniComponent": "footer", + "cssName": "--td-footer-text-margin-top", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/footer/footer.less", + "selector": ".t-footer__link-list + .t-footer__text:not(:empty)", + "property": "margin-top", + "kind": "render-property", + "value": "var(--td-footer-text-margin-top, calc(var(--td-spacer, 16rpx) / 2))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "formBgColor", + "miniComponent": "form", + "cssName": "--td-form-bg-color", + "previousDecision": "fallback-widget-verified-visual-pending", + "compiledUses": [ + { + "file": "packages/components/form/form.less", + "selector": ".t-form", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-form-bg-color, var(--td-bg-color-container, var(--td-font-white-1, #ffffff)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "formItemBorderColor", + "miniComponent": "form-item", + "cssName": "--td-form-item-border-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/form-item/form-item.less", + "selector": ".t-form__item--bordered::after", + "property": "border-bottom", + "kind": "render-property", + "value": "1px solid var(--td-form-item-border-color, var(--td-component-stroke, var(--td-gray-color-3, #e7e7e7)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "formItemBorderLeftSpace", + "miniComponent": "form-item", + "cssName": "--td-form-item-border-left-space", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/form-item/form-item.less", + "selector": ".t-form__item--bordered::after", + "property": "left", + "kind": "render-property", + "value": "var(--td-form-item-border-left-space, var(--td-form-item-vertical-padding, var(--td-spacer-2, 32rpx)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "formItemBorderRightSpace", + "miniComponent": "form-item", + "cssName": "--td-form-item-border-right-space", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/form-item/form-item.less", + "selector": ".t-form__item--bordered::after", + "property": "right", + "kind": "render-property", + "value": "var(--td-form-item-border-right-space, 0)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "formItemHorizontalPadding", + "miniComponent": "form-item", + "cssName": "--td-form-item-horizontal-padding", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/form-item/form-item.less", + "selector": "/* Less 支持测试 - 监听功能验证 */\n.t-form__item", + "property": "padding", + "kind": "render-property", + "value": "var(--td-form-item-vertical-padding, var(--td-spacer-2, 32rpx)) var(--td-form-item-horizontal-padding, var(--td-spacer-2, 32rpx))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "formItemVerticalPadding", + "miniComponent": "form-item", + "cssName": "--td-form-item-vertical-padding", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/form-item/form-item.less", + "selector": "/* Less 支持测试 - 监听功能验证 */\n.t-form__item", + "property": "padding", + "kind": "render-property", + "value": "var(--td-form-item-vertical-padding, var(--td-spacer-2, 32rpx)) var(--td-form-item-horizontal-padding, var(--td-spacer-2, 32rpx))" + }, + { + "file": "packages/components/form-item/form-item.less", + "selector": ".t-form__item--bordered::after", + "property": "left", + "kind": "render-property", + "value": "var(--td-form-item-border-left-space, var(--td-form-item-vertical-padding, var(--td-spacer-2, 32rpx)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "gridBgColor", + "miniComponent": "grid", + "cssName": "--td-grid-bg-color", + "previousDecision": "outside-current-flutter-component-surface", + "compiledUses": [ + { + "file": "packages/components/grid/grid.less", + "selector": ".t-grid", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-grid-bg-color, var(--td-bg-color-container, var(--td-font-white-1, #ffffff)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "gridCardRadius", + "miniComponent": "grid", + "cssName": "--td-grid-card-radius", + "previousDecision": "outside-current-flutter-component-surface", + "compiledUses": [ + { + "file": "packages/components/grid/grid.less", + "selector": ".t-grid--card", + "property": "border-radius", + "kind": "render-property", + "value": "var(--td-grid-card-radius, var(--td-radius-large, 18rpx))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "gridItemBgColor", + "miniComponent": "grid-item", + "cssName": "--td-grid-item-bg-color", + "previousDecision": "outside-current-flutter-component-surface", + "compiledUses": [ + { + "file": "packages/components/grid-item/grid-item.less", + "selector": ".t-grid-item", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-grid-item-bg-color, var(--td-bg-color-container, var(--td-font-white-1, #ffffff)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "gridItemDescriptionColor", + "miniComponent": "grid-item", + "cssName": "--td-grid-item-description-color", + "previousDecision": "outside-current-flutter-component-surface", + "compiledUses": [ + { + "file": "packages/components/grid-item/grid-item.less", + "selector": ".t-grid-item__description", + "property": "color", + "kind": "render-property", + "value": "var(--td-grid-item-description-color, var(--td-text-color-placeholder, var(--td-font-gray-3, rgba(0, 0, 0, 0.4))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "gridItemDescriptionFont", + "miniComponent": "grid-item", + "cssName": "--td-grid-item-description-font", + "previousDecision": "outside-current-flutter-component-surface", + "compiledUses": [ + { + "file": "packages/components/grid-item/grid-item.less", + "selector": ".t-grid-item__description", + "property": "font", + "kind": "render-property", + "value": "var(--td-grid-item-description-font, var(--td-font-body-small, 24rpx / 40rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "gridItemDescriptionPaddingTop", + "miniComponent": "grid-item", + "cssName": "--td-grid-item-description-padding-top", + "previousDecision": "outside-current-flutter-component-surface", + "compiledUses": [ + { + "file": "packages/components/grid-item/grid-item.less", + "selector": ".t-grid-item__description", + "property": "padding-top", + "kind": "render-property", + "value": "var(--td-grid-item-description-padding-top, 0)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "gridItemHorizontalTextDescriptionTop", + "miniComponent": "grid-item", + "cssName": "--td-grid-item-horizontal-text-description-top", + "previousDecision": "outside-current-flutter-component-surface", + "compiledUses": [ + { + "file": "packages/components/grid-item/grid-item.less", + "selector": ".t-grid-item__description--horizontal", + "property": "margin-top", + "kind": "render-property", + "value": "var(--td-grid-item-horizontal-text-description-top, 0)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "gridItemHorizontalTextPaddingLeft", + "miniComponent": "grid-item", + "cssName": "--td-grid-item-horizontal-text-padding-left", + "previousDecision": "outside-current-flutter-component-surface", + "compiledUses": [ + { + "file": "packages/components/grid-item/grid-item.less", + "selector": ".t-grid-item__description--horizontal", + "property": "padding-left", + "kind": "render-property", + "value": "var(--td-grid-item-horizontal-text-padding-left, 0)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "gridItemHoverBgColor", + "miniComponent": "grid-item", + "cssName": "--td-grid-item-hover-bg-color", + "previousDecision": "outside-current-flutter-component-surface", + "compiledUses": [ + { + "file": "packages/components/grid-item/grid-item.less", + "selector": ".t-grid-item--hover", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-grid-item-hover-bg-color, var(--td-bg-color-secondarycontainer, var(--td-gray-color-1, #f3f3f3)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "gridItemImageMiddleWidth", + "miniComponent": "grid-item", + "cssName": "--td-grid-item-image-middle-width", + "previousDecision": "outside-current-flutter-component-surface", + "compiledUses": [ + { + "file": "packages/components/grid-item/grid-item.less", + "selector": ".t-grid-item__image:not(:empty).t-grid-item__image--middle", + "property": "width", + "kind": "render-property", + "value": "var(--td-grid-item-image-middle-width, 80rpx)" + }, + { + "file": "packages/components/grid-item/grid-item.less", + "selector": ".t-grid-item__image:not(:empty).t-grid-item__image--middle", + "property": "height", + "kind": "render-property", + "value": "var(--td-grid-item-image-middle-width, 80rpx)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "gridItemImageSmallWidth", + "miniComponent": "grid-item", + "cssName": "--td-grid-item-image-small-width", + "previousDecision": "outside-current-flutter-component-surface", + "compiledUses": [ + { + "file": "packages/components/grid-item/grid-item.less", + "selector": ".t-grid-item__image:not(:empty).t-grid-item__image--small", + "property": "width", + "kind": "render-property", + "value": "var(--td-grid-item-image-small-width, 64rpx)" + }, + { + "file": "packages/components/grid-item/grid-item.less", + "selector": ".t-grid-item__image:not(:empty).t-grid-item__image--small", + "property": "height", + "kind": "render-property", + "value": "var(--td-grid-item-image-small-width, 64rpx)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "gridItemImageWidth", + "miniComponent": "grid-item", + "cssName": "--td-grid-item-image-width", + "previousDecision": "outside-current-flutter-component-surface", + "compiledUses": [ + { + "file": "packages/components/grid-item/grid-item.less", + "selector": ".t-grid-item__image:not(:empty)", + "property": "width", + "kind": "render-property", + "value": "var(--td-grid-item-image-width, 96rpx)" + }, + { + "file": "packages/components/grid-item/grid-item.less", + "selector": ".t-grid-item__image:not(:empty)", + "property": "height", + "kind": "render-property", + "value": "var(--td-grid-item-image-width, 96rpx)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "gridItemPadding", + "miniComponent": "grid-item", + "cssName": "--td-grid-item-padding", + "previousDecision": "outside-current-flutter-component-surface", + "compiledUses": [ + { + "file": "packages/components/grid-item/grid-item.less", + "selector": ".t-grid-item__content", + "property": "padding", + "kind": "render-property", + "value": "var(--td-grid-item-padding, var(--td-spacer-2, 32rpx)) 0 var(--td-spacer-1, 24rpx)" + }, + { + "file": "packages/components/grid-item/grid-item.less", + "selector": ".t-grid-item__content--horizontal", + "property": "padding-left", + "kind": "render-property", + "value": "var(--td-grid-item-padding, var(--td-spacer-2, 32rpx))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "gridItemTextColor", + "miniComponent": "grid-item", + "cssName": "--td-grid-item-text-color", + "previousDecision": "outside-current-flutter-component-surface", + "compiledUses": [ + { + "file": "packages/components/grid-item/grid-item.less", + "selector": ".t-grid-item__text", + "property": "color", + "kind": "render-property", + "value": "var(--td-grid-item-text-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + } + ], + "nonLessReferences": [ + { + "file": "packages/components/action-sheet/template/grid.wxml", + "line": 17, + "text": "style=\"--td-grid-item-text-color: {{item.color}}\"" + }, + { + "file": "packages/components/action-sheet/template/grid.wxml", + "line": 38, + "text": "style=\"--td-grid-item-text-color: {{item.color}}\"" + } + ], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "gridItemTextFont", + "miniComponent": "grid-item", + "cssName": "--td-grid-item-text-font", + "previousDecision": "outside-current-flutter-component-surface", + "compiledUses": [ + { + "file": "packages/components/grid-item/grid-item.less", + "selector": ".t-grid-item__text--large", + "property": "font", + "kind": "render-property", + "value": "var(--td-grid-item-text-font, var(--td-font-body-medium, 28rpx / 44rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + } + ], + "nonLessReferences": [ + { + "file": "packages/components/side-bar/_example/base/index.wxss", + "line": 13, + "text": "--td-grid-item-text-font: var(--td-font-body-small);" + }, + { + "file": "packages/components/side-bar/_example/custom/index.wxss", + "line": 13, + "text": "--td-grid-item-text-font: var(--td-font-body-small);" + }, + { + "file": "packages/components/side-bar/_example/with-icon/index.wxss", + "line": 13, + "text": "--td-grid-item-text-font: var(--td-font-body-small);" + } + ], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "gridItemTextMiddleFont", + "miniComponent": "grid-item", + "cssName": "--td-grid-item-text-middle-font", + "previousDecision": "outside-current-flutter-component-surface", + "compiledUses": [ + { + "file": "packages/components/grid-item/grid-item.less", + "selector": ".t-grid-item__text--middle", + "property": "font", + "kind": "render-property", + "value": "var(--td-grid-item-text-middle-font, var(--td-font-body-small, 24rpx / 40rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "gridItemTextPaddingTop", + "miniComponent": "grid-item", + "cssName": "--td-grid-item-text-padding-top", + "previousDecision": "outside-current-flutter-component-surface", + "compiledUses": [ + { + "file": "packages/components/grid-item/grid-item.less", + "selector": ".t-grid-item__text", + "property": "padding-top", + "kind": "render-property", + "value": "var(--td-grid-item-text-padding-top, var(--td-spacer, 16rpx))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "gridItemTextSmallFont", + "miniComponent": "grid-item", + "cssName": "--td-grid-item-text-small-font", + "previousDecision": "outside-current-flutter-component-surface", + "compiledUses": [ + { + "file": "packages/components/grid-item/grid-item.less", + "selector": ".t-grid-item__text--small", + "property": "font", + "kind": "render-property", + "value": "var(--td-grid-item-text-small-font, var(--td-font-body-extraSmall, 20rpx / 32rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "guideBodyColor", + "miniComponent": "guide", + "cssName": "--td-guide-body-color", + "previousDecision": "outside-current-flutter-component-surface", + "compiledUses": [ + { + "file": "packages/components/guide/guide.less", + "selector": ".t-guide__body--popover", + "property": "color", + "kind": "render-property", + "value": "var(--td-guide-body-color, var(--td-text-color-secondary, var(--td-font-gray-2, rgba(0, 0, 0, 0.6))))" + }, + { + "file": "packages/components/guide/guide.less", + "selector": ".t-guide__body--dialog", + "property": "color", + "kind": "render-property", + "value": "var(--td-guide-body-color, var(--td-text-color-secondary, var(--td-font-gray-2, rgba(0, 0, 0, 0.6))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "guideDialogBodyFont", + "miniComponent": "guide", + "cssName": "--td-guide-dialog-body-font", + "previousDecision": "outside-current-flutter-component-surface", + "compiledUses": [ + { + "file": "packages/components/guide/guide.less", + "selector": ".t-guide__body--dialog", + "property": "font", + "kind": "render-property", + "value": "var(--td-guide-dialog-body-font, var(--td-font-body-large, 32rpx / 48rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "guideDialogBodyMarginTop", + "miniComponent": "guide", + "cssName": "--td-guide-dialog-body-margin-top", + "previousDecision": "outside-current-flutter-component-surface", + "compiledUses": [ + { + "file": "packages/components/guide/guide.less", + "selector": ".t-guide__body--dialog", + "property": "margin-top", + "kind": "render-property", + "value": "var(--td-guide-dialog-body-margin-top, var(--td-spacer, 16rpx))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "guideDialogBodyTextAlign", + "miniComponent": "guide", + "cssName": "--td-guide-dialog-body-text-align", + "previousDecision": "outside-current-flutter-component-surface", + "compiledUses": [ + { + "file": "packages/components/guide/guide.less", + "selector": ".t-guide__body--dialog", + "property": "text-align", + "kind": "render-property", + "value": "var(--td-guide-dialog-body-text-align, center)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "guideDialogBorderRadius", + "miniComponent": "guide", + "cssName": "--td-guide-dialog-border-radius", + "previousDecision": "outside-current-flutter-component-surface", + "compiledUses": [ + { + "file": "packages/components/guide/guide.less", + "selector": ".t-guide__container--dialog", + "property": "border-radius", + "kind": "render-property", + "value": "var(--td-guide-dialog-border-radius, var(--td-radius-extraLarge, 24rpx))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "guideDialogFooterButtonPadding", + "miniComponent": "guide", + "cssName": "--td-guide-dialog-footer-button-padding", + "previousDecision": "outside-current-flutter-component-surface", + "compiledUses": [ + { + "file": "packages/components/guide/guide.less", + "selector": ".t-guide__footer--dialog", + "property": "padding", + "kind": "render-property", + "value": "var(--td-guide-dialog-footer-button-padding, 0 var(--td-spacer-3, 48rpx))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "guideDialogPadding", + "miniComponent": "guide", + "cssName": "--td-guide-dialog-padding", + "previousDecision": "outside-current-flutter-component-surface", + "compiledUses": [ + { + "file": "packages/components/guide/guide.less", + "selector": ".t-guide__container--dialog", + "property": "padding", + "kind": "render-property", + "value": "var(--td-guide-dialog-padding, var(--td-spacer-3, 48rpx) 0)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "guideDialogTitleFont", + "miniComponent": "guide", + "cssName": "--td-guide-dialog-title-font", + "previousDecision": "outside-current-flutter-component-surface", + "compiledUses": [ + { + "file": "packages/components/guide/guide.less", + "selector": ".t-guide__title--dialog", + "property": "font", + "kind": "render-property", + "value": "var(--td-guide-dialog-title-font, var(--td-font-title-large, 600 36rpx / 52rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "guideDialogTitleTextAlign", + "miniComponent": "guide", + "cssName": "--td-guide-dialog-title-text-align", + "previousDecision": "outside-current-flutter-component-surface", + "compiledUses": [ + { + "file": "packages/components/guide/guide.less", + "selector": ".t-guide__title--dialog", + "property": "text-align", + "kind": "render-property", + "value": "var(--td-guide-dialog-title-text-align, center)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "guideDialogWidth", + "miniComponent": "guide", + "cssName": "--td-guide-dialog-width", + "previousDecision": "outside-current-flutter-component-surface", + "compiledUses": [ + { + "file": "packages/components/guide/guide.less", + "selector": ".t-guide__container--dialog", + "property": "width", + "kind": "render-property", + "value": "var(--td-guide-dialog-width, 622rpx)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "guideFooterButtonSpace", + "miniComponent": "guide", + "cssName": "--td-guide-footer-button-space", + "previousDecision": "outside-current-flutter-component-surface", + "compiledUses": [ + { + "file": "packages/components/guide/guide.less", + "selector": ".t-guide__footer .t-guide__button + .t-guide__button", + "property": "margin-left", + "kind": "render-property", + "value": "var(--td-guide-footer-button-space, var(--td-spacer-1, 24rpx))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "guideFooterMarginTop", + "miniComponent": "guide", + "cssName": "--td-guide-footer-margin-top", + "previousDecision": "outside-current-flutter-component-surface", + "compiledUses": [ + { + "file": "packages/components/guide/guide.less", + "selector": ".t-guide__footer", + "property": "margin-top", + "kind": "render-property", + "value": "var(--td-guide-footer-margin-top, var(--td-spacer-3, 48rpx))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "guideFooterTextAlign", + "miniComponent": "guide", + "cssName": "--td-guide-footer-text-align", + "previousDecision": "outside-current-flutter-component-surface", + "compiledUses": [ + { + "file": "packages/components/guide/guide.less", + "selector": ".t-guide__footer", + "property": "text-align", + "kind": "render-property", + "value": "var(--td-guide-footer-text-align, right)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "guidePopoverBgColor", + "miniComponent": "guide", + "cssName": "--td-guide-popover-bg-color", + "previousDecision": "outside-current-flutter-component-surface", + "compiledUses": [ + { + "file": "packages/components/guide/guide.less", + "selector": ".t-guide__container--popover", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-guide-popover-bg-color, var(--td-bg-color-container, var(--td-font-white-1, #ffffff)))" + }, + { + "file": "packages/components/guide/guide.less", + "selector": ".t-guide__container--dialog", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-guide-popover-bg-color, var(--td-bg-color-container, var(--td-font-white-1, #ffffff)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "guidePopoverBodyFont", + "miniComponent": "guide", + "cssName": "--td-guide-popover-body-font", + "previousDecision": "outside-current-flutter-component-surface", + "compiledUses": [ + { + "file": "packages/components/guide/guide.less", + "selector": ".t-guide__body--popover", + "property": "font", + "kind": "render-property", + "value": "var(--td-guide-popover-body-font, var(--td-font-body-medium, 28rpx / 44rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "guidePopoverBodyMarginTop", + "miniComponent": "guide", + "cssName": "--td-guide-popover-body-margin-top", + "previousDecision": "outside-current-flutter-component-surface", + "compiledUses": [ + { + "file": "packages/components/guide/guide.less", + "selector": ".t-guide__body--popover", + "property": "margin-top", + "kind": "render-property", + "value": "var(--td-guide-popover-body-margin-top, calc(var(--td-spacer, 16rpx) / 2))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "guidePopoverBodyTextAlign", + "miniComponent": "guide", + "cssName": "--td-guide-popover-body-text-align", + "previousDecision": "outside-current-flutter-component-surface", + "compiledUses": [ + { + "file": "packages/components/guide/guide.less", + "selector": ".t-guide__body--popover", + "property": "text-align", + "kind": "render-property", + "value": "var(--td-guide-popover-body-text-align, left)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "guidePopoverBorder", + "miniComponent": "guide", + "cssName": "--td-guide-popover-border", + "previousDecision": "outside-current-flutter-component-surface", + "compiledUses": [ + { + "file": "packages/components/guide/guide.less", + "selector": ".t-guide__container--popover", + "property": "border", + "kind": "render-property", + "value": "var(--td-guide-popover-border, 2rpx solid var(--td-component-border, var(--td-gray-color-4, #dcdcdc)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "guidePopoverBorderRadius", + "miniComponent": "guide", + "cssName": "--td-guide-popover-border-radius", + "previousDecision": "outside-current-flutter-component-surface", + "compiledUses": [ + { + "file": "packages/components/guide/guide.less", + "selector": ".t-guide__container--popover", + "property": "border-radius", + "kind": "render-property", + "value": "var(--td-guide-popover-border-radius, var(--td-radius-large, 18rpx))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "guidePopoverMaxWidth", + "miniComponent": "guide", + "cssName": "--td-guide-popover-max-width", + "previousDecision": "outside-current-flutter-component-surface", + "compiledUses": [ + { + "file": "packages/components/guide/guide.less", + "selector": ".t-guide__container--popover", + "property": "max-width", + "kind": "render-property", + "value": "var(--td-guide-popover-max-width, 540rpx)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "guidePopoverMinWidth", + "miniComponent": "guide", + "cssName": "--td-guide-popover-min-width", + "previousDecision": "outside-current-flutter-component-surface", + "compiledUses": [ + { + "file": "packages/components/guide/guide.less", + "selector": ".t-guide__container--popover", + "property": "min-width", + "kind": "render-property", + "value": "var(--td-guide-popover-min-width, 480rpx)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "guidePopoverPadding", + "miniComponent": "guide", + "cssName": "--td-guide-popover-padding", + "previousDecision": "outside-current-flutter-component-surface", + "compiledUses": [ + { + "file": "packages/components/guide/guide.less", + "selector": ".t-guide__container--popover", + "property": "padding", + "kind": "render-property", + "value": "var(--td-guide-popover-padding, var(--td-spacer-2, 32rpx))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "guidePopoverShadow", + "miniComponent": "guide", + "cssName": "--td-guide-popover-shadow", + "previousDecision": "outside-current-flutter-component-surface", + "compiledUses": [ + { + "file": "packages/components/guide/guide.less", + "selector": ".t-guide__container--popover", + "property": "box-shadow", + "kind": "render-property", + "value": "var(--td-guide-popover-shadow, var(--td-shadow-3, 0 6px 30px 5px rgba(0, 0, 0, 0.05), 0 16px 24px 2px rgba(0, 0, 0, 0.04), 0 8px 10px -5px rgba(0, 0, 0, 0.08)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "guidePopoverTitleFont", + "miniComponent": "guide", + "cssName": "--td-guide-popover-title-font", + "previousDecision": "outside-current-flutter-component-surface", + "compiledUses": [ + { + "file": "packages/components/guide/guide.less", + "selector": ".t-guide__title--popover", + "property": "font", + "kind": "render-property", + "value": "var(--td-guide-popover-title-font, var(--td-font-title-medium, 600 32rpx / 48rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "guidePopoverTitleTextAlign", + "miniComponent": "guide", + "cssName": "--td-guide-popover-title-text-align", + "previousDecision": "outside-current-flutter-component-surface", + "compiledUses": [ + { + "file": "packages/components/guide/guide.less", + "selector": ".t-guide__title--popover", + "property": "text-align", + "kind": "render-property", + "value": "var(--td-guide-popover-title-text-align, left)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "guideReferenceBorder", + "miniComponent": "guide", + "cssName": "--td-guide-reference-border", + "previousDecision": "outside-current-flutter-component-surface", + "compiledUses": [ + { + "file": "packages/components/guide/guide.less", + "selector": ".t-guide__reference--nonoverlay", + "property": "border", + "kind": "render-property", + "value": "var(--td-guide-reference-border, 4rpx solid var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "guideReferenceBorderRadius", + "miniComponent": "guide", + "cssName": "--td-guide-reference-border-radius", + "previousDecision": "outside-current-flutter-component-surface", + "compiledUses": [ + { + "file": "packages/components/guide/guide.less", + "selector": ".t-guide__reference", + "property": "border-radius", + "kind": "render-property", + "value": "var(--td-guide-reference-border-radius, var(--td-radius-default, 12rpx))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "guideReferenceMaskColor", + "miniComponent": "guide", + "cssName": "--td-guide-reference-mask-color", + "previousDecision": "outside-current-flutter-component-surface", + "compiledUses": [ + { + "file": "packages/components/guide/guide.less", + "selector": ".t-guide__reference", + "property": "box-shadow", + "kind": "render-property", + "value": "0 0 0 0 var(--td-guide-reference-mask-color, var(--td-font-gray-2, rgba(0, 0, 0, 0.6))), var(--td-guide-reference-mask-color, var(--td-font-gray-2, rgba(0, 0, 0, 0.6))) 0 0 0 5000px" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "guideTitleColor", + "miniComponent": "guide", + "cssName": "--td-guide-title-color", + "previousDecision": "outside-current-flutter-component-surface", + "compiledUses": [ + { + "file": "packages/components/guide/guide.less", + "selector": ".t-guide__title--popover", + "property": "color", + "kind": "render-property", + "value": "var(--td-guide-title-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + }, + { + "file": "packages/components/guide/guide.less", + "selector": ".t-guide__title--dialog", + "property": "color", + "kind": "render-property", + "value": "var(--td-guide-title-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "imageColor", + "miniComponent": "image", + "cssName": "--td-image-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/image/image.less", + "selector": ".t-image__mask,\n.t-image__img", + "property": "color", + "kind": "render-property", + "value": "var(--td-image-color, var(--td-text-color-placeholder, var(--td-font-gray-3, rgba(0, 0, 0, 0.4))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "imageLoadingBgColor", + "miniComponent": "image", + "cssName": "--td-image-loading-bg-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/image/image.less", + "selector": ".t-image__mask", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-image-loading-bg-color, var(--td-bg-color-secondarycontainer, var(--td-gray-color-1, #f3f3f3)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "imageLoadingColor", + "miniComponent": "image", + "cssName": "--td-image-loading-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/image/image.less", + "selector": ".t-image__mask", + "property": "color", + "kind": "render-property", + "value": "var(--td-image-loading-color, var(--td-text-color-placeholder, var(--td-font-gray-3, rgba(0, 0, 0, 0.4))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "imageRoundRadius", + "miniComponent": "image", + "cssName": "--td-image-round-radius", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/image/image.less", + "selector": ".t-image--shape-round", + "property": "border-radius", + "kind": "render-property", + "value": "var(--td-image-round-radius, var(--td-radius-default, 12rpx))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "imageViewerCloseMarginLeft", + "miniComponent": "image-viewer", + "cssName": "--td-image-viewer-close-margin-left", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/image-viewer/image-viewer.less", + "selector": ".t-image-viewer__nav-close", + "property": "margin-left", + "kind": "render-property", + "value": "var(--td-image-viewer-close-margin-left, var(--td-spacer-1, 24rpx))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "imageViewerDeleteMarginRight", + "miniComponent": "image-viewer", + "cssName": "--td-image-viewer-delete-margin-right", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/image-viewer/image-viewer.less", + "selector": ".t-image-viewer__nav-delete", + "property": "margin-right", + "kind": "render-property", + "value": "var(--td-image-viewer-delete-margin-right, var(--td-spacer-1, 24rpx))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "imageViewerMaskBgColor", + "miniComponent": "image-viewer", + "cssName": "--td-image-viewer-mask-bg-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/image-viewer/image-viewer.less", + "selector": ".t-image-viewer__mask", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-image-viewer-mask-bg-color, var(--td-mask-active, rgba(0, 0, 0, 0.6)))" + } + ], + "nonLessReferences": [ + { + "file": "packages/components/image-viewer/image-viewer.wxml", + "line": 19, + "text": "style=\"{{_._style([backgroundColor && '--td-image-viewer-mask-bg-color: ' + backgroundColor])}}\"" + } + ], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "imageViewerNavBgColor", + "miniComponent": "image-viewer", + "cssName": "--td-image-viewer-nav-bg-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/image-viewer/image-viewer.less", + "selector": ".t-image-viewer__nav", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-image-viewer-nav-bg-color, #000)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "imageViewerNavColor", + "miniComponent": "image-viewer", + "cssName": "--td-image-viewer-nav-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/image-viewer/image-viewer.less", + "selector": ".t-image-viewer__nav", + "property": "color", + "kind": "render-property", + "value": "var(--td-image-viewer-nav-color, var(--td-text-color-anti, var(--td-font-white-1, #ffffff)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "imageViewerNavHeight", + "miniComponent": "image-viewer", + "cssName": "--td-image-viewer-nav-height", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/image-viewer/image-viewer.less", + "selector": ".t-image-viewer__nav", + "property": "height", + "kind": "render-property", + "value": "var(--td-image-viewer-nav-height, 96rpx)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "imageViewerNavIndexFontSize", + "miniComponent": "image-viewer", + "cssName": "--td-image-viewer-nav-index-font-size", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/image-viewer/image-viewer.less", + "selector": ".t-image-viewer__nav-index", + "property": "font-size", + "kind": "render-property", + "value": "var(--td-image-viewer-nav-index-font-size, var(--td-font-size-base, 28rpx))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "imageViewerTop", + "miniComponent": "image-viewer", + "cssName": "--td-image-viewer-top", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/image-viewer/image-viewer.less", + "selector": ".t-image-viewer", + "property": "top", + "kind": "render-property", + "value": "var(--td-image-viewer-top, var(--td-position-fixed-top, 0))" + } + ], + "nonLessReferences": [ + { + "file": "packages/components/image-viewer/image-viewer.wxml", + "line": 9, + "text": "style=\"{{_._style([style, customStyle, '--td-image-viewer-top: ' + maskTop + 'px'])}}\"" + } + ], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "indexesAnchorActiveBgColor", + "miniComponent": "indexes-anchor", + "cssName": "--td-indexes-anchor-active-bg-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/indexes-anchor/indexes-anchor.less", + "selector": ".t-indexes-anchor__header--active", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-indexes-anchor-active-bg-color, var(--td-bg-color-container, var(--td-font-white-1, #ffffff)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "indexesAnchorActiveColor", + "miniComponent": "indexes-anchor", + "cssName": "--td-indexes-anchor-active-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/indexes-anchor/indexes-anchor.less", + "selector": ".t-indexes-anchor__wrapper--active", + "property": "color", + "kind": "render-property", + "value": "var(--td-indexes-anchor-active-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "indexesAnchorActiveFontWeight", + "miniComponent": "indexes-anchor", + "cssName": "--td-indexes-anchor-active-font-weight", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/indexes-anchor/indexes-anchor.less", + "selector": ".t-indexes-anchor__wrapper--active", + "property": "font-weight", + "kind": "render-property", + "value": "var(--td-indexes-anchor-active-font-weight, 600)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "indexesAnchorBgColor", + "miniComponent": "indexes-anchor", + "cssName": "--td-indexes-anchor-bg-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/indexes-anchor/indexes-anchor.less", + "selector": ".t-indexes-anchor__header", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-indexes-anchor-bg-color, var(--td-bg-color-secondarycontainer, var(--td-gray-color-1, #f3f3f3)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "indexesAnchorBorderColor", + "miniComponent": "indexes-anchor", + "cssName": "--td-indexes-anchor-border-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/indexes-anchor/indexes-anchor.less", + "selector": ".t-indexes-anchor__header--active::after", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-indexes-anchor-border-color, var(--td-component-border, var(--td-gray-color-4, #dcdcdc)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "indexesAnchorColor", + "miniComponent": "indexes-anchor", + "cssName": "--td-indexes-anchor-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/indexes-anchor/indexes-anchor.less", + "selector": ".t-indexes-anchor", + "property": "color", + "kind": "render-property", + "value": "var(--td-indexes-anchor-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "indexesAnchorFont", + "miniComponent": "indexes-anchor", + "cssName": "--td-indexes-anchor-font", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/indexes-anchor/indexes-anchor.less", + "selector": ".t-indexes-anchor", + "property": "font", + "kind": "render-property", + "value": "var(--td-indexes-anchor-font, var(--td-font-body-medium, 28rpx / 44rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "indexesAnchorPadding", + "miniComponent": "indexes-anchor", + "cssName": "--td-indexes-anchor-padding", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/indexes-anchor/indexes-anchor.less", + "selector": ".t-indexes-anchor__header", + "property": "padding", + "kind": "render-property", + "value": "var(--td-indexes-anchor-padding, calc(var(--td-spacer, 16rpx) / 2) var(--td-spacer-2, 32rpx))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "indexesAnchorTop", + "miniComponent": "indexes-anchor", + "cssName": "--td-indexes-anchor-top", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/indexes-anchor/indexes-anchor.less", + "selector": ".t-indexes-anchor__wrapper--sticky", + "property": "top", + "kind": "render-property", + "value": "var(--td-indexes-anchor-top, 0)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "indexesSidebarActiveBgColor", + "miniComponent": "indexes", + "cssName": "--td-indexes-sidebar-active-bg-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/indexes/indexes.less", + "selector": ".t-indexes__sidebar-item--active", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-indexes-sidebar-active-bg-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "indexesSidebarActiveColor", + "miniComponent": "indexes", + "cssName": "--td-indexes-sidebar-active-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/indexes/indexes.less", + "selector": ".t-indexes__sidebar-item--active", + "property": "color", + "kind": "render-property", + "value": "var(--td-indexes-sidebar-active-color, var(--td-text-color-anti, var(--td-font-white-1, #ffffff)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "indexesSidebarColor", + "miniComponent": "indexes", + "cssName": "--td-indexes-sidebar-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/indexes/indexes.less", + "selector": ".t-indexes__sidebar", + "property": "color", + "kind": "render-property", + "value": "var(--td-indexes-sidebar-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "indexesSidebarFont", + "miniComponent": "indexes", + "cssName": "--td-indexes-sidebar-font", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/indexes/indexes.less", + "selector": ".t-indexes__sidebar", + "property": "font", + "kind": "render-property", + "value": "var(--td-indexes-sidebar-font, var(--td-font-body-small, 24rpx / 40rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "indexesSidebarItemSize", + "miniComponent": "indexes", + "cssName": "--td-indexes-sidebar-item-size", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/indexes/indexes.less", + "selector": ".t-indexes__sidebar-item", + "property": "min-width", + "kind": "render-property", + "value": "var(--td-indexes-sidebar-item-size, 40rpx)" + }, + { + "file": "packages/components/indexes/indexes.less", + "selector": ".t-indexes__sidebar-item", + "property": "height", + "kind": "render-property", + "value": "var(--td-indexes-sidebar-item-size, 40rpx)" + }, + { + "file": "packages/components/indexes/indexes.less", + "selector": ".t-indexes__sidebar-item", + "property": "border-radius", + "kind": "render-property", + "value": "var(--td-indexes-sidebar-item-size, 40rpx)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "indexesSidebarRight", + "miniComponent": "indexes", + "cssName": "--td-indexes-sidebar-right", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/indexes/indexes.less", + "selector": ".t-indexes__sidebar", + "property": "right", + "kind": "render-property", + "value": "var(--td-indexes-sidebar-right, 16rpx)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "indexesSidebarTipsBgColor", + "miniComponent": "indexes", + "cssName": "--td-indexes-sidebar-tips-bg-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/indexes/indexes.less", + "selector": ".t-indexes__sidebar-tips", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-indexes-sidebar-tips-bg-color, var(--td-brand-color-light, var(--td-primary-color-1, #f2f3ff)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "indexesSidebarTipsColor", + "miniComponent": "indexes", + "cssName": "--td-indexes-sidebar-tips-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/indexes/indexes.less", + "selector": ".t-indexes__sidebar-tips", + "property": "color", + "kind": "render-property", + "value": "var(--td-indexes-sidebar-tips-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "indexesSidebarTipsFont", + "miniComponent": "indexes", + "cssName": "--td-indexes-sidebar-tips-font", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/indexes/indexes.less", + "selector": ".t-indexes__sidebar-tips", + "property": "font", + "kind": "render-property", + "value": "var(--td-indexes-sidebar-tips-font, var(--td-font-title-extraLarge, 600 40rpx / 56rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "indexesSidebarTipsRight", + "miniComponent": "indexes", + "cssName": "--td-indexes-sidebar-tips-right", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/indexes/indexes.less", + "selector": ".t-indexes__sidebar-tips", + "property": "right", + "kind": "render-property", + "value": "var(--td-indexes-sidebar-tips-right, calc(100% + 32rpx))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "indexesSidebarTipsSize", + "miniComponent": "indexes", + "cssName": "--td-indexes-sidebar-tips-size", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/indexes/indexes.less", + "selector": ".t-indexes__sidebar-tips", + "property": "min-width", + "kind": "render-property", + "value": "var(--td-indexes-sidebar-tips-size, 96rpx)" + }, + { + "file": "packages/components/indexes/indexes.less", + "selector": ".t-indexes__sidebar-tips", + "property": "height", + "kind": "render-property", + "value": "var(--td-indexes-sidebar-tips-size, 96rpx)" + }, + { + "file": "packages/components/indexes/indexes.less", + "selector": ".t-indexes__sidebar-tips", + "property": "border-radius", + "kind": "render-property", + "value": "var(--td-indexes-sidebar-tips-size, 96rpx)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "inputAlignItems", + "miniComponent": "input", + "cssName": "--td-input-align-items", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/input/input.less", + "selector": ".t-input", + "property": "align-items", + "kind": "render-property", + "value": "var(--td-input-align-items, center)" + } + ], + "nonLessReferences": [ + { + "file": "packages/components/input/_example/maxlength/index.wxss", + "line": 2, + "text": "--td-input-align-items: start;" + }, + { + "file": "packages/components/input/_example/status/index.wxss", + "line": 2, + "text": "--td-input-align-items: start;" + }, + { + "file": "packages/components/input/_example/suffix/index.wxss", + "line": 2, + "text": "--td-input-align-items: start;" + } + ], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "inputBgColor", + "miniComponent": "input", + "cssName": "--td-input-bg-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/input/input.less", + "selector": ".t-input", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-input-bg-color, var(--td-bg-color-container, var(--td-font-white-1, #ffffff)))" + } + ], + "nonLessReferences": [ + { + "file": "packages/components/input/_example/custom/index.wxss", + "line": 6, + "text": "--td-input-bg-color: rgba(44, 44, 44, 1);" + } + ], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "inputBorderColor", + "miniComponent": "input", + "cssName": "--td-input-border-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/input/input.less", + "selector": ".t-input--border::after", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-input-border-color, var(--td-component-stroke, var(--td-gray-color-3, #e7e7e7)))" + } + ], + "nonLessReferences": [ + { + "file": "packages/components/input/_example/custom/index.wxss", + "line": 7, + "text": "--td-input-border-color: rgba(75, 75, 75, 1);" + } + ], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "inputBorderLeftSpace", + "miniComponent": "input", + "cssName": "--td-input-border-left-space", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/input/input.less", + "selector": ".t-input--border:after", + "property": "left", + "kind": "render-property", + "value": "var(--td-input-border-left-space, var(--td-spacer-2, 32rpx))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "inputBorderRightSpace", + "miniComponent": "input", + "cssName": "--td-input-border-right-space", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/input/input.less", + "selector": ".t-input--border:after", + "property": "right", + "kind": "render-property", + "value": "var(--td-input-border-right-space, 0)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "inputDefaultTextColor", + "miniComponent": "input", + "cssName": "--td-input-default-text-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/input/input.less", + "selector": ".t-input__control", + "property": "color", + "kind": "render-property", + "value": "var(--td-input-default-text-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + } + ], + "nonLessReferences": [ + { + "file": "packages/components/input/_example/custom/index.wxss", + "line": 8, + "text": "--td-input-default-text-color: rgba(255, 255, 255, 1);" + } + ], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "inputDefaultTipsColor", + "miniComponent": "input", + "cssName": "--td-input-default-tips-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/input/input.less", + "selector": ".t-input--default + .t-input__tips", + "property": "color", + "kind": "render-property", + "value": "var(--td-input-default-tips-color, var(--td-text-color-placeholder, var(--td-font-gray-3, rgba(0, 0, 0, 0.4))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "inputDisabledTextColor", + "miniComponent": "input", + "cssName": "--td-input-disabled-text-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/input/input.less", + "selector": ".t-input__control--disabled", + "property": "color", + "kind": "render-property", + "value": "var(--td-input-disabled-text-color, var(--td-text-color-disabled, var(--td-font-gray-4, rgba(0, 0, 0, 0.26))))" + }, + { + "file": "packages/components/input/input.less", + "selector": ".t-input__placeholder--disabled", + "property": "color", + "kind": "render-property", + "value": "var(--td-input-disabled-text-color, var(--td-text-color-disabled, var(--td-font-gray-4, rgba(0, 0, 0, 0.26))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "inputErrorTextColor", + "miniComponent": "input", + "cssName": "--td-input-error-text-color", + "previousDecision": "pending", + "compiledUses": [], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "no-consumer-in-compiled-css-or-other-source", + "finalPaintVerified": false + }, + { + "name": "inputErrorTipsColor", + "miniComponent": "input", + "cssName": "--td-input-error-tips-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/input/input.less", + "selector": ".t-input--error + .t-input__tips", + "property": "color", + "kind": "render-property", + "value": "var(--td-input-error-tips-color, var(--td-error-color, var(--td-error-color-6, #d54941)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "inputLabelMaxWidth", + "miniComponent": "input", + "cssName": "--td-input-label-max-width", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/input/input.less", + "selector": ".t-input__label:not(:empty)", + "property": "max-width", + "kind": "render-property", + "value": "var(--td-input-label-max-width, 5em)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "inputLabelMinWidth", + "miniComponent": "input", + "cssName": "--td-input-label-min-width", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/input/input.less", + "selector": ".t-input__label:not(:empty)", + "property": "min-width", + "kind": "render-property", + "value": "var(--td-input-label-min-width, 2em)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "inputLabelTextColor", + "miniComponent": "input", + "cssName": "--td-input-label-text-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/input/input.less", + "selector": ".t-input__label:not(:empty)", + "property": "color", + "kind": "render-property", + "value": "var(--td-input-label-text-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + } + ], + "nonLessReferences": [ + { + "file": "packages/components/input/_example/custom/index.wxss", + "line": 10, + "text": "--td-input-label-text-color: rgba(255, 255, 255, 1);" + } + ], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "inputLabelTextFont", + "miniComponent": "input", + "cssName": "--td-input-label-text-font", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/input/input.less", + "selector": ".t-input__label:not(:empty)", + "property": "font", + "kind": "render-property", + "value": "var(--td-input-label-text-font, var(--td-font-body-large, 32rpx / 48rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "inputPlaceholderTextColor", + "miniComponent": "input", + "cssName": "--td-input-placeholder-text-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/input/input.less", + "selector": ".t-input__placeholder", + "property": "color", + "kind": "render-property", + "value": "var(--td-input-placeholder-text-color, var(--td-text-color-placeholder, var(--td-font-gray-3, rgba(0, 0, 0, 0.4))))" + } + ], + "nonLessReferences": [ + { + "file": "packages/components/input/_example/custom/index.wxss", + "line": 9, + "text": "--td-input-placeholder-text-color: rgba(255, 255, 255, 0.35);" + } + ], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "inputPlaceholderTextFont", + "miniComponent": "input", + "cssName": "--td-input-placeholder-text-font", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/input/input.less", + "selector": ".t-input__placeholder", + "property": "font", + "kind": "render-property", + "value": "var(--td-input-placeholder-text-font, var(--td-font-body-large, 32rpx / 48rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "inputPrefixIconColor", + "miniComponent": "input", + "cssName": "--td-input-prefix-icon-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/input/input.less", + "selector": ".t-input__icon--prefix", + "property": "color", + "kind": "render-property", + "value": "var(--td-input-prefix-icon-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "inputSuccessTextColor", + "miniComponent": "input", + "cssName": "--td-input-success-text-color", + "previousDecision": "pending", + "compiledUses": [], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "no-consumer-in-compiled-css-or-other-source", + "finalPaintVerified": false + }, + { + "name": "inputSuccessTipsColor", + "miniComponent": "input", + "cssName": "--td-input-success-tips-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/input/input.less", + "selector": ".t-input--success + .t-input__tips", + "property": "color", + "kind": "render-property", + "value": "var(--td-input-success-tips-color, var(--td-success-color, var(--td-success-color-5, #2ba471)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "inputSuffixIconColor", + "miniComponent": "input", + "cssName": "--td-input-suffix-icon-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/input/input.less", + "selector": ".t-input__wrap--clearable-icon,\n.t-input__wrap--suffix-icon", + "property": "color", + "kind": "render-property", + "value": "var(--td-input-suffix-icon-color, var(--td-text-color-placeholder, var(--td-font-gray-3, rgba(0, 0, 0, 0.4))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "inputSuffixTextColor", + "miniComponent": "input", + "cssName": "--td-input-suffix-text-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/input/input.less", + "selector": ".t-input__wrap--suffix", + "property": "color", + "kind": "render-property", + "value": "var(--td-input-suffix-text-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "inputVerticalPadding", + "miniComponent": "input", + "cssName": "--td-input-vertical-padding", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/input/input.less", + "selector": ".t-input", + "property": "padding", + "kind": "render-property", + "value": "var(--td-input-vertical-padding, var(--td-spacer-2, 32rpx))" + } + ], + "nonLessReferences": [ + { + "file": "packages/components/input/_example/bordered/index.wxss", + "line": 2, + "text": "--td-input-vertical-padding: 24rpx;" + } + ], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "inputWarningTextColor", + "miniComponent": "input", + "cssName": "--td-input-warning-text-color", + "previousDecision": "pending", + "compiledUses": [], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "no-consumer-in-compiled-css-or-other-source", + "finalPaintVerified": false + }, + { + "name": "inputWarningTipsColor", + "miniComponent": "input", + "cssName": "--td-input-warning-tips-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/input/input.less", + "selector": ".t-input--warning + .t-input__tips", + "property": "color", + "kind": "render-property", + "value": "var(--td-input-warning-tips-color, var(--td-warning-color, var(--td-warning-color-5, #e37318)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "linkDangerActiveColor", + "miniComponent": "link", + "cssName": "--td-link-danger-active-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/link/link.less", + "selector": ".t-link--danger.t-link--hover", + "property": "color", + "kind": "render-property", + "value": "var(--td-link-danger-active-color, var(--td-error-color-active, var(--td-error-color-7, #ad352f)))" + }, + { + "file": "packages/components/link/link.less", + "selector": ".t-link--danger.t-link--hover.t-link--underline::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-link-danger-active-color, var(--td-error-color-active, var(--td-error-color-7, #ad352f)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "linkDangerColor", + "miniComponent": "link", + "cssName": "--td-link-danger-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/link/link.less", + "selector": ".t-link--danger", + "property": "color", + "kind": "render-property", + "value": "var(--td-link-danger-color, var(--td-error-color, var(--td-error-color-6, #d54941)))" + }, + { + "file": "packages/components/link/link.less", + "selector": ".t-link--danger.t-link--underline::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-link-danger-color, var(--td-error-color, var(--td-error-color-6, #d54941)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "linkDangerDisabledColor", + "miniComponent": "link", + "cssName": "--td-link-danger-disabled-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/link/link.less", + "selector": ".t-link--danger.t-link--disabled", + "property": "color", + "kind": "render-property", + "value": "var(--td-link-danger-disabled-color, var(--td-error-color-disabled, var(--td-error-color-3, #ffb9b0)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "linkDefaultActiveColor", + "miniComponent": "link", + "cssName": "--td-link-default-active-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/link/link.less", + "selector": ".t-link--default.t-link--hover", + "property": "color", + "kind": "render-property", + "value": "var(--td-link-default-active-color, var(--td-brand-color-active, var(--td-primary-color-8, #003cab)))" + }, + { + "file": "packages/components/link/link.less", + "selector": ".t-link--default.t-link--hover.t-link--underline::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-link-default-active-color, var(--td-brand-color-active, var(--td-primary-color-8, #003cab)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "linkDefaultColor", + "miniComponent": "link", + "cssName": "--td-link-default-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/link/link.less", + "selector": ".t-link--default", + "property": "color", + "kind": "render-property", + "value": "var(--td-link-default-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + }, + { + "file": "packages/components/link/link.less", + "selector": ".t-link--default.t-link--underline::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-link-default-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "linkDefaultDisabledColor", + "miniComponent": "link", + "cssName": "--td-link-default-disabled-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/link/link.less", + "selector": ".t-link--default.t-link--disabled", + "property": "color", + "kind": "render-property", + "value": "var(--td-link-default-disabled-color, var(--td-text-color-disabled, var(--td-font-gray-4, rgba(0, 0, 0, 0.26))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "linkPrimaryActiveColor", + "miniComponent": "link", + "cssName": "--td-link-primary-active-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/link/link.less", + "selector": ".t-link--primary.t-link--hover", + "property": "color", + "kind": "render-property", + "value": "var(--td-link-primary-active-color, var(--td-brand-color-active, var(--td-primary-color-8, #003cab)))" + }, + { + "file": "packages/components/link/link.less", + "selector": ".t-link--primary.t-link--hover.t-link--underline::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-link-primary-active-color, var(--td-brand-color-active, var(--td-primary-color-8, #003cab)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "linkPrimaryColor", + "miniComponent": "link", + "cssName": "--td-link-primary-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/link/link.less", + "selector": ".t-link--primary", + "property": "color", + "kind": "render-property", + "value": "var(--td-link-primary-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + }, + { + "file": "packages/components/link/link.less", + "selector": ".t-link--primary.t-link--underline::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-link-primary-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "linkPrimaryDisabledColor", + "miniComponent": "link", + "cssName": "--td-link-primary-disabled-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/link/link.less", + "selector": ".t-link--primary.t-link--disabled", + "property": "color", + "kind": "render-property", + "value": "var(--td-link-primary-disabled-color, var(--td-brand-color-disabled, var(--td-primary-color-3, #b5c7ff)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "linkSuccessActiveColor", + "miniComponent": "link", + "cssName": "--td-link-success-active-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/link/link.less", + "selector": ".t-link--success.t-link--hover", + "property": "color", + "kind": "render-property", + "value": "var(--td-link-success-active-color, var(--td-success-color-active, var(--td-success-color-6, #008858)))" + }, + { + "file": "packages/components/link/link.less", + "selector": ".t-link--success.t-link--hover.t-link--underline::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-link-success-active-color, var(--td-success-color-active, var(--td-success-color-6, #008858)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "linkSuccessColor", + "miniComponent": "link", + "cssName": "--td-link-success-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/link/link.less", + "selector": ".t-link--success", + "property": "color", + "kind": "render-property", + "value": "var(--td-link-success-color, var(--td-success-color, var(--td-success-color-5, #2ba471)))" + }, + { + "file": "packages/components/link/link.less", + "selector": ".t-link--success.t-link--underline::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-link-success-color, var(--td-success-color, var(--td-success-color-5, #2ba471)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "linkSuccessDisabledColor", + "miniComponent": "link", + "cssName": "--td-link-success-disabled-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/link/link.less", + "selector": ".t-link--success.t-link--disabled", + "property": "color", + "kind": "render-property", + "value": "var(--td-link-success-disabled-color, var(--td-success-color-disabled, var(--td-success-color-3, #92dab2)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "linkWarningActiveColor", + "miniComponent": "link", + "cssName": "--td-link-warning-active-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/link/link.less", + "selector": ".t-link--warning.t-link--hover", + "property": "color", + "kind": "render-property", + "value": "var(--td-link-warning-active-color, var(--td-warning-color-active, var(--td-warning-color-6, #be5a00)))" + }, + { + "file": "packages/components/link/link.less", + "selector": ".t-link--warning.t-link--hover.t-link--underline::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-link-warning-active-color, var(--td-warning-color-active, var(--td-warning-color-6, #be5a00)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "linkWarningColor", + "miniComponent": "link", + "cssName": "--td-link-warning-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/link/link.less", + "selector": ".t-link--warning", + "property": "color", + "kind": "render-property", + "value": "var(--td-link-warning-color, var(--td-warning-color, var(--td-warning-color-5, #e37318)))" + }, + { + "file": "packages/components/link/link.less", + "selector": ".t-link--warning.t-link--underline::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-link-warning-color, var(--td-warning-color, var(--td-warning-color-5, #e37318)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "linkWarningDisabledColor", + "miniComponent": "link", + "cssName": "--td-link-warning-disabled-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/link/link.less", + "selector": ".t-link--warning.t-link--disabled", + "property": "color", + "kind": "render-property", + "value": "var(--td-link-warning-disabled-color, var(--td-warning-color-disabled, var(--td-warning-color-3, #ffb98c)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "loadingColor", + "miniComponent": "loading", + "cssName": "--td-loading-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/loading/loading.less", + "selector": ".t-loading__spinner", + "property": "color", + "kind": "render-property", + "value": "var(--td-loading-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + }, + { + "file": "packages/components/loading/loading.less", + "selector": ".t-loading__spinner--spinner .t-loading__dot::before", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-loading-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + }, + { + "file": "packages/components/loading/loading.less", + "selector": ".t-loading__spinner--dots .t-loading__dot", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-loading-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "loadingFullBgColor", + "miniComponent": "loading", + "cssName": "--td-loading-full-bg-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/loading/loading.less", + "selector": ".t-loading--fullscreen", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-loading-full-bg-color, rgba(255, 255, 255, 0.6))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "loadingTextColor", + "miniComponent": "loading", + "cssName": "--td-loading-text-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/loading/loading.less", + "selector": ".t-loading__text", + "property": "color", + "kind": "render-property", + "value": "var(--td-loading-text-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "loadingTextFont", + "miniComponent": "loading", + "cssName": "--td-loading-text-font", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/loading/loading.less", + "selector": ".t-loading__text", + "property": "font", + "kind": "render-property", + "value": "var(--td-loading-text-font, var(--td-font-body-small, 24rpx / 40rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + } + ], + "nonLessReferences": [ + { + "file": "packages/components/loading/_example/size/index.wxss", + "line": 2, + "text": "--td-loading-text-font: var(--td-font-body-large);" + }, + { + "file": "packages/components/loading/_example/size/index.wxss", + "line": 6, + "text": "--td-loading-text-font: var(--td-font-body-medium);" + } + ], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "loadingZIndex", + "miniComponent": "loading", + "cssName": "--td-loading-z-index", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/loading/loading.less", + "selector": ".t-loading--fullscreen", + "property": "z-index", + "kind": "render-property", + "value": "var(--td-loading-z-index, 3500)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "messageBgColor", + "miniComponent": "message-item", + "cssName": "--td-message-bg-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/message-item/message-item.less", + "selector": ".t-message", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-message-bg-color, var(--td-bg-color-container, var(--td-font-white-1, #ffffff)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "messageBorderRadius", + "miniComponent": "message-item", + "cssName": "--td-message-border-radius", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/message-item/message-item.less", + "selector": ".t-message", + "property": "border-radius", + "kind": "render-property", + "value": "var(--td-message-border-radius, var(--td-radius-default, 12rpx))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "messageBoxShadow", + "miniComponent": "message-item", + "cssName": "--td-message-box-shadow", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/message-item/message-item.less", + "selector": ".t-message", + "property": "box-shadow", + "kind": "render-property", + "value": "var(--td-message-box-shadow, var(--td-shadow-1, 0 1px 10px rgba(0, 0, 0, 0.05), 0 4px 5px rgba(0, 0, 0, 0.08), 0 2px 4px -1px rgba(0, 0, 0, 0.12)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "messageCloseIconColor", + "miniComponent": "message-item", + "cssName": "--td-message-close-icon-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/message-item/message-item.less", + "selector": ".t-message__icon--right", + "property": "color", + "kind": "render-property", + "value": "var(--td-message-close-icon-color, var(--td-text-color-placeholder, var(--td-font-gray-3, rgba(0, 0, 0, 0.4))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "messageContentColor", + "miniComponent": "message-item", + "cssName": "--td-message-content-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/message-item/message-item.less", + "selector": ".t-message__text", + "property": "color", + "kind": "render-property", + "value": "var(--td-message-content-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "messageErrorColor", + "miniComponent": "message-item", + "cssName": "--td-message-error-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/message-item/message-item.less", + "selector": ".t-message--error", + "property": "color", + "kind": "render-property", + "value": "var(--td-message-error-color, var(--td-error-color, var(--td-error-color-6, #d54941)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "messageInfoColor", + "miniComponent": "message-item", + "cssName": "--td-message-info-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/message-item/message-item.less", + "selector": ".t-message--info", + "property": "color", + "kind": "render-property", + "value": "var(--td-message-info-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "messageSuccessColor", + "miniComponent": "message-item", + "cssName": "--td-message-success-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/message-item/message-item.less", + "selector": ".t-message--success", + "property": "color", + "kind": "render-property", + "value": "var(--td-message-success-color, var(--td-success-color, var(--td-success-color-5, #2ba471)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "messageWarningColor", + "miniComponent": "message-item", + "cssName": "--td-message-warning-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/message-item/message-item.less", + "selector": ".t-message--warning", + "property": "color", + "kind": "render-property", + "value": "var(--td-message-warning-color, var(--td-warning-color, var(--td-warning-color-5, #e37318)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "navbarBackground", + "miniComponent": "navbar", + "cssName": "--td-navbar-background", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/navbar/navbar.less", + "selector": ".t-navbar__content", + "property": "background", + "kind": "render-property", + "value": "var(--td-navbar-background, var(--td-navbar-bg-color, var(--td-bg-color-container, var(--td-font-white-1, #ffffff))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "navbarBgColor", + "miniComponent": "navbar", + "cssName": "--td-navbar-bg-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/navbar/navbar.less", + "selector": ".t-navbar__content", + "property": "background", + "kind": "render-property", + "value": "var(--td-navbar-background, var(--td-navbar-bg-color, var(--td-bg-color-container, var(--td-font-white-1, #ffffff))))" + } + ], + "nonLessReferences": [ + { + "file": "packages/components/navbar/_example/custom-color/index.wxss", + "line": 3, + "text": "--td-navbar-bg-color: #0052d9;" + } + ], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "navbarCapsuleBorderColor", + "miniComponent": "navbar", + "cssName": "--td-navbar-capsule-border-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/navbar/navbar.less", + "selector": ".t-navbar__capsule::before", + "property": "border", + "kind": "render-property", + "value": "2rpx solid var(--td-navbar-capsule-border-color, var(--td-border-level-1-color, var(--td-gray-color-3, #e7e7e7)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "navbarCapsuleBorderRadius", + "miniComponent": "navbar", + "cssName": "--td-navbar-capsule-border-radius", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/navbar/navbar.less", + "selector": ".t-navbar__capsule::before", + "property": "border-radius", + "kind": "render-property", + "value": "calc(var(--td-navbar-capsule-border-radius, 16px) * 2)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "navbarCapsuleHeight", + "miniComponent": "navbar", + "cssName": "--td-navbar-capsule-height", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/navbar/navbar.less", + "selector": ".t-navbar__capsule", + "property": "height", + "kind": "render-property", + "value": "var(--td-navbar-capsule-height, 32px)" + } + ], + "nonLessReferences": [ + { + "file": "packages/components/navbar/navbar.ts", + "line": 113, + "text": "'--td-navbar-capsule-height': `${_menuRect.height}px`, // 胶囊高度" + } + ], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "navbarCapsuleWidth", + "miniComponent": "navbar", + "cssName": "--td-navbar-capsule-width", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/navbar/navbar.less", + "selector": ".t-navbar__capsule", + "property": "width", + "kind": "render-property", + "value": "var(--td-navbar-capsule-width, 88px)" + } + ], + "nonLessReferences": [ + { + "file": "packages/components/navbar/navbar.ts", + "line": 114, + "text": "'--td-navbar-capsule-width': `${_menuRect.width}px`, // 胶囊宽度" + } + ], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "navbarCenterLeft", + "miniComponent": "navbar", + "cssName": "--td-navbar-center-left", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/navbar/navbar.less", + "selector": ".t-navbar__center", + "property": "left", + "kind": "render-property", + "value": "var(--td-navbar-center-left, var(--td-navbar-right, 95px))" + } + ], + "nonLessReferences": [ + { + "file": "packages/components/navbar/navbar.ts", + "line": 130, + "text": "'--td-navbar-center-left': `${maxSpacing}px`, // 标题左侧距离" + } + ], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "navbarCenterWidth", + "miniComponent": "navbar", + "cssName": "--td-navbar-center-width", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/navbar/navbar.less", + "selector": ".t-navbar__center", + "property": "width", + "kind": "render-property", + "value": "var(--td-navbar-center-width, 187px)" + } + ], + "nonLessReferences": [ + { + "file": "packages/components/navbar/navbar.ts", + "line": 131, + "text": "'--td-navbar-center-width': `${Math.max(menuRect.left - maxSpacing, 0)}px`, // 标题宽度" + } + ], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "navbarColor", + "miniComponent": "navbar", + "cssName": "--td-navbar-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/navbar/navbar.less", + "selector": ".t-navbar__content", + "property": "color", + "kind": "render-property", + "value": "var(--td-navbar-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + } + ], + "nonLessReferences": [ + { + "file": "packages/components/navbar/_example/custom-color/index.wxss", + "line": 2, + "text": "--td-navbar-color: #fff;" + } + ], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "navbarHeight", + "miniComponent": "navbar", + "cssName": "--td-navbar-height", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/navbar/navbar.less", + "selector": ".t-navbar__placeholder", + "property": "height", + "kind": "render-property", + "value": "var(--td-navbar-height, 48px)" + }, + { + "file": "packages/components/navbar/navbar.less", + "selector": ".t-navbar__content", + "property": "height", + "kind": "render-property", + "value": "var(--td-navbar-height, 48px)" + }, + { + "file": "packages/components/navbar/navbar.less", + "selector": ".t-navbar__center", + "property": "height", + "kind": "render-property", + "value": "var(--td-navbar-height, 48px)" + } + ], + "nonLessReferences": [ + { + "file": "packages/components/navbar/navbar.ts", + "line": 115, + "text": "'--td-navbar-height': `${(_menuRect.top - systemInfo.statusBarHeight) * 2 + _menuRect.height}px`," + } + ], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "navbarLeftArrowSize", + "miniComponent": "navbar", + "cssName": "--td-navbar-left-arrow-size", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/navbar/navbar.less", + "selector": ".t-navbar__left-arrow", + "property": "font-size", + "kind": "render-property", + "value": "var(--td-navbar-left-arrow-size, 24px)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "navbarLeftMaxWidth", + "miniComponent": "navbar", + "cssName": "--td-navbar-left-max-width", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/navbar/navbar.less", + "selector": ".t-navbar__left", + "property": "max-width", + "kind": "render-property", + "value": "var(--td-navbar-left-max-width)" + } + ], + "nonLessReferences": [ + { + "file": "packages/components/navbar/navbar.ts", + "line": 112, + "text": "'--td-navbar-left-max-width': `${_menuRect.left}px`, // 左侧内容最大宽度" + } + ], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "navbarTitleFont", + "miniComponent": "navbar", + "cssName": "--td-navbar-title-font", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/navbar/navbar.less", + "selector": ".t-navbar__center-title", + "property": "font", + "kind": "render-property", + "value": "var(--td-navbar-title-font, var(--td-font-title-large, 600 36rpx / 52rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "noticeBarErrorBgColor", + "miniComponent": "notice-bar", + "cssName": "--td-notice-bar-error-bg-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/notice-bar/notice-bar.less", + "selector": ".t-notice-bar--error", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-notice-bar-error-bg-color, var(--td-error-color-1, #fff0ed))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "noticeBarErrorColor", + "miniComponent": "notice-bar", + "cssName": "--td-notice-bar-error-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/notice-bar/notice-bar.less", + "selector": ".t-notice-bar--error", + "property": "color", + "kind": "render-property", + "value": "var(--td-notice-bar-error-color, var(--td-error-color, var(--td-error-color-6, #d54941)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "noticeBarFontColor", + "miniComponent": "notice-bar", + "cssName": "--td-notice-bar-font-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/notice-bar/notice-bar.less", + "selector": ".t-notice-bar__content-wrap", + "property": "color", + "kind": "render-property", + "value": "var(--td-notice-bar-font-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "noticeBarInfoBgColor", + "miniComponent": "notice-bar", + "cssName": "--td-notice-bar-info-bg-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/notice-bar/notice-bar.less", + "selector": ".t-notice-bar--info", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-notice-bar-info-bg-color, var(--td-brand-color-light, var(--td-primary-color-1, #f2f3ff)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "noticeBarInfoColor", + "miniComponent": "notice-bar", + "cssName": "--td-notice-bar-info-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/notice-bar/notice-bar.less", + "selector": ".t-notice-bar--info", + "property": "color", + "kind": "render-property", + "value": "var(--td-notice-bar-info-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "noticeBarOperationFontColor", + "miniComponent": "notice-bar", + "cssName": "--td-notice-bar-operation-font-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/notice-bar/notice-bar.less", + "selector": ".t-notice-bar__operation", + "property": "color", + "kind": "render-property", + "value": "var(--td-notice-bar-operation-font-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "noticeBarSuccessBgColor", + "miniComponent": "notice-bar", + "cssName": "--td-notice-bar-success-bg-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/notice-bar/notice-bar.less", + "selector": ".t-notice-bar--success", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-notice-bar-success-bg-color, var(--td-success-color-1, #e3f9e9))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "noticeBarSuccessColor", + "miniComponent": "notice-bar", + "cssName": "--td-notice-bar-success-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/notice-bar/notice-bar.less", + "selector": ".t-notice-bar--success", + "property": "color", + "kind": "render-property", + "value": "var(--td-notice-bar-success-color, var(--td-success-color, var(--td-success-color-5, #2ba471)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "noticeBarSuffixIconColor", + "miniComponent": "notice-bar", + "cssName": "--td-notice-bar-suffix-icon-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/notice-bar/notice-bar.less", + "selector": ".t-notice-bar__suffix-icon", + "property": "color", + "kind": "render-property", + "value": "var(--td-notice-bar-suffix-icon-color, var(--td-text-color-placeholder, var(--td-font-gray-3, rgba(0, 0, 0, 0.4))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "noticeBarWarningBgColor", + "miniComponent": "notice-bar", + "cssName": "--td-notice-bar-warning-bg-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/notice-bar/notice-bar.less", + "selector": ".t-notice-bar--warning", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-notice-bar-warning-bg-color, var(--td-warning-color-1, #fff1e9))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "noticeBarWarningColor", + "miniComponent": "notice-bar", + "cssName": "--td-notice-bar-warning-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/notice-bar/notice-bar.less", + "selector": ".t-notice-bar--warning", + "property": "color", + "kind": "render-property", + "value": "var(--td-notice-bar-warning-color, var(--td-warning-color, var(--td-warning-color-5, #e37318)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "overlayBgColor", + "miniComponent": "overlay", + "cssName": "--td-overlay-bg-color", + "previousDecision": "outside-current-flutter-component-surface", + "compiledUses": [ + { + "file": "packages/components/overlay/overlay.less", + "selector": ".t-overlay", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-overlay-bg-color, var(--td-mask-active, rgba(0, 0, 0, 0.6)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "overlayTransitionDuration", + "miniComponent": "overlay", + "cssName": "--td-overlay-transition-duration", + "previousDecision": "outside-current-flutter-component-surface", + "compiledUses": [ + { + "file": "packages/components/overlay/overlay.less", + "selector": ".t-overlay", + "property": "transition-duration", + "kind": "render-property", + "value": "var(--td-overlay-transition-duration, 300ms)" + } + ], + "nonLessReferences": [ + { + "file": "packages/components/overlay/overlay.wxml", + "line": 6, + "text": "style=\"{{_._style(['--td-overlay-transition-duration:' + duration + 'ms', 'z-index:' + _zIndex, 'top:' + distanceTop + 'px', computedStyle, style, customStyle])}}\"" + } + ], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "pickerBgColor", + "miniComponent": "picker", + "cssName": "--td-picker-bg-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/picker/picker.less", + "selector": ".t-picker", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-picker-bg-color, var(--td-bg-color-container, var(--td-font-white-1, #ffffff)))" + }, + { + "file": "packages/components/picker/picker.less", + "selector": ".t-picker__mask--top", + "property": "background", + "kind": "render-property", + "value": "linear-gradient(180deg, var(--td-picker-bg-color, var(--td-bg-color-container, var(--td-font-white-1, #ffffff))) 0%, var(--td-picker-transparent-color) 100%)" + }, + { + "file": "packages/components/picker/picker.less", + "selector": ".t-picker__mask--bottom", + "property": "background", + "kind": "render-property", + "value": "linear-gradient(180deg, var(--td-picker-bg-color, var(--td-bg-color-container, var(--td-font-white-1, #ffffff))) 0%, var(--td-picker-transparent-color) 100%)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "pickerBorderRadius", + "miniComponent": "picker", + "cssName": "--td-picker-border-radius", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/picker/picker.less", + "selector": ".t-picker", + "property": "border-top-left-radius", + "kind": "render-property", + "value": "var(--td-picker-border-radius, var(--td-radius-extraLarge, 24rpx))" + }, + { + "file": "packages/components/picker/picker.less", + "selector": ".t-picker", + "property": "border-top-right-radius", + "kind": "render-property", + "value": "var(--td-picker-border-radius, var(--td-radius-extraLarge, 24rpx))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "pickerButtonFont", + "miniComponent": "picker", + "cssName": "--td-picker-button-font", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/picker/picker.less", + "selector": ".t-picker__cancel,\n.t-picker__confirm", + "property": "font", + "kind": "render-property", + "value": "var(--td-picker-button-font, var(--td-font-body-large, 32rpx / 48rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "pickerCancelColor", + "miniComponent": "picker", + "cssName": "--td-picker-cancel-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/picker/picker.less", + "selector": ".t-picker__cancel", + "property": "color", + "kind": "render-property", + "value": "var(--td-picker-cancel-color, var(--td-text-color-secondary, var(--td-font-gray-2, rgba(0, 0, 0, 0.6))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "pickerConfirmColor", + "miniComponent": "picker", + "cssName": "--td-picker-confirm-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/picker/picker.less", + "selector": ".t-picker__confirm", + "property": "color", + "kind": "render-property", + "value": "var(--td-picker-confirm-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "pickerIndicatorBgColor", + "miniComponent": "picker", + "cssName": "--td-picker-indicator-bg-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/picker/picker.less", + "selector": ".t-picker__indicator", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-picker-indicator-bg-color, var(--td-bg-color-secondarycontainer, var(--td-gray-color-1, #f3f3f3)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "pickerIndicatorBorderRadius", + "miniComponent": "picker", + "cssName": "--td-picker-indicator-border-radius", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/picker/picker.less", + "selector": ".t-picker__indicator", + "property": "border-radius", + "kind": "render-property", + "value": "var(--td-picker-indicator-border-radius, var(--td-radius-default, 12rpx))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "pickerItemActiveColor", + "miniComponent": "picker-item", + "cssName": "--td-picker-item-active-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/picker-item/picker-item.less", + "selector": ".t-picker-item__item--active", + "property": "color", + "kind": "render-property", + "value": "var(--td-picker-item-active-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "pickerItemColor", + "miniComponent": "picker-item", + "cssName": "--td-picker-item-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/picker-item/picker-item.less", + "selector": ".t-picker-item__item", + "property": "color", + "kind": "render-property", + "value": "var(--td-picker-item-color, var(--td-text-color-secondary, var(--td-font-gray-2, rgba(0, 0, 0, 0.6))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "pickerItemFontSize", + "miniComponent": "picker-item", + "cssName": "--td-picker-item-font-size", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/picker-item/picker-item.less", + "selector": ".t-picker-item__item", + "property": "font-size", + "kind": "render-property", + "value": "var(--td-picker-item-font-size, var(--td-font-size-m, 32rpx))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "pickerTitleColor", + "miniComponent": "picker", + "cssName": "--td-picker-title-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/picker/picker.less", + "selector": ".t-picker__title", + "property": "color", + "kind": "render-property", + "value": "var(--td-picker-title-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "pickerTitleFont", + "miniComponent": "picker", + "cssName": "--td-picker-title-font", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/picker/picker.less", + "selector": ".t-picker__title", + "property": "font", + "kind": "render-property", + "value": "var(--td-picker-title-font, var(--td-font-title-large, 600 36rpx / 52rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "pickerToolbarHeight", + "miniComponent": "picker", + "cssName": "--td-picker-toolbar-height", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/picker/picker.less", + "selector": ".t-picker__toolbar", + "property": "height", + "kind": "render-property", + "value": "var(--td-picker-toolbar-height, 116rpx)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "pickerTransparentColor", + "miniComponent": "picker", + "cssName": "--td-picker-transparent-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/picker/picker.less", + "selector": ".t-picker__mask--top", + "property": "background", + "kind": "render-property", + "value": "linear-gradient(180deg, var(--td-picker-bg-color, var(--td-bg-color-container, var(--td-font-white-1, #ffffff))) 0%, var(--td-picker-transparent-color) 100%)" + }, + { + "file": "packages/components/picker/picker.less", + "selector": ".t-picker__mask--bottom", + "property": "background", + "kind": "render-property", + "value": "linear-gradient(180deg, var(--td-picker-bg-color, var(--td-bg-color-container, var(--td-font-white-1, #ffffff))) 0%, var(--td-picker-transparent-color) 100%)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "popoverBrandBgColor", + "miniComponent": "popover", + "cssName": "--td-popover-brand-bg-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/popover/popover.less", + "selector": ".t-popover .t-popover--brand", + "property": "background", + "kind": "render-property", + "value": "var(--td-popover-brand-bg-color, var(--td-primary-color-1, #f2f3ff))" + }, + { + "file": "packages/components/popover/popover.less", + "selector": ".t-popover .t-popover--brand .t-popover__arrow", + "property": "color", + "kind": "render-property", + "value": "var(--td-popover-brand-bg-color, var(--td-primary-color-1, #f2f3ff))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "popoverBrandColor", + "miniComponent": "popover", + "cssName": "--td-popover-brand-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/popover/popover.less", + "selector": ".t-popover .t-popover--brand", + "property": "color", + "kind": "render-property", + "value": "var(--td-popover-brand-color, var(--td-primary-color-7, #0052d9))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "popoverDarkBgColor", + "miniComponent": "popover", + "cssName": "--td-popover-dark-bg-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/popover/popover.less", + "selector": ".t-popover .t-popover--dark", + "property": "background", + "kind": "render-property", + "value": "var(--td-popover-dark-bg-color, var(--td-font-gray-1, rgba(0, 0, 0, 0.9)))" + }, + { + "file": "packages/components/popover/popover.less", + "selector": ".t-popover .t-popover--dark .t-popover__arrow", + "property": "color", + "kind": "render-property", + "value": "var(--td-popover-dark-bg-color, var(--td-font-gray-1, rgba(0, 0, 0, 0.9)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "popoverDarkColor", + "miniComponent": "popover", + "cssName": "--td-popover-dark-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/popover/popover.less", + "selector": ".t-popover .t-popover--dark", + "property": "color", + "kind": "render-property", + "value": "var(--td-popover-dark-color, var(--td-text-color-anti, var(--td-font-white-1, #ffffff)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "popoverErrorBgColor", + "miniComponent": "popover", + "cssName": "--td-popover-error-bg-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/popover/popover.less", + "selector": ".t-popover .t-popover--error", + "property": "background", + "kind": "render-property", + "value": "var(--td-popover-error-bg-color, var(--td-error-color-1, #fff0ed))" + }, + { + "file": "packages/components/popover/popover.less", + "selector": ".t-popover .t-popover--error .t-popover__arrow", + "property": "color", + "kind": "render-property", + "value": "var(--td-popover-error-bg-color, var(--td-error-color-1, #fff0ed))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "popoverErrorColor", + "miniComponent": "popover", + "cssName": "--td-popover-error-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/popover/popover.less", + "selector": ".t-popover .t-popover--error", + "property": "color", + "kind": "render-property", + "value": "var(--td-popover-error-color, var(--td-error-color-6, #d54941))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "popoverLightBgColor", + "miniComponent": "popover", + "cssName": "--td-popover-light-bg-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/popover/popover.less", + "selector": ".t-popover .t-popover--light", + "property": "background", + "kind": "render-property", + "value": "var(--td-popover-light-bg-color, var(--td-bg-color-container, var(--td-font-white-1, #ffffff)))" + }, + { + "file": "packages/components/popover/popover.less", + "selector": ".t-popover .t-popover--light .t-popover__arrow", + "property": "color", + "kind": "render-property", + "value": "var(--td-popover-light-bg-color, var(--td-bg-color-container, var(--td-font-white-1, #ffffff)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "popoverLightColor", + "miniComponent": "popover", + "cssName": "--td-popover-light-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/popover/popover.less", + "selector": ".t-popover .t-popover--light", + "property": "color", + "kind": "render-property", + "value": "var(--td-popover-light-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "popoverPadding", + "miniComponent": "popover", + "cssName": "--td-popover-padding", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/popover/popover.less", + "selector": ".t-popover__content", + "property": "padding", + "kind": "render-property", + "value": "var(--td-popover-padding, var(--td-spacer-1, 24rpx))" + }, + { + "file": "packages/components/popover/popover.less", + "selector": ".t-popover.t-popover--placement-top-start .t-popover__arrow", + "property": "left", + "kind": "render-property", + "value": "var(--td-popover-padding, var(--td-spacer-1, 24rpx))" + }, + { + "file": "packages/components/popover/popover.less", + "selector": ".t-popover.t-popover--placement-top-end .t-popover__arrow", + "property": "right", + "kind": "render-property", + "value": "var(--td-popover-padding, var(--td-spacer-1, 24rpx))" + }, + { + "file": "packages/components/popover/popover.less", + "selector": ".t-popover.t-popover--placement-bottom-start .t-popover__arrow", + "property": "left", + "kind": "render-property", + "value": "var(--td-popover-padding, var(--td-spacer-1, 24rpx))" + }, + { + "file": "packages/components/popover/popover.less", + "selector": ".t-popover.t-popover--placement-bottom-end .t-popover__arrow", + "property": "right", + "kind": "render-property", + "value": "var(--td-popover-padding, var(--td-spacer-1, 24rpx))" + }, + { + "file": "packages/components/popover/popover.less", + "selector": ".t-popover.t-popover--placement-left-start .t-popover__arrow", + "property": "top", + "kind": "render-property", + "value": "var(--td-popover-padding, var(--td-spacer-1, 24rpx))" + }, + { + "file": "packages/components/popover/popover.less", + "selector": ".t-popover.t-popover--placement-left-end .t-popover__arrow", + "property": "bottom", + "kind": "render-property", + "value": "var(--td-popover-padding, var(--td-spacer-1, 24rpx))" + }, + { + "file": "packages/components/popover/popover.less", + "selector": ".t-popover.t-popover--placement-right-start .t-popover__arrow", + "property": "top", + "kind": "render-property", + "value": "var(--td-popover-padding, var(--td-spacer-1, 24rpx))" + }, + { + "file": "packages/components/popover/popover.less", + "selector": ".t-popover.t-popover--placement-right-end .t-popover__arrow", + "property": "bottom", + "kind": "render-property", + "value": "var(--td-popover-padding, var(--td-spacer-1, 24rpx))" + } + ], + "nonLessReferences": [ + { + "file": "packages/components/popover/_example/base/index.wxss", + "line": 23, + "text": "--td-popover-padding: 0;" + } + ], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "popoverSuccessBgColor", + "miniComponent": "popover", + "cssName": "--td-popover-success-bg-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/popover/popover.less", + "selector": ".t-popover .t-popover--success", + "property": "background", + "kind": "render-property", + "value": "var(--td-popover-success-bg-color, var(--td-success-color-1, #e3f9e9))" + }, + { + "file": "packages/components/popover/popover.less", + "selector": ".t-popover .t-popover--success .t-popover__arrow", + "property": "color", + "kind": "render-property", + "value": "var(--td-popover-success-bg-color, var(--td-success-color-1, #e3f9e9))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "popoverSuccessColor", + "miniComponent": "popover", + "cssName": "--td-popover-success-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/popover/popover.less", + "selector": ".t-popover .t-popover--success", + "property": "color", + "kind": "render-property", + "value": "var(--td-popover-success-color, var(--td-success-color-5, #2ba471))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "popoverWarningBgColor", + "miniComponent": "popover", + "cssName": "--td-popover-warning-bg-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/popover/popover.less", + "selector": ".t-popover .t-popover--warning", + "property": "background", + "kind": "render-property", + "value": "var(--td-popover-warning-bg-color, var(--td-warning-color-1, #fff1e9))" + }, + { + "file": "packages/components/popover/popover.less", + "selector": ".t-popover .t-popover--warning .t-popover__arrow", + "property": "color", + "kind": "render-property", + "value": "var(--td-popover-warning-bg-color, var(--td-warning-color-1, #fff1e9))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "popoverWarningColor", + "miniComponent": "popover", + "cssName": "--td-popover-warning-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/popover/popover.less", + "selector": ".t-popover .t-popover--warning", + "property": "color", + "kind": "render-property", + "value": "var(--td-popover-warning-color, var(--td-warning-color-5, #e37318))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "popupBgColor", + "miniComponent": "popup", + "cssName": "--td-popup-bg-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/popup/popup.less", + "selector": ".t-popup", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-popup-bg-color, var(--td-bg-color-container, var(--td-font-white-1, #ffffff)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "popupBorderRadius", + "miniComponent": "popup", + "cssName": "--td-popup-border-radius", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/popup/popup.less", + "selector": ".t-popup--top", + "property": "border-bottom-left-radius", + "kind": "render-property", + "value": "var(--td-popup-border-radius, var(--td-radius-extraLarge, 24rpx))" + }, + { + "file": "packages/components/popup/popup.less", + "selector": ".t-popup--top", + "property": "border-bottom-right-radius", + "kind": "render-property", + "value": "var(--td-popup-border-radius, var(--td-radius-extraLarge, 24rpx))" + }, + { + "file": "packages/components/popup/popup.less", + "selector": ".t-popup--bottom", + "property": "border-top-left-radius", + "kind": "render-property", + "value": "var(--td-popup-border-radius, var(--td-radius-extraLarge, 24rpx))" + }, + { + "file": "packages/components/popup/popup.less", + "selector": ".t-popup--bottom", + "property": "border-top-right-radius", + "kind": "render-property", + "value": "var(--td-popup-border-radius, var(--td-radius-extraLarge, 24rpx))" + }, + { + "file": "packages/components/popup/popup.less", + "selector": ".t-popup--center", + "property": "border-radius", + "kind": "render-property", + "value": "var(--td-popup-border-radius, var(--td-radius-extraLarge, 24rpx))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "popupCloseBtnColor", + "miniComponent": "popup", + "cssName": "--td-popup-close-btn-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/popup/popup.less", + "selector": ".t-popup__close", + "property": "color", + "kind": "render-property", + "value": "var(--td-popup-close-btn-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "popupDistanceTop", + "miniComponent": "popup", + "cssName": "--td-popup-distance-top", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/popup/popup.less", + "selector": ".t-popup", + "property": "max-height", + "kind": "render-property", + "value": "calc(100vh - var(--td-popup-distance-top, 0))" + } + ], + "nonLessReferences": [ + { + "file": "packages/components/popup/popup.wxs", + "line": 4, + "text": "zIndexStyle = zIndexStyle + 'top:' + distanceTop + 'px;' + '--td-popup-distance-top:' + distanceTop + 'px;';" + } + ], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "popupTransition", + "miniComponent": "popup", + "cssName": "--td-popup-transition", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/popup/popup.less", + "selector": ".t-popup", + "property": "transition", + "kind": "render-property", + "value": "var(--td-popup-transition, all 300ms ease)" + } + ], + "nonLessReferences": [ + { + "file": "packages/components/popup/popup.wxs", + "line": 7, + "text": "zIndexStyle = zIndexStyle + '--td-popup-transition:all ' + duration + 'ms ease;';" + } + ], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "progressCircleIconSize", + "miniComponent": "progress", + "cssName": "--td-progress-circle-icon-size", + "previousDecision": "pending", + "compiledUses": [], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "no-consumer-in-compiled-css-or-other-source", + "finalPaintVerified": false + }, + { + "name": "progressCircleInnerBgColor", + "miniComponent": "progress", + "cssName": "--td-progress-circle-inner-bg-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/progress/progress.less", + "selector": ".t-progress__canvas--circle .t-progress__canvas--inner", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-progress-circle-inner-bg-color, var(--td-bg-color-container, var(--td-font-white-1, #ffffff)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "progressCircleLabelFont", + "miniComponent": "progress", + "cssName": "--td-progress-circle-label-font", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/progress/progress.less", + "selector": ".t-progress__canvas--circle .t-progress__info", + "property": "font", + "kind": "render-property", + "value": "var(--td-progress-circle-label-font, var(--td-font-title-extraLarge, 600 40rpx / 56rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "progressCircleWidth", + "miniComponent": "progress", + "cssName": "--td-progress-circle-width", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/progress/progress.less", + "selector": ".t-progress__canvas--circle", + "property": "width", + "kind": "render-property", + "value": "var(--td-progress-circle-width, 224rpx)" + }, + { + "file": "packages/components/progress/progress.less", + "selector": ".t-progress__canvas--circle", + "property": "height", + "kind": "render-property", + "value": "var(--td-progress-circle-width, 224rpx)" + } + ], + "nonLessReferences": [ + { + "file": "packages/components/progress/progress.wxs", + "line": 64, + "text": "styles['--td-progress-circle-width'] = utils.addUnit(size);" + } + ], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "progressInnerBgColor", + "miniComponent": "progress", + "cssName": "--td-progress-inner-bg-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/progress/progress.less", + "selector": ".t-progress__inner", + "property": "background", + "kind": "render-property", + "value": "var(--td-progress-inner-bg-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + } + ], + "nonLessReferences": [ + { + "file": "packages/components/progress/progress.wxml", + "line": 79, + "text": "style=\"{{_this.getCircleStyle(size, heightBar)}}; background-image: conic-gradient(from var(--td-progress-circle-from), {{colorCircle || _this.STATUS_COLOR[status] || 'var(--td-progress-inner-bg-color)'}} {{computedProgress}}%, {{bgColorBar || 'var(--td-progress-track-bg-color)'}} 0%);\"" + } + ], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "progressLineStrokeWidth", + "miniComponent": "progress", + "cssName": "--td-progress-line-stroke-width", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/progress/progress.less", + "selector": ".t-progress__bar", + "property": "height", + "kind": "render-property", + "value": "var(--td-progress-line-stroke-width, 12rpx)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "progressStrokeCircleWidth", + "miniComponent": "progress", + "cssName": "--td-progress-stroke-circle-width", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/progress/progress.less", + "selector": ".t-progress__canvas--circle .t-progress__canvas--inner", + "property": "width", + "kind": "render-property", + "value": "calc(100% - var(--td-progress-stroke-circle-width, 12rpx)*2)" + }, + { + "file": "packages/components/progress/progress.less", + "selector": ".t-progress__canvas--circle .t-progress__canvas--inner", + "property": "height", + "kind": "render-property", + "value": "calc(100% - var(--td-progress-stroke-circle-width, 12rpx)*2)" + } + ], + "nonLessReferences": [ + { + "file": "packages/components/progress/progress.wxs", + "line": 60, + "text": "'--td-progress-stroke-circle-width': utils.addUnit(strokeWidth)," + } + ], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "progressStrokePlumpWidth", + "miniComponent": "progress", + "cssName": "--td-progress-stroke-plump-width", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/progress/progress.less", + "selector": ".t-progress--plump", + "property": "height", + "kind": "render-property", + "value": "var(--td-progress-stroke-plump-width, 40rpx)" + }, + { + "file": "packages/components/progress/progress.less", + "selector": ".t-progress--plump", + "property": "border-radius", + "kind": "render-property", + "value": "calc(var(--td-progress-stroke-plump-width, 40rpx) / 2)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "progressTrackBgColor", + "miniComponent": "progress", + "cssName": "--td-progress-track-bg-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/progress/progress.less", + "selector": ".t-progress__bar", + "property": "background", + "kind": "render-property", + "value": "var(--td-progress-track-bg-color, var(--td-bg-color-component, var(--td-gray-color-3, #e7e7e7)))" + } + ], + "nonLessReferences": [ + { + "file": "packages/components/progress/progress.wxml", + "line": 79, + "text": "style=\"{{_this.getCircleStyle(size, heightBar)}}; background-image: conic-gradient(from var(--td-progress-circle-from), {{colorCircle || _this.STATUS_COLOR[status] || 'var(--td-progress-inner-bg-color)'}} {{computedProgress}}%, {{bgColorBar || 'var(--td-progress-track-bg-color)'}} 0%);\"" + } + ], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "pullDownRefreshColor", + "miniComponent": "pull-down-refresh", + "cssName": "--td-pull-down-refresh-color", + "previousDecision": "fallback-widget-verified-visual-pending", + "compiledUses": [ + { + "file": "packages/components/pull-down-refresh/pull-down-refresh.less", + "selector": ".t-pull-down-refresh__tips", + "property": "color", + "kind": "render-property", + "value": "var(--td-pull-down-refresh-color, var(--td-text-color-placeholder, var(--td-font-gray-3, rgba(0, 0, 0, 0.4))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "radioBgColor", + "miniComponent": "radio", + "cssName": "--td-radio-bg-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/radio/radio.less", + "selector": ".t-radio", + "property": "background", + "kind": "render-property", + "value": "var(--td-radio-bg-color, var(--td-bg-color-container, var(--td-font-white-1, #ffffff)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "radioBorderColor", + "miniComponent": "radio", + "cssName": "--td-radio-border-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/radio/radio.less", + "selector": ".t-radio__border", + "property": "background", + "kind": "render-property", + "value": "var(--td-radio-border-color, var(--td-component-stroke, var(--td-gray-color-3, #e7e7e7)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "radioContentCheckedColor", + "miniComponent": "radio", + "cssName": "--td-radio-content-checked-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/radio/radio.less", + "selector": ".t-radio__description--checked", + "property": "color", + "kind": "render-property", + "value": "var(--td-radio-content-checked-color, var(--td-text-color-secondary, var(--td-font-gray-2, rgba(0, 0, 0, 0.6))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "radioContentColor", + "miniComponent": "radio", + "cssName": "--td-radio-content-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/radio/radio.less", + "selector": ".t-radio__description", + "property": "color", + "kind": "render-property", + "value": "var(--td-radio-content-color, var(--td-text-color-secondary, var(--td-font-gray-2, rgba(0, 0, 0, 0.6))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "radioContentDisabledColor", + "miniComponent": "radio", + "cssName": "--td-radio-content-disabled-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/radio/radio.less", + "selector": ".t-radio__description--disabled", + "property": "color", + "kind": "render-property", + "value": "var(--td-radio-content-disabled-color, var(--td-text-color-disabled, var(--td-font-gray-4, rgba(0, 0, 0, 0.26))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "radioContentFont", + "miniComponent": "radio", + "cssName": "--td-radio-content-font", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/radio/radio.less", + "selector": ".t-radio__description", + "property": "font", + "kind": "render-property", + "value": "var(--td-radio-content-font, var(--td-font-body-medium, 28rpx / 44rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "radioFont", + "miniComponent": "radio", + "cssName": "--td-radio-font", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/radio/radio.less", + "selector": ".t-radio__title", + "property": "font", + "kind": "render-property", + "value": "var(--td-radio-font, var(--td-font-body-large, 32rpx / 48rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "radioIconCheckedColor", + "miniComponent": "radio", + "cssName": "--td-radio-icon-checked-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/radio/radio.less", + "selector": ".t-radio__icon--checked", + "property": "color", + "kind": "render-property", + "value": "var(--td-radio-icon-checked-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + }, + { + "file": "packages/components/radio/radio.less", + "selector": ".t-radio__icon-line::before,\n.t-radio__icon-line::after", + "property": "background", + "kind": "render-property", + "value": "var(--td-radio-icon-checked-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + }, + { + "file": "packages/components/radio/radio.less", + "selector": ".t-radio__icon-dot", + "property": "border", + "kind": "render-property", + "value": "6rpx solid var(--td-radio-icon-checked-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + }, + { + "file": "packages/components/radio/radio.less", + "selector": ".t-radio__icon-dot::after", + "property": "background", + "kind": "render-property", + "value": "var(--td-radio-icon-checked-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "radioIconColor", + "miniComponent": "radio", + "cssName": "--td-radio-icon-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/radio/radio.less", + "selector": ".t-radio__icon", + "property": "color", + "kind": "render-property", + "value": "var(--td-radio-icon-color, var(--td-component-border, var(--td-gray-color-4, #dcdcdc)))" + }, + { + "file": "packages/components/radio/radio.less", + "selector": ".t-radio__icon-circle::after", + "property": "border", + "kind": "render-property", + "value": "3px solid var(--td-radio-icon-color, var(--td-component-border, var(--td-gray-color-4, #dcdcdc)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "radioIconDisabledBgColor", + "miniComponent": "radio", + "cssName": "--td-radio-icon-disabled-bg-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/radio/radio.less", + "selector": ".t-radio__icon-circle--disabled::after", + "property": "background", + "kind": "render-property", + "value": "var(--td-radio-icon-disabled-bg-color, var(--td-bg-color-component-disabled, var(--td-gray-color-2, #eeeeee)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "radioIconDisabledColor", + "miniComponent": "radio", + "cssName": "--td-radio-icon-disabled-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/radio/radio.less", + "selector": ".t-radio__icon--disabled", + "property": "color", + "kind": "render-property", + "value": "var(--td-radio-icon-disabled-color, var(--td-brand-color-disabled, var(--td-primary-color-3, #b5c7ff)))" + }, + { + "file": "packages/components/radio/radio.less", + "selector": ".t-radio__icon-line--disabled::before,\n.t-radio__icon-line--disabled::after", + "property": "background", + "kind": "render-property", + "value": "var(--td-radio-icon-disabled-color, var(--td-brand-color-disabled, var(--td-primary-color-3, #b5c7ff)))" + }, + { + "file": "packages/components/radio/radio.less", + "selector": ".t-radio__icon-dot--disabled", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-radio-icon-disabled-color, var(--td-brand-color-disabled, var(--td-primary-color-3, #b5c7ff)))" + }, + { + "file": "packages/components/radio/radio.less", + "selector": ".t-radio__icon-dot--disabled::after", + "property": "background", + "kind": "render-property", + "value": "var(--td-radio-icon-disabled-color, var(--td-brand-color-disabled, var(--td-primary-color-3, #b5c7ff)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "radioIconSize", + "miniComponent": "radio", + "cssName": "--td-radio-icon-size", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/radio/radio.less", + "selector": ".t-radio__icon", + "property": "margin-top", + "kind": "render-property", + "value": "calc((var(--td-radio-label-line-height, var(--td-line-height-title-medium, 48rpx)) - var(--td-radio-icon-size, 48rpx)) / 2)" + }, + { + "file": "packages/components/radio/radio.less", + "selector": ".t-radio__icon", + "property": "width", + "kind": "render-property", + "value": "var(--td-radio-icon-size, 48rpx)" + }, + { + "file": "packages/components/radio/radio.less", + "selector": ".t-radio__icon", + "property": "height", + "kind": "render-property", + "value": "var(--td-radio-icon-size, 48rpx)" + }, + { + "file": "packages/components/radio/radio.less", + "selector": ".t-radio__icon", + "property": "font-size", + "kind": "render-property", + "value": "var(--td-radio-icon-size, 48rpx)" + }, + { + "file": "packages/components/radio/radio.less", + "selector": ".t-radio__icon-circle", + "property": "width", + "kind": "render-property", + "value": "var(--td-radio-icon-size, 48rpx)" + }, + { + "file": "packages/components/radio/radio.less", + "selector": ".t-radio__icon-circle", + "property": "height", + "kind": "render-property", + "value": "var(--td-radio-icon-size, 48rpx)" + }, + { + "file": "packages/components/radio/radio.less", + "selector": ".t-radio__icon-dot", + "property": "width", + "kind": "render-property", + "value": "calc((var(--td-radio-icon-size, 48rpx) - 6rpx) * 2)" + }, + { + "file": "packages/components/radio/radio.less", + "selector": ".t-radio__icon-dot", + "property": "height", + "kind": "render-property", + "value": "calc((var(--td-radio-icon-size, 48rpx) - 6rpx) * 2)" + }, + { + "file": "packages/components/radio/radio.less", + "selector": ".t-radio__icon-dot::after", + "property": "width", + "kind": "render-property", + "value": "var(--td-radio-icon-size, 48rpx)" + }, + { + "file": "packages/components/radio/radio.less", + "selector": ".t-radio__icon-dot::after", + "property": "height", + "kind": "render-property", + "value": "var(--td-radio-icon-size, 48rpx)" + }, + { + "file": "packages/components/radio/radio.less", + "selector": ".t-radio__image", + "property": "line-height", + "kind": "render-property", + "value": "var(--td-radio-icon-size, 48rpx)" + }, + { + "file": "packages/components/radio/radio.less", + "selector": ".t-radio-icon__image", + "property": "height", + "kind": "render-property", + "value": "var(--td-radio-icon-size, 48rpx)" + }, + { + "file": "packages/components/radio/radio.less", + "selector": ".t-radio-icon__image", + "property": "width", + "kind": "render-property", + "value": "var(--td-radio-icon-size, 48rpx)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "radioLabelCheckedColor", + "miniComponent": "radio", + "cssName": "--td-radio-label-checked-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/radio/radio.less", + "selector": ".t-radio__title--checked", + "property": "color", + "kind": "render-property", + "value": "var(--td-radio-label-checked-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "radioLabelColor", + "miniComponent": "radio", + "cssName": "--td-radio-label-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/radio/radio.less", + "selector": ".t-radio__title", + "property": "color", + "kind": "render-property", + "value": "var(--td-radio-label-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "radioLabelDisabledColor", + "miniComponent": "radio", + "cssName": "--td-radio-label-disabled-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/radio/radio.less", + "selector": ".t-radio__title--disabled", + "property": "color", + "kind": "render-property", + "value": "var(--td-radio-label-disabled-color, var(--td-text-color-disabled, var(--td-font-gray-4, rgba(0, 0, 0, 0.26))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "radioLabelLineHeight", + "miniComponent": "radio", + "cssName": "--td-radio-label-line-height", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/radio/radio.less", + "selector": ".t-radio__icon", + "property": "margin-top", + "kind": "render-property", + "value": "calc((var(--td-radio-label-line-height, var(--td-line-height-title-medium, 48rpx)) - var(--td-radio-icon-size, 48rpx)) / 2)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "radioVerticalPadding", + "miniComponent": "radio", + "cssName": "--td-radio-vertical-padding", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/radio/radio.less", + "selector": ".t-radio--block", + "property": "padding", + "kind": "render-property", + "value": "var(--td-radio-vertical-padding, var(--td-spacer-2, 32rpx))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "rateIconScale", + "miniComponent": "rate", + "cssName": "--td-rate-icon-scale", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/rate/rate.less", + "selector": ".t-rate__icon--current", + "property": "transform", + "kind": "render-property", + "value": "scale(var(--td-rate-icon-scale, 1.33))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "rateSelectedColor", + "miniComponent": "rate", + "cssName": "--td-rate-selected-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/rate/rate.less", + "selector": ".t-rate__icon--selected", + "property": "color", + "kind": "render-property", + "value": "var(--td-rate-selected-color, var(--td-warning-color, var(--td-warning-color-5, #e37318)))" + }, + { + "file": "packages/components/rate/rate.less", + "selector": ".t-rate__icon--selected-half", + "property": "background", + "kind": "render-property", + "value": "linear-gradient(to right, var(--td-rate-selected-color, var(--td-warning-color, var(--td-warning-color-5, #e37318))) 0%, var(--td-rate-selected-color, var(--td-warning-color, var(--td-warning-color-5, #e37318))) 50%, var(--td-rate-unselected-color, var(--td-component-border, var(--td-gray-color-4, #dcdcdc))) 51%, var(--td-rate-unselected-color, var(--td-component-border, var(--td-gray-color-4, #dcdcdc))) 100%)" + } + ], + "nonLessReferences": [ + { + "file": "packages/components/rate/_example/color/index.wxss", + "line": 2, + "text": "--td-rate-selected-color: #f96102;" + }, + { + "file": "packages/components/rate/rate.wxs", + "line": 52, + "text": "return ';--td-rate-selected-color: ' + color[0] + '; --td-rate-unselected-color: ' + color[1];" + }, + { + "file": "packages/components/rate/rate.wxs", + "line": 56, + "text": "return ';--td-rate-selected-color: ' + color;" + } + ], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "rateTextActiveColor", + "miniComponent": "rate", + "cssName": "--td-rate-text-active-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/rate/rate.less", + "selector": ".t-rate__text--active", + "property": "color", + "kind": "render-property", + "value": "var(--td-rate-text-active-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "rateTextActiveFontWeight", + "miniComponent": "rate", + "cssName": "--td-rate-text-active-font-weight", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/rate/rate.less", + "selector": ".t-rate__text--active", + "property": "font-weight", + "kind": "render-property", + "value": "var(--td-rate-text-active-font-weight, 600)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "rateTextColor", + "miniComponent": "rate", + "cssName": "--td-rate-text-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/rate/rate.less", + "selector": ".t-rate__text", + "property": "color", + "kind": "render-property", + "value": "var(--td-rate-text-color, var(--td-text-color-disabled, var(--td-font-gray-4, rgba(0, 0, 0, 0.26))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "rateTextFontSize", + "miniComponent": "rate", + "cssName": "--td-rate-text-font-size", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/rate/rate.less", + "selector": ".t-rate__text", + "property": "font-size", + "kind": "render-property", + "value": "var(--td-rate-text-font-size, var(--td-font-size-m, 32rpx))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "rateUnselectedColor", + "miniComponent": "rate", + "cssName": "--td-rate-unselected-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/rate/rate.less", + "selector": ".t-rate__icon--selected-half", + "property": "background", + "kind": "render-property", + "value": "linear-gradient(to right, var(--td-rate-selected-color, var(--td-warning-color, var(--td-warning-color-5, #e37318))) 0%, var(--td-rate-selected-color, var(--td-warning-color, var(--td-warning-color-5, #e37318))) 50%, var(--td-rate-unselected-color, var(--td-component-border, var(--td-gray-color-4, #dcdcdc))) 51%, var(--td-rate-unselected-color, var(--td-component-border, var(--td-gray-color-4, #dcdcdc))) 100%)" + }, + { + "file": "packages/components/rate/rate.less", + "selector": ".t-rate__icon--unselected", + "property": "color", + "kind": "render-property", + "value": "var(--td-rate-unselected-color, var(--td-component-border, var(--td-gray-color-4, #dcdcdc)))" + } + ], + "nonLessReferences": [ + { + "file": "packages/components/rate/_example/color/index.wxss", + "line": 3, + "text": "--td-rate-unselected-color: #bbbbbb;" + }, + { + "file": "packages/components/rate/rate.wxs", + "line": 52, + "text": "return ';--td-rate-selected-color: ' + color[0] + '; --td-rate-unselected-color: ' + color[1];" + } + ], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "resultDescriptionColor", + "miniComponent": "result", + "cssName": "--td-result-description-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/result/result.less", + "selector": ".t-result__description", + "property": "color", + "kind": "render-property", + "value": "var(--td-result-description-color, var(--td-text-color-secondary, var(--td-font-gray-2, rgba(0, 0, 0, 0.6))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "resultDescriptionFont", + "miniComponent": "result", + "cssName": "--td-result-description-font", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/result/result.less", + "selector": ".t-result__description", + "property": "font", + "kind": "render-property", + "value": "var(--td-result-description-font, var(--td-font-body-medium, 28rpx / 44rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "resultDescriptionMarginTop", + "miniComponent": "result", + "cssName": "--td-result-description-margin-top", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/result/result.less", + "selector": ".t-result__title + .t-result__description:not(:empty)", + "property": "margin-top", + "kind": "render-property", + "value": "var(--td-result-description-margin-top, var(--td-spacer, 16rpx))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "resultIconDefaultColor", + "miniComponent": "result", + "cssName": "--td-result-icon-default-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/result/result.less", + "selector": ".t-result--theme-default", + "property": "color", + "kind": "render-property", + "value": "var(--td-result-icon-default-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "resultIconErrorColor", + "miniComponent": "result", + "cssName": "--td-result-icon-error-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/result/result.less", + "selector": ".t-result--theme-error", + "property": "color", + "kind": "render-property", + "value": "var(--td-result-icon-error-color, var(--td-error-color, var(--td-error-color-6, #d54941)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "resultIconSuccessColor", + "miniComponent": "result", + "cssName": "--td-result-icon-success-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/result/result.less", + "selector": ".t-result--theme-success", + "property": "color", + "kind": "render-property", + "value": "var(--td-result-icon-success-color, var(--td-success-color, var(--td-success-color-5, #2ba471)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "resultIconWarningColor", + "miniComponent": "result", + "cssName": "--td-result-icon-warning-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/result/result.less", + "selector": ".t-result--theme-warning", + "property": "color", + "kind": "render-property", + "value": "var(--td-result-icon-warning-color, var(--td-warning-color, var(--td-warning-color-5, #e37318)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "resultTitleColor", + "miniComponent": "result", + "cssName": "--td-result-title-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/result/result.less", + "selector": ".t-result__title", + "property": "color", + "kind": "render-property", + "value": "var(--td-result-title-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "resultTitleFont", + "miniComponent": "result", + "cssName": "--td-result-title-font", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/result/result.less", + "selector": ".t-result__title", + "property": "font", + "kind": "render-property", + "value": "var(--td-result-title-font, var(--td-font-title-extraLarge, 600 40rpx / 56rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "resultTitleMarginTop", + "miniComponent": "result", + "cssName": "--td-result-title-margin-top", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/result/result.less", + "selector": ".t-result__thumb:not(:empty) + .t-result__title:not(:empty)", + "property": "margin-top", + "kind": "render-property", + "value": "var(--td-result-title-margin-top, var(--td-spacer-1, 24rpx))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "searchActionColor", + "miniComponent": "search", + "cssName": "--td-search-action-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/search/search.less", + "selector": ".t-search__search-action", + "property": "color", + "kind": "render-property", + "value": "var(--td-search-action-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "searchBgColor", + "miniComponent": "search", + "cssName": "--td-search-bg-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/search/search.less", + "selector": ".t-search__input-box", + "property": "border", + "kind": "render-property", + "value": "2rpx solid var(--td-search-bg-color, var(--td-bg-color-secondarycontainer, var(--td-gray-color-1, #f3f3f3)))" + }, + { + "file": "packages/components/search/search.less", + "selector": ".t-search__input-box", + "property": "background", + "kind": "render-property", + "value": "var(--td-search-bg-color, var(--td-bg-color-secondarycontainer, var(--td-gray-color-1, #f3f3f3)))" + }, + { + "file": "packages/components/search/search.less", + "selector": ".t-search__input-box.t-is-focused", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-search-bg-color, var(--td-bg-color-secondarycontainer, var(--td-gray-color-1, #f3f3f3)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "searchClearIconColor", + "miniComponent": "search", + "cssName": "--td-search-clear-icon-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/search/search.less", + "selector": ".t-search__clear", + "property": "color", + "kind": "render-property", + "value": "var(--td-search-clear-icon-color, var(--td-text-color-placeholder, var(--td-font-gray-3, rgba(0, 0, 0, 0.4))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "searchClearIconSize", + "miniComponent": "search", + "cssName": "--td-search-clear-icon-size", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/search/search.less", + "selector": ".t-search__clear", + "property": "font-size", + "kind": "render-property", + "value": "var(--td-search-clear-icon-size, 48rpx)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "searchDisabledTextColor", + "miniComponent": "search", + "cssName": "--td-search-disabled-text-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/search/search.less", + "selector": ".t-search__input-box .t-input--disabled", + "property": "color", + "kind": "render-property", + "value": "var(--td-search-disabled-text-color, var(--td-text-color-disabled, var(--td-font-gray-4, rgba(0, 0, 0, 0.26))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "searchFont", + "miniComponent": "search", + "cssName": "--td-search-font", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/search/search.less", + "selector": ".t-search__input-box .t-input__keyword", + "property": "font", + "kind": "render-property", + "value": "var(--td-search-font, var(--td-font-body-large, 32rpx / 48rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + }, + { + "file": "packages/components/search/search.less", + "selector": ".t-search__search-action", + "property": "font", + "kind": "render-property", + "value": "var(--td-search-font, var(--td-font-body-large, 32rpx / 48rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + } + ], + "nonLessReferences": [ + { + "file": "packages/components/navbar/_example/search/index.wxss", + "line": 3, + "text": "--td-search-font: var(--td-font-body-medium);" + } + ], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "searchHeight", + "miniComponent": "search", + "cssName": "--td-search-height", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/search/search.less", + "selector": ".t-search__input-box", + "property": "height", + "kind": "render-property", + "value": "var(--td-search-height, 80rpx)" + }, + { + "file": "packages/components/search/search.less", + "selector": ".t-search__input-box--round", + "property": "border-radius", + "kind": "render-property", + "value": "calc(var(--td-search-height, 80rpx) / 2)" + } + ], + "nonLessReferences": [ + { + "file": "packages/components/navbar/_example/search/index.wxss", + "line": 2, + "text": "--td-search-height: 32px;" + } + ], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "searchIconColor", + "miniComponent": "search", + "cssName": "--td-search-icon-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/search/search.less", + "selector": ".t-search__input-box .t-icon", + "property": "color", + "kind": "render-property", + "value": "var(--td-search-icon-color, var(--td-text-color-placeholder, var(--td-font-gray-3, rgba(0, 0, 0, 0.4))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "searchIconSize", + "miniComponent": "search", + "cssName": "--td-search-icon-size", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/search/search.less", + "selector": ".t-search__input-box .t-icon", + "property": "font-size", + "kind": "render-property", + "value": "var(--td-search-icon-size, 48rpx)" + } + ], + "nonLessReferences": [ + { + "file": "packages/components/navbar/_example/search/index.wxss", + "line": 4, + "text": "--td-search-icon-size: 40rpx;" + } + ], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "searchLabelColor", + "miniComponent": "search", + "cssName": "--td-search-label-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/search/search.less", + "selector": ".t-search__label", + "property": "color", + "kind": "render-property", + "value": "var(--td-search-label-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "searchPadding", + "miniComponent": "search", + "cssName": "--td-search-padding", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/search/search.less", + "selector": ".t-search__input-box", + "property": "padding", + "kind": "render-property", + "value": "var(--td-search-padding, var(--td-spacer, 16rpx) var(--td-spacer-1, 24rpx))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "searchPlaceholderColor", + "miniComponent": "search", + "cssName": "--td-search-placeholder-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/search/search.less", + "selector": ".t-search__placeholder", + "property": "color", + "kind": "render-property", + "value": "var(--td-search-placeholder-color, var(--td-text-color-placeholder, var(--td-font-gray-3, rgba(0, 0, 0, 0.4))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "searchResultHighLightColor", + "miniComponent": "search", + "cssName": "--td-search-result-high-light-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/search/search.less", + "selector": ".t-search__result-item--highLight", + "property": "color", + "kind": "render-property", + "value": "var(--td-search-result-high-light-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "searchSquareRadius", + "miniComponent": "search", + "cssName": "--td-search-square-radius", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/search/search.less", + "selector": ".t-search__input-box--square", + "property": "border-radius", + "kind": "render-property", + "value": "var(--td-search-square-radius, var(--td-radius-default, 12rpx))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "searchTextColor", + "miniComponent": "search", + "cssName": "--td-search-text-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/search/search.less", + "selector": ".t-search__input-box .t-input__keyword", + "property": "color", + "kind": "render-property", + "value": "var(--td-search-text-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "segmentedBgColor", + "miniComponent": "segmented", + "cssName": "--td-segmented-bg-color", + "previousDecision": "outside-current-flutter-component-surface", + "compiledUses": [ + { + "file": "packages/components/segmented/segmented.less", + "selector": ".t-segmented", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-segmented-bg-color, var(--td-bg-color-component-disabled, var(--td-gray-color-2, #eeeeee)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "segmentedItemActiveBg", + "miniComponent": "segmented", + "cssName": "--td-segmented-item-active-bg", + "previousDecision": "outside-current-flutter-component-surface", + "compiledUses": [ + { + "file": "packages/components/segmented/segmented.less", + "selector": ".t-segmented__thumb", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-segmented-item-active-bg, var(--td-bg-color-container, var(--td-font-white-1, #ffffff)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "segmentedItemActiveColor", + "miniComponent": "segmented", + "cssName": "--td-segmented-item-active-color", + "previousDecision": "outside-current-flutter-component-surface", + "compiledUses": [ + { + "file": "packages/components/segmented/segmented.less", + "selector": ".t-segmented__item--active", + "property": "color", + "kind": "render-property", + "value": "var(--td-segmented-item-active-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "segmentedItemColor", + "miniComponent": "segmented", + "cssName": "--td-segmented-item-color", + "previousDecision": "outside-current-flutter-component-surface", + "compiledUses": [ + { + "file": "packages/components/segmented/segmented.less", + "selector": ".t-segmented__item", + "property": "color", + "kind": "render-property", + "value": "var(--td-segmented-item-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "segmentedItemDisabledColor", + "miniComponent": "segmented", + "cssName": "--td-segmented-item-disabled-color", + "previousDecision": "outside-current-flutter-component-surface", + "compiledUses": [ + { + "file": "packages/components/segmented/segmented.less", + "selector": ".t-segmented__item--disabled", + "property": "color", + "kind": "render-property", + "value": "var(--td-segmented-item-disabled-color, var(--td-text-color-disabled, var(--td-font-gray-4, rgba(0, 0, 0, 0.26))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "segmentedItemLabelFont", + "miniComponent": "segmented", + "cssName": "--td-segmented-item-label-font", + "previousDecision": "outside-current-flutter-component-surface", + "compiledUses": [ + { + "file": "packages/components/segmented/segmented.less", + "selector": ".t-segmented__item", + "property": "font", + "kind": "render-property", + "value": "var(--td-segmented-item-label-font, var(--td-font-body-medium, 28rpx / 44rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "segmentedTransition", + "miniComponent": "segmented", + "cssName": "--td-segmented-transition", + "previousDecision": "outside-current-flutter-component-surface", + "compiledUses": [ + { + "file": "packages/components/segmented/segmented.less", + "selector": ".t-segmented__thumb", + "property": "transition", + "kind": "render-property", + "value": "var(--td-segmented-transition, all var(--td-anim-duration-base, 0.2s) var(--td-anim-time-fn-easing, cubic-bezier(0.38, 0, 0.24, 1)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "sideBarActiveColor", + "miniComponent": "side-bar-item", + "cssName": "--td-side-bar-active-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/side-bar-item/side-bar-item.less", + "selector": ".t-side-bar-item--active", + "property": "color", + "kind": "render-property", + "value": "var(--td-side-bar-active-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + }, + { + "file": "packages/components/side-bar-item/side-bar-item.less", + "selector": ".t-side-bar-item--active", + "property": "--td-badge-content-text-color", + "kind": "custom-property-forward", + "value": "var(--td-side-bar-active-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + }, + { + "file": "packages/components/side-bar-item/side-bar-item.less", + "selector": ".t-side-bar-item__line", + "property": "background", + "kind": "render-property", + "value": "var(--td-side-bar-active-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + } + ], + "nonLessReferences": [ + { + "file": "packages/components/side-bar/_example/custom/index.wxss", + "line": 53, + "text": "--td-side-bar-active-color: green;" + } + ], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "sideBarBgColor", + "miniComponent": "side-bar", + "cssName": "--td-side-bar-bg-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/side-bar/side-bar.less", + "selector": ".t-side-bar__padding", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-side-bar-bg-color, var(--td-bg-color-secondarycontainer, var(--td-gray-color-1, #f3f3f3)))" + }, + { + "file": "packages/components/side-bar-item/side-bar-item.less", + "selector": ".t-side-bar-item", + "property": "background", + "kind": "render-property", + "value": "var(--td-side-bar-bg-color, var(--td-bg-color-secondarycontainer, var(--td-gray-color-1, #f3f3f3)))" + }, + { + "file": "packages/components/side-bar-item/side-bar-item.less", + "selector": ".t-side-bar-item__prefix::after,\n.t-side-bar-item__suffix::after", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-side-bar-bg-color, var(--td-bg-color-secondarycontainer, var(--td-gray-color-1, #f3f3f3)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "sideBarBorderRadius", + "miniComponent": "side-bar-item", + "cssName": "--td-side-bar-border-radius", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/side-bar-item/side-bar-item.less", + "selector": ".t-side-bar-item__prefix,\n.t-side-bar-item__suffix", + "property": "height", + "kind": "render-property", + "value": "calc(var(--td-side-bar-border-radius, var(--td-radius-large, 18rpx)) * 2)" + }, + { + "file": "packages/components/side-bar-item/side-bar-item.less", + "selector": ".t-side-bar-item__prefix", + "property": "top", + "kind": "render-property", + "value": "calc(var(--td-side-bar-border-radius, var(--td-radius-large, 18rpx)) * -2)" + }, + { + "file": "packages/components/side-bar-item/side-bar-item.less", + "selector": ".t-side-bar-item__prefix::after", + "property": "border-bottom-right-radius", + "kind": "render-property", + "value": "var(--td-side-bar-border-radius, var(--td-radius-large, 18rpx))" + }, + { + "file": "packages/components/side-bar-item/side-bar-item.less", + "selector": ".t-side-bar-item__suffix", + "property": "bottom", + "kind": "render-property", + "value": "calc(var(--td-side-bar-border-radius, var(--td-radius-large, 18rpx)) * -2)" + }, + { + "file": "packages/components/side-bar-item/side-bar-item.less", + "selector": ".t-side-bar-item__suffix::after", + "property": "border-top-right-radius", + "kind": "render-property", + "value": "var(--td-side-bar-border-radius, var(--td-radius-large, 18rpx))" + } + ], + "nonLessReferences": [ + { + "file": "packages/components/side-bar/_example/custom/index.wxss", + "line": 52, + "text": "--td-side-bar-border-radius: 6px;" + } + ], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "sideBarColor", + "miniComponent": "side-bar-item", + "cssName": "--td-side-bar-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/side-bar-item/side-bar-item.less", + "selector": ".t-side-bar-item", + "property": "color", + "kind": "render-property", + "value": "var(--td-side-bar-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "sideBarDisabledColor", + "miniComponent": "side-bar-item", + "cssName": "--td-side-bar-disabled-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/side-bar-item/side-bar-item.less", + "selector": ".t-side-bar-item--disabled", + "property": "color", + "kind": "render-property", + "value": "var(--td-side-bar-disabled-color, var(--td-text-color-disabled, var(--td-font-gray-4, rgba(0, 0, 0, 0.26))))" + }, + { + "file": "packages/components/side-bar-item/side-bar-item.less", + "selector": ".t-side-bar-item--disabled", + "property": "--td-badge-content-text-color", + "kind": "custom-property-forward", + "value": "var(--td-side-bar-disabled-color, var(--td-text-color-disabled, var(--td-font-gray-4, rgba(0, 0, 0, 0.26))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "sideBarFont", + "miniComponent": "side-bar-item", + "cssName": "--td-side-bar-font", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/side-bar-item/side-bar-item.less", + "selector": ".t-side-bar-item", + "property": "font", + "kind": "render-property", + "value": "var(--td-side-bar-font, var(--td-font-body-large, 32rpx / 48rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "sideBarHeight", + "miniComponent": "side-bar", + "cssName": "--td-side-bar-height", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/side-bar/side-bar.less", + "selector": ".t-side-bar", + "property": "height", + "kind": "render-property", + "value": "var(--td-side-bar-height, 100%)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "sideBarIconSize", + "miniComponent": "side-bar-item", + "cssName": "--td-side-bar-icon-size", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/side-bar-item/side-bar-item.less", + "selector": ".t-side-bar-item__icon", + "property": "font-size", + "kind": "render-property", + "value": "var(--td-side-bar-icon-size, 40rpx)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "sideBarItemHeight", + "miniComponent": "side-bar-item", + "cssName": "--td-side-bar-item-height", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/side-bar-item/side-bar-item.less", + "selector": ".t-side-bar-item", + "property": "min-height", + "kind": "render-property", + "value": "var(--td-side-bar-item-height, auto)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "sideBarWidth", + "miniComponent": "side-bar", + "cssName": "--td-side-bar-width", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/side-bar/side-bar.less", + "selector": ".t-side-bar", + "property": "width", + "kind": "render-property", + "value": "var(--td-side-bar-width, 206rpx)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "skeletonAnimationFlashed", + "miniComponent": "skeleton", + "cssName": "--td-skeleton-animation-flashed", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/skeleton/skeleton.less", + "selector": "50%", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-skeleton-animation-flashed, rgba(230, 230, 230, 0.3))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "skeletonAnimationGradient", + "miniComponent": "skeleton", + "cssName": "--td-skeleton-animation-gradient", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/skeleton/skeleton.less", + "selector": ".t-skeleton--animation-gradient::after", + "property": "background", + "kind": "render-property", + "value": "linear-gradient(90deg, rgba(255, 255, 255, 0), var(--td-skeleton-animation-gradient, rgba(0, 0, 0, 0.04)), rgba(255, 255, 255, 0))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "skeletonBgColor", + "miniComponent": "skeleton", + "cssName": "--td-skeleton-bg-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/skeleton/skeleton.less", + "selector": ".t-skeleton__col", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-skeleton-bg-color, var(--td-bg-color-secondarycontainer, var(--td-gray-color-1, #f3f3f3)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "skeletonCircleBorderRadius", + "miniComponent": "skeleton", + "cssName": "--td-skeleton-circle-border-radius", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/skeleton/skeleton.less", + "selector": ".t-skeleton--type-circle", + "property": "border-radius", + "kind": "render-property", + "value": "var(--td-skeleton-circle-border-radius, var(--td-skeleton-circle-border-radius, var(--td-radius-circle, 50%)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "skeletonCircleHeight", + "miniComponent": "skeleton", + "cssName": "--td-skeleton-circle-height", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/skeleton/skeleton.less", + "selector": ".t-skeleton--type-circle", + "property": "width", + "kind": "render-property", + "value": "var(--td-skeleton-circle-height, 96rpx)" + }, + { + "file": "packages/components/skeleton/skeleton.less", + "selector": ".t-skeleton--type-circle", + "property": "height", + "kind": "render-property", + "value": "var(--td-skeleton-circle-height, 96rpx)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "skeletonRectBorderRadius", + "miniComponent": "skeleton", + "cssName": "--td-skeleton-rect-border-radius", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/skeleton/skeleton.less", + "selector": ".t-skeleton--type-rect", + "property": "border-radius", + "kind": "render-property", + "value": "var(--td-skeleton-rect-border-radius, var(--td-radius-default, 12rpx))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "skeletonRectHeight", + "miniComponent": "skeleton", + "cssName": "--td-skeleton-rect-height", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/skeleton/skeleton.less", + "selector": ".t-skeleton--type-rect", + "property": "height", + "kind": "render-property", + "value": "var(--td-skeleton-rect-height, 32rpx)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "skeletonRowSpacing", + "miniComponent": "skeleton", + "cssName": "--td-skeleton-row-spacing", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/skeleton/skeleton.less", + "selector": ".t-skeleton__row", + "property": "margin-bottom", + "kind": "render-property", + "value": "var(--td-skeleton-row-spacing, var(--td-spacer-2, 32rpx))" + } + ], + "nonLessReferences": [ + { + "file": "packages/components/skeleton/_example/grid/index.wxss", + "line": 2, + "text": "--td-skeleton-row-spacing: 20rpx;" + } + ], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "skeletonTextBorderRadius", + "miniComponent": "skeleton", + "cssName": "--td-skeleton-text-border-radius", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/skeleton/skeleton.less", + "selector": ".t-skeleton--type-text", + "property": "border-radius", + "kind": "render-property", + "value": "var(--td-skeleton-text-border-radius, var(--td-radius-small, 6rpx))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "skeletonTextHeight", + "miniComponent": "skeleton", + "cssName": "--td-skeleton-text-height", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/skeleton/skeleton.less", + "selector": ".t-skeleton--type-text", + "property": "height", + "kind": "render-property", + "value": "var(--td-skeleton-text-height, 32rpx)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "sliderActiveColor", + "miniComponent": "slider", + "cssName": "--td-slider-active-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/slider/slider.less", + "selector": ".t-slider__line", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-slider-active-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + }, + { + "file": "packages/components/slider/slider.less", + "selector": ".t-slider__scale-item--active", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-slider-active-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "sliderBarHeight", + "miniComponent": "slider", + "cssName": "--td-slider-bar-height", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/slider/slider.less", + "selector": ".t-slider__line", + "property": "height", + "kind": "render-property", + "value": "var(--td-slider-bar-height, 8rpx)" + }, + { + "file": "packages/components/slider/slider.less", + "selector": ".t-slider__line", + "property": "border-radius", + "kind": "render-property", + "value": "calc(var(--td-slider-bar-height, 8rpx) / 2)" + }, + { + "file": "packages/components/slider/slider.less", + "selector": ".t-slider__bar", + "property": "height", + "kind": "render-property", + "value": "var(--td-slider-bar-height, 8rpx)" + }, + { + "file": "packages/components/slider/slider.less", + "selector": ".t-slider__bar", + "property": "border-radius", + "kind": "render-property", + "value": "calc(var(--td-slider-bar-height, 8rpx) / 2)" + }, + { + "file": "packages/components/slider/slider.less", + "selector": ".t-slider__scale-item", + "property": "width", + "kind": "render-property", + "value": "var(--td-slider-bar-height, 8rpx)" + }, + { + "file": "packages/components/slider/slider.less", + "selector": ".t-slider--vertical", + "property": "height", + "kind": "render-property", + "value": "var(--td-slider-bar-height, 8rpx)" + } + ], + "nonLessReferences": [ + { + "file": "packages/components/slider/props.ts", + "line": 64, + "text": "/** 是否是垂直的滑块(渲染垂直滑块时,默认高度为400rpx,可通过修改`--td-slider-bar-height`来自定义高度) */" + }, + { + "file": "packages/components/slider/type.ts", + "line": 96, + "text": "* 是否是垂直的滑块(渲染垂直滑块时,默认高度为400rpx,可通过修改`--td-slider-bar-height`来自定义高度)" + } + ], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "sliderBarWidth", + "miniComponent": "slider", + "cssName": "--td-slider-bar-width", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/slider/slider.less", + "selector": ".t-slider--vertical .t-slider__bar", + "property": "width", + "kind": "render-property", + "value": "var(--td-slider-bar-width, 8rpx)" + }, + { + "file": "packages/components/slider/slider.less", + "selector": ".t-slider--vertical .t-slider__line", + "property": "border-radius", + "kind": "render-property", + "value": "calc(var(--td-slider-bar-width, 8rpx) / 2)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "sliderCapsuleBarColor", + "miniComponent": "slider", + "cssName": "--td-slider-capsule-bar-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/slider/slider.less", + "selector": ".t-slider__bar--capsule", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-slider-capsule-bar-color, var(--td-bg-color-component, var(--td-gray-color-3, #e7e7e7)))" + }, + { + "file": "packages/components/slider/slider.less", + "selector": ".t-slider__bar--capsule", + "property": "border", + "kind": "render-property", + "value": "6rpx solid var(--td-slider-capsule-bar-color, var(--td-bg-color-component, var(--td-gray-color-3, #e7e7e7)))" + }, + { + "file": "packages/components/slider/slider.less", + "selector": ".t-slider__scale-item--capsule", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-slider-capsule-bar-color, var(--td-bg-color-component, var(--td-gray-color-3, #e7e7e7)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "sliderCapsuleBarHeihgt", + "miniComponent": "slider", + "cssName": "--td-slider-capsule-bar-heihgt", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/slider/slider.less", + "selector": ".t-slider__bar--capsule", + "property": "height", + "kind": "render-property", + "value": "var(--td-slider-capsule-bar-heihgt, 48rpx)" + }, + { + "file": "packages/components/slider/slider.less", + "selector": ".t-slider__bar--capsule", + "property": "border-radius", + "kind": "render-property", + "value": "calc(var(--td-slider-capsule-bar-heihgt, 48rpx) / 2)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "sliderCapsuleBarWidth", + "miniComponent": "slider", + "cssName": "--td-slider-capsule-bar-width", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/slider/slider.less", + "selector": ".t-slider--vertical .t-slider__bar--capsule", + "property": "width", + "kind": "render-property", + "value": "var(--td-slider-capsule-bar-width, 48rpx)" + }, + { + "file": "packages/components/slider/slider.less", + "selector": ".t-slider--vertical .t-slider__bar--capsule", + "property": "border-radius", + "kind": "render-property", + "value": "calc(var(--td-slider-capsule-bar-width, 48rpx) / 2)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "sliderCapsuleLineHeihgt", + "miniComponent": "slider", + "cssName": "--td-slider-capsule-line-heihgt", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/slider/slider.less", + "selector": ".t-slider__line--capsule", + "property": "height", + "kind": "render-property", + "value": "var(--td-slider-capsule-line-heihgt, 36rpx)" + }, + { + "file": "packages/components/slider/slider.less", + "selector": ".t-slider__line--capsule.t-slider__line--single", + "property": "border-top-left-radius", + "kind": "render-property", + "value": "calc(var(--td-slider-capsule-line-heihgt, 36rpx) / 2)" + }, + { + "file": "packages/components/slider/slider.less", + "selector": ".t-slider__line--capsule.t-slider__line--single", + "property": "border-bottom-left-radius", + "kind": "render-property", + "value": "calc(var(--td-slider-capsule-line-heihgt, 36rpx) / 2)" + }, + { + "file": "packages/components/slider/slider.less", + "selector": ".t-slider__scale-item--capsule", + "property": "height", + "kind": "render-property", + "value": "var(--td-slider-capsule-line-heihgt, 36rpx)" + }, + { + "file": "packages/components/slider/slider.less", + "selector": ".t-slider__scale-item--capsule", + "property": "margin-top", + "kind": "render-property", + "value": "calc(-0.5 * var(--td-slider-capsule-line-heihgt, 36rpx))" + }, + { + "file": "packages/components/slider/slider.less", + "selector": ".t-slider--vertical .t-slider__line--capsule.t-slider__line--single", + "property": "border-top-left-radius", + "kind": "render-property", + "value": "calc(var(--td-slider-capsule-line-heihgt, 36rpx) / 2)" + }, + { + "file": "packages/components/slider/slider.less", + "selector": ".t-slider--vertical .t-slider__line--capsule.t-slider__line--single", + "property": "border-top-right-radius", + "kind": "render-property", + "value": "calc(var(--td-slider-capsule-line-heihgt, 36rpx) / 2)" + }, + { + "file": "packages/components/slider/slider.less", + "selector": ".t-slider--vertical .t-slider__scale-item--capsule", + "property": "width", + "kind": "render-property", + "value": "var(--td-slider-capsule-line-heihgt, 36rpx)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "sliderDefaultColor", + "miniComponent": "slider", + "cssName": "--td-slider-default-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/slider/slider.less", + "selector": ".t-slider__bar", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-slider-default-color, var(--td-bg-color-component, var(--td-gray-color-3, #e7e7e7)))" + }, + { + "file": "packages/components/slider/slider.less", + "selector": ".t-slider__bar--marks", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-slider-default-color, var(--td-bg-color-component, var(--td-gray-color-3, #e7e7e7)))" + }, + { + "file": "packages/components/slider/slider.less", + "selector": ".t-slider__bar--disabled", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-slider-default-color, var(--td-bg-color-component-disabled, var(--td-gray-color-2, #eeeeee)))" + }, + { + "file": "packages/components/slider/slider.less", + "selector": ".t-slider__scale-item", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-slider-default-color, var(--td-bg-color-component, var(--td-gray-color-3, #e7e7e7)))" + }, + { + "file": "packages/components/slider/slider.less", + "selector": ".t-slider__scale-item--disabled", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-slider-default-color, var(--td-bg-color-component-disabled, var(--td-gray-color-2, #eeeeee)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "sliderDisabledColor", + "miniComponent": "slider", + "cssName": "--td-slider-disabled-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/slider/slider.less", + "selector": ".t-slider__line--disabled", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-slider-disabled-color, var(--td-brand-color-disabled, var(--td-primary-color-3, #b5c7ff)))" + }, + { + "file": "packages/components/slider/slider.less", + "selector": ".t-slider__scale-item--active.t-slider__scale-item--disabled", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-slider-disabled-color, var(--td-brand-color-disabled, var(--td-primary-color-3, #b5c7ff)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "sliderDisabledTextColor", + "miniComponent": "slider", + "cssName": "--td-slider-disabled-text-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/slider/slider.less", + "selector": ".t-slider--disabled .t-slider__value,\n.t-slider--disabled .t-slider__range-extreme,\n.t-slider--disabled .t-slider__dot-value,\n.t-slider--disabled .t-slider__scale-desc", + "property": "color", + "kind": "render-property", + "value": "var(--td-slider-disabled-text-color, var(--td-text-color-disabled, var(--td-font-gray-4, rgba(0, 0, 0, 0.26))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "sliderDotBgColor", + "miniComponent": "slider", + "cssName": "--td-slider-dot-bg-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/slider/slider.less", + "selector": ".t-slider__dot", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-slider-dot-bg-color, #fff)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "sliderDotColor", + "miniComponent": "slider", + "cssName": "--td-slider-dot-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/slider/slider.less", + "selector": ".t-slider__dot", + "property": "border", + "kind": "render-property", + "value": "2rpx solid var(--td-slider-dot-color, var(--td-component-border, var(--td-gray-color-4, #dcdcdc)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "sliderDotDisabledBgColor", + "miniComponent": "slider", + "cssName": "--td-slider-dot-disabled-bg-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/slider/slider.less", + "selector": ".t-slider--disabled .t-slider__dot", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-slider-dot-disabled-bg-color, #fff)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "sliderDotDisabledBorderColor", + "miniComponent": "slider", + "cssName": "--td-slider-dot-disabled-border-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/slider/slider.less", + "selector": ".t-slider--disabled .t-slider__dot", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-slider-dot-disabled-border-color, #f3f3f3)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "sliderDotSize", + "miniComponent": "slider", + "cssName": "--td-slider-dot-size", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/slider/slider.less", + "selector": ".t-slider__dot", + "property": "width", + "kind": "render-property", + "value": "var(--td-slider-dot-size, 40rpx)" + }, + { + "file": "packages/components/slider/slider.less", + "selector": ".t-slider__dot", + "property": "height", + "kind": "render-property", + "value": "var(--td-slider-dot-size, 40rpx)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "sliderTextColor", + "miniComponent": "slider", + "cssName": "--td-slider-text-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/slider/slider.less", + "selector": ".t-slider__value,\n.t-slider__range-extreme,\n.t-slider__dot-value", + "property": "color", + "kind": "render-property", + "value": "var(--td-slider-text-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + }, + { + "file": "packages/components/slider/slider.less", + "selector": ".t-slider__scale-desc", + "property": "color", + "kind": "render-property", + "value": "var(--td-slider-text-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "stepItemCircleSize", + "miniComponent": "step-item", + "cssName": "--td-step-item-circle-size", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/step-item/step-item.less", + "selector": ".t-steps-item__anchor--vertical", + "property": "width", + "kind": "render-property", + "value": "var(--td-step-item-circle-size, 44rpx)" + }, + { + "file": "packages/components/step-item/step-item.less", + "selector": ".t-steps-item__anchor--vertical", + "property": "height", + "kind": "render-property", + "value": "var(--td-step-item-circle-size, 44rpx)" + }, + { + "file": "packages/components/step-item/step-item.less", + "selector": ".t-steps-item__circle", + "property": "width", + "kind": "render-property", + "value": "var(--td-step-item-circle-size, 44rpx)" + }, + { + "file": "packages/components/step-item/step-item.less", + "selector": ".t-steps-item__circle", + "property": "height", + "kind": "render-property", + "value": "var(--td-step-item-circle-size, 44rpx)" + }, + { + "file": "packages/components/step-item/step-item.less", + "selector": ".t-steps-item__line--horizontal", + "property": "width", + "kind": "render-property", + "value": "calc(100% - 32rpx - var(--td-step-item-circle-size, 44rpx))" + }, + { + "file": "packages/components/step-item/step-item.less", + "selector": ".t-steps-item__line--horizontal", + "property": "top", + "kind": "render-property", + "value": "calc(var(--td-step-item-circle-size, 44rpx) / 2 + 1px)" + }, + { + "file": "packages/components/step-item/step-item.less", + "selector": ".t-steps-item__line--horizontal", + "property": "left", + "kind": "render-property", + "value": "calc(50% + var(--td-step-item-circle-size, 44rpx) / 2 + 16rpx)" + }, + { + "file": "packages/components/step-item/step-item.less", + "selector": ".t-steps-item__line--vertical", + "property": "height", + "kind": "render-property", + "value": "calc(100% - 32rpx - var(--td-step-item-circle-size, 44rpx))" + }, + { + "file": "packages/components/step-item/step-item.less", + "selector": ".t-steps-item__line--vertical", + "property": "left", + "kind": "render-property", + "value": "calc(var(--td-step-item-circle-size, 44rpx) / 2)" + }, + { + "file": "packages/components/step-item/step-item.less", + "selector": ".t-steps-item__line--vertical", + "property": "top", + "kind": "render-property", + "value": "calc(var(--td-step-item-circle-size, 44rpx) + 16rpx)" + }, + { + "file": "packages/components/step-item/step-item.less", + "selector": ".t-steps-item__line--vertical.t-steps-item__line--dot", + "property": "top", + "kind": "render-property", + "value": "var(--td-step-item-circle-size, 44rpx)" + }, + { + "file": "packages/components/step-item/step-item.less", + "selector": ".t-steps-item__line--vertical.t-steps-item__line--dot", + "property": "height", + "kind": "render-property", + "value": "calc(100% - var(--td-step-item-circle-size, 44rpx))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "stepItemCircleTextFont", + "miniComponent": "step-item", + "cssName": "--td-step-item-circle-text-font", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/step-item/step-item.less", + "selector": ".t-steps-item__circle", + "property": "font", + "kind": "render-property", + "value": "var(--td-step-item-circle-text-font, var(--td-font-body-medium, 28rpx / 44rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "stepItemDefaultCircleBg", + "miniComponent": "step-item", + "cssName": "--td-step-item-default-circle-bg", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/step-item/step-item.less", + "selector": ".t-steps-item__circle--default", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-step-item-default-circle-bg, var(--td-bg-color-secondarycontainer, var(--td-gray-color-1, #f3f3f3)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "stepItemDefaultCircleColor", + "miniComponent": "step-item", + "cssName": "--td-step-item-default-circle-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/step-item/step-item.less", + "selector": ".t-steps-item__circle--default", + "property": "color", + "kind": "render-property", + "value": "var(--td-step-item-default-circle-color, var(--td-text-color-placeholder, var(--td-font-gray-3, rgba(0, 0, 0, 0.4))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "stepItemDefaultDotBorderColor", + "miniComponent": "step-item", + "cssName": "--td-step-item-default-dot-border-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/step-item/step-item.less", + "selector": ".t-steps-item__dot--default", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-step-item-default-dot-border-color, var(--td-component-border, var(--td-gray-color-4, #dcdcdc)))" + }, + { + "file": "packages/components/step-item/step-item.less", + "selector": ".t-steps-item__dot--default", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-step-item-default-dot-border-color, var(--td-component-border, var(--td-gray-color-4, #dcdcdc)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "stepItemDefaultIconColor", + "miniComponent": "step-item", + "cssName": "--td-step-item-default-icon-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/step-item/step-item.less", + "selector": ".t-steps-item__icon--default", + "property": "color", + "kind": "render-property", + "value": "var(--td-step-item-default-icon-color, var(--td-text-color-placeholder, var(--td-font-gray-3, rgba(0, 0, 0, 0.4))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "stepItemDefaultTitleColor", + "miniComponent": "step-item", + "cssName": "--td-step-item-default-title-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/step-item/step-item.less", + "selector": ".t-steps-item__title--default", + "property": "color", + "kind": "render-property", + "value": "var(--td-step-item-default-title-color, var(--td-text-color-placeholder, var(--td-font-gray-3, rgba(0, 0, 0, 0.4))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "stepItemDescriptionColor", + "miniComponent": "step-item", + "cssName": "--td-step-item-description-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/step-item/step-item.less", + "selector": ".t-steps-item__description", + "property": "color", + "kind": "render-property", + "value": "var(--td-step-item-description-color, var(--td-text-color-placeholder, var(--td-font-gray-3, rgba(0, 0, 0, 0.4))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "stepItemDotSize", + "miniComponent": "step-item", + "cssName": "--td-step-item-dot-size", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/step-item/step-item.less", + "selector": ".t-steps-item__dot", + "property": "width", + "kind": "render-property", + "value": "var(--td-step-item-dot-size, 16rpx)" + }, + { + "file": "packages/components/step-item/step-item.less", + "selector": ".t-steps-item__dot", + "property": "height", + "kind": "render-property", + "value": "var(--td-step-item-dot-size, 16rpx)" + }, + { + "file": "packages/components/step-item/step-item.less", + "selector": ".t-steps-item__line--horizontal.t-steps-item__line--dot", + "property": "top", + "kind": "render-property", + "value": "calc(var(--td-step-item-dot-size, 16rpx) / 2)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "stepItemErrorCircleBg", + "miniComponent": "step-item", + "cssName": "--td-step-item-error-circle-bg", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/step-item/step-item.less", + "selector": ".t-steps-item__circle--error", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-step-item-error-circle-bg, var(--td-error-color-1, #fff0ed))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "stepItemErrorCircleColor", + "miniComponent": "step-item", + "cssName": "--td-step-item-error-circle-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/step-item/step-item.less", + "selector": ".t-steps-item__circle--error", + "property": "color", + "kind": "render-property", + "value": "var(--td-step-item-error-circle-color, var(--td-error-color, var(--td-error-color-6, #d54941)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "stepItemErrorDotBorderColor", + "miniComponent": "step-item", + "cssName": "--td-step-item-error-dot-border-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/step-item/step-item.less", + "selector": ".t-steps-item__dot--error", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-step-item-error-dot-border-color, var(--td-error-color, var(--td-error-color-6, #d54941)))" + }, + { + "file": "packages/components/step-item/step-item.less", + "selector": ".t-steps-item__dot--error", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-step-item-error-dot-border-color, var(--td-error-color, var(--td-error-color-6, #d54941)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "stepItemErrorIconColor", + "miniComponent": "step-item", + "cssName": "--td-step-item-error-icon-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/step-item/step-item.less", + "selector": ".t-steps-item__icon--error", + "property": "color", + "kind": "render-property", + "value": "var(--td-step-item-error-icon-color, var(--td-error-color, var(--td-error-color-6, #d54941)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "stepItemErrorTitleColor", + "miniComponent": "step-item", + "cssName": "--td-step-item-error-title-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/step-item/step-item.less", + "selector": ".t-steps-item__title--error", + "property": "color", + "kind": "render-property", + "value": "var(--td-step-item-error-title-color, var(--td-error-color, var(--td-error-color-6, #d54941)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "stepItemFinishCircleBg", + "miniComponent": "step-item", + "cssName": "--td-step-item-finish-circle-bg", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/step-item/step-item.less", + "selector": ".t-steps-item__circle--finish", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-step-item-finish-circle-bg, var(--td-brand-color-light, var(--td-primary-color-1, #f2f3ff)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "stepItemFinishCircleColor", + "miniComponent": "step-item", + "cssName": "--td-step-item-finish-circle-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/step-item/step-item.less", + "selector": ".t-steps-item__circle--finish", + "property": "color", + "kind": "render-property", + "value": "var(--td-step-item-finish-circle-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "stepItemFinishDotBorderColor", + "miniComponent": "step-item", + "cssName": "--td-step-item-finish-dot-border-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/step-item/step-item.less", + "selector": ".t-steps-item__dot--finish", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-step-item-finish-dot-border-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + }, + { + "file": "packages/components/step-item/step-item.less", + "selector": ".t-steps-item__dot--finish", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-step-item-finish-dot-border-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "stepItemFinishIconColor", + "miniComponent": "step-item", + "cssName": "--td-step-item-finish-icon-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/step-item/step-item.less", + "selector": ".t-steps-item__icon--finish", + "property": "color", + "kind": "render-property", + "value": "var(--td-step-item-finish-icon-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "stepItemFinishLineColor", + "miniComponent": "step-item", + "cssName": "--td-step-item-finish-line-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/step-item/step-item.less", + "selector": ".t-steps-item__line--finish,\n.t-steps-item__line--reverse.t-steps-item__line--process", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-step-item-finish-line-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "stepItemFinishTitleColor", + "miniComponent": "step-item", + "cssName": "--td-step-item-finish-title-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/step-item/step-item.less", + "selector": ".t-steps-item__title--finish", + "property": "color", + "kind": "render-property", + "value": "var(--td-step-item-finish-title-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "stepItemLineColor", + "miniComponent": "step-item", + "cssName": "--td-step-item-line-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/step-item/step-item.less", + "selector": ".t-steps-item__line", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-step-item-line-color, var(--td-component-border, var(--td-gray-color-4, #dcdcdc)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "stepItemProcessCircleBg", + "miniComponent": "step-item", + "cssName": "--td-step-item-process-circle-bg", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/step-item/step-item.less", + "selector": ".t-steps-item__circle--process", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-step-item-process-circle-bg, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "stepItemProcessCircleColor", + "miniComponent": "step-item", + "cssName": "--td-step-item-process-circle-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/step-item/step-item.less", + "selector": ".t-steps-item__circle--process", + "property": "color", + "kind": "render-property", + "value": "var(--td-step-item-process-circle-color, var(--td-text-color-anti, var(--td-font-white-1, #ffffff)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "stepItemProcessDotBorderColor", + "miniComponent": "step-item", + "cssName": "--td-step-item-process-dot-border-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/step-item/step-item.less", + "selector": ".t-steps-item__dot--process", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-step-item-process-dot-border-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + }, + { + "file": "packages/components/step-item/step-item.less", + "selector": ".t-steps-item__dot--process", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-step-item-process-dot-border-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "stepItemProcessIconColor", + "miniComponent": "step-item", + "cssName": "--td-step-item-process-icon-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/step-item/step-item.less", + "selector": ".t-steps-item__icon--process", + "property": "color", + "kind": "render-property", + "value": "var(--td-step-item-process-icon-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "stepItemProcessTitleColor", + "miniComponent": "step-item", + "cssName": "--td-step-item-process-title-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/step-item/step-item.less", + "selector": ".t-steps-item__title--process", + "property": "color", + "kind": "render-property", + "value": "var(--td-step-item-process-title-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "stepperBorderColor", + "miniComponent": "stepper", + "cssName": "--td-stepper-border-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/stepper/stepper.less", + "selector": ".t-stepper__minus--outline,\n.t-stepper__plus--outline", + "property": "border", + "kind": "render-property", + "value": "2rpx solid var(--td-stepper-border-color, var(--td-component-border, var(--td-gray-color-4, #dcdcdc)))" + }, + { + "file": "packages/components/stepper/stepper.less", + "selector": ".t-stepper__input--outline", + "property": "border-top", + "kind": "render-property", + "value": "2rpx solid var(--td-stepper-border-color, var(--td-component-border, var(--td-gray-color-4, #dcdcdc)))" + }, + { + "file": "packages/components/stepper/stepper.less", + "selector": ".t-stepper__input--outline", + "property": "border-bottom", + "kind": "render-property", + "value": "2rpx solid var(--td-stepper-border-color, var(--td-component-border, var(--td-gray-color-4, #dcdcdc)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "stepperBorderRadius", + "miniComponent": "stepper", + "cssName": "--td-stepper-border-radius", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/stepper/stepper.less", + "selector": ".t-stepper__minus--outline,\n.t-stepper__minus--filled", + "property": "border-top-left-radius", + "kind": "render-property", + "value": "var(--td-stepper-border-radius, var(--td-radius-small, 6rpx))" + }, + { + "file": "packages/components/stepper/stepper.less", + "selector": ".t-stepper__minus--outline,\n.t-stepper__minus--filled", + "property": "border-bottom-left-radius", + "kind": "render-property", + "value": "var(--td-stepper-border-radius, var(--td-radius-small, 6rpx))" + }, + { + "file": "packages/components/stepper/stepper.less", + "selector": ".t-stepper__plus--outline,\n.t-stepper__plus--filled", + "property": "border-top-right-radius", + "kind": "render-property", + "value": "var(--td-stepper-border-radius, var(--td-radius-small, 6rpx))" + }, + { + "file": "packages/components/stepper/stepper.less", + "selector": ".t-stepper__plus--outline,\n.t-stepper__plus--filled", + "property": "border-bottom-right-radius", + "kind": "render-property", + "value": "var(--td-stepper-border-radius, var(--td-radius-small, 6rpx))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "stepperInputColor", + "miniComponent": "stepper", + "cssName": "--td-stepper-input-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/stepper/stepper.less", + "selector": ".t-stepper", + "property": "color", + "kind": "render-property", + "value": "var(--td-stepper-input-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "strokeColor", + "miniComponent": "paragraph", + "cssName": "--td-stroke-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/paragraph/_example/paragraph.less", + "selector": ".typography-example--border::after", + "property": "border-bottom", + "kind": "render-property", + "value": "1px solid var(--td-stroke-color, #e7e7e7)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "swiperItemPadding", + "miniComponent": "swiper", + "cssName": "--td-swiper-item-padding", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/swiper/swiper.less", + "selector": ".t-swiper__item", + "property": "padding", + "kind": "render-property", + "value": "var(--td-swiper-item-padding, 0)" + } + ], + "nonLessReferences": [ + { + "file": "packages/components/swiper/_example/cards/index.wxss", + "line": 3, + "text": "--td-swiper-item-padding: 0 12rpx;" + } + ], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "swiperNavBtnBgColor", + "miniComponent": "swiper-nav", + "cssName": "--td-swiper-nav-btn-bg-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/swiper-nav/swiper-nav.less", + "selector": ".t-swiper-nav__btn--prev,\n.t-swiper-nav__btn--next", + "property": "background", + "kind": "render-property", + "value": "var(--td-swiper-nav-btn-bg-color, var(--td-font-gray-3, rgba(0, 0, 0, 0.4)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "swiperNavBtnColor", + "miniComponent": "swiper-nav", + "cssName": "--td-swiper-nav-btn-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/swiper-nav/swiper-nav.less", + "selector": ".t-swiper-nav__btn--prev::after,\n.t-swiper-nav__btn--next::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-swiper-nav-btn-color, var(--td-text-color-anti, var(--td-font-white-1, #ffffff)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "swiperNavBtnSize", + "miniComponent": "swiper-nav", + "cssName": "--td-swiper-nav-btn-size", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/swiper-nav/swiper-nav.less", + "selector": ".t-swiper-nav__btn--prev,\n.t-swiper-nav__btn--next", + "property": "width", + "kind": "render-property", + "value": "var(--td-swiper-nav-btn-size, 48rpx)" + }, + { + "file": "packages/components/swiper-nav/swiper-nav.less", + "selector": ".t-swiper-nav__btn--prev,\n.t-swiper-nav__btn--next", + "property": "height", + "kind": "render-property", + "value": "var(--td-swiper-nav-btn-size, 48rpx)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "swiperNavDotActiveColor", + "miniComponent": "swiper-nav", + "cssName": "--td-swiper-nav-dot-active-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/swiper-nav/swiper-nav.less", + "selector": ".t-swiper-nav__dots-item--active,\n.t-swiper-nav__dots-bar-item--active", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-swiper-nav-dot-active-color, var(--td-text-color-anti, var(--td-font-white-1, #ffffff)))" + }, + { + "file": "packages/components/swiper-nav/swiper-nav.less", + "selector": ".t-swiper-nav__dots-bar-item--active", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-swiper-nav-dot-active-color, var(--td-text-color-anti, var(--td-font-white-1, #ffffff)))" + } + ], + "nonLessReferences": [ + { + "file": "packages/components/swiper/_example/cards/index.wxss", + "line": 5, + "text": "--td-swiper-nav-dot-active-color: var(--td-brand-color, #0052d9);" + } + ], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "swiperNavDotColor", + "miniComponent": "swiper-nav", + "cssName": "--td-swiper-nav-dot-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/swiper-nav/swiper-nav.less", + "selector": ".t-swiper-nav__dots-item,\n.t-swiper-nav__dots-bar-item", + "property": "background", + "kind": "render-property", + "value": "var(--td-swiper-nav-dot-color, var(--td-font-white-2, rgba(255, 255, 255, 0.55)))" + } + ], + "nonLessReferences": [ + { + "file": "packages/components/swiper/_example/cards/index.wxss", + "line": 4, + "text": "--td-swiper-nav-dot-color: var(--td-bg-color-component, #e7e7e7);" + } + ], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "swiperNavDotsBarActiveWidth", + "miniComponent": "swiper-nav", + "cssName": "--td-swiper-nav-dots-bar-active-width", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/swiper-nav/swiper-nav.less", + "selector": ".t-swiper-nav__dots-bar-item--vertical.t-swiper-nav__dots-bar-item--active", + "property": "height", + "kind": "render-property", + "value": "var(--td-swiper-nav-dots-bar-active-width, 40rpx)" + }, + { + "file": "packages/components/swiper-nav/swiper-nav.less", + "selector": ".t-swiper-nav__dots-bar-item--active", + "property": "width", + "kind": "render-property", + "value": "var(--td-swiper-nav-dots-bar-active-width, 40rpx)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "swiperNavDotSize", + "miniComponent": "swiper-nav", + "cssName": "--td-swiper-nav-dot-size", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/swiper-nav/swiper-nav.less", + "selector": ".t-swiper-nav__dots-item,\n.t-swiper-nav__dots-bar-item", + "property": "width", + "kind": "render-property", + "value": "var(--td-swiper-nav-dot-size, 12rpx)" + }, + { + "file": "packages/components/swiper-nav/swiper-nav.less", + "selector": ".t-swiper-nav__dots-item,\n.t-swiper-nav__dots-bar-item", + "property": "height", + "kind": "render-property", + "value": "var(--td-swiper-nav-dot-size, 12rpx)" + }, + { + "file": "packages/components/swiper-nav/swiper-nav.less", + "selector": ".t-swiper-nav__dots-bar-item--vertical.t-swiper-nav__dots-bar-item--active", + "property": "width", + "kind": "render-property", + "value": "var(--td-swiper-nav-dot-size, 12rpx)" + }, + { + "file": "packages/components/swiper-nav/swiper-nav.less", + "selector": ".t-swiper-nav__dots-bar-item--active", + "property": "border-radius", + "kind": "render-property", + "value": "calc(var(--td-swiper-nav-dot-size, 12rpx) / 2)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "swiperNavFractionBgColor", + "miniComponent": "swiper-nav", + "cssName": "--td-swiper-nav-fraction-bg-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/swiper-nav/swiper-nav.less", + "selector": ".t-swiper-nav__fraction", + "property": "background", + "kind": "render-property", + "value": "var(--td-swiper-nav-fraction-bg-color, var(--td-font-gray-3, rgba(0, 0, 0, 0.4)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "swiperNavFractionColor", + "miniComponent": "swiper-nav", + "cssName": "--td-swiper-nav-fraction-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/swiper-nav/swiper-nav.less", + "selector": ".t-swiper-nav__fraction", + "property": "color", + "kind": "render-property", + "value": "var(--td-swiper-nav-fraction-color, var(--td-text-color-anti, var(--td-font-white-1, #ffffff)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "swiperNavFractionFont", + "miniComponent": "swiper-nav", + "cssName": "--td-swiper-nav-fraction-font", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/swiper-nav/swiper-nav.less", + "selector": ".t-swiper-nav__fraction", + "property": "font", + "kind": "render-property", + "value": "var(--td-swiper-nav-fraction-font, var(--td-font-body-small, 24rpx / 40rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "swiperNavFractionHeight", + "miniComponent": "swiper-nav", + "cssName": "--td-swiper-nav-fraction-height", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/swiper-nav/swiper-nav.less", + "selector": ".t-swiper-nav__fraction", + "property": "height", + "kind": "render-property", + "value": "var(--td-swiper-nav-fraction-height, 48rpx)" + }, + { + "file": "packages/components/swiper-nav/swiper-nav.less", + "selector": ".t-swiper-nav__fraction", + "property": "border-radius", + "kind": "render-property", + "value": "calc(var(--td-swiper-nav-fraction-height, 48rpx) / 2)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "swiperRadius", + "miniComponent": "swiper", + "cssName": "--td-swiper-radius", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/swiper/swiper.less", + "selector": ".t-swiper-host", + "property": "border-radius", + "kind": "render-property", + "value": "var(--td-swiper-radius, var(--td-radius-large, 18rpx))" + } + ], + "nonLessReferences": [ + { + "file": "packages/components/swiper/_example/cards/index.wxss", + "line": 2, + "text": "--td-swiper-radius: 0;" + } + ], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "switchCheckedColor", + "miniComponent": "switch", + "cssName": "--td-switch-checked-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/switch/switch.less", + "selector": ".t-switch__label--checked", + "property": "color", + "kind": "render-property", + "value": "var(--td-switch-label-checked-color, var(--td-switch-checked-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9))))" + }, + { + "file": "packages/components/switch/switch.less", + "selector": ".t-switch__body--checked", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-switch-checked-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + } + ], + "nonLessReferences": [ + { + "file": "packages/components/switch/_example/color/index.wxss", + "line": 2, + "text": "--td-switch-checked-color: #00a870;" + } + ], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "switchCheckedDisabledColor", + "miniComponent": "switch", + "cssName": "--td-switch-checked-disabled-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/switch/switch.less", + "selector": ".t-switch__label--checked.t-switch__label--disabled", + "property": "color", + "kind": "render-property", + "value": "var(--td-switch-checked-disabled-color, var(--td-brand-color-disabled, var(--td-primary-color-3, #b5c7ff)))" + }, + { + "file": "packages/components/switch/switch.less", + "selector": ".t-switch__body--checked.t-switch__body--disabled", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-switch-checked-disabled-color, var(--td-brand-color-disabled, var(--td-primary-color-3, #b5c7ff)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "switchDotDisabledColor", + "miniComponent": "switch", + "cssName": "--td-switch-dot-disabled-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/switch/switch.less", + "selector": ".t-switch__dot--disabled", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-switch-dot-disabled-color, var(--td-font-white-1, #ffffff))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "switchDotHorizontalMargin", + "miniComponent": "switch", + "cssName": "--td-switch-dot-horizontal-margin", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/switch/switch.less", + "selector": ".t-switch__dot", + "property": "left", + "kind": "render-property", + "value": "var(--td-switch-dot-horizontal-margin, 6rpx)" + }, + { + "file": "packages/components/switch/switch.less", + "selector": ".t-switch__dot--checked", + "property": "left", + "kind": "render-property", + "value": "calc(var(--td-switch-width, 90rpx) - var(--td-switch-dot-size, 44rpx) - var(--td-switch-dot-horizontal-margin, 6rpx))" + }, + { + "file": "packages/components/switch/switch.less", + "selector": ".t-switch__dot--large.t-switch__dot--checked", + "property": "left", + "kind": "render-property", + "value": "calc(var(--td-switch-large-width, 104rpx) - var(--td-switch-dot-large-size, 52rpx) - var(--td-switch-dot-horizontal-margin, 6rpx))" + }, + { + "file": "packages/components/switch/switch.less", + "selector": ".t-switch__dot--small.t-switch__dot--checked", + "property": "left", + "kind": "render-property", + "value": "calc(var(--td-switch-small-width, 78rpx) - var(--td-switch-dot-small-size, 36rpx) - var(--td-switch-dot-horizontal-margin, 6rpx))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "switchDotLargeSize", + "miniComponent": "switch", + "cssName": "--td-switch-dot-large-size", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/switch/switch.less", + "selector": ".t-switch__dot--large", + "property": "width", + "kind": "render-property", + "value": "var(--td-switch-dot-large-size, 52rpx)" + }, + { + "file": "packages/components/switch/switch.less", + "selector": ".t-switch__dot--large", + "property": "height", + "kind": "render-property", + "value": "var(--td-switch-dot-large-size, 52rpx)" + }, + { + "file": "packages/components/switch/switch.less", + "selector": ".t-switch__dot--large.t-switch__dot--checked", + "property": "left", + "kind": "render-property", + "value": "calc(var(--td-switch-large-width, 104rpx) - var(--td-switch-dot-large-size, 52rpx) - var(--td-switch-dot-horizontal-margin, 6rpx))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "switchDotPlainHorizontalMargin", + "miniComponent": "switch", + "cssName": "--td-switch-dot-plain-horizontal-margin", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/switch/switch.less", + "selector": ".t-switch__dot--plain:not(.t-switch__dot--checked)", + "property": "left", + "kind": "render-property", + "value": "var(--td-switch-dot-plain-horizontal-margin, 10rpx)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "switchDotPlainLargeSize", + "miniComponent": "switch", + "cssName": "--td-switch-dot-plain-large-size", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/switch/switch.less", + "selector": ".t-switch__dot--large.t-switch__dot--plain:not(.t-switch__dot--checked)", + "property": "width", + "kind": "render-property", + "value": "var(--td-switch-dot-plain-large-size, 44rpx)" + }, + { + "file": "packages/components/switch/switch.less", + "selector": ".t-switch__dot--large.t-switch__dot--plain:not(.t-switch__dot--checked)", + "property": "height", + "kind": "render-property", + "value": "var(--td-switch-dot-plain-large-size, 44rpx)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "switchDotPlainSize", + "miniComponent": "switch", + "cssName": "--td-switch-dot-plain-size", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/switch/switch.less", + "selector": ".t-switch__dot--plain:not(.t-switch__dot--checked)", + "property": "width", + "kind": "render-property", + "value": "var(--td-switch-dot-plain-size, 36rpx)" + }, + { + "file": "packages/components/switch/switch.less", + "selector": ".t-switch__dot--plain:not(.t-switch__dot--checked)", + "property": "height", + "kind": "render-property", + "value": "var(--td-switch-dot-plain-size, 36rpx)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "switchDotPlainSmallSize", + "miniComponent": "switch", + "cssName": "--td-switch-dot-plain-small-size", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/switch/switch.less", + "selector": ".t-switch__dot--small.t-switch__dot--plain:not(.t-switch__dot--checked)", + "property": "width", + "kind": "render-property", + "value": "var(--td-switch-dot-plain-small-size, 28rpx)" + }, + { + "file": "packages/components/switch/switch.less", + "selector": ".t-switch__dot--small.t-switch__dot--plain:not(.t-switch__dot--checked)", + "property": "height", + "kind": "render-property", + "value": "var(--td-switch-dot-plain-small-size, 28rpx)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "switchDotShadow", + "miniComponent": "switch", + "cssName": "--td-switch-dot-shadow", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/switch/switch.less", + "selector": ".t-switch__dot", + "property": "box-shadow", + "kind": "render-property", + "value": "var(--td-switch-dot-shadow, var(--td-shadow-1, 0 1px 10px rgba(0, 0, 0, 0.05), 0 4px 5px rgba(0, 0, 0, 0.08), 0 2px 4px -1px rgba(0, 0, 0, 0.12)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "switchDotSize", + "miniComponent": "switch", + "cssName": "--td-switch-dot-size", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/switch/switch.less", + "selector": ".t-switch__dot", + "property": "width", + "kind": "render-property", + "value": "var(--td-switch-dot-size, 44rpx)" + }, + { + "file": "packages/components/switch/switch.less", + "selector": ".t-switch__dot", + "property": "height", + "kind": "render-property", + "value": "var(--td-switch-dot-size, 44rpx)" + }, + { + "file": "packages/components/switch/switch.less", + "selector": ".t-switch__dot--checked", + "property": "left", + "kind": "render-property", + "value": "calc(var(--td-switch-width, 90rpx) - var(--td-switch-dot-size, 44rpx) - var(--td-switch-dot-horizontal-margin, 6rpx))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "switchDotSmallSize", + "miniComponent": "switch", + "cssName": "--td-switch-dot-small-size", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/switch/switch.less", + "selector": ".t-switch__dot--small", + "property": "width", + "kind": "render-property", + "value": "var(--td-switch-dot-small-size, 36rpx)" + }, + { + "file": "packages/components/switch/switch.less", + "selector": ".t-switch__dot--small", + "property": "height", + "kind": "render-property", + "value": "var(--td-switch-dot-small-size, 36rpx)" + }, + { + "file": "packages/components/switch/switch.less", + "selector": ".t-switch__dot--small.t-switch__dot--checked", + "property": "left", + "kind": "render-property", + "value": "calc(var(--td-switch-small-width, 78rpx) - var(--td-switch-dot-small-size, 36rpx) - var(--td-switch-dot-horizontal-margin, 6rpx))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "switchHeight", + "miniComponent": "switch", + "cssName": "--td-switch-height", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/switch/switch.less", + "selector": ".t-switch__body", + "property": "height", + "kind": "render-property", + "value": "var(--td-switch-height, 56rpx)" + }, + { + "file": "packages/components/switch/switch.less", + "selector": ".t-switch__body", + "property": "border-radius", + "kind": "render-property", + "value": "var(--td-switch-radius, calc(var(--td-switch-height, 56rpx) / 2))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "switchIconLargeSize", + "miniComponent": "switch", + "cssName": "--td-switch-icon-large-size", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/switch/switch.less", + "selector": ".t-switch__icon--large", + "property": "font-size", + "kind": "render-property", + "value": "var(--td-switch-icon-large-size, 48rpx)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "switchIconSize", + "miniComponent": "switch", + "cssName": "--td-switch-icon-size", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/switch/switch.less", + "selector": ".t-switch__icon", + "property": "font-size", + "kind": "render-property", + "value": "var(--td-switch-icon-size, 40rpx)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "switchIconSmallSize", + "miniComponent": "switch", + "cssName": "--td-switch-icon-small-size", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/switch/switch.less", + "selector": ".t-switch__icon--small", + "property": "font-size", + "kind": "render-property", + "value": "var(--td-switch-icon-small-size, 32rpx)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "switchLabelCheckedColor", + "miniComponent": "switch", + "cssName": "--td-switch-label-checked-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/switch/switch.less", + "selector": ".t-switch__label--checked", + "property": "color", + "kind": "render-property", + "value": "var(--td-switch-label-checked-color, var(--td-switch-checked-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "switchLabelColor", + "miniComponent": "switch", + "cssName": "--td-switch-label-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/switch/switch.less", + "selector": ".t-switch__label", + "property": "color", + "kind": "render-property", + "value": "var(--td-switch-label-color, var(--td-bg-color-secondarycontainer-active, var(--td-gray-color-4, #dcdcdc)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "switchLabelFontSize", + "miniComponent": "switch", + "cssName": "--td-switch-label-font-size", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/switch/switch.less", + "selector": ".t-switch__label", + "property": "font-size", + "kind": "render-property", + "value": "var(--td-switch-label-font-size, var(--td-font-size-base, 28rpx))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "switchLabelLargeFontSize", + "miniComponent": "switch", + "cssName": "--td-switch-label-large-font-size", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/switch/switch.less", + "selector": ".t-switch__label--large", + "property": "font-size", + "kind": "render-property", + "value": "var(--td-switch-label-large-font-size, var(--td-font-size-m, 32rpx))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "switchLabelSmallFontSize", + "miniComponent": "switch", + "cssName": "--td-switch-label-small-font-size", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/switch/switch.less", + "selector": ".t-switch__label--small", + "property": "font-size", + "kind": "render-property", + "value": "var(--td-switch-label-small-font-size, var(--td-font-size-s, 24rpx))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "switchLargeHeight", + "miniComponent": "switch", + "cssName": "--td-switch-large-height", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/switch/switch.less", + "selector": ".t-switch__body--large", + "property": "height", + "kind": "render-property", + "value": "var(--td-switch-large-height, 64rpx)" + }, + { + "file": "packages/components/switch/switch.less", + "selector": ".t-switch__body--large", + "property": "border-radius", + "kind": "render-property", + "value": "var(--td-switch-large-radius, calc(var(--td-switch-large-height, 64rpx) / 2))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "switchLargeRadius", + "miniComponent": "switch", + "cssName": "--td-switch-large-radius", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/switch/switch.less", + "selector": ".t-switch__body--large", + "property": "border-radius", + "kind": "render-property", + "value": "var(--td-switch-large-radius, calc(var(--td-switch-large-height, 64rpx) / 2))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "switchLargeWidth", + "miniComponent": "switch", + "cssName": "--td-switch-large-width", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/switch/switch.less", + "selector": ".t-switch__body--large", + "property": "width", + "kind": "render-property", + "value": "var(--td-switch-large-width, 104rpx)" + }, + { + "file": "packages/components/switch/switch.less", + "selector": ".t-switch__dot--large.t-switch__dot--checked", + "property": "left", + "kind": "render-property", + "value": "calc(var(--td-switch-large-width, 104rpx) - var(--td-switch-dot-large-size, 52rpx) - var(--td-switch-dot-horizontal-margin, 6rpx))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "switchLoadingColor", + "miniComponent": "switch", + "cssName": "--td-switch-loading-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/switch/switch.less", + "selector": ".t-switch__loading", + "property": "--td-loading-color", + "kind": "custom-property-forward", + "value": "var(--td-switch-loading-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "switchRadius", + "miniComponent": "switch", + "cssName": "--td-switch-radius", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/switch/switch.less", + "selector": ".t-switch__body", + "property": "border-radius", + "kind": "render-property", + "value": "var(--td-switch-radius, calc(var(--td-switch-height, 56rpx) / 2))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "switchSmallHeight", + "miniComponent": "switch", + "cssName": "--td-switch-small-height", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/switch/switch.less", + "selector": ".t-switch__body--small", + "property": "height", + "kind": "render-property", + "value": "var(--td-switch-small-height, 48rpx)" + }, + { + "file": "packages/components/switch/switch.less", + "selector": ".t-switch__body--small", + "property": "border-radius", + "kind": "render-property", + "value": "var(--td-switch-small-radius, calc(var(--td-switch-small-height, 48rpx) / 2))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "switchSmallRadius", + "miniComponent": "switch", + "cssName": "--td-switch-small-radius", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/switch/switch.less", + "selector": ".t-switch__body--small", + "property": "border-radius", + "kind": "render-property", + "value": "var(--td-switch-small-radius, calc(var(--td-switch-small-height, 48rpx) / 2))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "switchSmallWidth", + "miniComponent": "switch", + "cssName": "--td-switch-small-width", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/switch/switch.less", + "selector": ".t-switch__body--small", + "property": "width", + "kind": "render-property", + "value": "var(--td-switch-small-width, 78rpx)" + }, + { + "file": "packages/components/switch/switch.less", + "selector": ".t-switch__dot--small.t-switch__dot--checked", + "property": "left", + "kind": "render-property", + "value": "calc(var(--td-switch-small-width, 78rpx) - var(--td-switch-dot-small-size, 36rpx) - var(--td-switch-dot-horizontal-margin, 6rpx))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "switchUncheckedColor", + "miniComponent": "switch", + "cssName": "--td-switch-unchecked-color", + "previousDecision": "fallback-widget-verified-visual-pending", + "compiledUses": [ + { + "file": "packages/components/switch/switch.less", + "selector": ".t-switch__body", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-switch-unchecked-color, var(--td-bg-color-secondarycontainer-active, var(--td-gray-color-4, #dcdcdc)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "switchUncheckedDisabledColor", + "miniComponent": "switch", + "cssName": "--td-switch-unchecked-disabled-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/switch/switch.less", + "selector": ".t-switch__label--disabled", + "property": "color", + "kind": "render-property", + "value": "var(--td-switch-unchecked-disabled-color, var(--td-bg-color-component-disabled, var(--td-gray-color-2, #eeeeee)))" + }, + { + "file": "packages/components/switch/switch.less", + "selector": ".t-switch__body--disabled", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-switch-unchecked-disabled-color, var(--td-bg-color-component-disabled, var(--td-gray-color-2, #eeeeee)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "switchWidth", + "miniComponent": "switch", + "cssName": "--td-switch-width", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/switch/switch.less", + "selector": ".t-switch__body", + "property": "width", + "kind": "render-property", + "value": "var(--td-switch-width, 90rpx)" + }, + { + "file": "packages/components/switch/switch.less", + "selector": ".t-switch__dot--checked", + "property": "left", + "kind": "render-property", + "value": "calc(var(--td-switch-width, 90rpx) - var(--td-switch-dot-size, 44rpx) - var(--td-switch-dot-horizontal-margin, 6rpx))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "tabBarActiveBg", + "miniComponent": "tab-bar-item", + "cssName": "--td-tab-bar-active-bg", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/tab-bar-item/tab-bar-item.less", + "selector": ".t-tab-bar-item__content--tag.t-tab-bar-item__content--checked", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-tab-bar-active-bg, var(--td-brand-color-light, var(--td-primary-color-1, #f2f3ff)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "tabBarActiveColor", + "miniComponent": "tab-bar-item", + "cssName": "--td-tab-bar-active-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/tab-bar-item/tab-bar-item.less", + "selector": ".t-tab-bar-item__content--checked .t-tab-bar-item__text,\n.t-tab-bar-item__content--checked .t-tab-bar-item__icon", + "property": "color", + "kind": "render-property", + "value": "var(--td-tab-bar-active-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "tabBarBgColor", + "miniComponent": "tab-bar", + "cssName": "--td-tab-bar-bg-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/tab-bar/tab-bar.less", + "selector": ".t-tab-bar", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-tab-bar-bg-color, var(--td-bg-color-container, var(--td-font-white-1, #ffffff)))" + }, + { + "file": "packages/components/tab-bar-item/tab-bar-item.less", + "selector": ".t-tab-bar-item__spread", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-tab-bar-bg-color, var(--td-bg-color-container, var(--td-font-white-1, #ffffff)))" + }, + { + "file": "packages/components/tab-bar-item/tab-bar-item.less", + "selector": ".t-tab-bar-item__spread::before", + "property": "border-top", + "kind": "render-property", + "value": "16rpx solid var(--td-tab-bar-bg-color, var(--td-bg-color-container, var(--td-font-white-1, #ffffff)))" + } + ], + "nonLessReferences": [ + { + "file": "packages/components/tab-bar/_example/custom/index.wxss", + "line": 3, + "text": "--td-tab-bar-bg-color: var(--td-bg-color-secondarycontainer, #f3f3f3);" + } + ], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "tabBarBorderColor", + "miniComponent": "tab-bar", + "cssName": "--td-tab-bar-border-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/tab-bar/tab-bar.less", + "selector": ".t-tab-bar--normal.t-tab-bar--border::before", + "property": "border-top", + "kind": "render-property", + "value": "1px solid var(--td-tab-bar-border-color, var(--td-border-level-1-color, var(--td-gray-color-3, #e7e7e7)))" + }, + { + "file": "packages/components/tab-bar-item/tab-bar-item.less", + "selector": ".t-tab-bar-item--split + .t-tab-bar-item--split::before", + "property": "border-left", + "kind": "render-property", + "value": "1px solid var(--td-tab-bar-border-color, var(--td-border-color, var(--td-gray-color-3, #e7e7e7)))" + } + ], + "nonLessReferences": [ + { + "file": "packages/components/tab-bar/_example/custom/index.wxss", + "line": 2, + "text": "--td-tab-bar-border-color: var(--td-border-level-1-color, #e7e7e7);" + } + ], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "tabBarColor", + "miniComponent": "tab-bar-item", + "cssName": "--td-tab-bar-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/tab-bar-item/tab-bar-item.less", + "selector": ".t-tab-bar-item__content", + "property": "color", + "kind": "render-property", + "value": "var(--td-tab-bar-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + }, + { + "file": "packages/components/tab-bar-item/tab-bar-item.less", + "selector": ".t-tab-bar-item__spread", + "property": "color", + "kind": "render-property", + "value": "var(--td-tab-bar-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "tabBarHeight", + "miniComponent": "tab-bar-item", + "cssName": "--td-tab-bar-height", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/tab-bar-item/tab-bar-item.less", + "selector": ".t-tab-bar-item", + "property": "height", + "kind": "render-property", + "value": "var(--td-tab-bar-height, 80rpx)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "tabBarHoverBgColor", + "miniComponent": "tab-bar-item", + "cssName": "--td-tab-bar-hover-bg-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/tab-bar-item/tab-bar-item.less", + "selector": ".t-tab-bar-item__spread-item--active", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-tab-bar-hover-bg-color, rgba(0, 0, 0, 0.05))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "tabBarRoundShadow", + "miniComponent": "tab-bar", + "cssName": "--td-tab-bar-round-shadow", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/tab-bar/tab-bar.less", + "selector": ".t-tab-bar--round", + "property": "box-shadow", + "kind": "render-property", + "value": "var(--td-tab-bar-round-shadow, var(--td-shadow-3, 0 6px 30px 5px rgba(0, 0, 0, 0.05), 0 16px 24px 2px rgba(0, 0, 0, 0.04), 0 8px 10px -5px rgba(0, 0, 0, 0.08)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "tabBarSpreadBorderColor", + "miniComponent": "tab-bar-item", + "cssName": "--td-tab-bar-spread-border-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/tab-bar-item/tab-bar-item.less", + "selector": ".t-tab-bar-item__spread-item-split", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-tab-bar-spread-border-color, var(--td-border-color, var(--td-gray-color-3, #e7e7e7)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "tabBarSpreadShadow", + "miniComponent": "tab-bar-item", + "cssName": "--td-tab-bar-spread-shadow", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/tab-bar-item/tab-bar-item.less", + "selector": ".t-tab-bar-item__spread", + "property": "box-shadow", + "kind": "render-property", + "value": "var(--td-tab-bar-spread-shadow, var(--td-shadow-3, 0 6px 30px 5px rgba(0, 0, 0, 0.05), 0 16px 24px 2px rgba(0, 0, 0, 0.04), 0 8px 10px -5px rgba(0, 0, 0, 0.08)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "tabBorderColor", + "miniComponent": "tabs", + "cssName": "--td-tab-border-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/tabs/tabs.less", + "selector": ".t-tabs__scroll--split::after", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-tab-border-color, var(--td-component-stroke, var(--td-gray-color-3, #e7e7e7)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "tabFont", + "miniComponent": "tabs", + "cssName": "--td-tab-font", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/tabs/tabs.less", + "selector": ".t-tabs", + "property": "font", + "kind": "render-property", + "value": "var(--td-tab-font, var(--td-font-body-medium, 28rpx / 44rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + }, + { + "file": "packages/components/tabs/tabs.less", + "selector": ".t-tabs__badge", + "property": "--td-badge-content-text-font", + "kind": "custom-property-forward", + "value": "var(--td-tab-font, var(--td-font-body-medium, 28rpx / 44rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + } + ], + "nonLessReferences": [ + { + "file": "packages/components/tabs/_example/size/index.wxss", + "line": 2, + "text": "--td-tab-font: var(--td-font-body-large);" + } + ], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "tabIconSize", + "miniComponent": "tabs", + "cssName": "--td-tab-icon-size", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/tabs/tabs.less", + "selector": ".t-tabs__icon", + "property": "font-size", + "kind": "render-property", + "value": "var(--td-tab-icon-size, 36rpx)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "tabItemActiveColor", + "miniComponent": "tabs", + "cssName": "--td-tab-item-active-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/tabs/tabs.less", + "selector": ".t-tabs__item--active", + "property": "color", + "kind": "render-property", + "value": "var(--td-tab-item-active-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + }, + { + "file": "packages/components/tabs/tabs.less", + "selector": ".t-tabs__badge--active", + "property": "--td-badge-content-text-color", + "kind": "custom-property-forward", + "value": "var(--td-tab-item-active-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "tabItemColor", + "miniComponent": "tabs", + "cssName": "--td-tab-item-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/tabs/tabs.less", + "selector": ".t-tabs__item", + "property": "color", + "kind": "render-property", + "value": "var(--td-tab-item-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "tabItemDisabledColor", + "miniComponent": "tabs", + "cssName": "--td-tab-item-disabled-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/tabs/tabs.less", + "selector": ".t-tabs__item--disabled", + "property": "color", + "kind": "render-property", + "value": "var(--td-tab-item-disabled-color, var(--td-text-color-disabled, var(--td-font-gray-4, rgba(0, 0, 0, 0.26))))" + }, + { + "file": "packages/components/tabs/tabs.less", + "selector": ".t-tabs__badge--disabled", + "property": "--td-badge-content-text-color", + "kind": "custom-property-forward", + "value": "var(--td-tab-item-disabled-color, var(--td-text-color-disabled, var(--td-font-gray-4, rgba(0, 0, 0, 0.26))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "tabItemHeight", + "miniComponent": "tabs", + "cssName": "--td-tab-item-height", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/tabs/tabs.less", + "selector": ".t-tabs__item", + "property": "height", + "kind": "render-property", + "value": "var(--td-tab-item-height, 96rpx)" + }, + { + "file": "packages/components/tabs/tabs.less", + "selector": ".t-tabs__scroll", + "property": "height", + "kind": "render-property", + "value": "var(--td-tab-item-height, 96rpx)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "tabItemTagActiveBg", + "miniComponent": "tabs", + "cssName": "--td-tab-item-tag-active-bg", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/tabs/tabs.less", + "selector": ".t-tabs__item-inner--active.t-tabs__item-inner--tag", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-tab-item-tag-active-bg, var(--td-brand-color-light, var(--td-primary-color-1, #f2f3ff)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "tabItemTagBg", + "miniComponent": "tabs", + "cssName": "--td-tab-item-tag-bg", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/tabs/tabs.less", + "selector": ".t-tabs__wrapper--card", + "property": "background", + "kind": "render-property", + "value": "var(--td-tab-item-tag-bg, var(--td-bg-color-secondarycontainer, var(--td-gray-color-1, #f3f3f3)))" + }, + { + "file": "packages/components/tabs/tabs.less", + "selector": ".t-tabs__item-inner--tag", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-tab-item-tag-bg, var(--td-bg-color-secondarycontainer, var(--td-gray-color-1, #f3f3f3)))" + }, + { + "file": "packages/components/tabs/tabs.less", + "selector": ".t-tabs__item-prefix::after,\n.t-tabs__item-suffix::after", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-tab-item-tag-bg, var(--td-bg-color-secondarycontainer, var(--td-gray-color-1, #f3f3f3)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "tabItemTagHeight", + "miniComponent": "tabs", + "cssName": "--td-tab-item-tag-height", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/tabs/tabs.less", + "selector": ".t-tabs__item-inner--tag", + "property": "line-height", + "kind": "render-property", + "value": "var(--td-tab-item-tag-height, 64rpx)" + }, + { + "file": "packages/components/tabs/tabs.less", + "selector": ".t-tabs__item-inner--tag", + "property": "border-radius", + "kind": "render-property", + "value": "calc(var(--td-tab-item-tag-height, 64rpx) / 2)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "tabItemVerticalHeight", + "miniComponent": "tabs", + "cssName": "--td-tab-item-vertical-height", + "previousDecision": "no-frozen-source-consumer-found", + "compiledUses": [], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "no-consumer-in-compiled-css-or-other-source", + "finalPaintVerified": false + }, + { + "name": "tabItemVerticalWidth", + "miniComponent": "tabs", + "cssName": "--td-tab-item-vertical-width", + "previousDecision": "no-frozen-source-consumer-found", + "compiledUses": [], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "no-consumer-in-compiled-css-or-other-source", + "finalPaintVerified": false + }, + { + "name": "tableBodyTextColor", + "miniComponent": "table", + "cssName": "--td-table-body-text-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/table/table.less", + "selector": ".t-table", + "property": "color", + "kind": "render-property", + "value": "var(--td-table-body-text-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "tableBorderColor", + "miniComponent": "table", + "cssName": "--td-table-border-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/table/table.less", + "selector": ".t-table__th,\n.t-table__td", + "property": "border-bottom", + "kind": "render-property", + "value": "2rpx solid var(--td-table-border-color, var(--td-component-border, var(--td-gray-color-4, #dcdcdc)))" + }, + { + "file": "packages/components/table/table.less", + "selector": ".t-table__bottom-content", + "property": "border-top", + "kind": "render-property", + "value": "2rpx solid var(--td-table-border-color, var(--td-component-border, var(--td-gray-color-4, #dcdcdc)))" + }, + { + "file": "packages/components/table/table.less", + "selector": ".t-table--bordered", + "property": "border", + "kind": "render-property", + "value": "2rpx solid var(--td-table-border-color, var(--td-component-border, var(--td-gray-color-4, #dcdcdc)))" + }, + { + "file": "packages/components/table/table.less", + "selector": ".t-table--bordered .t-table__th,\n.t-table--bordered .t-table__td", + "property": "border-right", + "kind": "render-property", + "value": "2rpx solid var(--td-table-border-color, var(--td-component-border, var(--td-gray-color-4, #dcdcdc)))" + }, + { + "file": "packages/components/table/table.less", + "selector": ".t-table--bordered .t-table__th", + "property": "border-bottom", + "kind": "render-property", + "value": "2rpx solid var(--td-table-border-color, var(--td-component-border, var(--td-gray-color-4, #dcdcdc)))" + }, + { + "file": "packages/components/table/table.less", + "selector": ".t-table--rowspan-colspan.t-table--bordered .t-table__th", + "property": "border-right", + "kind": "render-property", + "value": "2rpx solid var(--td-table-border-color, var(--td-component-border, var(--td-gray-color-4, #dcdcdc)))" + }, + { + "file": "packages/components/table/table.less", + "selector": ".t-table--rowspan-colspan.t-table--bordered .t-table__th", + "property": "border-bottom", + "kind": "render-property", + "value": "2rpx solid var(--td-table-border-color, var(--td-component-border, var(--td-gray-color-4, #dcdcdc)))" + }, + { + "file": "packages/components/table/table.less", + "selector": ".t-table--rowspan-colspan.t-table--bordered .t-table__td", + "property": "border-right", + "kind": "render-property", + "value": "2rpx solid var(--td-table-border-color, var(--td-component-border, var(--td-gray-color-4, #dcdcdc)))" + }, + { + "file": "packages/components/table/table.less", + "selector": ".t-table--rowspan-colspan.t-table--bordered .t-table__td", + "property": "border-bottom", + "kind": "render-property", + "value": "2rpx solid var(--td-table-border-color, var(--td-component-border, var(--td-gray-color-4, #dcdcdc)))" + }, + { + "file": "packages/components/table/table.less", + "selector": ".t-table--rowspan-colspan.t-table--bordered .t-table__td:last-child", + "property": "border-right", + "kind": "render-property", + "value": "2rpx solid var(--td-table-border-color, var(--td-component-border, var(--td-gray-color-4, #dcdcdc)))" + }, + { + "file": "packages/components/table/table.less", + "selector": ".t-table__row--fixed-bottom-first > .t-table__td", + "property": "border-top", + "kind": "render-property", + "value": "2rpx solid var(--td-table-border-color, var(--td-component-border, var(--td-gray-color-4, #dcdcdc)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "tableFixedCellBorderColor", + "miniComponent": "table", + "cssName": "--td-table-fixed-cell-border-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/table/table.less", + "selector": ".t-table--column-fixed .t-table__cell--fixed-right-first", + "property": "border-left", + "kind": "render-property", + "value": "4rpx solid var(--td-table-fixed-cell-border-color, var(--td-component-border, var(--td-gray-color-4, #dcdcdc)))" + }, + { + "file": "packages/components/table/table.less", + "selector": ".t-table__content--scrollable-to-left .t-table__cell--fixed-left-last::after", + "property": "border-right", + "kind": "render-property", + "value": "4rpx solid var(--td-table-fixed-cell-border-color, var(--td-component-border, var(--td-gray-color-4, #dcdcdc)))" + }, + { + "file": "packages/components/table/table.less", + "selector": ".t-table__content--scrollable-to-right .t-table__cell--fixed-right-first::after", + "property": "border-left", + "kind": "render-property", + "value": "4rpx solid var(--td-table-fixed-cell-border-color, var(--td-component-border, var(--td-gray-color-4, #dcdcdc)))" + }, + { + "file": "packages/components/table/table.less", + "selector": ".t-table--bordered .t-table__content--scrollable-to-left .t-table__cell--fixed-left-last::after", + "property": "border-right", + "kind": "render-property", + "value": "8rpx solid var(--td-table-fixed-cell-border-color, var(--td-component-border, var(--td-gray-color-4, #dcdcdc)))" + }, + { + "file": "packages/components/table/table.less", + "selector": ".t-table--bordered .t-table__content--scrollable-to-right .t-table__cell--fixed-right-first::after", + "property": "border-left", + "kind": "render-property", + "value": "8rpx solid var(--td-table-fixed-cell-border-color, var(--td-component-border, var(--td-gray-color-4, #dcdcdc)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "tableFontSize", + "miniComponent": "table", + "cssName": "--td-table-font-size", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/table/table.less", + "selector": ".t-table", + "property": "font", + "kind": "render-property", + "value": "var(--td-table-font-size, var(--td-font-body-medium, 28rpx / 44rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "tableHeaderBgColor", + "miniComponent": "table", + "cssName": "--td-table-header-bg-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/table/table.less", + "selector": ".t-table__th", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-table-header-bg-color, var(--td-bg-color-container, var(--td-font-white-1, #ffffff)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "tableHeaderTextColor", + "miniComponent": "table", + "cssName": "--td-table-header-text-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/table/table.less", + "selector": ".t-table__th", + "property": "color", + "kind": "render-property", + "value": "var(--td-table-header-text-color, var(--td-text-color-placeholder, var(--td-font-gray-3, rgba(0, 0, 0, 0.4))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "tableLoadingBgColor", + "miniComponent": "table", + "cssName": "--td-table-loading-bg-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/table/table.less", + "selector": ".t-table__loading--full", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-table-loading-bg-color, rgba(255, 255, 255, 0.55))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "tableRowHeight", + "miniComponent": "table", + "cssName": "--td-table-row-height", + "previousDecision": "no-frozen-source-consumer-found", + "compiledUses": [], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "no-consumer-in-compiled-css-or-other-source", + "finalPaintVerified": false + }, + { + "name": "tableStripeBgColor", + "miniComponent": "table", + "cssName": "--td-table-stripe-bg-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/table/table.less", + "selector": ".t-table--striped .t-table__tr:nth-child(odd)", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-table-stripe-bg-color, var(--td-bg-color-secondarycontainer, var(--td-gray-color-1, #f3f3f3)))" + }, + { + "file": "packages/components/table/table.less", + "selector": ".t-table--striped .t-table__tr:nth-child(odd) .t-table__cell--fixed-left,\n.t-table--striped .t-table__tr:nth-child(odd) .t-table__cell--fixed-right", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-table-stripe-bg-color, var(--td-bg-color-secondarycontainer, var(--td-gray-color-1, #f3f3f3)))" + }, + { + "file": "packages/components/table/table.less", + "selector": ".t-table--striped .t-table__row--fixed-top:nth-child(odd) > .t-table__td,\n.t-table--striped .t-table__row--fixed-bottom:nth-child(odd) > .t-table__td", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-table-stripe-bg-color, var(--td-bg-color-secondarycontainer, var(--td-gray-color-1, #f3f3f3)))" + }, + { + "file": "packages/components/table/table.less", + "selector": ".t-table--striped .t-table__row--fixed-top:nth-child(odd) > .t-table__cell--fixed-left,\n.t-table--striped .t-table__row--fixed-bottom:nth-child(odd) > .t-table__cell--fixed-left,\n.t-table--striped .t-table__row--fixed-top:nth-child(odd) > .t-table__cell--fixed-right,\n.t-table--striped .t-table__row--fixed-bottom:nth-child(odd) > .t-table__cell--fixed-right", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-table-stripe-bg-color, var(--td-bg-color-secondarycontainer, var(--td-gray-color-1, #f3f3f3)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "tableTdPadding", + "miniComponent": "table", + "cssName": "--td-table-td-padding", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/table/table.less", + "selector": ".t-table__td", + "property": "padding", + "kind": "render-property", + "value": "var(--td-table-td-padding, var(--td-spacer, 16rpx) var(--td-spacer-1, 24rpx))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "tableThPadding", + "miniComponent": "table", + "cssName": "--td-table-th-padding", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/table/table.less", + "selector": ".t-table__th", + "property": "padding", + "kind": "render-property", + "value": "var(--td-table-th-padding, var(--td-spacer, 16rpx) var(--td-spacer-1, 24rpx))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "tabNavBgColor", + "miniComponent": "tabs", + "cssName": "--td-tab-nav-bg-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/tabs/tabs.less", + "selector": ".t-tabs", + "property": "background", + "kind": "render-property", + "value": "var(--td-tab-nav-bg-color, var(--td-bg-color-container, var(--td-font-white-1, #ffffff)))" + }, + { + "file": "packages/components/tabs/tabs.less", + "selector": ".t-tabs__wrapper", + "property": "background", + "kind": "render-property", + "value": "var(--td-tab-nav-bg-color, var(--td-bg-color-container, var(--td-font-white-1, #ffffff)))" + }, + { + "file": "packages/components/tabs/tabs.less", + "selector": ".t-tabs__item--card.t-tabs__item--active", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-tab-nav-bg-color, var(--td-bg-color-container, var(--td-font-white-1, #ffffff)))" + }, + { + "file": "packages/components/tabs/tabs.less", + "selector": ".t-tabs__item-prefix,\n.t-tabs__item-suffix", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-tab-nav-bg-color, var(--td-bg-color-container, var(--td-font-white-1, #ffffff)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "tabTrackColor", + "miniComponent": "tabs", + "cssName": "--td-tab-track-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/tabs/tabs.less", + "selector": ".t-tabs__track", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-tab-track-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "tabTrackRadius", + "miniComponent": "tabs", + "cssName": "--td-tab-track-radius", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/tabs/tabs.less", + "selector": ".t-tabs__track", + "property": "border-radius", + "kind": "render-property", + "value": "var(--td-tab-track-radius, 8rpx)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "tabTrackThickness", + "miniComponent": "tabs", + "cssName": "--td-tab-track-thickness", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/tabs/tabs.less", + "selector": ".t-tabs__track", + "property": "height", + "kind": "render-property", + "value": "var(--td-tab-track-thickness, 6rpx)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "tabTrackWidth", + "miniComponent": "tabs", + "cssName": "--td-tab-track-width", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/tabs/tabs.less", + "selector": ".t-tabs__track", + "property": "width", + "kind": "render-property", + "value": "var(--td-tab-track-width, 32rpx)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "tagCloseIconColor", + "miniComponent": "tag", + "cssName": "--td-tag-close-icon-color", + "previousDecision": "fallback-widget-verified-visual-pending", + "compiledUses": [ + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag__icon-close", + "property": "color", + "kind": "render-property", + "value": "var(--td-tag-close-icon-color, var(--td-text-color-placeholder, var(--td-font-gray-3, rgba(0, 0, 0, 0.4))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "tagDangerColor", + "miniComponent": "tag", + "cssName": "--td-tag-danger-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--dark.t-tag--danger", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-tag-danger-color, var(--td-error-color, var(--td-error-color-6, #d54941)))" + }, + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--dark.t-tag--danger", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-tag-danger-color, var(--td-error-color, var(--td-error-color-6, #d54941)))" + }, + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--outline.t-tag--danger", + "property": "color", + "kind": "render-property", + "value": "var(--td-tag-danger-color, var(--td-error-color, var(--td-error-color-6, #d54941)))" + }, + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--outline.t-tag--danger", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-tag-danger-color, var(--td-error-color, var(--td-error-color-6, #d54941)))" + }, + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--light.t-tag--danger", + "property": "color", + "kind": "render-property", + "value": "var(--td-tag-danger-color, var(--td-error-color, var(--td-error-color-6, #d54941)))" + }, + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--light-outline.t-tag--danger", + "property": "color", + "kind": "render-property", + "value": "var(--td-tag-danger-color, var(--td-error-color, var(--td-error-color-6, #d54941)))" + }, + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--light-outline.t-tag--danger", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-tag-danger-color, var(--td-error-color, var(--td-error-color-6, #d54941)))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag--dark.t-tag--danger", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-tag-danger-color, var(--td-error-color, var(--td-error-color-6, #d54941)))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag--dark.t-tag--danger", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-tag-danger-color, var(--td-error-color, var(--td-error-color-6, #d54941)))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag--outline.t-tag--danger", + "property": "color", + "kind": "render-property", + "value": "var(--td-tag-danger-color, var(--td-error-color, var(--td-error-color-6, #d54941)))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag--outline.t-tag--danger", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-tag-danger-color, var(--td-error-color, var(--td-error-color-6, #d54941)))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag--light.t-tag--danger", + "property": "color", + "kind": "render-property", + "value": "var(--td-tag-danger-color, var(--td-error-color, var(--td-error-color-6, #d54941)))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag--light-outline.t-tag--danger", + "property": "color", + "kind": "render-property", + "value": "var(--td-tag-danger-color, var(--td-error-color, var(--td-error-color-6, #d54941)))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag--light-outline.t-tag--danger", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-tag-danger-color, var(--td-error-color, var(--td-error-color-6, #d54941)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "tagDangerLightColor", + "miniComponent": "tag", + "cssName": "--td-tag-danger-light-color", + "previousDecision": "fallback-widget-verified-visual-pending", + "compiledUses": [ + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--outline.t-tag--danger", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-tag-danger-light-color, var(--td-error-color-1, #fff0ed))" + }, + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--light.t-tag--danger", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-tag-danger-light-color, var(--td-error-color-1, #fff0ed))" + }, + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--light.t-tag--danger", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-tag-danger-light-color, var(--td-error-color-1, #fff0ed))" + }, + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--light-outline.t-tag--danger", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-tag-danger-light-color, var(--td-error-color-1, #fff0ed))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag--outline.t-tag--danger", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-tag-danger-light-color, var(--td-error-color-1, #fff0ed))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag--light.t-tag--danger", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-tag-danger-light-color, var(--td-error-color-1, #fff0ed))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag--light.t-tag--danger", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-tag-danger-light-color, var(--td-error-color-1, #fff0ed))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag--light-outline.t-tag--danger", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-tag-danger-light-color, var(--td-error-color-1, #fff0ed))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "tagDefaultColor", + "miniComponent": "tag", + "cssName": "--td-tag-default-color", + "previousDecision": "fallback-widget-verified-visual-pending", + "compiledUses": [ + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--dark.t-tag--default", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-tag-default-color, var(--td-bg-color-component, var(--td-gray-color-3, #e7e7e7)))" + }, + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--dark.t-tag--default", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-tag-default-color, var(--td-bg-color-component, var(--td-gray-color-3, #e7e7e7)))" + }, + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--outline.t-tag--default", + "property": "color", + "kind": "render-property", + "value": "var(--td-tag-default-color, var(--td-bg-color-component, var(--td-gray-color-3, #e7e7e7)))" + }, + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--outline.t-tag--default", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-tag-default-color, var(--td-bg-color-component, var(--td-gray-color-3, #e7e7e7)))" + }, + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--light.t-tag--default", + "property": "color", + "kind": "render-property", + "value": "var(--td-tag-default-color, var(--td-bg-color-component, var(--td-gray-color-3, #e7e7e7)))" + }, + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--light-outline.t-tag--default", + "property": "color", + "kind": "render-property", + "value": "var(--td-tag-default-color, var(--td-bg-color-component, var(--td-gray-color-3, #e7e7e7)))" + }, + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--light-outline.t-tag--default", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-tag-default-color, var(--td-bg-color-component, var(--td-gray-color-3, #e7e7e7)))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag--dark.t-tag--default", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-tag-default-color, var(--td-bg-color-component, var(--td-gray-color-3, #e7e7e7)))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag--dark.t-tag--default", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-tag-default-color, var(--td-bg-color-component, var(--td-gray-color-3, #e7e7e7)))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag--outline.t-tag--default", + "property": "color", + "kind": "render-property", + "value": "var(--td-tag-default-color, var(--td-bg-color-component, var(--td-gray-color-3, #e7e7e7)))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag--outline.t-tag--default", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-tag-default-color, var(--td-bg-color-component, var(--td-gray-color-3, #e7e7e7)))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag--light.t-tag--default", + "property": "color", + "kind": "render-property", + "value": "var(--td-tag-default-color, var(--td-bg-color-component, var(--td-gray-color-3, #e7e7e7)))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag--light-outline.t-tag--default", + "property": "color", + "kind": "render-property", + "value": "var(--td-tag-default-color, var(--td-bg-color-component, var(--td-gray-color-3, #e7e7e7)))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag--light-outline.t-tag--default", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-tag-default-color, var(--td-bg-color-component, var(--td-gray-color-3, #e7e7e7)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "tagDefaultFontColor", + "miniComponent": "tag", + "cssName": "--td-tag-default-font-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--dark.t-tag--default", + "property": "color", + "kind": "render-property", + "value": "var(--td-tag-default-font-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + }, + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--outline.t-tag--default", + "property": "color", + "kind": "render-property", + "value": "var(--td-tag-default-font-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + }, + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--light.t-tag--default", + "property": "color", + "kind": "render-property", + "value": "var(--td-tag-default-font-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + }, + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--light-outline.t-tag--default", + "property": "color", + "kind": "render-property", + "value": "var(--td-tag-default-font-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag--dark.t-tag--default", + "property": "color", + "kind": "render-property", + "value": "var(--td-tag-default-font-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag--outline.t-tag--default", + "property": "color", + "kind": "render-property", + "value": "var(--td-tag-default-font-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag--light.t-tag--default", + "property": "color", + "kind": "render-property", + "value": "var(--td-tag-default-font-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag--light-outline.t-tag--default", + "property": "color", + "kind": "render-property", + "value": "var(--td-tag-default-font-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "tagDefaultLightColor", + "miniComponent": "tag", + "cssName": "--td-tag-default-light-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--outline.t-tag--default", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-tag-default-light-color, var(--td-bg-color-secondarycontainer, var(--td-gray-color-1, #f3f3f3)))" + }, + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--light.t-tag--default", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-tag-default-light-color, var(--td-bg-color-secondarycontainer, var(--td-gray-color-1, #f3f3f3)))" + }, + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--light.t-tag--default", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-tag-default-light-color, var(--td-bg-color-secondarycontainer, var(--td-gray-color-1, #f3f3f3)))" + }, + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--light-outline.t-tag--default", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-tag-default-light-color, var(--td-bg-color-secondarycontainer, var(--td-gray-color-1, #f3f3f3)))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag--outline.t-tag--default", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-tag-default-light-color, var(--td-bg-color-secondarycontainer, var(--td-gray-color-1, #f3f3f3)))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag--light.t-tag--default", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-tag-default-light-color, var(--td-bg-color-secondarycontainer, var(--td-gray-color-1, #f3f3f3)))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag--light.t-tag--default", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-tag-default-light-color, var(--td-bg-color-secondarycontainer, var(--td-gray-color-1, #f3f3f3)))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag--light-outline.t-tag--default", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-tag-default-light-color, var(--td-bg-color-secondarycontainer, var(--td-gray-color-1, #f3f3f3)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "tagDisabledBackgroundColor", + "miniComponent": "tag", + "cssName": "--td-tag-disabled-background-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag.t-tag--closable.t-tag--disabled", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-tag-disabled-background-color, var(--td-bg-color-component-disabled, var(--td-gray-color-2, #eeeeee)))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag.t-tag--closable.t-tag--disabled", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-tag-disabled-background-color, var(--td-bg-color-component-disabled, var(--td-gray-color-2, #eeeeee)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "tagDisabledBorderColor", + "miniComponent": "tag", + "cssName": "--td-tag-disabled-border-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag.t-tag--closable.t-tag--disabled", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-tag-disabled-border-color, var(--td-component-border, var(--td-gray-color-4, #dcdcdc)))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag.t-tag--closable.t-tag--disabled", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-tag-disabled-border-color, var(--td-component-border, var(--td-gray-color-4, #dcdcdc)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "tagDisabledColor", + "miniComponent": "tag", + "cssName": "--td-tag-disabled-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag.t-tag--closable.t-tag--disabled", + "property": "color", + "kind": "render-property", + "value": "var(--td-tag-disabled-color, var(--td-text-color-disabled, var(--td-font-gray-4, rgba(0, 0, 0, 0.26))))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag.t-tag--closable.t-tag--disabled", + "property": "color", + "kind": "render-property", + "value": "var(--td-tag-disabled-color, var(--td-text-color-disabled, var(--td-font-gray-4, rgba(0, 0, 0, 0.26))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "tagExtraLargeFont", + "miniComponent": "tag", + "cssName": "--td-tag-extra-large-font", + "previousDecision": "default-widget-value-verified", + "compiledUses": [ + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--extra-large", + "property": "font", + "kind": "render-property", + "value": "var(--td-tag-extra-large-font, var(--td-font-body-medium, 28rpx / 44rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag.t-tag--extra-large", + "property": "font", + "kind": "render-property", + "value": "var(--td-tag-extra-large-font, var(--td-font-body-medium, 28rpx / 44rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "tagExtraLargeIconSize", + "miniComponent": "tag", + "cssName": "--td-tag-extra-large-icon-size", + "previousDecision": "default-widget-value-verified", + "compiledUses": [ + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--extra-large .t-icon,\n.t-tag--extra-large .t-icon-close", + "property": "font-size", + "kind": "render-property", + "value": "var(--td-tag-extra-large-icon-size, 32rpx)" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag.t-tag--extra-large .t-icon,\n.t-tag.t-tag--extra-large .t-icon-close", + "property": "font-size", + "kind": "render-property", + "value": "var(--td-tag-extra-large-icon-size, 32rpx)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "tagExtraLargePadding", + "miniComponent": "tag", + "cssName": "--td-tag-extra-large-padding", + "previousDecision": "default-widget-value-verified", + "compiledUses": [ + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--extra-large", + "property": "padding", + "kind": "render-property", + "value": "var(--td-tag-extra-large-padding, var(--td-spacer, 16rpx) 30rpx)" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag.t-tag--extra-large", + "property": "padding", + "kind": "render-property", + "value": "var(--td-tag-extra-large-padding, var(--td-spacer, 16rpx) 30rpx)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "tagLargeFont", + "miniComponent": "tag", + "cssName": "--td-tag-large-font", + "previousDecision": "default-widget-value-verified", + "compiledUses": [ + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--large", + "property": "font", + "kind": "render-property", + "value": "var(--td-tag-large-font, var(--td-font-body-medium, 28rpx / 44rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag.t-tag--large", + "property": "font", + "kind": "render-property", + "value": "var(--td-tag-large-font, var(--td-font-body-medium, 28rpx / 44rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "tagLargeIconSize", + "miniComponent": "tag", + "cssName": "--td-tag-large-icon-size", + "previousDecision": "default-widget-value-verified", + "compiledUses": [ + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--large .t-icon,\n.t-tag--large .t-icon-close", + "property": "font-size", + "kind": "render-property", + "value": "var(--td-tag-large-icon-size, 32rpx)" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag.t-tag--large .t-icon,\n.t-tag.t-tag--large .t-icon-close", + "property": "font-size", + "kind": "render-property", + "value": "var(--td-tag-large-icon-size, 32rpx)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "tagLargePadding", + "miniComponent": "tag", + "cssName": "--td-tag-large-padding", + "previousDecision": "default-widget-value-verified", + "compiledUses": [ + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--large", + "property": "padding", + "kind": "render-property", + "value": "var(--td-tag-large-padding, calc(var(--td-spacer, 16rpx) / 4) 14rpx)" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag.t-tag--large", + "property": "padding", + "kind": "render-property", + "value": "var(--td-tag-large-padding, calc(var(--td-spacer, 16rpx) / 4) 14rpx)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "tagMarkBorderRadius", + "miniComponent": "tag", + "cssName": "--td-tag-mark-border-radius", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag.t-tag--mark", + "property": "border-radius", + "kind": "render-property", + "value": "0 var(--td-tag-mark-border-radius, var(--td-tag-round-border-radius, var(--td-radius-round, 999px))) var(--td-tag-mark-border-radius, var(--td-tag-round-border-radius, var(--td-radius-round, 999px))) 0" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag.t-tag--mark", + "property": "border-top-right-radius", + "kind": "render-property", + "value": "var(--td-tag-mark-border-radius, var(--td-tag-round-border-radius, var(--td-radius-round, 999px)))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag.t-tag--mark", + "property": "border-bottom-right-radius", + "kind": "render-property", + "value": "var(--td-tag-mark-border-radius, var(--td-tag-round-border-radius, var(--td-radius-round, 999px)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "tagMediumFont", + "miniComponent": "tag", + "cssName": "--td-tag-medium-font", + "previousDecision": "default-widget-value-verified", + "compiledUses": [ + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--medium", + "property": "font", + "kind": "render-property", + "value": "var(--td-tag-medium-font, var(--td-font-body-small, 24rpx / 40rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag.t-tag--medium", + "property": "font", + "kind": "render-property", + "value": "var(--td-tag-medium-font, var(--td-font-body-small, 24rpx / 40rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "tagMediumIconSize", + "miniComponent": "tag", + "cssName": "--td-tag-medium-icon-size", + "previousDecision": "default-widget-value-verified", + "compiledUses": [ + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--medium .t-icon,\n.t-tag--medium .t-icon-close", + "property": "font-size", + "kind": "render-property", + "value": "var(--td-tag-medium-icon-size, 28rpx)" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag.t-tag--medium .t-icon,\n.t-tag.t-tag--medium .t-icon-close", + "property": "font-size", + "kind": "render-property", + "value": "var(--td-tag-medium-icon-size, 28rpx)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "tagMediumPadding", + "miniComponent": "tag", + "cssName": "--td-tag-medium-padding", + "previousDecision": "default-widget-value-verified", + "compiledUses": [ + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--medium", + "property": "padding", + "kind": "render-property", + "value": "var(--td-tag-medium-padding, 2rpx 14rpx)" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag.t-tag--medium", + "property": "padding", + "kind": "render-property", + "value": "var(--td-tag-medium-padding, 2rpx 14rpx)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "tagOutlineBgColor", + "miniComponent": "tag", + "cssName": "--td-tag-outline-bg-color", + "previousDecision": "fallback-widget-verified-visual-pending", + "compiledUses": [ + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--outline.t-tag--default", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-tag-outline-bg-color, var(--td-bg-color-container, var(--td-font-white-1, #ffffff)))" + }, + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--outline.t-tag--primary", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-tag-outline-bg-color, var(--td-bg-color-container, var(--td-font-white-1, #ffffff)))" + }, + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--outline.t-tag--success", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-tag-outline-bg-color, var(--td-bg-color-container, var(--td-font-white-1, #ffffff)))" + }, + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--outline.t-tag--warning", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-tag-outline-bg-color, var(--td-bg-color-container, var(--td-font-white-1, #ffffff)))" + }, + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--outline.t-tag--danger", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-tag-outline-bg-color, var(--td-bg-color-container, var(--td-font-white-1, #ffffff)))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag--outline.t-tag--default", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-tag-outline-bg-color, var(--td-bg-color-container, var(--td-font-white-1, #ffffff)))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag--outline.t-tag--primary", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-tag-outline-bg-color, var(--td-bg-color-container, var(--td-font-white-1, #ffffff)))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag--outline.t-tag--success", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-tag-outline-bg-color, var(--td-bg-color-container, var(--td-font-white-1, #ffffff)))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag--outline.t-tag--warning", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-tag-outline-bg-color, var(--td-bg-color-container, var(--td-font-white-1, #ffffff)))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag--outline.t-tag--danger", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-tag-outline-bg-color, var(--td-bg-color-container, var(--td-font-white-1, #ffffff)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "tagPrimaryColor", + "miniComponent": "tag", + "cssName": "--td-tag-primary-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--dark.t-tag--primary", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-tag-primary-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + }, + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--dark.t-tag--primary", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-tag-primary-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + }, + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--outline.t-tag--primary", + "property": "color", + "kind": "render-property", + "value": "var(--td-tag-primary-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + }, + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--outline.t-tag--primary", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-tag-primary-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + }, + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--light.t-tag--primary", + "property": "color", + "kind": "render-property", + "value": "var(--td-tag-primary-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + }, + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--light-outline.t-tag--primary", + "property": "color", + "kind": "render-property", + "value": "var(--td-tag-primary-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + }, + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--light-outline.t-tag--primary", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-tag-primary-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag--dark.t-tag--primary", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-tag-primary-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag--dark.t-tag--primary", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-tag-primary-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag--outline.t-tag--primary", + "property": "color", + "kind": "render-property", + "value": "var(--td-tag-primary-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag--outline.t-tag--primary", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-tag-primary-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag--light.t-tag--primary", + "property": "color", + "kind": "render-property", + "value": "var(--td-tag-primary-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag--light-outline.t-tag--primary", + "property": "color", + "kind": "render-property", + "value": "var(--td-tag-primary-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag--light-outline.t-tag--primary", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-tag-primary-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "tagPrimaryLightColor", + "miniComponent": "tag", + "cssName": "--td-tag-primary-light-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--outline.t-tag--primary", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-tag-primary-light-color, var(--td-brand-color-light, var(--td-primary-color-1, #f2f3ff)))" + }, + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--light.t-tag--primary", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-tag-primary-light-color, var(--td-brand-color-light, var(--td-primary-color-1, #f2f3ff)))" + }, + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--light.t-tag--primary", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-tag-primary-light-color, var(--td-brand-color-light, var(--td-primary-color-1, #f2f3ff)))" + }, + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--light-outline.t-tag--primary", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-tag-primary-light-color, var(--td-brand-color-light, var(--td-primary-color-1, #f2f3ff)))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag--outline.t-tag--primary", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-tag-primary-light-color, var(--td-brand-color-light, var(--td-primary-color-1, #f2f3ff)))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag--light.t-tag--primary", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-tag-primary-light-color, var(--td-brand-color-light, var(--td-primary-color-1, #f2f3ff)))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag--light.t-tag--primary", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-tag-primary-light-color, var(--td-brand-color-light, var(--td-primary-color-1, #f2f3ff)))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag--light-outline.t-tag--primary", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-tag-primary-light-color, var(--td-brand-color-light, var(--td-primary-color-1, #f2f3ff)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "tagRoundBorderRadius", + "miniComponent": "tag", + "cssName": "--td-tag-round-border-radius", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag.t-tag--round", + "property": "border-radius", + "kind": "render-property", + "value": "var(--td-tag-round-border-radius, var(--td-radius-round, 999px))" + }, + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag.t-tag--mark", + "property": "border-radius", + "kind": "render-property", + "value": "0 var(--td-tag-mark-border-radius, var(--td-tag-round-border-radius, var(--td-radius-round, 999px))) var(--td-tag-mark-border-radius, var(--td-tag-round-border-radius, var(--td-radius-round, 999px))) 0" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag.t-tag--round", + "property": "border-radius", + "kind": "render-property", + "value": "var(--td-tag-round-border-radius, var(--td-radius-round, 999px))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag.t-tag--mark", + "property": "border-top-right-radius", + "kind": "render-property", + "value": "var(--td-tag-mark-border-radius, var(--td-tag-round-border-radius, var(--td-radius-round, 999px)))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag.t-tag--mark", + "property": "border-bottom-right-radius", + "kind": "render-property", + "value": "var(--td-tag-mark-border-radius, var(--td-tag-round-border-radius, var(--td-radius-round, 999px)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "tagSmallFont", + "miniComponent": "tag", + "cssName": "--td-tag-small-font", + "previousDecision": "default-widget-value-verified", + "compiledUses": [ + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--small", + "property": "font", + "kind": "render-property", + "value": "var(--td-tag-small-font, var(--td-font-body-extraSmall, 20rpx / 32rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag.t-tag--small", + "property": "font", + "kind": "render-property", + "value": "var(--td-tag-small-font, var(--td-font-body-extraSmall, 20rpx / 32rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "tagSmallIconSize", + "miniComponent": "tag", + "cssName": "--td-tag-small-icon-size", + "previousDecision": "default-widget-value-verified", + "compiledUses": [ + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--small .t-icon,\n.t-tag--small .t-icon-close", + "property": "font-size", + "kind": "render-property", + "value": "var(--td-tag-small-icon-size, 24rpx)" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag.t-tag--small .t-icon,\n.t-tag.t-tag--small .t-icon-close", + "property": "font-size", + "kind": "render-property", + "value": "var(--td-tag-small-icon-size, 24rpx)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "tagSmallPadding", + "miniComponent": "tag", + "cssName": "--td-tag-small-padding", + "previousDecision": "default-widget-value-verified", + "compiledUses": [ + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--small", + "property": "padding", + "kind": "render-property", + "value": "var(--td-tag-small-padding, 2rpx 10rpx)" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag.t-tag--small", + "property": "padding", + "kind": "render-property", + "value": "var(--td-tag-small-padding, 2rpx 10rpx)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "tagSquareBorderRadius", + "miniComponent": "tag", + "cssName": "--td-tag-square-border-radius", + "previousDecision": "fallback-widget-verified-visual-pending", + "compiledUses": [ + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag", + "property": "border-radius", + "kind": "render-property", + "value": "var(--td-tag-square-border-radius, 8rpx)" + }, + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag.t-tag--square", + "property": "border-radius", + "kind": "render-property", + "value": "var(--td-tag-square-border-radius, 8rpx)" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag", + "property": "border-radius", + "kind": "render-property", + "value": "var(--td-tag-square-border-radius, 8rpx)" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag.t-tag--square", + "property": "border-radius", + "kind": "render-property", + "value": "var(--td-tag-square-border-radius, 8rpx)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "tagSuccessColor", + "miniComponent": "tag", + "cssName": "--td-tag-success-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--dark.t-tag--success", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-tag-success-color, var(--td-success-color, var(--td-success-color-5, #2ba471)))" + }, + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--dark.t-tag--success", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-tag-success-color, var(--td-success-color, var(--td-success-color-5, #2ba471)))" + }, + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--outline.t-tag--success", + "property": "color", + "kind": "render-property", + "value": "var(--td-tag-success-color, var(--td-success-color, var(--td-success-color-5, #2ba471)))" + }, + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--outline.t-tag--success", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-tag-success-color, var(--td-success-color, var(--td-success-color-5, #2ba471)))" + }, + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--light.t-tag--success", + "property": "color", + "kind": "render-property", + "value": "var(--td-tag-success-color, var(--td-success-color, var(--td-success-color-5, #2ba471)))" + }, + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--light-outline.t-tag--success", + "property": "color", + "kind": "render-property", + "value": "var(--td-tag-success-color, var(--td-success-color, var(--td-success-color-5, #2ba471)))" + }, + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--light-outline.t-tag--success", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-tag-success-color, var(--td-success-color, var(--td-success-color-5, #2ba471)))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag--dark.t-tag--success", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-tag-success-color, var(--td-success-color, var(--td-success-color-5, #2ba471)))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag--dark.t-tag--success", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-tag-success-color, var(--td-success-color, var(--td-success-color-5, #2ba471)))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag--outline.t-tag--success", + "property": "color", + "kind": "render-property", + "value": "var(--td-tag-success-color, var(--td-success-color, var(--td-success-color-5, #2ba471)))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag--outline.t-tag--success", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-tag-success-color, var(--td-success-color, var(--td-success-color-5, #2ba471)))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag--light.t-tag--success", + "property": "color", + "kind": "render-property", + "value": "var(--td-tag-success-color, var(--td-success-color, var(--td-success-color-5, #2ba471)))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag--light-outline.t-tag--success", + "property": "color", + "kind": "render-property", + "value": "var(--td-tag-success-color, var(--td-success-color, var(--td-success-color-5, #2ba471)))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag--light-outline.t-tag--success", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-tag-success-color, var(--td-success-color, var(--td-success-color-5, #2ba471)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "tagSuccessLightColor", + "miniComponent": "tag", + "cssName": "--td-tag-success-light-color", + "previousDecision": "fallback-widget-verified-visual-pending", + "compiledUses": [ + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--outline.t-tag--success", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-tag-success-light-color, var(--td-success-color-1, #e3f9e9))" + }, + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--light.t-tag--success", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-tag-success-light-color, var(--td-success-color-1, #e3f9e9))" + }, + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--light.t-tag--success", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-tag-success-light-color, var(--td-success-color-1, #e3f9e9))" + }, + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--light-outline.t-tag--success", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-tag-success-light-color, var(--td-success-color-1, #e3f9e9))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag--outline.t-tag--success", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-tag-success-light-color, var(--td-success-color-1, #e3f9e9))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag--light.t-tag--success", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-tag-success-light-color, var(--td-success-color-1, #e3f9e9))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag--light.t-tag--success", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-tag-success-light-color, var(--td-success-color-1, #e3f9e9))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag--light-outline.t-tag--success", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-tag-success-light-color, var(--td-success-color-1, #e3f9e9))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "tagWarningColor", + "miniComponent": "tag", + "cssName": "--td-tag-warning-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--dark.t-tag--warning", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-tag-warning-color, var(--td-warning-color, var(--td-warning-color-5, #e37318)))" + }, + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--dark.t-tag--warning", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-tag-warning-color, var(--td-warning-color, var(--td-warning-color-5, #e37318)))" + }, + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--outline.t-tag--warning", + "property": "color", + "kind": "render-property", + "value": "var(--td-tag-warning-color, var(--td-warning-color, var(--td-warning-color-5, #e37318)))" + }, + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--outline.t-tag--warning", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-tag-warning-color, var(--td-warning-color, var(--td-warning-color-5, #e37318)))" + }, + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--light.t-tag--warning", + "property": "color", + "kind": "render-property", + "value": "var(--td-tag-warning-color, var(--td-warning-color, var(--td-warning-color-5, #e37318)))" + }, + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--light-outline.t-tag--warning", + "property": "color", + "kind": "render-property", + "value": "var(--td-tag-warning-color, var(--td-warning-color, var(--td-warning-color-5, #e37318)))" + }, + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--light-outline.t-tag--warning", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-tag-warning-color, var(--td-warning-color, var(--td-warning-color-5, #e37318)))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag--dark.t-tag--warning", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-tag-warning-color, var(--td-warning-color, var(--td-warning-color-5, #e37318)))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag--dark.t-tag--warning", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-tag-warning-color, var(--td-warning-color, var(--td-warning-color-5, #e37318)))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag--outline.t-tag--warning", + "property": "color", + "kind": "render-property", + "value": "var(--td-tag-warning-color, var(--td-warning-color, var(--td-warning-color-5, #e37318)))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag--outline.t-tag--warning", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-tag-warning-color, var(--td-warning-color, var(--td-warning-color-5, #e37318)))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag--light.t-tag--warning", + "property": "color", + "kind": "render-property", + "value": "var(--td-tag-warning-color, var(--td-warning-color, var(--td-warning-color-5, #e37318)))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag--light-outline.t-tag--warning", + "property": "color", + "kind": "render-property", + "value": "var(--td-tag-warning-color, var(--td-warning-color, var(--td-warning-color-5, #e37318)))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag--light-outline.t-tag--warning", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-tag-warning-color, var(--td-warning-color, var(--td-warning-color-5, #e37318)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "tagWarningLightColor", + "miniComponent": "tag", + "cssName": "--td-tag-warning-light-color", + "previousDecision": "fallback-widget-verified-visual-pending", + "compiledUses": [ + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--outline.t-tag--warning", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-tag-warning-light-color, var(--td-warning-color-1, #fff1e9))" + }, + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--light.t-tag--warning", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-tag-warning-light-color, var(--td-warning-color-1, #fff1e9))" + }, + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--light.t-tag--warning", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-tag-warning-light-color, var(--td-warning-color-1, #fff1e9))" + }, + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--light-outline.t-tag--warning", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-tag-warning-light-color, var(--td-warning-color-1, #fff1e9))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag--outline.t-tag--warning", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-tag-warning-light-color, var(--td-warning-color-1, #fff1e9))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag--light.t-tag--warning", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-tag-warning-light-color, var(--td-warning-color-1, #fff1e9))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag--light.t-tag--warning", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-tag-warning-light-color, var(--td-warning-color-1, #fff1e9))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag--light-outline.t-tag--warning", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-tag-warning-light-color, var(--td-warning-color-1, #fff1e9))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "textareaBackgroundColor", + "miniComponent": "textarea", + "cssName": "--td-textarea-background-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/textarea/textarea.less", + "selector": ".t-textarea", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-textarea-background-color, var(--td-bg-color-container, var(--td-font-white-1, #ffffff)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "textareaBorderColor", + "miniComponent": "textarea", + "cssName": "--td-textarea-border-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/textarea/textarea.less", + "selector": ".t-textarea--border::after", + "property": "border", + "kind": "render-property", + "value": "2rpx solid var(--td-textarea-border-color, var(--td-component-border, var(--td-gray-color-4, #dcdcdc)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "textareaBorderRadius", + "miniComponent": "textarea", + "cssName": "--td-textarea-border-radius", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/textarea/textarea.less", + "selector": ".t-textarea--border", + "property": "border-radius", + "kind": "render-property", + "value": "var(--td-textarea-border-radius, var(--td-radius-default, 12rpx))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "textareaDisabledTextColor", + "miniComponent": "textarea", + "cssName": "--td-textarea-disabled-text-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/textarea/textarea.less", + "selector": ".t-textarea .t-is-disabled", + "property": "color", + "kind": "render-property", + "value": "var(--td-textarea-disabled-text-color, var(--td-text-color-disabled, var(--td-font-gray-4, rgba(0, 0, 0, 0.26))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "textareaIndicatorTextColor", + "miniComponent": "textarea", + "cssName": "--td-textarea-indicator-text-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/textarea/textarea.less", + "selector": ".t-textarea__indicator:not(:empty)", + "property": "color", + "kind": "render-property", + "value": "var(--td-textarea-indicator-text-color, var(--td-text-color-placeholder, var(--td-font-gray-3, rgba(0, 0, 0, 0.4))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "textareaLabelColor", + "miniComponent": "textarea", + "cssName": "--td-textarea-label-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/textarea/textarea.less", + "selector": ".t-textarea__label:not(:empty)", + "property": "color", + "kind": "render-property", + "value": "var(--td-textarea-label-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "textareaPadding", + "miniComponent": "textarea", + "cssName": "--td-textarea-padding", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/textarea/textarea.less", + "selector": ".t-textarea", + "property": "padding", + "kind": "render-property", + "value": "var(--td-textarea-padding, var(--td-spacer-2, 32rpx))" + } + ], + "nonLessReferences": [ + { + "file": "packages/components/form/_example/horizontal/index.wxss", + "line": 16, + "text": "--td-textarea-padding: 0;" + }, + { + "file": "packages/components/form/_example/vertical/index.wxss", + "line": 10, + "text": "--td-textarea-padding: 0;" + } + ], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "textareaPlaceholderColor", + "miniComponent": "textarea", + "cssName": "--td-textarea-placeholder-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/textarea/textarea.less", + "selector": ".t-textarea__placeholder", + "property": "color", + "kind": "render-property", + "value": "var(--td-textarea-placeholder-color, var(--td-text-color-placeholder, var(--td-font-gray-3, rgba(0, 0, 0, 0.4))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "textareaTextColor", + "miniComponent": "textarea", + "cssName": "--td-textarea-text-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/textarea/textarea.less", + "selector": ".t-textarea__wrapper-inner", + "property": "color", + "kind": "render-property", + "value": "var(--td-textarea-text-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "toastBgColor", + "miniComponent": "toast", + "cssName": "--td-toast-bg-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/toast/toast.less", + "selector": ".t-toast", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-toast-bg-color, var(--td-mask-active, rgba(0, 0, 0, 0.6)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "toastColor", + "miniComponent": "toast", + "cssName": "--td-toast-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/toast/toast.less", + "selector": ".t-toast", + "property": "color", + "kind": "render-property", + "value": "var(--td-toast-color, var(--td-text-color-anti, var(--td-font-white-1, #ffffff)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "toastColumnIconSize", + "miniComponent": "toast", + "cssName": "--td-toast-column-icon-size", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/toast/toast.less", + "selector": ".t-toast__icon--column", + "property": "font-size", + "kind": "render-property", + "value": "var(--td-toast-column-icon-size, 64rpx)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "toastMaxWidth", + "miniComponent": "toast", + "cssName": "--td-toast-max-width", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/toast/toast.less", + "selector": ".t-toast", + "property": "max-width", + "kind": "render-property", + "value": "var(--td-toast-max-width, 370rpx)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "toastRadius", + "miniComponent": "toast", + "cssName": "--td-toast-radius", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/toast/toast.less", + "selector": ".t-toast", + "property": "border-radius", + "kind": "render-property", + "value": "var(--td-toast-radius, var(--td-radius-default, 12rpx))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "toastRowIconSize", + "miniComponent": "toast", + "cssName": "--td-toast-row-icon-size", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/toast/toast.less", + "selector": ".t-toast__icon--row", + "property": "font-size", + "kind": "render-property", + "value": "var(--td-toast-row-icon-size, 48rpx)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "treeBgColor", + "miniComponent": "tree-select", + "cssName": "--td-tree-bg-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/tree-select/tree-select.less", + "selector": ".t-tree-select", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-tree-bg-color, var(--td-bg-color-container, var(--td-font-white-1, #ffffff)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "treeColumTextColor", + "miniComponent": "tree-select", + "cssName": "--td-tree-colum-text-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/tree-select/tree-select.less", + "selector": ".t-tree-select__column", + "property": "color", + "kind": "render-property", + "value": "var(--td-tree-colum-text-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "treeColumWidth", + "miniComponent": "tree-select", + "cssName": "--td-tree-colum-width", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/tree-select/tree-select.less", + "selector": ".t-tree-select__column", + "property": "width", + "kind": "render-property", + "value": "var(--td-tree-colum-width, 206rpx)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "treeItemActiveColor", + "miniComponent": "tree-select", + "cssName": "--td-tree-item-active-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/tree-select/tree-select.less", + "selector": ".t-tree-select__item--active", + "property": "color", + "kind": "render-property", + "value": "var(--td-tree-item-active-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "treeItemDisabledColor", + "miniComponent": "tree-select", + "cssName": "--td-tree-item-disabled-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/tree-select/tree-select.less", + "selector": ".t-tree-select__item--disabled", + "property": "color", + "kind": "render-property", + "value": "var(--td-tree-item-disabled-color, var(--td-text-color-disabled, var(--td-font-gray-4, rgba(0, 0, 0, 0.26))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "treeItemFontSize", + "miniComponent": "tree-select", + "cssName": "--td-tree-item-font-size", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/tree-select/tree-select.less", + "selector": ".t-tree-select__item", + "property": "font-size", + "kind": "render-property", + "value": "var(--td-tree-item-font-size, var(--td-font-size-m, 32rpx))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "treeItemHeight", + "miniComponent": "tree-select", + "cssName": "--td-tree-item-height", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/tree-select/tree-select.less", + "selector": ".t-tree-select__item", + "property": "height", + "kind": "render-property", + "value": "var(--td-tree-item-height, 112rpx)" + }, + { + "file": "packages/components/tree-select/tree-select.less", + "selector": ".t-tree-select__item", + "property": "line-height", + "kind": "render-property", + "value": "var(--td-tree-item-height, 112rpx)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "treeRootBgColor", + "miniComponent": "tree-select", + "cssName": "--td-tree-root-bg-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/tree-select/tree-select.less", + "selector": ".t-tree-select__column--left", + "property": "background", + "kind": "render-property", + "value": "var(--td-tree-root-bg-color, var(--td-bg-color-secondarycontainer, var(--td-gray-color-1, #f3f3f3)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "uploadAddBgColor", + "miniComponent": "upload", + "cssName": "--td-upload-add-bg-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/upload/upload.less", + "selector": ".t-upload__add-icon", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-upload-add-bg-color, var(--td-bg-color-secondarycontainer, var(--td-gray-color-1, #f3f3f3)))" + }, + { + "file": "packages/components/upload/upload.less", + "selector": ".t-upload__wrapper--file", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-upload-background, var(--td-upload-add-bg-color, var(--td-bg-color-secondarycontainer, var(--td-gray-color-1, #f3f3f3))))" + }, + { + "file": "packages/components/upload/upload.less", + "selector": ".t-upload__list-item", + "property": "background", + "kind": "render-property", + "value": "var(--td-upload-background, var(--td-upload-add-bg-color, var(--td-bg-color-secondarycontainer, var(--td-gray-color-1, #f3f3f3))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "uploadAddColor", + "miniComponent": "upload", + "cssName": "--td-upload-add-color", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/upload/upload.less", + "selector": ".t-upload__add-icon", + "property": "color", + "kind": "render-property", + "value": "var(--td-upload-add-color, var(--td-text-color-placeholder, var(--td-font-gray-3, rgba(0, 0, 0, 0.4))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "uploadAddDisabledBgColor", + "miniComponent": "upload", + "cssName": "--td-upload-add-disabled-bg-color", + "previousDecision": "no-frozen-source-consumer-found", + "compiledUses": [], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "no-consumer-in-compiled-css-or-other-source", + "finalPaintVerified": false + }, + { + "name": "uploadAddIconDisabledColor", + "miniComponent": "upload", + "cssName": "--td-upload-add-icon-disabled-color", + "previousDecision": "no-frozen-source-consumer-found", + "compiledUses": [], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "no-consumer-in-compiled-css-or-other-source", + "finalPaintVerified": false + }, + { + "name": "uploadAddIconSize", + "miniComponent": "upload", + "cssName": "--td-upload-add-icon-size", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/upload/upload.less", + "selector": ".t-upload__add-icon", + "property": "font-size", + "kind": "render-property", + "value": "var(--td-upload-add-icon-size, 56rpx)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "uploadBackground", + "miniComponent": "upload", + "cssName": "--td-upload-background", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/upload/upload.less", + "selector": ".t-upload__wrapper--file", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-upload-background, var(--td-upload-add-bg-color, var(--td-bg-color-secondarycontainer, var(--td-gray-color-1, #f3f3f3))))" + }, + { + "file": "packages/components/upload/upload.less", + "selector": ".t-upload__list-item", + "property": "background", + "kind": "render-property", + "value": "var(--td-upload-background, var(--td-upload-add-bg-color, var(--td-bg-color-secondarycontainer, var(--td-gray-color-1, #f3f3f3))))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "uploadDisabledMask", + "miniComponent": "upload", + "cssName": "--td-upload-disabled-mask", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/upload/upload.less", + "selector": ".t-upload__disabled-mask", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-upload-disabled-mask, var(--td-mask-disabled, rgba(255, 255, 255, 0.6)))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "uploadDragTransitionDuration", + "miniComponent": "upload", + "cssName": "--td-upload-drag-transition-duration", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/upload/upload.less", + "selector": ".t-upload__drag--tran", + "property": "transition-duration", + "kind": "render-property", + "value": "var(--td-upload-drag-transition-duration)" + } + ], + "nonLessReferences": [ + { + "file": "packages/components/upload/upload.wxml", + "line": 216, + "text": "style=\"--td-upload-drag-transition-duration: {{transition.duration}}ms; --td-upload-drag-transition-timing-function: {{transition.timingFunction}}\"" + }, + { + "file": "packages/components/upload/upload.wxml", + "line": 294, + "text": "style=\"width: {{100 / column}}%; --td-upload-drag-transition-duration: {{transition.duration}}ms; --td-upload-drag-transition-timing-function: {{transition.timingFunction}}\"" + } + ], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "uploadDragTransitionTimingFunction", + "miniComponent": "upload", + "cssName": "--td-upload-drag-transition-timing-function", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/upload/upload.less", + "selector": ".t-upload__drag--tran", + "property": "transition-timing-function", + "kind": "render-property", + "value": "var(--td-upload-drag-transition-timing-function)" + } + ], + "nonLessReferences": [ + { + "file": "packages/components/upload/upload.wxml", + "line": 216, + "text": "style=\"--td-upload-drag-transition-duration: {{transition.duration}}ms; --td-upload-drag-transition-timing-function: {{transition.timingFunction}}\"" + }, + { + "file": "packages/components/upload/upload.wxml", + "line": 294, + "text": "style=\"width: {{100 / column}}%; --td-upload-drag-transition-duration: {{transition.duration}}ms; --td-upload-drag-transition-timing-function: {{transition.timingFunction}}\"" + } + ], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "uploadDragZIndex", + "miniComponent": "upload", + "cssName": "--td-upload-drag-z-index", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/upload/upload.less", + "selector": ".t-upload__drag--cur", + "property": "z-index", + "kind": "render-property", + "value": "var(--td-upload-drag-z-index, 999)" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + }, + { + "name": "uploadRadius", + "miniComponent": "upload", + "cssName": "--td-upload-radius", + "previousDecision": "pending", + "compiledUses": [ + { + "file": "packages/components/upload/upload.less", + "selector": ".t-upload__add-icon", + "property": "border-radius", + "kind": "render-property", + "value": "var(--td-upload-radius, var(--td-radius-default, 12rpx))" + }, + { + "file": "packages/components/upload/upload.less", + "selector": ".t-upload__wrapper", + "property": "border-radius", + "kind": "render-property", + "value": "var(--td-upload-radius, var(--td-radius-default, 12rpx))" + }, + { + "file": "packages/components/upload/upload.less", + "selector": ".t-upload__close-btn", + "property": "border-top-right-radius", + "kind": "render-property", + "value": "var(--td-upload-radius, var(--td-radius-default, 12rpx))" + }, + { + "file": "packages/components/upload/upload.less", + "selector": ".t-upload__close-btn", + "property": "border-bottom-left-radius", + "kind": "render-property", + "value": "var(--td-upload-radius, var(--td-radius-default, 12rpx))" + }, + { + "file": "packages/components/upload/upload.less", + "selector": ".t-upload__progress-mask", + "property": "border-radius", + "kind": "render-property", + "value": "var(--td-upload-radius, var(--td-radius-default, 12rpx))" + }, + { + "file": "packages/components/upload/upload.less", + "selector": ".t-upload__list-item", + "property": "border-radius", + "kind": "render-property", + "value": "var(--td-upload-radius, var(--td-radius-default, 12rpx))" + } + ], + "nonLessReferences": [], + "relatedFailures": [], + "conclusion": "compiled-css-consumer-found", + "finalPaintVerified": false + } + ] +} diff --git a/specs/059-component-token-runtime-evidence/next-batches.md b/specs/059-component-token-runtime-evidence/next-batches.md new file mode 100644 index 0000000000..03ecbab9d5 --- /dev/null +++ b/specs/059-component-token-runtime-evidence/next-batches.md @@ -0,0 +1,37 @@ +> 历史快照:本文对应Ghost修复前的Spec059指纹与比较目标。最新32项处置、修复后验证及未实施方案见 [Spec060](../060-token-difference-resolution/acceptance.md)。原始观察和机器数据保留,不用旧日志验证新源码。 + +# 后续处置顺序与边界 + +## 先处理31项已复现差异 + +这些是变量级比较差异,不自动等同于31个独立缺陷。保留现有已批准例外;相同默认值但动态回退不同的情况,须先对照当前公开契约和单一所有者规则裁定。 + +| 批次 | 变量数 | 当前事实 | 操作与完成条件 | +|---|---:|---|---| +| Switch颜色/几何 | 11 | 关闭标签颜色为textColorDisabled;大/小轨道宽、滑块和图标实际经过统一FittedBox缩放,与冻结尺寸存在差异 | 核对thumbContentOffColor的已公开默认契约;若按冻结目标更改须同步dartdoc。几何不能只改外层SizedBox,需让Painter轨道、滑块和内容共同使用最终规格;保留真实拖动/禁用/加载行为,双SDK及Linux受影响Golden复验。 | +| Button状态/回退 | 11 | 默认/浅色填充按压背景、危险禁用前景、幽灵按压前景及部分Token别名路径与冻结目标不同 | 先分析Material状态层叠加后的实际像素,保留已批准的primary深色禁用文字。对直接背景/前景及errorColor3与errorColorDisabled的独立覆盖逐项裁定,再调整唯一解析入口,保留实例ButtonStyle状态覆盖。 | +| Avatar默认/字号 | 5 | 组描边使用bgColorContainer,冻结源码为白色;四项字号在自定义全局字体指标后仍保持尺寸预设常量 | 查证AvatarGroup深色设计依据;核对已批准的“按size内置字号”契约,决定是否应跟随全局字体指标。不能为追同名变量恢复已删除textStyle入口或新增平行Theme字段。 | +| Input边框/间距 | 2 | 启用边框用componentBorder,冻结目标为componentStroke;独立输入padding固定16,未跟随spacer2 | 核对TInputThemeData的已公开固定padding/状态边框契约及FormItem组合;若改变默认或回退,记录行为迁移并保留组件Theme覆盖。 | +| Empty间距 | 2 | 图标模式描述间距22,冻结目标16;操作间距固定32,未跟随spacer4 | 核对图标/图片两分支的设计及动态间距承诺;分别验证真实描述/操作间距、长文案和字号缩放,避免用整页外边距补偿。 | + +根因文件分别位于tdesign-component/lib/src/components/switch、button、avatar、input、empty;实际值、比较目标、场景和源码入口见runtime-review.json及runtime-observations.json。当前只新增诊断/契约测试,没有偷偷把上述行为改成未经裁定的新值。 + +## 单独处理平台几何 + +buttonBorderWidth的冻结Less为4rpx,Flutter outline/ghost为1dp。必须取得WeChat原生button伪元素的有效几何或设计证据,不能由4rpx直接断言Flutter应改为2dp,也不能只因既有1dp测试通过就关闭此项。 + +## 继续补524项运行证据 + +先完成已审组件的剩余槽位,再扩大到常用组件,按同一原则分批: + +1. Button剩19项:fill边框与填充的等效绘制证据、纯图标圆角,以及6项dashed变量。当前TButtonVariant没有dashed,须有能力/迁移范围裁定,不能拿outline替代验证。 +2. Input剩12项:对齐、分隔线左右偏移、Label、Tips和后置文本。先追到TFormItem+TInput真实组合并明确内容所有者;不为名称对应新增便捷API。 +3. Switch剩3项与Avatar剩1项:滑块两类水平边距、阴影和头像margin,补实际Painter/布局证据;不能从外框尺寸推算最终消费已完成。 +4. Cell/CellGroup、Checkbox/Radio、Slider、Search:分别覆盖交互/禁用状态、浅暗色以及既有Theme与实例路径;复用台账所列的现有测试候选,经实际断言核对后才晋级。 +5. StepItem/Steps、Tabs、Cascader及其余组件按runtime-review.md逐组件分布推进;弹层/滚动/日期场景使用真实操作触发可见状态。相关最终像素仅在Linux3.32执行Golden;IME、系统权限和GPU路径按真机验收表处理。 + +524项中190项已有同组件测试中的getter引用候选,runtime-review.json逐条列出文件行号。候选匹配没有证明状态/绘制断言正确,不自动减去这190项。其余项已有冻结CSS选择器/属性、目标值及当前Flutter定位或缺失说明,可据此补场景。 + +## 每批关闭条件 + +记录目标来源→实际消费→默认状态→适用的Token/Theme/实例覆盖→双SDK结果→源码/资源/依赖摘要;处理真实差异或取得有依据的契约裁定。默认运行与最终视觉分别记账。没有对应Flutter能力的项必须明确作范围裁定,不能静默延期;最终验收仍不满足时,--require-complete保持失败。 diff --git a/specs/059-component-token-runtime-evidence/plan.md b/specs/059-component-token-runtime-evidence/plan.md new file mode 100644 index 0000000000..93f7827d99 --- /dev/null +++ b/specs/059-component-token-runtime-evidence/plan.md @@ -0,0 +1,6 @@ +# 方案 + +1. 取得冻结小程序源码,核对声明、状态选择和最终消费;复用现有测试中的有效断言。 +2. 先补Button/Switch/Input,再按现有证据扩展;用独立颜色/尺寸哨兵验证动态回退,检查实际Widget/布局值。 +3. 对目标冲突、未实现能力和真实实现差异分别建账。无须修改生产源码时不引入行为改动;需要行为裁定时保留差异并注明影响。 +4. 双Flutter验证,输出可重复核对的逐项证据及剩余队列。更新Spec048阶段状态,但保留最终视觉门禁。 diff --git a/specs/059-component-token-runtime-evidence/runtime-observations.json b/specs/059-component-token-runtime-evidence/runtime-observations.json new file mode 100644 index 0000000000..68654c12a6 --- /dev/null +++ b/specs/059-component-token-runtime-evidence/runtime-observations.json @@ -0,0 +1,8071 @@ +{ + "lowSdk": "3.32.0", + "highSdk": "3.47.7", + "identicalAcrossSdks": true, + "observations": [ + { + "name": "avatarBgColor", + "scenario": "dark/custom=false/large", + "actual": "#ff173463", + "expected": "#ff173463", + "matches": true, + "enforced": true + }, + { + "name": "avatarBgColor", + "scenario": "dark/custom=false/medium", + "actual": "#ff173463", + "expected": "#ff173463", + "matches": true, + "enforced": true + }, + { + "name": "avatarBgColor", + "scenario": "dark/custom=false/small", + "actual": "#ff173463", + "expected": "#ff173463", + "matches": true, + "enforced": true + }, + { + "name": "avatarBgColor", + "scenario": "dark/custom=true/large", + "actual": "#ff260f23", + "expected": "#ff260f23", + "matches": true, + "enforced": true + }, + { + "name": "avatarBgColor", + "scenario": "dark/custom=true/medium", + "actual": "#ff260f23", + "expected": "#ff260f23", + "matches": true, + "enforced": true + }, + { + "name": "avatarBgColor", + "scenario": "dark/custom=true/small", + "actual": "#ff260f23", + "expected": "#ff260f23", + "matches": true, + "enforced": true + }, + { + "name": "avatarBgColor", + "scenario": "light/custom=false/large", + "actual": "#ffd9e1ff", + "expected": "#ffd9e1ff", + "matches": true, + "enforced": true + }, + { + "name": "avatarBgColor", + "scenario": "light/custom=false/medium", + "actual": "#ffd9e1ff", + "expected": "#ffd9e1ff", + "matches": true, + "enforced": true + }, + { + "name": "avatarBgColor", + "scenario": "light/custom=false/small", + "actual": "#ffd9e1ff", + "expected": "#ffd9e1ff", + "matches": true, + "enforced": true + }, + { + "name": "avatarBgColor", + "scenario": "light/custom=true/large", + "actual": "#ff260f23", + "expected": "#ff260f23", + "matches": true, + "enforced": true + }, + { + "name": "avatarBgColor", + "scenario": "light/custom=true/medium", + "actual": "#ff260f23", + "expected": "#ff260f23", + "matches": true, + "enforced": true + }, + { + "name": "avatarBgColor", + "scenario": "light/custom=true/small", + "actual": "#ff260f23", + "expected": "#ff260f23", + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderColor", + "scenario": "dark/custom=false/large", + "actual": "#ff242424", + "expected": "#ffffffff", + "matches": false, + "enforced": false + }, + { + "name": "avatarBorderColor", + "scenario": "dark/custom=false/large", + "actual": "#ff242424", + "expected": "#ffffffff", + "matches": false, + "enforced": false + }, + { + "name": "avatarBorderColor", + "scenario": "dark/custom=false/medium", + "actual": "#ff242424", + "expected": "#ffffffff", + "matches": false, + "enforced": false + }, + { + "name": "avatarBorderColor", + "scenario": "dark/custom=false/medium", + "actual": "#ff242424", + "expected": "#ffffffff", + "matches": false, + "enforced": false + }, + { + "name": "avatarBorderColor", + "scenario": "dark/custom=false/small", + "actual": "#ff242424", + "expected": "#ffffffff", + "matches": false, + "enforced": false + }, + { + "name": "avatarBorderColor", + "scenario": "dark/custom=false/small", + "actual": "#ff242424", + "expected": "#ffffffff", + "matches": false, + "enforced": false + }, + { + "name": "avatarBorderColor", + "scenario": "dark/custom=true/large", + "actual": "#ff2e275b", + "expected": "#ffffffff", + "matches": false, + "enforced": false + }, + { + "name": "avatarBorderColor", + "scenario": "dark/custom=true/large", + "actual": "#ff2e275b", + "expected": "#ffffffff", + "matches": false, + "enforced": false + }, + { + "name": "avatarBorderColor", + "scenario": "dark/custom=true/medium", + "actual": "#ff2e275b", + "expected": "#ffffffff", + "matches": false, + "enforced": false + }, + { + "name": "avatarBorderColor", + "scenario": "dark/custom=true/medium", + "actual": "#ff2e275b", + "expected": "#ffffffff", + "matches": false, + "enforced": false + }, + { + "name": "avatarBorderColor", + "scenario": "dark/custom=true/small", + "actual": "#ff2e275b", + "expected": "#ffffffff", + "matches": false, + "enforced": false + }, + { + "name": "avatarBorderColor", + "scenario": "dark/custom=true/small", + "actual": "#ff2e275b", + "expected": "#ffffffff", + "matches": false, + "enforced": false + }, + { + "name": "avatarBorderColor", + "scenario": "light/custom=false/large", + "actual": "#ffffffff", + "expected": "#ffffffff", + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderColor", + "scenario": "light/custom=false/large", + "actual": "#ffffffff", + "expected": "#ffffffff", + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderColor", + "scenario": "light/custom=false/medium", + "actual": "#ffffffff", + "expected": "#ffffffff", + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderColor", + "scenario": "light/custom=false/medium", + "actual": "#ffffffff", + "expected": "#ffffffff", + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderColor", + "scenario": "light/custom=false/small", + "actual": "#ffffffff", + "expected": "#ffffffff", + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderColor", + "scenario": "light/custom=false/small", + "actual": "#ffffffff", + "expected": "#ffffffff", + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderColor", + "scenario": "light/custom=true/large", + "actual": "#ff2e275b", + "expected": "#ffffffff", + "matches": false, + "enforced": false + }, + { + "name": "avatarBorderColor", + "scenario": "light/custom=true/large", + "actual": "#ff2e275b", + "expected": "#ffffffff", + "matches": false, + "enforced": false + }, + { + "name": "avatarBorderColor", + "scenario": "light/custom=true/medium", + "actual": "#ff2e275b", + "expected": "#ffffffff", + "matches": false, + "enforced": false + }, + { + "name": "avatarBorderColor", + "scenario": "light/custom=true/medium", + "actual": "#ff2e275b", + "expected": "#ffffffff", + "matches": false, + "enforced": false + }, + { + "name": "avatarBorderColor", + "scenario": "light/custom=true/small", + "actual": "#ff2e275b", + "expected": "#ffffffff", + "matches": false, + "enforced": false + }, + { + "name": "avatarBorderColor", + "scenario": "light/custom=true/small", + "actual": "#ff2e275b", + "expected": "#ffffffff", + "matches": false, + "enforced": false + }, + { + "name": "avatarBorderWidthLarge", + "scenario": "dark/custom=false/large", + "actual": 3, + "expected": 3, + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderWidthLarge", + "scenario": "dark/custom=false/large", + "actual": 3, + "expected": 3, + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderWidthLarge", + "scenario": "dark/custom=true/large", + "actual": 3, + "expected": 3, + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderWidthLarge", + "scenario": "dark/custom=true/large", + "actual": 3, + "expected": 3, + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderWidthLarge", + "scenario": "light/custom=false/large", + "actual": 3, + "expected": 3, + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderWidthLarge", + "scenario": "light/custom=false/large", + "actual": 3, + "expected": 3, + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderWidthLarge", + "scenario": "light/custom=true/large", + "actual": 3, + "expected": 3, + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderWidthLarge", + "scenario": "light/custom=true/large", + "actual": 3, + "expected": 3, + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderWidthMedium", + "scenario": "dark/custom=false/medium", + "actual": 2, + "expected": 2, + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderWidthMedium", + "scenario": "dark/custom=false/medium", + "actual": 2, + "expected": 2, + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderWidthMedium", + "scenario": "dark/custom=true/medium", + "actual": 2, + "expected": 2, + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderWidthMedium", + "scenario": "dark/custom=true/medium", + "actual": 2, + "expected": 2, + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderWidthMedium", + "scenario": "light/custom=false/medium", + "actual": 2, + "expected": 2, + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderWidthMedium", + "scenario": "light/custom=false/medium", + "actual": 2, + "expected": 2, + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderWidthMedium", + "scenario": "light/custom=true/medium", + "actual": 2, + "expected": 2, + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderWidthMedium", + "scenario": "light/custom=true/medium", + "actual": 2, + "expected": 2, + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderWidthSmall", + "scenario": "dark/custom=false/small", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderWidthSmall", + "scenario": "dark/custom=false/small", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderWidthSmall", + "scenario": "dark/custom=true/small", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderWidthSmall", + "scenario": "dark/custom=true/small", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderWidthSmall", + "scenario": "light/custom=false/small", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderWidthSmall", + "scenario": "light/custom=false/small", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderWidthSmall", + "scenario": "light/custom=true/small", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderWidthSmall", + "scenario": "light/custom=true/small", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "avatarCircleBorderRadius", + "scenario": "dark/custom=false/large", + "actual": 9999, + "expected": 9999, + "matches": true, + "enforced": true + }, + { + "name": "avatarCircleBorderRadius", + "scenario": "dark/custom=false/medium", + "actual": 9999, + "expected": 9999, + "matches": true, + "enforced": true + }, + { + "name": "avatarCircleBorderRadius", + "scenario": "dark/custom=false/small", + "actual": 9999, + "expected": 9999, + "matches": true, + "enforced": true + }, + { + "name": "avatarCircleBorderRadius", + "scenario": "dark/custom=true/large", + "actual": 23, + "expected": 23, + "matches": true, + "enforced": true + }, + { + "name": "avatarCircleBorderRadius", + "scenario": "dark/custom=true/medium", + "actual": 23, + "expected": 23, + "matches": true, + "enforced": true + }, + { + "name": "avatarCircleBorderRadius", + "scenario": "dark/custom=true/small", + "actual": 23, + "expected": 23, + "matches": true, + "enforced": true + }, + { + "name": "avatarCircleBorderRadius", + "scenario": "light/custom=false/large", + "actual": 9999, + "expected": 9999, + "matches": true, + "enforced": true + }, + { + "name": "avatarCircleBorderRadius", + "scenario": "light/custom=false/medium", + "actual": 9999, + "expected": 9999, + "matches": true, + "enforced": true + }, + { + "name": "avatarCircleBorderRadius", + "scenario": "light/custom=false/small", + "actual": 9999, + "expected": 9999, + "matches": true, + "enforced": true + }, + { + "name": "avatarCircleBorderRadius", + "scenario": "light/custom=true/large", + "actual": 23, + "expected": 23, + "matches": true, + "enforced": true + }, + { + "name": "avatarCircleBorderRadius", + "scenario": "light/custom=true/medium", + "actual": 23, + "expected": 23, + "matches": true, + "enforced": true + }, + { + "name": "avatarCircleBorderRadius", + "scenario": "light/custom=true/small", + "actual": 23, + "expected": 23, + "matches": true, + "enforced": true + }, + { + "name": "avatarContentColor", + "scenario": "dark/custom=false/large", + "actual": "#ff4582e6", + "expected": "#ff4582e6", + "matches": true, + "enforced": true + }, + { + "name": "avatarContentColor", + "scenario": "dark/custom=false/medium", + "actual": "#ff4582e6", + "expected": "#ff4582e6", + "matches": true, + "enforced": true + }, + { + "name": "avatarContentColor", + "scenario": "dark/custom=false/small", + "actual": "#ff4582e6", + "expected": "#ff4582e6", + "matches": true, + "enforced": true + }, + { + "name": "avatarContentColor", + "scenario": "dark/custom=true/large", + "actual": "#ff220307", + "expected": "#ff220307", + "matches": true, + "enforced": true + }, + { + "name": "avatarContentColor", + "scenario": "dark/custom=true/medium", + "actual": "#ff220307", + "expected": "#ff220307", + "matches": true, + "enforced": true + }, + { + "name": "avatarContentColor", + "scenario": "dark/custom=true/small", + "actual": "#ff220307", + "expected": "#ff220307", + "matches": true, + "enforced": true + }, + { + "name": "avatarContentColor", + "scenario": "light/custom=false/large", + "actual": "#ff0052d9", + "expected": "#ff0052d9", + "matches": true, + "enforced": true + }, + { + "name": "avatarContentColor", + "scenario": "light/custom=false/medium", + "actual": "#ff0052d9", + "expected": "#ff0052d9", + "matches": true, + "enforced": true + }, + { + "name": "avatarContentColor", + "scenario": "light/custom=false/small", + "actual": "#ff0052d9", + "expected": "#ff0052d9", + "matches": true, + "enforced": true + }, + { + "name": "avatarContentColor", + "scenario": "light/custom=true/large", + "actual": "#ff220307", + "expected": "#ff220307", + "matches": true, + "enforced": true + }, + { + "name": "avatarContentColor", + "scenario": "light/custom=true/medium", + "actual": "#ff220307", + "expected": "#ff220307", + "matches": true, + "enforced": true + }, + { + "name": "avatarContentColor", + "scenario": "light/custom=true/small", + "actual": "#ff220307", + "expected": "#ff220307", + "matches": true, + "enforced": true + }, + { + "name": "avatarIconLargeFontSize", + "scenario": "dark/custom=false/large", + "actual": 32, + "expected": 32, + "matches": true, + "enforced": true + }, + { + "name": "avatarIconLargeFontSize", + "scenario": "dark/custom=true/large", + "actual": 32, + "expected": 32, + "matches": true, + "enforced": true + }, + { + "name": "avatarIconLargeFontSize", + "scenario": "light/custom=false/large", + "actual": 32, + "expected": 32, + "matches": true, + "enforced": true + }, + { + "name": "avatarIconLargeFontSize", + "scenario": "light/custom=true/large", + "actual": 32, + "expected": 32, + "matches": true, + "enforced": true + }, + { + "name": "avatarIconMediumFontSize", + "scenario": "dark/custom=false/medium", + "actual": 24, + "expected": 24, + "matches": true, + "enforced": true + }, + { + "name": "avatarIconMediumFontSize", + "scenario": "dark/custom=true/medium", + "actual": 24, + "expected": 24, + "matches": true, + "enforced": true + }, + { + "name": "avatarIconMediumFontSize", + "scenario": "light/custom=false/medium", + "actual": 24, + "expected": 24, + "matches": true, + "enforced": true + }, + { + "name": "avatarIconMediumFontSize", + "scenario": "light/custom=true/medium", + "actual": 24, + "expected": 24, + "matches": true, + "enforced": true + }, + { + "name": "avatarIconSmallFontSize", + "scenario": "dark/custom=false/small", + "actual": 20, + "expected": 20, + "matches": true, + "enforced": true + }, + { + "name": "avatarIconSmallFontSize", + "scenario": "dark/custom=true/small", + "actual": 20, + "expected": 31, + "matches": false, + "enforced": false + }, + { + "name": "avatarIconSmallFontSize", + "scenario": "light/custom=false/small", + "actual": 20, + "expected": 20, + "matches": true, + "enforced": true + }, + { + "name": "avatarIconSmallFontSize", + "scenario": "light/custom=true/small", + "actual": 20, + "expected": 31, + "matches": false, + "enforced": false + }, + { + "name": "avatarLargeWidth", + "scenario": "dark/custom=false/large", + "actual": 64, + "expected": 64, + "matches": true, + "enforced": true + }, + { + "name": "avatarLargeWidth", + "scenario": "dark/custom=true/large", + "actual": 64, + "expected": 64, + "matches": true, + "enforced": true + }, + { + "name": "avatarLargeWidth", + "scenario": "light/custom=false/large", + "actual": 64, + "expected": 64, + "matches": true, + "enforced": true + }, + { + "name": "avatarLargeWidth", + "scenario": "light/custom=true/large", + "actual": 64, + "expected": 64, + "matches": true, + "enforced": true + }, + { + "name": "avatarMediumWidth", + "scenario": "dark/custom=false/medium", + "actual": 48, + "expected": 48, + "matches": true, + "enforced": true + }, + { + "name": "avatarMediumWidth", + "scenario": "dark/custom=true/medium", + "actual": 48, + "expected": 48, + "matches": true, + "enforced": true + }, + { + "name": "avatarMediumWidth", + "scenario": "light/custom=false/medium", + "actual": 48, + "expected": 48, + "matches": true, + "enforced": true + }, + { + "name": "avatarMediumWidth", + "scenario": "light/custom=true/medium", + "actual": 48, + "expected": 48, + "matches": true, + "enforced": true + }, + { + "name": "avatarRoundBorderRadius", + "scenario": "dark/custom=false/large", + "actual": 6, + "expected": 6, + "matches": true, + "enforced": true + }, + { + "name": "avatarRoundBorderRadius", + "scenario": "dark/custom=false/medium", + "actual": 6, + "expected": 6, + "matches": true, + "enforced": true + }, + { + "name": "avatarRoundBorderRadius", + "scenario": "dark/custom=false/small", + "actual": 6, + "expected": 6, + "matches": true, + "enforced": true + }, + { + "name": "avatarRoundBorderRadius", + "scenario": "dark/custom=true/large", + "actual": 13, + "expected": 13, + "matches": true, + "enforced": true + }, + { + "name": "avatarRoundBorderRadius", + "scenario": "dark/custom=true/medium", + "actual": 13, + "expected": 13, + "matches": true, + "enforced": true + }, + { + "name": "avatarRoundBorderRadius", + "scenario": "dark/custom=true/small", + "actual": 13, + "expected": 13, + "matches": true, + "enforced": true + }, + { + "name": "avatarRoundBorderRadius", + "scenario": "light/custom=false/large", + "actual": 6, + "expected": 6, + "matches": true, + "enforced": true + }, + { + "name": "avatarRoundBorderRadius", + "scenario": "light/custom=false/medium", + "actual": 6, + "expected": 6, + "matches": true, + "enforced": true + }, + { + "name": "avatarRoundBorderRadius", + "scenario": "light/custom=false/small", + "actual": 6, + "expected": 6, + "matches": true, + "enforced": true + }, + { + "name": "avatarRoundBorderRadius", + "scenario": "light/custom=true/large", + "actual": 13, + "expected": 13, + "matches": true, + "enforced": true + }, + { + "name": "avatarRoundBorderRadius", + "scenario": "light/custom=true/medium", + "actual": 13, + "expected": 13, + "matches": true, + "enforced": true + }, + { + "name": "avatarRoundBorderRadius", + "scenario": "light/custom=true/small", + "actual": 13, + "expected": 13, + "matches": true, + "enforced": true + }, + { + "name": "avatarSmallWidth", + "scenario": "dark/custom=false/small", + "actual": 40, + "expected": 40, + "matches": true, + "enforced": true + }, + { + "name": "avatarSmallWidth", + "scenario": "dark/custom=true/small", + "actual": 40, + "expected": 40, + "matches": true, + "enforced": true + }, + { + "name": "avatarSmallWidth", + "scenario": "light/custom=false/small", + "actual": 40, + "expected": 40, + "matches": true, + "enforced": true + }, + { + "name": "avatarSmallWidth", + "scenario": "light/custom=true/small", + "actual": 40, + "expected": 40, + "matches": true, + "enforced": true + }, + { + "name": "avatarTextLargeFontSize", + "scenario": "dark/custom=false/large", + "actual": 20, + "expected": 20, + "matches": true, + "enforced": true + }, + { + "name": "avatarTextLargeFontSize", + "scenario": "dark/custom=true/large", + "actual": 20, + "expected": 31, + "matches": false, + "enforced": false + }, + { + "name": "avatarTextLargeFontSize", + "scenario": "light/custom=false/large", + "actual": 20, + "expected": 20, + "matches": true, + "enforced": true + }, + { + "name": "avatarTextLargeFontSize", + "scenario": "light/custom=true/large", + "actual": 20, + "expected": 31, + "matches": false, + "enforced": false + }, + { + "name": "avatarTextMediumFontSize", + "scenario": "dark/custom=false/medium", + "actual": 16, + "expected": 16, + "matches": true, + "enforced": true + }, + { + "name": "avatarTextMediumFontSize", + "scenario": "dark/custom=true/medium", + "actual": 16, + "expected": 21, + "matches": false, + "enforced": false + }, + { + "name": "avatarTextMediumFontSize", + "scenario": "light/custom=false/medium", + "actual": 16, + "expected": 16, + "matches": true, + "enforced": true + }, + { + "name": "avatarTextMediumFontSize", + "scenario": "light/custom=true/medium", + "actual": 16, + "expected": 21, + "matches": false, + "enforced": false + }, + { + "name": "avatarTextSmallFontSize", + "scenario": "dark/custom=false/small", + "actual": 14, + "expected": 14, + "matches": true, + "enforced": true + }, + { + "name": "avatarTextSmallFontSize", + "scenario": "dark/custom=true/small", + "actual": 14, + "expected": 18, + "matches": false, + "enforced": false + }, + { + "name": "avatarTextSmallFontSize", + "scenario": "light/custom=false/small", + "actual": 14, + "expected": 14, + "matches": true, + "enforced": true + }, + { + "name": "avatarTextSmallFontSize", + "scenario": "light/custom=true/small", + "actual": 14, + "expected": 18, + "matches": false, + "enforced": false + }, + { + "name": "buttonBorderRadius", + "scenario": "dark/custom=false/extraSmall", + "actual": 6, + "expected": 6, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderRadius", + "scenario": "dark/custom=false/large", + "actual": 6, + "expected": 6, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderRadius", + "scenario": "dark/custom=false/medium", + "actual": 6, + "expected": 6, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderRadius", + "scenario": "dark/custom=false/small", + "actual": 6, + "expected": 6, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderRadius", + "scenario": "dark/custom=true/extraSmall", + "actual": 13, + "expected": 13, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderRadius", + "scenario": "dark/custom=true/large", + "actual": 13, + "expected": 13, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderRadius", + "scenario": "dark/custom=true/medium", + "actual": 13, + "expected": 13, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderRadius", + "scenario": "dark/custom=true/small", + "actual": 13, + "expected": 13, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderRadius", + "scenario": "light/custom=false/extraSmall", + "actual": 6, + "expected": 6, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderRadius", + "scenario": "light/custom=false/large", + "actual": 6, + "expected": 6, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderRadius", + "scenario": "light/custom=false/medium", + "actual": 6, + "expected": 6, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderRadius", + "scenario": "light/custom=false/small", + "actual": 6, + "expected": 6, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderRadius", + "scenario": "light/custom=true/extraSmall", + "actual": 13, + "expected": 13, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderRadius", + "scenario": "light/custom=true/large", + "actual": 13, + "expected": 13, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderRadius", + "scenario": "light/custom=true/medium", + "actual": 13, + "expected": 13, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderRadius", + "scenario": "light/custom=true/small", + "actual": 13, + "expected": 13, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "dark/custom=false/outline/danger/disabled", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "dark/custom=false/outline/danger/idle", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "dark/custom=false/outline/danger/pressed", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "dark/custom=false/outline/defaultTheme/disabled", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "dark/custom=false/outline/defaultTheme/idle", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "dark/custom=false/outline/defaultTheme/pressed", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "dark/custom=false/outline/light/disabled", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "dark/custom=false/outline/light/idle", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "dark/custom=false/outline/light/pressed", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "dark/custom=false/outline/primary/disabled", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "dark/custom=false/outline/primary/idle", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "dark/custom=false/outline/primary/pressed", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "dark/custom=true/outline/danger/disabled", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "dark/custom=true/outline/danger/idle", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "dark/custom=true/outline/danger/pressed", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "dark/custom=true/outline/defaultTheme/disabled", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "dark/custom=true/outline/defaultTheme/idle", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "dark/custom=true/outline/defaultTheme/pressed", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "dark/custom=true/outline/light/disabled", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "dark/custom=true/outline/light/idle", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "dark/custom=true/outline/light/pressed", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "dark/custom=true/outline/primary/disabled", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "dark/custom=true/outline/primary/idle", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "dark/custom=true/outline/primary/pressed", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "light/custom=false/outline/danger/disabled", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "light/custom=false/outline/danger/idle", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "light/custom=false/outline/danger/pressed", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "light/custom=false/outline/defaultTheme/disabled", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "light/custom=false/outline/defaultTheme/idle", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "light/custom=false/outline/defaultTheme/pressed", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "light/custom=false/outline/light/disabled", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "light/custom=false/outline/light/idle", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "light/custom=false/outline/light/pressed", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "light/custom=false/outline/primary/disabled", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "light/custom=false/outline/primary/idle", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "light/custom=false/outline/primary/pressed", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "light/custom=true/outline/danger/disabled", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "light/custom=true/outline/danger/idle", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "light/custom=true/outline/danger/pressed", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "light/custom=true/outline/defaultTheme/disabled", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "light/custom=true/outline/defaultTheme/idle", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "light/custom=true/outline/defaultTheme/pressed", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "light/custom=true/outline/light/disabled", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "light/custom=true/outline/light/idle", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "light/custom=true/outline/light/pressed", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "light/custom=true/outline/primary/disabled", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "light/custom=true/outline/primary/idle", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "light/custom=true/outline/primary/pressed", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonDangerActiveBgColor", + "scenario": "dark/custom=false/fill/danger/pressed", + "actual": "#ffa03f46", + "expected": "#ffa03f46", + "matches": true, + "enforced": true + }, + { + "name": "buttonDangerActiveBgColor", + "scenario": "dark/custom=true/fill/danger/pressed", + "actual": "#ff281531", + "expected": "#ff281531", + "matches": true, + "enforced": true + }, + { + "name": "buttonDangerActiveBgColor", + "scenario": "light/custom=false/fill/danger/pressed", + "actual": "#ffad352f", + "expected": "#ffad352f", + "matches": true, + "enforced": true + }, + { + "name": "buttonDangerActiveBgColor", + "scenario": "light/custom=true/fill/danger/pressed", + "actual": "#ff281531", + "expected": "#ff281531", + "matches": true, + "enforced": true + }, + { + "name": "buttonDangerBgColor", + "scenario": "dark/custom=false/fill/danger/idle", + "actual": "#ffc64751", + "expected": "#ffc64751", + "matches": true, + "enforced": true + }, + { + "name": "buttonDangerBgColor", + "scenario": "dark/custom=true/fill/danger/idle", + "actual": "#ff27122a", + "expected": "#ff27122a", + "matches": true, + "enforced": true + }, + { + "name": "buttonDangerBgColor", + "scenario": "light/custom=false/fill/danger/idle", + "actual": "#ffd54941", + "expected": "#ffd54941", + "matches": true, + "enforced": true + }, + { + "name": "buttonDangerBgColor", + "scenario": "light/custom=true/fill/danger/idle", + "actual": "#ff27122a", + "expected": "#ff27122a", + "matches": true, + "enforced": true + }, + { + "name": "buttonDangerColor", + "scenario": "dark/custom=false/fill/danger/idle", + "actual": "#e6ffffff", + "expected": "#e6ffffff", + "matches": true, + "enforced": true + }, + { + "name": "buttonDangerColor", + "scenario": "dark/custom=false/fill/danger/pressed", + "actual": "#e6ffffff", + "expected": "#e6ffffff", + "matches": true, + "enforced": true + }, + { + "name": "buttonDangerColor", + "scenario": "dark/custom=true/fill/danger/idle", + "actual": "#ff363f93", + "expected": "#ff363f93", + "matches": true, + "enforced": true + }, + { + "name": "buttonDangerColor", + "scenario": "dark/custom=true/fill/danger/pressed", + "actual": "#ff363f93", + "expected": "#ff363f93", + "matches": true, + "enforced": true + }, + { + "name": "buttonDangerColor", + "scenario": "light/custom=false/fill/danger/idle", + "actual": "#ffffffff", + "expected": "#ffffffff", + "matches": true, + "enforced": true + }, + { + "name": "buttonDangerColor", + "scenario": "light/custom=false/fill/danger/pressed", + "actual": "#ffffffff", + "expected": "#ffffffff", + "matches": true, + "enforced": true + }, + { + "name": "buttonDangerColor", + "scenario": "light/custom=true/fill/danger/idle", + "actual": "#ff363f93", + "expected": "#ff363f93", + "matches": true, + "enforced": true + }, + { + "name": "buttonDangerColor", + "scenario": "light/custom=true/fill/danger/pressed", + "actual": "#ff363f93", + "expected": "#ff363f93", + "matches": true, + "enforced": true + }, + { + "name": "buttonDangerDisabledBg", + "scenario": "dark/custom=false/fill/danger/disabled", + "actual": "#ff703439", + "expected": "#ff703439", + "matches": true, + "enforced": false + }, + { + "name": "buttonDangerDisabledBg", + "scenario": "dark/custom=true/fill/danger/disabled", + "actual": "#ff291838", + "expected": "#ff2a1b3f", + "matches": false, + "enforced": false + }, + { + "name": "buttonDangerDisabledBg", + "scenario": "light/custom=false/fill/danger/disabled", + "actual": "#ffffb9b0", + "expected": "#ffffb9b0", + "matches": true, + "enforced": false + }, + { + "name": "buttonDangerDisabledBg", + "scenario": "light/custom=true/fill/danger/disabled", + "actual": "#ff291838", + "expected": "#ff2a1b3f", + "matches": false, + "enforced": false + }, + { + "name": "buttonDangerDisabledColor", + "scenario": "dark/custom=false/fill/danger/disabled", + "actual": "#38ffffff", + "expected": "#e6ffffff", + "matches": false, + "enforced": false + }, + { + "name": "buttonDangerDisabledColor", + "scenario": "dark/custom=true/fill/danger/disabled", + "actual": "#ff353c8c", + "expected": "#ff37429a", + "matches": false, + "enforced": false + }, + { + "name": "buttonDangerDisabledColor", + "scenario": "light/custom=false/fill/danger/disabled", + "actual": "#42000000", + "expected": "#ffffffff", + "matches": false, + "enforced": false + }, + { + "name": "buttonDangerDisabledColor", + "scenario": "light/custom=true/fill/danger/disabled", + "actual": "#ff353c8c", + "expected": "#ff37429a", + "matches": false, + "enforced": false + }, + { + "name": "buttonDangerOutlineActiveBgColor", + "scenario": "dark/custom=false/outline/danger/pressed", + "actual": "#ff2c2c2c", + "expected": "#ff2c2c2c", + "matches": true, + "enforced": true + }, + { + "name": "buttonDangerOutlineActiveBgColor", + "scenario": "dark/custom=true/outline/danger/pressed", + "actual": "#ff2f2a62", + "expected": "#ff2f2a62", + "matches": true, + "enforced": true + }, + { + "name": "buttonDangerOutlineActiveBgColor", + "scenario": "light/custom=false/outline/danger/pressed", + "actual": "#ffe8e8e8", + "expected": "#ffe8e8e8", + "matches": true, + "enforced": true + }, + { + "name": "buttonDangerOutlineActiveBgColor", + "scenario": "light/custom=true/outline/danger/pressed", + "actual": "#ff2f2a62", + "expected": "#ff2f2a62", + "matches": true, + "enforced": true + }, + { + "name": "buttonDangerOutlineActiveBorderColor", + "scenario": "dark/custom=false/outline/danger/pressed", + "actual": "#ffa03f46", + "expected": "#ffa03f46", + "matches": true, + "enforced": true + }, + { + "name": "buttonDangerOutlineActiveBorderColor", + "scenario": "dark/custom=true/outline/danger/pressed", + "actual": "#ff281531", + "expected": "#ff281531", + "matches": true, + "enforced": true + }, + { + "name": "buttonDangerOutlineActiveBorderColor", + "scenario": "light/custom=false/outline/danger/pressed", + "actual": "#ffad352f", + "expected": "#ffad352f", + "matches": true, + "enforced": true + }, + { + "name": "buttonDangerOutlineActiveBorderColor", + "scenario": "light/custom=true/outline/danger/pressed", + "actual": "#ff281531", + "expected": "#ff281531", + "matches": true, + "enforced": true + }, + { + "name": "buttonDangerOutlineBorderColor", + "scenario": "dark/custom=false/outline/danger/idle", + "actual": "#ffc64751", + "expected": "#ffc64751", + "matches": true, + "enforced": true + }, + { + "name": "buttonDangerOutlineBorderColor", + "scenario": "dark/custom=true/outline/danger/idle", + "actual": "#ff27122a", + "expected": "#ff27122a", + "matches": true, + "enforced": true + }, + { + "name": "buttonDangerOutlineBorderColor", + "scenario": "light/custom=false/outline/danger/idle", + "actual": "#ffd54941", + "expected": "#ffd54941", + "matches": true, + "enforced": true + }, + { + "name": "buttonDangerOutlineBorderColor", + "scenario": "light/custom=true/outline/danger/idle", + "actual": "#ff27122a", + "expected": "#ff27122a", + "matches": true, + "enforced": true + }, + { + "name": "buttonDangerOutlineColor", + "scenario": "dark/custom=false/outline/danger/idle", + "actual": "#ffc64751", + "expected": "#ffc64751", + "matches": true, + "enforced": true + }, + { + "name": "buttonDangerOutlineColor", + "scenario": "dark/custom=false/outline/danger/pressed", + "actual": "#ffa03f46", + "expected": "#ffa03f46", + "matches": true, + "enforced": true + }, + { + "name": "buttonDangerOutlineColor", + "scenario": "dark/custom=true/outline/danger/idle", + "actual": "#ff27122a", + "expected": "#ff27122a", + "matches": true, + "enforced": true + }, + { + "name": "buttonDangerOutlineColor", + "scenario": "dark/custom=true/outline/danger/pressed", + "actual": "#ff281531", + "expected": "#ff281531", + "matches": true, + "enforced": true + }, + { + "name": "buttonDangerOutlineColor", + "scenario": "light/custom=false/outline/danger/idle", + "actual": "#ffd54941", + "expected": "#ffd54941", + "matches": true, + "enforced": true + }, + { + "name": "buttonDangerOutlineColor", + "scenario": "light/custom=false/outline/danger/pressed", + "actual": "#ffad352f", + "expected": "#ffad352f", + "matches": true, + "enforced": true + }, + { + "name": "buttonDangerOutlineColor", + "scenario": "light/custom=true/outline/danger/idle", + "actual": "#ff27122a", + "expected": "#ff27122a", + "matches": true, + "enforced": true + }, + { + "name": "buttonDangerOutlineColor", + "scenario": "light/custom=true/outline/danger/pressed", + "actual": "#ff281531", + "expected": "#ff281531", + "matches": true, + "enforced": true + }, + { + "name": "buttonDangerOutlineDisabledColor", + "scenario": "dark/custom=false/outline/danger/disabled", + "actual": "#ff703439", + "expected": "#ff703439", + "matches": true, + "enforced": false + }, + { + "name": "buttonDangerOutlineDisabledColor", + "scenario": "dark/custom=false/outline/danger/disabled", + "actual": "#ff703439", + "expected": "#ff703439", + "matches": true, + "enforced": false + }, + { + "name": "buttonDangerOutlineDisabledColor", + "scenario": "dark/custom=true/outline/danger/disabled", + "actual": "#ff291838", + "expected": "#ff2a1b3f", + "matches": false, + "enforced": false + }, + { + "name": "buttonDangerOutlineDisabledColor", + "scenario": "dark/custom=true/outline/danger/disabled", + "actual": "#ff291838", + "expected": "#ff2a1b3f", + "matches": false, + "enforced": false + }, + { + "name": "buttonDangerOutlineDisabledColor", + "scenario": "light/custom=false/outline/danger/disabled", + "actual": "#ffffb9b0", + "expected": "#ffffb9b0", + "matches": true, + "enforced": false + }, + { + "name": "buttonDangerOutlineDisabledColor", + "scenario": "light/custom=false/outline/danger/disabled", + "actual": "#ffffb9b0", + "expected": "#ffffb9b0", + "matches": true, + "enforced": false + }, + { + "name": "buttonDangerOutlineDisabledColor", + "scenario": "light/custom=true/outline/danger/disabled", + "actual": "#ff291838", + "expected": "#ff2a1b3f", + "matches": false, + "enforced": false + }, + { + "name": "buttonDangerOutlineDisabledColor", + "scenario": "light/custom=true/outline/danger/disabled", + "actual": "#ff291838", + "expected": "#ff2a1b3f", + "matches": false, + "enforced": false + }, + { + "name": "buttonDangerTextActiveBgColor", + "scenario": "dark/custom=false/text/danger/pressed", + "actual": "#ff2c2c2c", + "expected": "#ff2c2c2c", + "matches": true, + "enforced": true + }, + { + "name": "buttonDangerTextActiveBgColor", + "scenario": "dark/custom=true/text/danger/pressed", + "actual": "#ff2f2a62", + "expected": "#ff2f2a62", + "matches": true, + "enforced": true + }, + { + "name": "buttonDangerTextActiveBgColor", + "scenario": "light/custom=false/text/danger/pressed", + "actual": "#ffe8e8e8", + "expected": "#ffe8e8e8", + "matches": true, + "enforced": true + }, + { + "name": "buttonDangerTextActiveBgColor", + "scenario": "light/custom=true/text/danger/pressed", + "actual": "#ff2f2a62", + "expected": "#ff2f2a62", + "matches": true, + "enforced": true + }, + { + "name": "buttonDangerTextColor", + "scenario": "dark/custom=false/text/danger/idle", + "actual": "#ffc64751", + "expected": "#ffc64751", + "matches": true, + "enforced": true + }, + { + "name": "buttonDangerTextColor", + "scenario": "dark/custom=false/text/danger/pressed", + "actual": "#ffc64751", + "expected": "#ffc64751", + "matches": true, + "enforced": true + }, + { + "name": "buttonDangerTextColor", + "scenario": "dark/custom=true/text/danger/idle", + "actual": "#ff27122a", + "expected": "#ff27122a", + "matches": true, + "enforced": true + }, + { + "name": "buttonDangerTextColor", + "scenario": "dark/custom=true/text/danger/pressed", + "actual": "#ff27122a", + "expected": "#ff27122a", + "matches": true, + "enforced": true + }, + { + "name": "buttonDangerTextColor", + "scenario": "light/custom=false/text/danger/idle", + "actual": "#ffd54941", + "expected": "#ffd54941", + "matches": true, + "enforced": true + }, + { + "name": "buttonDangerTextColor", + "scenario": "light/custom=false/text/danger/pressed", + "actual": "#ffd54941", + "expected": "#ffd54941", + "matches": true, + "enforced": true + }, + { + "name": "buttonDangerTextColor", + "scenario": "light/custom=true/text/danger/idle", + "actual": "#ff27122a", + "expected": "#ff27122a", + "matches": true, + "enforced": true + }, + { + "name": "buttonDangerTextColor", + "scenario": "light/custom=true/text/danger/pressed", + "actual": "#ff27122a", + "expected": "#ff27122a", + "matches": true, + "enforced": true + }, + { + "name": "buttonDangerTextDisabledColor", + "scenario": "dark/custom=false/text/danger/disabled", + "actual": "#38ffffff", + "expected": "#e6ffffff", + "matches": false, + "enforced": false + }, + { + "name": "buttonDangerTextDisabledColor", + "scenario": "dark/custom=true/text/danger/disabled", + "actual": "#ff353c8c", + "expected": "#ff37429a", + "matches": false, + "enforced": false + }, + { + "name": "buttonDangerTextDisabledColor", + "scenario": "light/custom=false/text/danger/disabled", + "actual": "#42000000", + "expected": "#ffffffff", + "matches": false, + "enforced": false + }, + { + "name": "buttonDangerTextDisabledColor", + "scenario": "light/custom=true/text/danger/disabled", + "actual": "#ff353c8c", + "expected": "#ff37429a", + "matches": false, + "enforced": false + }, + { + "name": "buttonDefaultActiveBgColor", + "scenario": "dark/custom=false/fill/defaultTheme/pressed", + "actual": "#ff383838", + "expected": "#ff4b4b4b", + "matches": false, + "enforced": false + }, + { + "name": "buttonDefaultActiveBgColor", + "scenario": "dark/custom=true/fill/defaultTheme/pressed", + "actual": "#ff2b1e46", + "expected": "#ff2c214d", + "matches": false, + "enforced": false + }, + { + "name": "buttonDefaultActiveBgColor", + "scenario": "light/custom=false/fill/defaultTheme/pressed", + "actual": "#ffe8e8e8", + "expected": "#ffa6a6a6", + "matches": false, + "enforced": false + }, + { + "name": "buttonDefaultActiveBgColor", + "scenario": "light/custom=true/fill/defaultTheme/pressed", + "actual": "#ff2b1e46", + "expected": "#ff2c214d", + "matches": false, + "enforced": false + }, + { + "name": "buttonDefaultBgColor", + "scenario": "dark/custom=false/fill/defaultTheme/idle", + "actual": "#ff383838", + "expected": "#ff383838", + "matches": true, + "enforced": true + }, + { + "name": "buttonDefaultBgColor", + "scenario": "dark/custom=true/fill/defaultTheme/idle", + "actual": "#ff2b1e46", + "expected": "#ff2b1e46", + "matches": true, + "enforced": true + }, + { + "name": "buttonDefaultBgColor", + "scenario": "light/custom=false/fill/defaultTheme/idle", + "actual": "#ffe8e8e8", + "expected": "#ffe8e8e8", + "matches": true, + "enforced": true + }, + { + "name": "buttonDefaultBgColor", + "scenario": "light/custom=true/fill/defaultTheme/idle", + "actual": "#ff2b1e46", + "expected": "#ff2b1e46", + "matches": true, + "enforced": true + }, + { + "name": "buttonDefaultColor", + "scenario": "dark/custom=false/fill/defaultTheme/idle", + "actual": "#e6ffffff", + "expected": "#e6ffffff", + "matches": true, + "enforced": true + }, + { + "name": "buttonDefaultColor", + "scenario": "dark/custom=false/fill/defaultTheme/pressed", + "actual": "#e6ffffff", + "expected": "#e6ffffff", + "matches": true, + "enforced": true + }, + { + "name": "buttonDefaultColor", + "scenario": "dark/custom=true/fill/defaultTheme/idle", + "actual": "#ff33367e", + "expected": "#ff33367e", + "matches": true, + "enforced": true + }, + { + "name": "buttonDefaultColor", + "scenario": "dark/custom=true/fill/defaultTheme/pressed", + "actual": "#ff33367e", + "expected": "#ff33367e", + "matches": true, + "enforced": true + }, + { + "name": "buttonDefaultColor", + "scenario": "light/custom=false/fill/defaultTheme/idle", + "actual": "#e5000000", + "expected": "#e5000000", + "matches": true, + "enforced": true + }, + { + "name": "buttonDefaultColor", + "scenario": "light/custom=false/fill/defaultTheme/pressed", + "actual": "#e5000000", + "expected": "#e5000000", + "matches": true, + "enforced": true + }, + { + "name": "buttonDefaultColor", + "scenario": "light/custom=true/fill/defaultTheme/idle", + "actual": "#ff33367e", + "expected": "#ff33367e", + "matches": true, + "enforced": true + }, + { + "name": "buttonDefaultColor", + "scenario": "light/custom=true/fill/defaultTheme/pressed", + "actual": "#ff33367e", + "expected": "#ff33367e", + "matches": true, + "enforced": true + }, + { + "name": "buttonDefaultDisabledBg", + "scenario": "dark/custom=false/fill/defaultTheme/disabled", + "actual": "#ff2c2c2c", + "expected": "#ff2c2c2c", + "matches": true, + "enforced": true + }, + { + "name": "buttonDefaultDisabledBg", + "scenario": "dark/custom=true/fill/defaultTheme/disabled", + "actual": "#ff2d2454", + "expected": "#ff2d2454", + "matches": true, + "enforced": true + }, + { + "name": "buttonDefaultDisabledBg", + "scenario": "light/custom=false/fill/defaultTheme/disabled", + "actual": "#ffeeeeee", + "expected": "#ffeeeeee", + "matches": true, + "enforced": true + }, + { + "name": "buttonDefaultDisabledBg", + "scenario": "light/custom=true/fill/defaultTheme/disabled", + "actual": "#ff2d2454", + "expected": "#ff2d2454", + "matches": true, + "enforced": true + }, + { + "name": "buttonDefaultDisabledColor", + "scenario": "dark/custom=false/fill/defaultTheme/disabled", + "actual": "#38ffffff", + "expected": "#38ffffff", + "matches": true, + "enforced": true + }, + { + "name": "buttonDefaultDisabledColor", + "scenario": "dark/custom=true/fill/defaultTheme/disabled", + "actual": "#ff353c8c", + "expected": "#ff353c8c", + "matches": true, + "enforced": true + }, + { + "name": "buttonDefaultDisabledColor", + "scenario": "light/custom=false/fill/defaultTheme/disabled", + "actual": "#42000000", + "expected": "#42000000", + "matches": true, + "enforced": true + }, + { + "name": "buttonDefaultDisabledColor", + "scenario": "light/custom=true/fill/defaultTheme/disabled", + "actual": "#ff353c8c", + "expected": "#ff353c8c", + "matches": true, + "enforced": true + }, + { + "name": "buttonDefaultOutlineActiveBgColor", + "scenario": "dark/custom=false/outline/defaultTheme/pressed", + "actual": "#ff2c2c2c", + "expected": "#ff2c2c2c", + "matches": true, + "enforced": true + }, + { + "name": "buttonDefaultOutlineActiveBgColor", + "scenario": "dark/custom=true/outline/defaultTheme/pressed", + "actual": "#ff2f2a62", + "expected": "#ff2f2a62", + "matches": true, + "enforced": true + }, + { + "name": "buttonDefaultOutlineActiveBgColor", + "scenario": "light/custom=false/outline/defaultTheme/pressed", + "actual": "#ffe8e8e8", + "expected": "#ffe8e8e8", + "matches": true, + "enforced": true + }, + { + "name": "buttonDefaultOutlineActiveBgColor", + "scenario": "light/custom=true/outline/defaultTheme/pressed", + "actual": "#ff2f2a62", + "expected": "#ff2f2a62", + "matches": true, + "enforced": true + }, + { + "name": "buttonDefaultOutlineActiveBorderColor", + "scenario": "dark/custom=false/outline/defaultTheme/pressed", + "actual": "#ff5e5e5e", + "expected": "#ff5e5e5e", + "matches": true, + "enforced": true + }, + { + "name": "buttonDefaultOutlineActiveBorderColor", + "scenario": "dark/custom=true/outline/defaultTheme/pressed", + "actual": "#ff313070", + "expected": "#ff313070", + "matches": true, + "enforced": true + }, + { + "name": "buttonDefaultOutlineActiveBorderColor", + "scenario": "light/custom=false/outline/defaultTheme/pressed", + "actual": "#ffdcdcdc", + "expected": "#ffdcdcdc", + "matches": true, + "enforced": true + }, + { + "name": "buttonDefaultOutlineActiveBorderColor", + "scenario": "light/custom=true/outline/defaultTheme/pressed", + "actual": "#ff313070", + "expected": "#ff313070", + "matches": true, + "enforced": true + }, + { + "name": "buttonDefaultOutlineBorderColor", + "scenario": "dark/custom=false/outline/defaultTheme/idle", + "actual": "#ff5e5e5e", + "expected": "#ff5e5e5e", + "matches": true, + "enforced": true + }, + { + "name": "buttonDefaultOutlineBorderColor", + "scenario": "dark/custom=true/outline/defaultTheme/idle", + "actual": "#ff313070", + "expected": "#ff313070", + "matches": true, + "enforced": true + }, + { + "name": "buttonDefaultOutlineBorderColor", + "scenario": "light/custom=false/outline/defaultTheme/idle", + "actual": "#ffdcdcdc", + "expected": "#ffdcdcdc", + "matches": true, + "enforced": true + }, + { + "name": "buttonDefaultOutlineBorderColor", + "scenario": "light/custom=true/outline/defaultTheme/idle", + "actual": "#ff313070", + "expected": "#ff313070", + "matches": true, + "enforced": true + }, + { + "name": "buttonDefaultOutlineColor", + "scenario": "dark/custom=false/outline/defaultTheme/idle", + "actual": "#e6ffffff", + "expected": "#e6ffffff", + "matches": true, + "enforced": true + }, + { + "name": "buttonDefaultOutlineColor", + "scenario": "dark/custom=false/outline/defaultTheme/pressed", + "actual": "#e6ffffff", + "expected": "#e6ffffff", + "matches": true, + "enforced": true + }, + { + "name": "buttonDefaultOutlineColor", + "scenario": "dark/custom=true/outline/defaultTheme/idle", + "actual": "#ff33367e", + "expected": "#ff33367e", + "matches": true, + "enforced": true + }, + { + "name": "buttonDefaultOutlineColor", + "scenario": "dark/custom=true/outline/defaultTheme/pressed", + "actual": "#ff33367e", + "expected": "#ff33367e", + "matches": true, + "enforced": true + }, + { + "name": "buttonDefaultOutlineColor", + "scenario": "light/custom=false/outline/defaultTheme/idle", + "actual": "#e5000000", + "expected": "#e5000000", + "matches": true, + "enforced": true + }, + { + "name": "buttonDefaultOutlineColor", + "scenario": "light/custom=false/outline/defaultTheme/pressed", + "actual": "#e5000000", + "expected": "#e5000000", + "matches": true, + "enforced": true + }, + { + "name": "buttonDefaultOutlineColor", + "scenario": "light/custom=true/outline/defaultTheme/idle", + "actual": "#ff33367e", + "expected": "#ff33367e", + "matches": true, + "enforced": true + }, + { + "name": "buttonDefaultOutlineColor", + "scenario": "light/custom=true/outline/defaultTheme/pressed", + "actual": "#ff33367e", + "expected": "#ff33367e", + "matches": true, + "enforced": true + }, + { + "name": "buttonDefaultOutlineDisabledColor", + "scenario": "dark/custom=false/outline/defaultTheme/disabled", + "actual": "#ff5e5e5e", + "expected": "#ff5e5e5e", + "matches": true, + "enforced": true + }, + { + "name": "buttonDefaultOutlineDisabledColor", + "scenario": "dark/custom=false/outline/defaultTheme/disabled", + "actual": "#ff5e5e5e", + "expected": "#ff5e5e5e", + "matches": true, + "enforced": true + }, + { + "name": "buttonDefaultOutlineDisabledColor", + "scenario": "dark/custom=true/outline/defaultTheme/disabled", + "actual": "#ff313070", + "expected": "#ff313070", + "matches": true, + "enforced": true + }, + { + "name": "buttonDefaultOutlineDisabledColor", + "scenario": "dark/custom=true/outline/defaultTheme/disabled", + "actual": "#ff313070", + "expected": "#ff313070", + "matches": true, + "enforced": true + }, + { + "name": "buttonDefaultOutlineDisabledColor", + "scenario": "light/custom=false/outline/defaultTheme/disabled", + "actual": "#ffdcdcdc", + "expected": "#ffdcdcdc", + "matches": true, + "enforced": true + }, + { + "name": "buttonDefaultOutlineDisabledColor", + "scenario": "light/custom=false/outline/defaultTheme/disabled", + "actual": "#ffdcdcdc", + "expected": "#ffdcdcdc", + "matches": true, + "enforced": true + }, + { + "name": "buttonDefaultOutlineDisabledColor", + "scenario": "light/custom=true/outline/defaultTheme/disabled", + "actual": "#ff313070", + "expected": "#ff313070", + "matches": true, + "enforced": true + }, + { + "name": "buttonDefaultOutlineDisabledColor", + "scenario": "light/custom=true/outline/defaultTheme/disabled", + "actual": "#ff313070", + "expected": "#ff313070", + "matches": true, + "enforced": true + }, + { + "name": "buttonDefaultTextActiveBgColor", + "scenario": "dark/custom=false/text/defaultTheme/pressed", + "actual": "#ff2c2c2c", + "expected": "#ff2c2c2c", + "matches": true, + "enforced": true + }, + { + "name": "buttonDefaultTextActiveBgColor", + "scenario": "dark/custom=true/text/defaultTheme/pressed", + "actual": "#ff2f2a62", + "expected": "#ff2f2a62", + "matches": true, + "enforced": true + }, + { + "name": "buttonDefaultTextActiveBgColor", + "scenario": "light/custom=false/text/defaultTheme/pressed", + "actual": "#ffe8e8e8", + "expected": "#ffe8e8e8", + "matches": true, + "enforced": true + }, + { + "name": "buttonDefaultTextActiveBgColor", + "scenario": "light/custom=true/text/defaultTheme/pressed", + "actual": "#ff2f2a62", + "expected": "#ff2f2a62", + "matches": true, + "enforced": true + }, + { + "name": "buttonExtraSmallFont", + "scenario": "dark/custom=false/extraSmall", + "actual": "14.0/22.0/FontWeight.w600", + "expected": "14.0/22.0/FontWeight.w600", + "matches": true, + "enforced": true + }, + { + "name": "buttonExtraSmallFont", + "scenario": "dark/custom=true/extraSmall", + "actual": "17.0/25.0/FontWeight.w700", + "expected": "17.0/25.0/FontWeight.w700", + "matches": true, + "enforced": true + }, + { + "name": "buttonExtraSmallFont", + "scenario": "light/custom=false/extraSmall", + "actual": "14.0/22.0/FontWeight.w600", + "expected": "14.0/22.0/FontWeight.w600", + "matches": true, + "enforced": true + }, + { + "name": "buttonExtraSmallFont", + "scenario": "light/custom=true/extraSmall", + "actual": "17.0/25.0/FontWeight.w700", + "expected": "17.0/25.0/FontWeight.w700", + "matches": true, + "enforced": true + }, + { + "name": "buttonGhostBorderColor", + "scenario": "dark/custom=false/ghost/defaultTheme/idle", + "actual": "#e6ffffff", + "expected": "#e6ffffff", + "matches": true, + "enforced": true + }, + { + "name": "buttonGhostBorderColor", + "scenario": "dark/custom=true/ghost/defaultTheme/idle", + "actual": "#ff37429a", + "expected": "#ff363f93", + "matches": false, + "enforced": false + }, + { + "name": "buttonGhostBorderColor", + "scenario": "light/custom=false/ghost/defaultTheme/idle", + "actual": "#ffffffff", + "expected": "#ffffffff", + "matches": true, + "enforced": true + }, + { + "name": "buttonGhostBorderColor", + "scenario": "light/custom=true/ghost/defaultTheme/idle", + "actual": "#ff37429a", + "expected": "#ff363f93", + "matches": false, + "enforced": false + }, + { + "name": "buttonGhostColor", + "scenario": "dark/custom=false/ghost/defaultTheme/idle", + "actual": "#e6ffffff", + "expected": "#e6ffffff", + "matches": true, + "enforced": true + }, + { + "name": "buttonGhostColor", + "scenario": "dark/custom=true/ghost/defaultTheme/idle", + "actual": "#ff37429a", + "expected": "#ff363f93", + "matches": false, + "enforced": false + }, + { + "name": "buttonGhostColor", + "scenario": "light/custom=false/ghost/defaultTheme/idle", + "actual": "#ffffffff", + "expected": "#ffffffff", + "matches": true, + "enforced": true + }, + { + "name": "buttonGhostColor", + "scenario": "light/custom=true/ghost/defaultTheme/idle", + "actual": "#ff37429a", + "expected": "#ff363f93", + "matches": false, + "enforced": false + }, + { + "name": "buttonGhostDangerBorderColor", + "scenario": "dark/custom=false/ghost/danger/idle", + "actual": "#ffc64751", + "expected": "#ffc64751", + "matches": true, + "enforced": true + }, + { + "name": "buttonGhostDangerBorderColor", + "scenario": "dark/custom=true/ghost/danger/idle", + "actual": "#ff27122a", + "expected": "#ff27122a", + "matches": true, + "enforced": true + }, + { + "name": "buttonGhostDangerBorderColor", + "scenario": "light/custom=false/ghost/danger/idle", + "actual": "#ffd54941", + "expected": "#ffd54941", + "matches": true, + "enforced": true + }, + { + "name": "buttonGhostDangerBorderColor", + "scenario": "light/custom=true/ghost/danger/idle", + "actual": "#ff27122a", + "expected": "#ff27122a", + "matches": true, + "enforced": true + }, + { + "name": "buttonGhostDangerColor", + "scenario": "dark/custom=false/ghost/danger/idle", + "actual": "#ffc64751", + "expected": "#ffc64751", + "matches": true, + "enforced": true + }, + { + "name": "buttonGhostDangerColor", + "scenario": "dark/custom=true/ghost/danger/idle", + "actual": "#ff27122a", + "expected": "#ff27122a", + "matches": true, + "enforced": true + }, + { + "name": "buttonGhostDangerColor", + "scenario": "light/custom=false/ghost/danger/idle", + "actual": "#ffd54941", + "expected": "#ffd54941", + "matches": true, + "enforced": true + }, + { + "name": "buttonGhostDangerColor", + "scenario": "light/custom=true/ghost/danger/idle", + "actual": "#ff27122a", + "expected": "#ff27122a", + "matches": true, + "enforced": true + }, + { + "name": "buttonGhostDangerHoverColor", + "scenario": "dark/custom=false/ghost/danger/pressed", + "actual": "#ffc64751", + "expected": "#ffa03f46", + "matches": false, + "enforced": false + }, + { + "name": "buttonGhostDangerHoverColor", + "scenario": "dark/custom=true/ghost/danger/pressed", + "actual": "#ff27122a", + "expected": "#ff281531", + "matches": false, + "enforced": false + }, + { + "name": "buttonGhostDangerHoverColor", + "scenario": "light/custom=false/ghost/danger/pressed", + "actual": "#ffd54941", + "expected": "#ffad352f", + "matches": false, + "enforced": false + }, + { + "name": "buttonGhostDangerHoverColor", + "scenario": "light/custom=true/ghost/danger/pressed", + "actual": "#ff27122a", + "expected": "#ff281531", + "matches": false, + "enforced": false + }, + { + "name": "buttonGhostDisabledColor", + "scenario": "dark/custom=false/ghost/danger/disabled", + "actual": "#38ffffff", + "expected": "#38ffffff", + "matches": true, + "enforced": true + }, + { + "name": "buttonGhostDisabledColor", + "scenario": "dark/custom=false/ghost/defaultTheme/disabled", + "actual": "#38ffffff", + "expected": "#38ffffff", + "matches": true, + "enforced": true + }, + { + "name": "buttonGhostDisabledColor", + "scenario": "dark/custom=false/ghost/primary/disabled", + "actual": "#38ffffff", + "expected": "#38ffffff", + "matches": true, + "enforced": true + }, + { + "name": "buttonGhostDisabledColor", + "scenario": "dark/custom=true/ghost/danger/disabled", + "actual": "#ff3948a8", + "expected": "#ff3948a8", + "matches": true, + "enforced": true + }, + { + "name": "buttonGhostDisabledColor", + "scenario": "dark/custom=true/ghost/defaultTheme/disabled", + "actual": "#ff3948a8", + "expected": "#ff3948a8", + "matches": true, + "enforced": true + }, + { + "name": "buttonGhostDisabledColor", + "scenario": "dark/custom=true/ghost/primary/disabled", + "actual": "#ff3948a8", + "expected": "#ff3948a8", + "matches": true, + "enforced": true + }, + { + "name": "buttonGhostDisabledColor", + "scenario": "light/custom=false/ghost/danger/disabled", + "actual": "#38ffffff", + "expected": "#38ffffff", + "matches": true, + "enforced": true + }, + { + "name": "buttonGhostDisabledColor", + "scenario": "light/custom=false/ghost/defaultTheme/disabled", + "actual": "#38ffffff", + "expected": "#38ffffff", + "matches": true, + "enforced": true + }, + { + "name": "buttonGhostDisabledColor", + "scenario": "light/custom=false/ghost/primary/disabled", + "actual": "#38ffffff", + "expected": "#38ffffff", + "matches": true, + "enforced": true + }, + { + "name": "buttonGhostDisabledColor", + "scenario": "light/custom=true/ghost/danger/disabled", + "actual": "#ff3948a8", + "expected": "#ff3948a8", + "matches": true, + "enforced": true + }, + { + "name": "buttonGhostDisabledColor", + "scenario": "light/custom=true/ghost/defaultTheme/disabled", + "actual": "#ff3948a8", + "expected": "#ff3948a8", + "matches": true, + "enforced": true + }, + { + "name": "buttonGhostDisabledColor", + "scenario": "light/custom=true/ghost/primary/disabled", + "actual": "#ff3948a8", + "expected": "#ff3948a8", + "matches": true, + "enforced": true + }, + { + "name": "buttonGhostHoverColor", + "scenario": "dark/custom=false/ghost/defaultTheme/pressed", + "actual": "#e6ffffff", + "expected": "#8cffffff", + "matches": false, + "enforced": false + }, + { + "name": "buttonGhostHoverColor", + "scenario": "dark/custom=true/ghost/defaultTheme/pressed", + "actual": "#ff37429a", + "expected": "#ff3845a1", + "matches": false, + "enforced": false + }, + { + "name": "buttonGhostHoverColor", + "scenario": "light/custom=false/ghost/defaultTheme/pressed", + "actual": "#ffffffff", + "expected": "#8cffffff", + "matches": false, + "enforced": false + }, + { + "name": "buttonGhostHoverColor", + "scenario": "light/custom=true/ghost/defaultTheme/pressed", + "actual": "#ff37429a", + "expected": "#ff3845a1", + "matches": false, + "enforced": false + }, + { + "name": "buttonGhostPrimaryBorderColor", + "scenario": "dark/custom=false/ghost/primary/idle", + "actual": "#ff4582e6", + "expected": "#ff4582e6", + "matches": true, + "enforced": true + }, + { + "name": "buttonGhostPrimaryBorderColor", + "scenario": "dark/custom=true/ghost/primary/idle", + "actual": "#ff220307", + "expected": "#ff220307", + "matches": true, + "enforced": true + }, + { + "name": "buttonGhostPrimaryBorderColor", + "scenario": "light/custom=false/ghost/primary/idle", + "actual": "#ff0052d9", + "expected": "#ff0052d9", + "matches": true, + "enforced": true + }, + { + "name": "buttonGhostPrimaryBorderColor", + "scenario": "light/custom=true/ghost/primary/idle", + "actual": "#ff220307", + "expected": "#ff220307", + "matches": true, + "enforced": true + }, + { + "name": "buttonGhostPrimaryColor", + "scenario": "dark/custom=false/ghost/primary/idle", + "actual": "#ff4582e6", + "expected": "#ff4582e6", + "matches": true, + "enforced": true + }, + { + "name": "buttonGhostPrimaryColor", + "scenario": "dark/custom=true/ghost/primary/idle", + "actual": "#ff220307", + "expected": "#ff220307", + "matches": true, + "enforced": true + }, + { + "name": "buttonGhostPrimaryColor", + "scenario": "light/custom=false/ghost/primary/idle", + "actual": "#ff0052d9", + "expected": "#ff0052d9", + "matches": true, + "enforced": true + }, + { + "name": "buttonGhostPrimaryColor", + "scenario": "light/custom=true/ghost/primary/idle", + "actual": "#ff220307", + "expected": "#ff220307", + "matches": true, + "enforced": true + }, + { + "name": "buttonGhostPrimaryHoverColor", + "scenario": "dark/custom=false/ghost/primary/pressed", + "actual": "#ff4582e6", + "expected": "#ff699ef5", + "matches": false, + "enforced": false + }, + { + "name": "buttonGhostPrimaryHoverColor", + "scenario": "dark/custom=true/ghost/primary/pressed", + "actual": "#ff220307", + "expected": "#ff23060e", + "matches": false, + "enforced": false + }, + { + "name": "buttonGhostPrimaryHoverColor", + "scenario": "light/custom=false/ghost/primary/pressed", + "actual": "#ff0052d9", + "expected": "#ff003cab", + "matches": false, + "enforced": false + }, + { + "name": "buttonGhostPrimaryHoverColor", + "scenario": "light/custom=true/ghost/primary/pressed", + "actual": "#ff220307", + "expected": "#ff23060e", + "matches": false, + "enforced": false + }, + { + "name": "buttonIconSpacer", + "scenario": "dark/custom=false/extraSmall", + "actual": 4, + "expected": 8, + "matches": false, + "enforced": false + }, + { + "name": "buttonIconSpacer", + "scenario": "dark/custom=false/large", + "actual": 4, + "expected": 8, + "matches": false, + "enforced": false + }, + { + "name": "buttonIconSpacer", + "scenario": "dark/custom=false/medium", + "actual": 4, + "expected": 8, + "matches": false, + "enforced": false + }, + { + "name": "buttonIconSpacer", + "scenario": "dark/custom=false/small", + "actual": 4, + "expected": 8, + "matches": false, + "enforced": false + }, + { + "name": "buttonIconSpacer", + "scenario": "dark/custom=true/extraSmall", + "actual": 4, + "expected": 11, + "matches": false, + "enforced": false + }, + { + "name": "buttonIconSpacer", + "scenario": "dark/custom=true/large", + "actual": 4, + "expected": 11, + "matches": false, + "enforced": false + }, + { + "name": "buttonIconSpacer", + "scenario": "dark/custom=true/medium", + "actual": 4, + "expected": 11, + "matches": false, + "enforced": false + }, + { + "name": "buttonIconSpacer", + "scenario": "dark/custom=true/small", + "actual": 4, + "expected": 11, + "matches": false, + "enforced": false + }, + { + "name": "buttonIconSpacer", + "scenario": "light/custom=false/extraSmall", + "actual": 4, + "expected": 8, + "matches": false, + "enforced": false + }, + { + "name": "buttonIconSpacer", + "scenario": "light/custom=false/large", + "actual": 4, + "expected": 8, + "matches": false, + "enforced": false + }, + { + "name": "buttonIconSpacer", + "scenario": "light/custom=false/medium", + "actual": 4, + "expected": 8, + "matches": false, + "enforced": false + }, + { + "name": "buttonIconSpacer", + "scenario": "light/custom=false/small", + "actual": 4, + "expected": 8, + "matches": false, + "enforced": false + }, + { + "name": "buttonIconSpacer", + "scenario": "light/custom=true/extraSmall", + "actual": 4, + "expected": 11, + "matches": false, + "enforced": false + }, + { + "name": "buttonIconSpacer", + "scenario": "light/custom=true/large", + "actual": 4, + "expected": 11, + "matches": false, + "enforced": false + }, + { + "name": "buttonIconSpacer", + "scenario": "light/custom=true/medium", + "actual": 4, + "expected": 11, + "matches": false, + "enforced": false + }, + { + "name": "buttonIconSpacer", + "scenario": "light/custom=true/small", + "actual": 4, + "expected": 11, + "matches": false, + "enforced": false + }, + { + "name": "buttonLargeFont", + "scenario": "dark/custom=false/large", + "actual": "16.0/24.0/FontWeight.w600", + "expected": "16.0/24.0/FontWeight.w600", + "matches": true, + "enforced": true + }, + { + "name": "buttonLargeFont", + "scenario": "dark/custom=true/large", + "actual": "19.0/27.0/FontWeight.w700", + "expected": "19.0/27.0/FontWeight.w700", + "matches": true, + "enforced": true + }, + { + "name": "buttonLargeFont", + "scenario": "light/custom=false/large", + "actual": "16.0/24.0/FontWeight.w600", + "expected": "16.0/24.0/FontWeight.w600", + "matches": true, + "enforced": true + }, + { + "name": "buttonLargeFont", + "scenario": "light/custom=true/large", + "actual": "19.0/27.0/FontWeight.w700", + "expected": "19.0/27.0/FontWeight.w700", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightActiveBgColor", + "scenario": "dark/custom=false/fill/light/pressed", + "actual": "#ff1b2f51", + "expected": "#ff173463", + "matches": false, + "enforced": false + }, + { + "name": "buttonLightActiveBgColor", + "scenario": "dark/custom=true/fill/light/pressed", + "actual": "#ff1b2f51", + "expected": "#ff260f23", + "matches": false, + "enforced": false + }, + { + "name": "buttonLightActiveBgColor", + "scenario": "light/custom=false/fill/light/pressed", + "actual": "#fff2f3ff", + "expected": "#ffd9e1ff", + "matches": false, + "enforced": false + }, + { + "name": "buttonLightActiveBgColor", + "scenario": "light/custom=true/fill/light/pressed", + "actual": "#fff2f3ff", + "expected": "#ff260f23", + "matches": false, + "enforced": false + }, + { + "name": "buttonLightBgColor", + "scenario": "dark/custom=false/fill/light/idle", + "actual": "#ff1b2f51", + "expected": "#ff1b2f51", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightBgColor", + "scenario": "dark/custom=true/fill/light/idle", + "actual": "#ff250c1c", + "expected": "#ff250c1c", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightBgColor", + "scenario": "light/custom=false/fill/light/idle", + "actual": "#fff2f3ff", + "expected": "#fff2f3ff", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightBgColor", + "scenario": "light/custom=true/fill/light/idle", + "actual": "#ff250c1c", + "expected": "#ff250c1c", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightColor", + "scenario": "dark/custom=false/fill/light/idle", + "actual": "#ff4582e6", + "expected": "#ff4582e6", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightColor", + "scenario": "dark/custom=false/fill/light/pressed", + "actual": "#ff4582e6", + "expected": "#ff4582e6", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightColor", + "scenario": "dark/custom=true/fill/light/idle", + "actual": "#ff220307", + "expected": "#ff220307", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightColor", + "scenario": "dark/custom=true/fill/light/pressed", + "actual": "#ff220307", + "expected": "#ff220307", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightColor", + "scenario": "light/custom=false/fill/light/idle", + "actual": "#ff0052d9", + "expected": "#ff0052d9", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightColor", + "scenario": "light/custom=false/fill/light/pressed", + "actual": "#ff0052d9", + "expected": "#ff0052d9", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightColor", + "scenario": "light/custom=true/fill/light/idle", + "actual": "#ff220307", + "expected": "#ff220307", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightColor", + "scenario": "light/custom=true/fill/light/pressed", + "actual": "#ff220307", + "expected": "#ff220307", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightDisabledBg", + "scenario": "dark/custom=false/fill/light/disabled", + "actual": "#ff1b2f51", + "expected": "#ff1b2f51", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightDisabledBg", + "scenario": "dark/custom=true/fill/light/disabled", + "actual": "#ff250c1c", + "expected": "#ff250c1c", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightDisabledBg", + "scenario": "light/custom=false/fill/light/disabled", + "actual": "#fff2f3ff", + "expected": "#fff2f3ff", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightDisabledBg", + "scenario": "light/custom=true/fill/light/disabled", + "actual": "#ff250c1c", + "expected": "#ff250c1c", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightDisabledColor", + "scenario": "dark/custom=false/fill/light/disabled", + "actual": "#ff143975", + "expected": "#ff143975", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightDisabledColor", + "scenario": "dark/custom=true/fill/light/disabled", + "actual": "#ff240915", + "expected": "#ff240915", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightDisabledColor", + "scenario": "light/custom=false/fill/light/disabled", + "actual": "#ffb5c7ff", + "expected": "#ffb5c7ff", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightDisabledColor", + "scenario": "light/custom=true/fill/light/disabled", + "actual": "#ff240915", + "expected": "#ff240915", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightOutlineActiveBgColor", + "scenario": "dark/custom=false/outline/light/pressed", + "actual": "#ff173463", + "expected": "#ff173463", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightOutlineActiveBgColor", + "scenario": "dark/custom=true/outline/light/pressed", + "actual": "#ff260f23", + "expected": "#ff260f23", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightOutlineActiveBgColor", + "scenario": "light/custom=false/outline/light/pressed", + "actual": "#ffd9e1ff", + "expected": "#ffd9e1ff", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightOutlineActiveBgColor", + "scenario": "light/custom=true/outline/light/pressed", + "actual": "#ff260f23", + "expected": "#ff260f23", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightOutlineActiveBorderColor", + "scenario": "dark/custom=false/outline/light/pressed", + "actual": "#ff699ef5", + "expected": "#ff699ef5", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightOutlineActiveBorderColor", + "scenario": "dark/custom=true/outline/light/pressed", + "actual": "#ff23060e", + "expected": "#ff23060e", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightOutlineActiveBorderColor", + "scenario": "light/custom=false/outline/light/pressed", + "actual": "#ff003cab", + "expected": "#ff003cab", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightOutlineActiveBorderColor", + "scenario": "light/custom=true/outline/light/pressed", + "actual": "#ff23060e", + "expected": "#ff23060e", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightOutlineBgColor", + "scenario": "dark/custom=false/outline/light/idle", + "actual": "#ff1b2f51", + "expected": "#ff1b2f51", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightOutlineBgColor", + "scenario": "dark/custom=true/outline/light/idle", + "actual": "#ff250c1c", + "expected": "#ff250c1c", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightOutlineBgColor", + "scenario": "light/custom=false/outline/light/idle", + "actual": "#fff2f3ff", + "expected": "#fff2f3ff", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightOutlineBgColor", + "scenario": "light/custom=true/outline/light/idle", + "actual": "#ff250c1c", + "expected": "#ff250c1c", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightOutlineBorderColor", + "scenario": "dark/custom=false/outline/light/idle", + "actual": "#ff4582e6", + "expected": "#ff4582e6", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightOutlineBorderColor", + "scenario": "dark/custom=true/outline/light/idle", + "actual": "#ff220307", + "expected": "#ff220307", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightOutlineBorderColor", + "scenario": "light/custom=false/outline/light/idle", + "actual": "#ff0052d9", + "expected": "#ff0052d9", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightOutlineBorderColor", + "scenario": "light/custom=true/outline/light/idle", + "actual": "#ff220307", + "expected": "#ff220307", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightOutlineColor", + "scenario": "dark/custom=false/outline/light/idle", + "actual": "#ff4582e6", + "expected": "#ff4582e6", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightOutlineColor", + "scenario": "dark/custom=false/outline/light/pressed", + "actual": "#ff699ef5", + "expected": "#ff699ef5", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightOutlineColor", + "scenario": "dark/custom=true/outline/light/idle", + "actual": "#ff220307", + "expected": "#ff220307", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightOutlineColor", + "scenario": "dark/custom=true/outline/light/pressed", + "actual": "#ff23060e", + "expected": "#ff23060e", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightOutlineColor", + "scenario": "light/custom=false/outline/light/idle", + "actual": "#ff0052d9", + "expected": "#ff0052d9", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightOutlineColor", + "scenario": "light/custom=false/outline/light/pressed", + "actual": "#ff003cab", + "expected": "#ff003cab", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightOutlineColor", + "scenario": "light/custom=true/outline/light/idle", + "actual": "#ff220307", + "expected": "#ff220307", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightOutlineColor", + "scenario": "light/custom=true/outline/light/pressed", + "actual": "#ff23060e", + "expected": "#ff23060e", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightOutlineDisabledColor", + "scenario": "dark/custom=false/outline/light/disabled", + "actual": "#ff143975", + "expected": "#ff143975", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightOutlineDisabledColor", + "scenario": "dark/custom=false/outline/light/disabled", + "actual": "#ff143975", + "expected": "#ff143975", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightOutlineDisabledColor", + "scenario": "dark/custom=true/outline/light/disabled", + "actual": "#ff240915", + "expected": "#ff240915", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightOutlineDisabledColor", + "scenario": "dark/custom=true/outline/light/disabled", + "actual": "#ff240915", + "expected": "#ff240915", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightOutlineDisabledColor", + "scenario": "light/custom=false/outline/light/disabled", + "actual": "#ffb5c7ff", + "expected": "#ffb5c7ff", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightOutlineDisabledColor", + "scenario": "light/custom=false/outline/light/disabled", + "actual": "#ffb5c7ff", + "expected": "#ffb5c7ff", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightOutlineDisabledColor", + "scenario": "light/custom=true/outline/light/disabled", + "actual": "#ff240915", + "expected": "#ff240915", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightOutlineDisabledColor", + "scenario": "light/custom=true/outline/light/disabled", + "actual": "#ff240915", + "expected": "#ff240915", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightTextActiveBgColor", + "scenario": "dark/custom=false/text/light/pressed", + "actual": "#ff2c2c2c", + "expected": "#ff2c2c2c", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightTextActiveBgColor", + "scenario": "dark/custom=true/text/light/pressed", + "actual": "#ff2f2a62", + "expected": "#ff2f2a62", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightTextActiveBgColor", + "scenario": "light/custom=false/text/light/pressed", + "actual": "#ffe8e8e8", + "expected": "#ffe8e8e8", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightTextActiveBgColor", + "scenario": "light/custom=true/text/light/pressed", + "actual": "#ff2f2a62", + "expected": "#ff2f2a62", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightTextColor", + "scenario": "dark/custom=false/text/light/idle", + "actual": "#ff4582e6", + "expected": "#ff4582e6", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightTextColor", + "scenario": "dark/custom=false/text/light/pressed", + "actual": "#ff4582e6", + "expected": "#ff4582e6", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightTextColor", + "scenario": "dark/custom=true/text/light/idle", + "actual": "#ff220307", + "expected": "#ff220307", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightTextColor", + "scenario": "dark/custom=true/text/light/pressed", + "actual": "#ff220307", + "expected": "#ff220307", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightTextColor", + "scenario": "light/custom=false/text/light/idle", + "actual": "#ff0052d9", + "expected": "#ff0052d9", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightTextColor", + "scenario": "light/custom=false/text/light/pressed", + "actual": "#ff0052d9", + "expected": "#ff0052d9", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightTextColor", + "scenario": "light/custom=true/text/light/idle", + "actual": "#ff220307", + "expected": "#ff220307", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightTextColor", + "scenario": "light/custom=true/text/light/pressed", + "actual": "#ff220307", + "expected": "#ff220307", + "matches": true, + "enforced": true + }, + { + "name": "buttonMediumFont", + "scenario": "dark/custom=false/medium", + "actual": "16.0/24.0/FontWeight.w600", + "expected": "16.0/24.0/FontWeight.w600", + "matches": true, + "enforced": true + }, + { + "name": "buttonMediumFont", + "scenario": "dark/custom=true/medium", + "actual": "19.0/27.0/FontWeight.w700", + "expected": "19.0/27.0/FontWeight.w700", + "matches": true, + "enforced": true + }, + { + "name": "buttonMediumFont", + "scenario": "light/custom=false/medium", + "actual": "16.0/24.0/FontWeight.w600", + "expected": "16.0/24.0/FontWeight.w600", + "matches": true, + "enforced": true + }, + { + "name": "buttonMediumFont", + "scenario": "light/custom=true/medium", + "actual": "19.0/27.0/FontWeight.w700", + "expected": "19.0/27.0/FontWeight.w700", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryActiveBgColor", + "scenario": "dark/custom=false/fill/primary/pressed", + "actual": "#ff699ef5", + "expected": "#ff699ef5", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryActiveBgColor", + "scenario": "dark/custom=true/fill/primary/pressed", + "actual": "#ff23060e", + "expected": "#ff23060e", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryActiveBgColor", + "scenario": "light/custom=false/fill/primary/pressed", + "actual": "#ff003cab", + "expected": "#ff003cab", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryActiveBgColor", + "scenario": "light/custom=true/fill/primary/pressed", + "actual": "#ff23060e", + "expected": "#ff23060e", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryBgColor", + "scenario": "dark/custom=false/fill/primary/idle", + "actual": "#ff4582e6", + "expected": "#ff4582e6", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryBgColor", + "scenario": "dark/custom=true/fill/primary/idle", + "actual": "#ff220307", + "expected": "#ff220307", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryBgColor", + "scenario": "light/custom=false/fill/primary/idle", + "actual": "#ff0052d9", + "expected": "#ff0052d9", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryBgColor", + "scenario": "light/custom=true/fill/primary/idle", + "actual": "#ff220307", + "expected": "#ff220307", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryColor", + "scenario": "dark/custom=false/fill/primary/idle", + "actual": "#e6ffffff", + "expected": "#e6ffffff", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryColor", + "scenario": "dark/custom=false/fill/primary/pressed", + "actual": "#e6ffffff", + "expected": "#e6ffffff", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryColor", + "scenario": "dark/custom=true/fill/primary/idle", + "actual": "#ff363f93", + "expected": "#ff363f93", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryColor", + "scenario": "dark/custom=true/fill/primary/pressed", + "actual": "#ff363f93", + "expected": "#ff363f93", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryColor", + "scenario": "light/custom=false/fill/primary/idle", + "actual": "#ffffffff", + "expected": "#ffffffff", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryColor", + "scenario": "light/custom=false/fill/primary/pressed", + "actual": "#ffffffff", + "expected": "#ffffffff", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryColor", + "scenario": "light/custom=true/fill/primary/idle", + "actual": "#ff363f93", + "expected": "#ff363f93", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryColor", + "scenario": "light/custom=true/fill/primary/pressed", + "actual": "#ff363f93", + "expected": "#ff363f93", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryDisabledBg", + "scenario": "dark/custom=false/fill/primary/disabled", + "actual": "#ff143975", + "expected": "#ff143975", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryDisabledBg", + "scenario": "dark/custom=true/fill/primary/disabled", + "actual": "#ff240915", + "expected": "#ff240915", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryDisabledBg", + "scenario": "light/custom=false/fill/primary/disabled", + "actual": "#ffb5c7ff", + "expected": "#ffb5c7ff", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryDisabledBg", + "scenario": "light/custom=true/fill/primary/disabled", + "actual": "#ff240915", + "expected": "#ff240915", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryDisabledColor", + "scenario": "dark/custom=false/fill/primary/disabled", + "actual": "#38ffffff", + "expected": "#38ffffff", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryDisabledColor", + "scenario": "dark/custom=true/fill/primary/disabled", + "actual": "#ff3948a8", + "expected": "#ff3948a8", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryDisabledColor", + "scenario": "light/custom=false/fill/primary/disabled", + "actual": "#ffffffff", + "expected": "#ffffffff", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryDisabledColor", + "scenario": "light/custom=true/fill/primary/disabled", + "actual": "#ff363f93", + "expected": "#ff363f93", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryOutlineActiveBgColor", + "scenario": "dark/custom=false/outline/primary/pressed", + "actual": "#ff2c2c2c", + "expected": "#ff2c2c2c", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryOutlineActiveBgColor", + "scenario": "dark/custom=true/outline/primary/pressed", + "actual": "#ff2f2a62", + "expected": "#ff2f2a62", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryOutlineActiveBgColor", + "scenario": "light/custom=false/outline/primary/pressed", + "actual": "#ffe8e8e8", + "expected": "#ffe8e8e8", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryOutlineActiveBgColor", + "scenario": "light/custom=true/outline/primary/pressed", + "actual": "#ff2f2a62", + "expected": "#ff2f2a62", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryOutlineActiveBorderColor", + "scenario": "dark/custom=false/outline/primary/pressed", + "actual": "#ff699ef5", + "expected": "#ff699ef5", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryOutlineActiveBorderColor", + "scenario": "dark/custom=true/outline/primary/pressed", + "actual": "#ff23060e", + "expected": "#ff23060e", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryOutlineActiveBorderColor", + "scenario": "light/custom=false/outline/primary/pressed", + "actual": "#ff003cab", + "expected": "#ff003cab", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryOutlineActiveBorderColor", + "scenario": "light/custom=true/outline/primary/pressed", + "actual": "#ff23060e", + "expected": "#ff23060e", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryOutlineBorderColor", + "scenario": "dark/custom=false/outline/primary/idle", + "actual": "#ff4582e6", + "expected": "#ff4582e6", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryOutlineBorderColor", + "scenario": "dark/custom=true/outline/primary/idle", + "actual": "#ff220307", + "expected": "#ff220307", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryOutlineBorderColor", + "scenario": "light/custom=false/outline/primary/idle", + "actual": "#ff0052d9", + "expected": "#ff0052d9", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryOutlineBorderColor", + "scenario": "light/custom=true/outline/primary/idle", + "actual": "#ff220307", + "expected": "#ff220307", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryOutlineColor", + "scenario": "dark/custom=false/outline/primary/idle", + "actual": "#ff4582e6", + "expected": "#ff4582e6", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryOutlineColor", + "scenario": "dark/custom=false/outline/primary/pressed", + "actual": "#ff699ef5", + "expected": "#ff699ef5", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryOutlineColor", + "scenario": "dark/custom=true/outline/primary/idle", + "actual": "#ff220307", + "expected": "#ff220307", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryOutlineColor", + "scenario": "dark/custom=true/outline/primary/pressed", + "actual": "#ff23060e", + "expected": "#ff23060e", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryOutlineColor", + "scenario": "light/custom=false/outline/primary/idle", + "actual": "#ff0052d9", + "expected": "#ff0052d9", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryOutlineColor", + "scenario": "light/custom=false/outline/primary/pressed", + "actual": "#ff003cab", + "expected": "#ff003cab", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryOutlineColor", + "scenario": "light/custom=true/outline/primary/idle", + "actual": "#ff220307", + "expected": "#ff220307", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryOutlineColor", + "scenario": "light/custom=true/outline/primary/pressed", + "actual": "#ff23060e", + "expected": "#ff23060e", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryOutlineDisabledColor", + "scenario": "dark/custom=false/outline/primary/disabled", + "actual": "#ff143975", + "expected": "#ff143975", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryOutlineDisabledColor", + "scenario": "dark/custom=false/outline/primary/disabled", + "actual": "#ff143975", + "expected": "#ff143975", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryOutlineDisabledColor", + "scenario": "dark/custom=true/outline/primary/disabled", + "actual": "#ff240915", + "expected": "#ff240915", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryOutlineDisabledColor", + "scenario": "dark/custom=true/outline/primary/disabled", + "actual": "#ff240915", + "expected": "#ff240915", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryOutlineDisabledColor", + "scenario": "light/custom=false/outline/primary/disabled", + "actual": "#ffb5c7ff", + "expected": "#ffb5c7ff", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryOutlineDisabledColor", + "scenario": "light/custom=false/outline/primary/disabled", + "actual": "#ffb5c7ff", + "expected": "#ffb5c7ff", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryOutlineDisabledColor", + "scenario": "light/custom=true/outline/primary/disabled", + "actual": "#ff240915", + "expected": "#ff240915", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryOutlineDisabledColor", + "scenario": "light/custom=true/outline/primary/disabled", + "actual": "#ff240915", + "expected": "#ff240915", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryTextActiveBgColor", + "scenario": "dark/custom=false/text/primary/pressed", + "actual": "#ff2c2c2c", + "expected": "#ff2c2c2c", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryTextActiveBgColor", + "scenario": "dark/custom=true/text/primary/pressed", + "actual": "#ff2f2a62", + "expected": "#ff2f2a62", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryTextActiveBgColor", + "scenario": "light/custom=false/text/primary/pressed", + "actual": "#ffe8e8e8", + "expected": "#ffe8e8e8", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryTextActiveBgColor", + "scenario": "light/custom=true/text/primary/pressed", + "actual": "#ff2f2a62", + "expected": "#ff2f2a62", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryTextColor", + "scenario": "dark/custom=false/text/primary/idle", + "actual": "#ff4582e6", + "expected": "#ff4582e6", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryTextColor", + "scenario": "dark/custom=false/text/primary/pressed", + "actual": "#ff4582e6", + "expected": "#ff4582e6", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryTextColor", + "scenario": "dark/custom=true/text/primary/idle", + "actual": "#ff220307", + "expected": "#ff220307", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryTextColor", + "scenario": "dark/custom=true/text/primary/pressed", + "actual": "#ff220307", + "expected": "#ff220307", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryTextColor", + "scenario": "light/custom=false/text/primary/idle", + "actual": "#ff0052d9", + "expected": "#ff0052d9", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryTextColor", + "scenario": "light/custom=false/text/primary/pressed", + "actual": "#ff0052d9", + "expected": "#ff0052d9", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryTextColor", + "scenario": "light/custom=true/text/primary/idle", + "actual": "#ff220307", + "expected": "#ff220307", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryTextColor", + "scenario": "light/custom=true/text/primary/pressed", + "actual": "#ff220307", + "expected": "#ff220307", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryTextDisabledColor", + "scenario": "dark/custom=false/text/primary/disabled", + "actual": "#ff143975", + "expected": "#ff143975", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryTextDisabledColor", + "scenario": "dark/custom=true/text/primary/disabled", + "actual": "#ff240915", + "expected": "#ff240915", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryTextDisabledColor", + "scenario": "light/custom=false/text/primary/disabled", + "actual": "#ffb5c7ff", + "expected": "#ffb5c7ff", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryTextDisabledColor", + "scenario": "light/custom=true/text/primary/disabled", + "actual": "#ff240915", + "expected": "#ff240915", + "matches": true, + "enforced": true + }, + { + "name": "buttonSmallFont", + "scenario": "dark/custom=false/small", + "actual": "14.0/22.0/FontWeight.w600", + "expected": "14.0/22.0/FontWeight.w600", + "matches": true, + "enforced": true + }, + { + "name": "buttonSmallFont", + "scenario": "dark/custom=true/small", + "actual": "17.0/25.0/FontWeight.w700", + "expected": "17.0/25.0/FontWeight.w700", + "matches": true, + "enforced": true + }, + { + "name": "buttonSmallFont", + "scenario": "light/custom=false/small", + "actual": "14.0/22.0/FontWeight.w600", + "expected": "14.0/22.0/FontWeight.w600", + "matches": true, + "enforced": true + }, + { + "name": "buttonSmallFont", + "scenario": "light/custom=true/small", + "actual": "17.0/25.0/FontWeight.w700", + "expected": "17.0/25.0/FontWeight.w700", + "matches": true, + "enforced": true + }, + { + "name": "emptyActionMarginTop", + "scenario": "dark/custom=false/image=false", + "actual": 32, + "expected": 32, + "matches": true, + "enforced": true + }, + { + "name": "emptyActionMarginTop", + "scenario": "dark/custom=false/image=true", + "actual": 32, + "expected": 32, + "matches": true, + "enforced": true + }, + { + "name": "emptyActionMarginTop", + "scenario": "dark/custom=true/image=false", + "actual": 32, + "expected": 37, + "matches": false, + "enforced": false + }, + { + "name": "emptyActionMarginTop", + "scenario": "dark/custom=true/image=true", + "actual": 32, + "expected": 37, + "matches": false, + "enforced": false + }, + { + "name": "emptyActionMarginTop", + "scenario": "light/custom=false/image=false", + "actual": 32, + "expected": 32, + "matches": true, + "enforced": true + }, + { + "name": "emptyActionMarginTop", + "scenario": "light/custom=false/image=true", + "actual": 32, + "expected": 32, + "matches": true, + "enforced": true + }, + { + "name": "emptyActionMarginTop", + "scenario": "light/custom=true/image=false", + "actual": 32, + "expected": 37, + "matches": false, + "enforced": false + }, + { + "name": "emptyActionMarginTop", + "scenario": "light/custom=true/image=true", + "actual": 32, + "expected": 37, + "matches": false, + "enforced": false + }, + { + "name": "emptyDescriptionColor", + "scenario": "dark/custom=false/image=false", + "actual": "#59ffffff", + "expected": "#59ffffff", + "matches": true, + "enforced": true + }, + { + "name": "emptyDescriptionColor", + "scenario": "dark/custom=false/image=true", + "actual": "#59ffffff", + "expected": "#59ffffff", + "matches": true, + "enforced": true + }, + { + "name": "emptyDescriptionColor", + "scenario": "dark/custom=true/image=false", + "actual": "#ff343985", + "expected": "#ff343985", + "matches": true, + "enforced": true + }, + { + "name": "emptyDescriptionColor", + "scenario": "dark/custom=true/image=true", + "actual": "#ff343985", + "expected": "#ff343985", + "matches": true, + "enforced": true + }, + { + "name": "emptyDescriptionColor", + "scenario": "light/custom=false/image=false", + "actual": "#66000000", + "expected": "#66000000", + "matches": true, + "enforced": true + }, + { + "name": "emptyDescriptionColor", + "scenario": "light/custom=false/image=true", + "actual": "#66000000", + "expected": "#66000000", + "matches": true, + "enforced": true + }, + { + "name": "emptyDescriptionColor", + "scenario": "light/custom=true/image=false", + "actual": "#ff343985", + "expected": "#ff343985", + "matches": true, + "enforced": true + }, + { + "name": "emptyDescriptionColor", + "scenario": "light/custom=true/image=true", + "actual": "#ff343985", + "expected": "#ff343985", + "matches": true, + "enforced": true + }, + { + "name": "emptyDescriptionFont", + "scenario": "dark/custom=false/image=false", + "actual": "14.0/22.0", + "expected": "14.0/22.0", + "matches": true, + "enforced": true + }, + { + "name": "emptyDescriptionFont", + "scenario": "dark/custom=false/image=true", + "actual": "14.0/22.0", + "expected": "14.0/22.0", + "matches": true, + "enforced": true + }, + { + "name": "emptyDescriptionFont", + "scenario": "dark/custom=true/image=false", + "actual": "19.0/27.0", + "expected": "19.0/27.0", + "matches": true, + "enforced": true + }, + { + "name": "emptyDescriptionFont", + "scenario": "dark/custom=true/image=true", + "actual": "19.0/27.0", + "expected": "19.0/27.0", + "matches": true, + "enforced": true + }, + { + "name": "emptyDescriptionFont", + "scenario": "light/custom=false/image=false", + "actual": "14.0/22.0", + "expected": "14.0/22.0", + "matches": true, + "enforced": true + }, + { + "name": "emptyDescriptionFont", + "scenario": "light/custom=false/image=true", + "actual": "14.0/22.0", + "expected": "14.0/22.0", + "matches": true, + "enforced": true + }, + { + "name": "emptyDescriptionFont", + "scenario": "light/custom=true/image=false", + "actual": "19.0/27.0", + "expected": "19.0/27.0", + "matches": true, + "enforced": true + }, + { + "name": "emptyDescriptionFont", + "scenario": "light/custom=true/image=true", + "actual": "19.0/27.0", + "expected": "19.0/27.0", + "matches": true, + "enforced": true + }, + { + "name": "emptyDescriptionMarginTop", + "scenario": "dark/custom=false/image=false", + "actual": 22, + "expected": 16, + "matches": false, + "enforced": false + }, + { + "name": "emptyDescriptionMarginTop", + "scenario": "dark/custom=false/image=true", + "actual": 16, + "expected": 16, + "matches": true, + "enforced": true + }, + { + "name": "emptyDescriptionMarginTop", + "scenario": "dark/custom=true/image=false", + "actual": 22, + "expected": 19, + "matches": false, + "enforced": false + }, + { + "name": "emptyDescriptionMarginTop", + "scenario": "dark/custom=true/image=true", + "actual": 16, + "expected": 19, + "matches": false, + "enforced": false + }, + { + "name": "emptyDescriptionMarginTop", + "scenario": "light/custom=false/image=false", + "actual": 22, + "expected": 16, + "matches": false, + "enforced": false + }, + { + "name": "emptyDescriptionMarginTop", + "scenario": "light/custom=false/image=true", + "actual": 16, + "expected": 16, + "matches": true, + "enforced": true + }, + { + "name": "emptyDescriptionMarginTop", + "scenario": "light/custom=true/image=false", + "actual": 22, + "expected": 19, + "matches": false, + "enforced": false + }, + { + "name": "emptyDescriptionMarginTop", + "scenario": "light/custom=true/image=true", + "actual": 16, + "expected": 19, + "matches": false, + "enforced": false + }, + { + "name": "emptyIconColor", + "scenario": "dark/custom=false/image=false", + "actual": "#59ffffff", + "expected": "#59ffffff", + "matches": true, + "enforced": true + }, + { + "name": "emptyIconColor", + "scenario": "dark/custom=true/image=false", + "actual": "#ff343985", + "expected": "#ff343985", + "matches": true, + "enforced": true + }, + { + "name": "emptyIconColor", + "scenario": "light/custom=false/image=false", + "actual": "#66000000", + "expected": "#66000000", + "matches": true, + "enforced": true + }, + { + "name": "emptyIconColor", + "scenario": "light/custom=true/image=false", + "actual": "#ff343985", + "expected": "#ff343985", + "matches": true, + "enforced": true + }, + { + "name": "inputBgColor", + "scenario": "dark/custom=false/enabled=true", + "actual": "#ff242424", + "expected": "#ff242424", + "matches": true, + "enforced": true + }, + { + "name": "inputBgColor", + "scenario": "dark/custom=true/enabled=true", + "actual": "#ff2e275b", + "expected": "#ff2e275b", + "matches": true, + "enforced": true + }, + { + "name": "inputBgColor", + "scenario": "light/custom=false/enabled=true", + "actual": "#ffffffff", + "expected": "#ffffffff", + "matches": true, + "enforced": true + }, + { + "name": "inputBgColor", + "scenario": "light/custom=true/enabled=true", + "actual": "#ff2e275b", + "expected": "#ff2e275b", + "matches": true, + "enforced": true + }, + { + "name": "inputBorderColor", + "scenario": "dark/custom=false/enabled=true", + "actual": "#ff5e5e5e", + "expected": "#ff383838", + "matches": false, + "enforced": false + }, + { + "name": "inputBorderColor", + "scenario": "dark/custom=true/enabled=true", + "actual": "#ff313070", + "expected": "#ff323377", + "matches": false, + "enforced": false + }, + { + "name": "inputBorderColor", + "scenario": "light/custom=false/enabled=true", + "actual": "#ffdcdcdc", + "expected": "#ffe8e8e8", + "matches": false, + "enforced": false + }, + { + "name": "inputBorderColor", + "scenario": "light/custom=true/enabled=true", + "actual": "#ff313070", + "expected": "#ff323377", + "matches": false, + "enforced": false + }, + { + "name": "inputDefaultTextColor", + "scenario": "dark/custom=false/enabled=true", + "actual": "#e6ffffff", + "expected": "#e6ffffff", + "matches": true, + "enforced": true + }, + { + "name": "inputDefaultTextColor", + "scenario": "dark/custom=true/enabled=true", + "actual": "#ff33367e", + "expected": "#ff33367e", + "matches": true, + "enforced": true + }, + { + "name": "inputDefaultTextColor", + "scenario": "light/custom=false/enabled=true", + "actual": "#e5000000", + "expected": "#e5000000", + "matches": true, + "enforced": true + }, + { + "name": "inputDefaultTextColor", + "scenario": "light/custom=true/enabled=true", + "actual": "#ff33367e", + "expected": "#ff33367e", + "matches": true, + "enforced": true + }, + { + "name": "inputDisabledTextColor", + "scenario": "dark/custom=false/enabled=false", + "actual": "#38ffffff", + "expected": "#38ffffff", + "matches": true, + "enforced": true + }, + { + "name": "inputDisabledTextColor", + "scenario": "dark/custom=false/enabled=false", + "actual": "#38ffffff", + "expected": "#38ffffff", + "matches": true, + "enforced": true + }, + { + "name": "inputDisabledTextColor", + "scenario": "dark/custom=true/enabled=false", + "actual": "#ff353c8c", + "expected": "#ff353c8c", + "matches": true, + "enforced": true + }, + { + "name": "inputDisabledTextColor", + "scenario": "dark/custom=true/enabled=false", + "actual": "#ff353c8c", + "expected": "#ff353c8c", + "matches": true, + "enforced": true + }, + { + "name": "inputDisabledTextColor", + "scenario": "light/custom=false/enabled=false", + "actual": "#42000000", + "expected": "#42000000", + "matches": true, + "enforced": true + }, + { + "name": "inputDisabledTextColor", + "scenario": "light/custom=false/enabled=false", + "actual": "#42000000", + "expected": "#42000000", + "matches": true, + "enforced": true + }, + { + "name": "inputDisabledTextColor", + "scenario": "light/custom=true/enabled=false", + "actual": "#ff353c8c", + "expected": "#ff353c8c", + "matches": true, + "enforced": true + }, + { + "name": "inputDisabledTextColor", + "scenario": "light/custom=true/enabled=false", + "actual": "#ff353c8c", + "expected": "#ff353c8c", + "matches": true, + "enforced": true + }, + { + "name": "inputPlaceholderTextColor", + "scenario": "dark/custom=false/enabled=true", + "actual": "#59ffffff", + "expected": "#59ffffff", + "matches": true, + "enforced": true + }, + { + "name": "inputPlaceholderTextColor", + "scenario": "dark/custom=true/enabled=true", + "actual": "#ff343985", + "expected": "#ff343985", + "matches": true, + "enforced": true + }, + { + "name": "inputPlaceholderTextColor", + "scenario": "light/custom=false/enabled=true", + "actual": "#66000000", + "expected": "#66000000", + "matches": true, + "enforced": true + }, + { + "name": "inputPlaceholderTextColor", + "scenario": "light/custom=true/enabled=true", + "actual": "#ff343985", + "expected": "#ff343985", + "matches": true, + "enforced": true + }, + { + "name": "inputPlaceholderTextFont", + "scenario": "dark/custom=false/enabled=true", + "actual": "16.0/24.0", + "expected": "16.0/24.0", + "matches": true, + "enforced": true + }, + { + "name": "inputPlaceholderTextFont", + "scenario": "dark/custom=true/enabled=true", + "actual": "20.0/28.0", + "expected": "20.0/28.0", + "matches": true, + "enforced": true + }, + { + "name": "inputPlaceholderTextFont", + "scenario": "light/custom=false/enabled=true", + "actual": "16.0/24.0", + "expected": "16.0/24.0", + "matches": true, + "enforced": true + }, + { + "name": "inputPlaceholderTextFont", + "scenario": "light/custom=true/enabled=true", + "actual": "20.0/28.0", + "expected": "20.0/28.0", + "matches": true, + "enforced": true + }, + { + "name": "inputPrefixIconColor", + "scenario": "dark/custom=false/enabled=true", + "actual": "#e6ffffff", + "expected": "#e6ffffff", + "matches": true, + "enforced": true + }, + { + "name": "inputPrefixIconColor", + "scenario": "dark/custom=true/enabled=true", + "actual": "#ff33367e", + "expected": "#ff33367e", + "matches": true, + "enforced": true + }, + { + "name": "inputPrefixIconColor", + "scenario": "light/custom=false/enabled=true", + "actual": "#e5000000", + "expected": "#e5000000", + "matches": true, + "enforced": true + }, + { + "name": "inputPrefixIconColor", + "scenario": "light/custom=true/enabled=true", + "actual": "#ff33367e", + "expected": "#ff33367e", + "matches": true, + "enforced": true + }, + { + "name": "inputSuffixIconColor", + "scenario": "dark/custom=false/enabled=true", + "actual": "#59ffffff", + "expected": "#59ffffff", + "matches": true, + "enforced": true + }, + { + "name": "inputSuffixIconColor", + "scenario": "dark/custom=true/enabled=true", + "actual": "#ff343985", + "expected": "#ff343985", + "matches": true, + "enforced": true + }, + { + "name": "inputSuffixIconColor", + "scenario": "light/custom=false/enabled=true", + "actual": "#66000000", + "expected": "#66000000", + "matches": true, + "enforced": true + }, + { + "name": "inputSuffixIconColor", + "scenario": "light/custom=true/enabled=true", + "actual": "#ff343985", + "expected": "#ff343985", + "matches": true, + "enforced": true + }, + { + "name": "inputVerticalPadding", + "scenario": "dark/custom=false/enabled=true", + "actual": 16, + "expected": 16, + "matches": true, + "enforced": true + }, + { + "name": "inputVerticalPadding", + "scenario": "dark/custom=true/enabled=true", + "actual": 16, + "expected": 19, + "matches": false, + "enforced": false + }, + { + "name": "inputVerticalPadding", + "scenario": "light/custom=false/enabled=true", + "actual": 16, + "expected": 16, + "matches": true, + "enforced": true + }, + { + "name": "inputVerticalPadding", + "scenario": "light/custom=true/enabled=true", + "actual": 16, + "expected": 19, + "matches": false, + "enforced": false + }, + { + "name": "linkDangerActiveColor", + "scenario": "dark/custom=false/pressed/icon", + "actual": "#ffa03f46", + "expected": "#ffa03f46", + "matches": true, + "enforced": true + }, + { + "name": "linkDangerActiveColor", + "scenario": "dark/custom=false/pressed/text", + "actual": "#ffa03f46", + "expected": "#ffa03f46", + "matches": true, + "enforced": true + }, + { + "name": "linkDangerActiveColor", + "scenario": "dark/custom=true/pressed/icon", + "actual": "#ff281531", + "expected": "#ff281531", + "matches": true, + "enforced": true + }, + { + "name": "linkDangerActiveColor", + "scenario": "dark/custom=true/pressed/text", + "actual": "#ff281531", + "expected": "#ff281531", + "matches": true, + "enforced": true + }, + { + "name": "linkDangerActiveColor", + "scenario": "light/custom=false/pressed/icon", + "actual": "#ffad352f", + "expected": "#ffad352f", + "matches": true, + "enforced": true + }, + { + "name": "linkDangerActiveColor", + "scenario": "light/custom=false/pressed/text", + "actual": "#ffad352f", + "expected": "#ffad352f", + "matches": true, + "enforced": true + }, + { + "name": "linkDangerActiveColor", + "scenario": "light/custom=true/pressed/icon", + "actual": "#ff281531", + "expected": "#ff281531", + "matches": true, + "enforced": true + }, + { + "name": "linkDangerActiveColor", + "scenario": "light/custom=true/pressed/text", + "actual": "#ff281531", + "expected": "#ff281531", + "matches": true, + "enforced": true + }, + { + "name": "linkDangerColor", + "scenario": "dark/custom=false/idle/icon", + "actual": "#ffc64751", + "expected": "#ffc64751", + "matches": true, + "enforced": true + }, + { + "name": "linkDangerColor", + "scenario": "dark/custom=false/idle/text", + "actual": "#ffc64751", + "expected": "#ffc64751", + "matches": true, + "enforced": true + }, + { + "name": "linkDangerColor", + "scenario": "dark/custom=true/idle/icon", + "actual": "#ff27122a", + "expected": "#ff27122a", + "matches": true, + "enforced": true + }, + { + "name": "linkDangerColor", + "scenario": "dark/custom=true/idle/text", + "actual": "#ff27122a", + "expected": "#ff27122a", + "matches": true, + "enforced": true + }, + { + "name": "linkDangerColor", + "scenario": "light/custom=false/idle/icon", + "actual": "#ffd54941", + "expected": "#ffd54941", + "matches": true, + "enforced": true + }, + { + "name": "linkDangerColor", + "scenario": "light/custom=false/idle/text", + "actual": "#ffd54941", + "expected": "#ffd54941", + "matches": true, + "enforced": true + }, + { + "name": "linkDangerColor", + "scenario": "light/custom=true/idle/icon", + "actual": "#ff27122a", + "expected": "#ff27122a", + "matches": true, + "enforced": true + }, + { + "name": "linkDangerColor", + "scenario": "light/custom=true/idle/text", + "actual": "#ff27122a", + "expected": "#ff27122a", + "matches": true, + "enforced": true + }, + { + "name": "linkDangerDisabledColor", + "scenario": "dark/custom=false/disabled/icon", + "actual": "#ff703439", + "expected": "#ff703439", + "matches": true, + "enforced": true + }, + { + "name": "linkDangerDisabledColor", + "scenario": "dark/custom=false/disabled/text", + "actual": "#ff703439", + "expected": "#ff703439", + "matches": true, + "enforced": true + }, + { + "name": "linkDangerDisabledColor", + "scenario": "dark/custom=true/disabled/icon", + "actual": "#ff291838", + "expected": "#ff291838", + "matches": true, + "enforced": true + }, + { + "name": "linkDangerDisabledColor", + "scenario": "dark/custom=true/disabled/text", + "actual": "#ff291838", + "expected": "#ff291838", + "matches": true, + "enforced": true + }, + { + "name": "linkDangerDisabledColor", + "scenario": "light/custom=false/disabled/icon", + "actual": "#ffffb9b0", + "expected": "#ffffb9b0", + "matches": true, + "enforced": true + }, + { + "name": "linkDangerDisabledColor", + "scenario": "light/custom=false/disabled/text", + "actual": "#ffffb9b0", + "expected": "#ffffb9b0", + "matches": true, + "enforced": true + }, + { + "name": "linkDangerDisabledColor", + "scenario": "light/custom=true/disabled/icon", + "actual": "#ff291838", + "expected": "#ff291838", + "matches": true, + "enforced": true + }, + { + "name": "linkDangerDisabledColor", + "scenario": "light/custom=true/disabled/text", + "actual": "#ff291838", + "expected": "#ff291838", + "matches": true, + "enforced": true + }, + { + "name": "linkDefaultActiveColor", + "scenario": "dark/custom=false/pressed/icon", + "actual": "#ff699ef5", + "expected": "#ff699ef5", + "matches": true, + "enforced": true + }, + { + "name": "linkDefaultActiveColor", + "scenario": "dark/custom=false/pressed/text", + "actual": "#ff699ef5", + "expected": "#ff699ef5", + "matches": true, + "enforced": true + }, + { + "name": "linkDefaultActiveColor", + "scenario": "dark/custom=true/pressed/icon", + "actual": "#ff23060e", + "expected": "#ff23060e", + "matches": true, + "enforced": true + }, + { + "name": "linkDefaultActiveColor", + "scenario": "dark/custom=true/pressed/text", + "actual": "#ff23060e", + "expected": "#ff23060e", + "matches": true, + "enforced": true + }, + { + "name": "linkDefaultActiveColor", + "scenario": "light/custom=false/pressed/icon", + "actual": "#ff003cab", + "expected": "#ff003cab", + "matches": true, + "enforced": true + }, + { + "name": "linkDefaultActiveColor", + "scenario": "light/custom=false/pressed/text", + "actual": "#ff003cab", + "expected": "#ff003cab", + "matches": true, + "enforced": true + }, + { + "name": "linkDefaultActiveColor", + "scenario": "light/custom=true/pressed/icon", + "actual": "#ff23060e", + "expected": "#ff23060e", + "matches": true, + "enforced": true + }, + { + "name": "linkDefaultActiveColor", + "scenario": "light/custom=true/pressed/text", + "actual": "#ff23060e", + "expected": "#ff23060e", + "matches": true, + "enforced": true + }, + { + "name": "linkDefaultColor", + "scenario": "dark/custom=false/idle/icon", + "actual": "#e6ffffff", + "expected": "#e6ffffff", + "matches": true, + "enforced": true + }, + { + "name": "linkDefaultColor", + "scenario": "dark/custom=false/idle/text", + "actual": "#e6ffffff", + "expected": "#e6ffffff", + "matches": true, + "enforced": true + }, + { + "name": "linkDefaultColor", + "scenario": "dark/custom=true/idle/icon", + "actual": "#ff33367e", + "expected": "#ff33367e", + "matches": true, + "enforced": true + }, + { + "name": "linkDefaultColor", + "scenario": "dark/custom=true/idle/text", + "actual": "#ff33367e", + "expected": "#ff33367e", + "matches": true, + "enforced": true + }, + { + "name": "linkDefaultColor", + "scenario": "light/custom=false/idle/icon", + "actual": "#e5000000", + "expected": "#e5000000", + "matches": true, + "enforced": true + }, + { + "name": "linkDefaultColor", + "scenario": "light/custom=false/idle/text", + "actual": "#e5000000", + "expected": "#e5000000", + "matches": true, + "enforced": true + }, + { + "name": "linkDefaultColor", + "scenario": "light/custom=true/idle/icon", + "actual": "#ff33367e", + "expected": "#ff33367e", + "matches": true, + "enforced": true + }, + { + "name": "linkDefaultColor", + "scenario": "light/custom=true/idle/text", + "actual": "#ff33367e", + "expected": "#ff33367e", + "matches": true, + "enforced": true + }, + { + "name": "linkDefaultDisabledColor", + "scenario": "dark/custom=false/disabled/icon", + "actual": "#38ffffff", + "expected": "#38ffffff", + "matches": true, + "enforced": true + }, + { + "name": "linkDefaultDisabledColor", + "scenario": "dark/custom=false/disabled/text", + "actual": "#38ffffff", + "expected": "#38ffffff", + "matches": true, + "enforced": true + }, + { + "name": "linkDefaultDisabledColor", + "scenario": "dark/custom=true/disabled/icon", + "actual": "#ff353c8c", + "expected": "#ff353c8c", + "matches": true, + "enforced": true + }, + { + "name": "linkDefaultDisabledColor", + "scenario": "dark/custom=true/disabled/text", + "actual": "#ff353c8c", + "expected": "#ff353c8c", + "matches": true, + "enforced": true + }, + { + "name": "linkDefaultDisabledColor", + "scenario": "light/custom=false/disabled/icon", + "actual": "#42000000", + "expected": "#42000000", + "matches": true, + "enforced": true + }, + { + "name": "linkDefaultDisabledColor", + "scenario": "light/custom=false/disabled/text", + "actual": "#42000000", + "expected": "#42000000", + "matches": true, + "enforced": true + }, + { + "name": "linkDefaultDisabledColor", + "scenario": "light/custom=true/disabled/icon", + "actual": "#ff353c8c", + "expected": "#ff353c8c", + "matches": true, + "enforced": true + }, + { + "name": "linkDefaultDisabledColor", + "scenario": "light/custom=true/disabled/text", + "actual": "#ff353c8c", + "expected": "#ff353c8c", + "matches": true, + "enforced": true + }, + { + "name": "linkPrimaryActiveColor", + "scenario": "dark/custom=false/pressed/icon", + "actual": "#ff699ef5", + "expected": "#ff699ef5", + "matches": true, + "enforced": true + }, + { + "name": "linkPrimaryActiveColor", + "scenario": "dark/custom=false/pressed/text", + "actual": "#ff699ef5", + "expected": "#ff699ef5", + "matches": true, + "enforced": true + }, + { + "name": "linkPrimaryActiveColor", + "scenario": "dark/custom=true/pressed/icon", + "actual": "#ff23060e", + "expected": "#ff23060e", + "matches": true, + "enforced": true + }, + { + "name": "linkPrimaryActiveColor", + "scenario": "dark/custom=true/pressed/text", + "actual": "#ff23060e", + "expected": "#ff23060e", + "matches": true, + "enforced": true + }, + { + "name": "linkPrimaryActiveColor", + "scenario": "light/custom=false/pressed/icon", + "actual": "#ff003cab", + "expected": "#ff003cab", + "matches": true, + "enforced": true + }, + { + "name": "linkPrimaryActiveColor", + "scenario": "light/custom=false/pressed/text", + "actual": "#ff003cab", + "expected": "#ff003cab", + "matches": true, + "enforced": true + }, + { + "name": "linkPrimaryActiveColor", + "scenario": "light/custom=true/pressed/icon", + "actual": "#ff23060e", + "expected": "#ff23060e", + "matches": true, + "enforced": true + }, + { + "name": "linkPrimaryActiveColor", + "scenario": "light/custom=true/pressed/text", + "actual": "#ff23060e", + "expected": "#ff23060e", + "matches": true, + "enforced": true + }, + { + "name": "linkPrimaryColor", + "scenario": "dark/custom=false/idle/icon", + "actual": "#ff4582e6", + "expected": "#ff4582e6", + "matches": true, + "enforced": true + }, + { + "name": "linkPrimaryColor", + "scenario": "dark/custom=false/idle/text", + "actual": "#ff4582e6", + "expected": "#ff4582e6", + "matches": true, + "enforced": true + }, + { + "name": "linkPrimaryColor", + "scenario": "dark/custom=true/idle/icon", + "actual": "#ff220307", + "expected": "#ff220307", + "matches": true, + "enforced": true + }, + { + "name": "linkPrimaryColor", + "scenario": "dark/custom=true/idle/text", + "actual": "#ff220307", + "expected": "#ff220307", + "matches": true, + "enforced": true + }, + { + "name": "linkPrimaryColor", + "scenario": "light/custom=false/idle/icon", + "actual": "#ff0052d9", + "expected": "#ff0052d9", + "matches": true, + "enforced": true + }, + { + "name": "linkPrimaryColor", + "scenario": "light/custom=false/idle/text", + "actual": "#ff0052d9", + "expected": "#ff0052d9", + "matches": true, + "enforced": true + }, + { + "name": "linkPrimaryColor", + "scenario": "light/custom=true/idle/icon", + "actual": "#ff220307", + "expected": "#ff220307", + "matches": true, + "enforced": true + }, + { + "name": "linkPrimaryColor", + "scenario": "light/custom=true/idle/text", + "actual": "#ff220307", + "expected": "#ff220307", + "matches": true, + "enforced": true + }, + { + "name": "linkPrimaryDisabledColor", + "scenario": "dark/custom=false/disabled/icon", + "actual": "#ff143975", + "expected": "#ff143975", + "matches": true, + "enforced": true + }, + { + "name": "linkPrimaryDisabledColor", + "scenario": "dark/custom=false/disabled/text", + "actual": "#ff143975", + "expected": "#ff143975", + "matches": true, + "enforced": true + }, + { + "name": "linkPrimaryDisabledColor", + "scenario": "dark/custom=true/disabled/icon", + "actual": "#ff240915", + "expected": "#ff240915", + "matches": true, + "enforced": true + }, + { + "name": "linkPrimaryDisabledColor", + "scenario": "dark/custom=true/disabled/text", + "actual": "#ff240915", + "expected": "#ff240915", + "matches": true, + "enforced": true + }, + { + "name": "linkPrimaryDisabledColor", + "scenario": "light/custom=false/disabled/icon", + "actual": "#ffb5c7ff", + "expected": "#ffb5c7ff", + "matches": true, + "enforced": true + }, + { + "name": "linkPrimaryDisabledColor", + "scenario": "light/custom=false/disabled/text", + "actual": "#ffb5c7ff", + "expected": "#ffb5c7ff", + "matches": true, + "enforced": true + }, + { + "name": "linkPrimaryDisabledColor", + "scenario": "light/custom=true/disabled/icon", + "actual": "#ff240915", + "expected": "#ff240915", + "matches": true, + "enforced": true + }, + { + "name": "linkPrimaryDisabledColor", + "scenario": "light/custom=true/disabled/text", + "actual": "#ff240915", + "expected": "#ff240915", + "matches": true, + "enforced": true + }, + { + "name": "linkSuccessActiveColor", + "scenario": "dark/custom=false/pressed/icon", + "actual": "#ff0d7a55", + "expected": "#ff0d7a55", + "matches": true, + "enforced": true + }, + { + "name": "linkSuccessActiveColor", + "scenario": "dark/custom=false/pressed/text", + "actual": "#ff0d7a55", + "expected": "#ff0d7a55", + "matches": true, + "enforced": true + }, + { + "name": "linkSuccessActiveColor", + "scenario": "dark/custom=true/pressed/icon", + "actual": "#ff3c51bd", + "expected": "#ff3c51bd", + "matches": true, + "enforced": true + }, + { + "name": "linkSuccessActiveColor", + "scenario": "dark/custom=true/pressed/text", + "actual": "#ff3c51bd", + "expected": "#ff3c51bd", + "matches": true, + "enforced": true + }, + { + "name": "linkSuccessActiveColor", + "scenario": "light/custom=false/pressed/icon", + "actual": "#ff008858", + "expected": "#ff008858", + "matches": true, + "enforced": true + }, + { + "name": "linkSuccessActiveColor", + "scenario": "light/custom=false/pressed/text", + "actual": "#ff008858", + "expected": "#ff008858", + "matches": true, + "enforced": true + }, + { + "name": "linkSuccessActiveColor", + "scenario": "light/custom=true/pressed/icon", + "actual": "#ff3c51bd", + "expected": "#ff3c51bd", + "matches": true, + "enforced": true + }, + { + "name": "linkSuccessActiveColor", + "scenario": "light/custom=true/pressed/text", + "actual": "#ff3c51bd", + "expected": "#ff3c51bd", + "matches": true, + "enforced": true + }, + { + "name": "linkSuccessColor", + "scenario": "dark/custom=false/idle/icon", + "actual": "#ff059465", + "expected": "#ff059465", + "matches": true, + "enforced": true + }, + { + "name": "linkSuccessColor", + "scenario": "dark/custom=false/idle/text", + "actual": "#ff059465", + "expected": "#ff059465", + "matches": true, + "enforced": true + }, + { + "name": "linkSuccessColor", + "scenario": "dark/custom=true/idle/icon", + "actual": "#ff3a4baf", + "expected": "#ff3a4baf", + "matches": true, + "enforced": true + }, + { + "name": "linkSuccessColor", + "scenario": "dark/custom=true/idle/text", + "actual": "#ff3a4baf", + "expected": "#ff3a4baf", + "matches": true, + "enforced": true + }, + { + "name": "linkSuccessColor", + "scenario": "light/custom=false/idle/icon", + "actual": "#ff2ba471", + "expected": "#ff2ba471", + "matches": true, + "enforced": true + }, + { + "name": "linkSuccessColor", + "scenario": "light/custom=false/idle/text", + "actual": "#ff2ba471", + "expected": "#ff2ba471", + "matches": true, + "enforced": true + }, + { + "name": "linkSuccessColor", + "scenario": "light/custom=true/idle/icon", + "actual": "#ff3a4baf", + "expected": "#ff3a4baf", + "matches": true, + "enforced": true + }, + { + "name": "linkSuccessColor", + "scenario": "light/custom=true/idle/text", + "actual": "#ff3a4baf", + "expected": "#ff3a4baf", + "matches": true, + "enforced": true + }, + { + "name": "linkSuccessDisabledColor", + "scenario": "dark/custom=false/disabled/icon", + "actual": "#ff17533d", + "expected": "#ff17533d", + "matches": true, + "enforced": true + }, + { + "name": "linkSuccessDisabledColor", + "scenario": "dark/custom=false/disabled/text", + "actual": "#ff17533d", + "expected": "#ff17533d", + "matches": true, + "enforced": true + }, + { + "name": "linkSuccessDisabledColor", + "scenario": "dark/custom=true/disabled/icon", + "actual": "#ff3d54c4", + "expected": "#ff3d54c4", + "matches": true, + "enforced": true + }, + { + "name": "linkSuccessDisabledColor", + "scenario": "dark/custom=true/disabled/text", + "actual": "#ff3d54c4", + "expected": "#ff3d54c4", + "matches": true, + "enforced": true + }, + { + "name": "linkSuccessDisabledColor", + "scenario": "light/custom=false/disabled/icon", + "actual": "#ff92dab2", + "expected": "#ff92dab2", + "matches": true, + "enforced": true + }, + { + "name": "linkSuccessDisabledColor", + "scenario": "light/custom=false/disabled/text", + "actual": "#ff92dab2", + "expected": "#ff92dab2", + "matches": true, + "enforced": true + }, + { + "name": "linkSuccessDisabledColor", + "scenario": "light/custom=true/disabled/icon", + "actual": "#ff3d54c4", + "expected": "#ff3d54c4", + "matches": true, + "enforced": true + }, + { + "name": "linkSuccessDisabledColor", + "scenario": "light/custom=true/disabled/text", + "actual": "#ff3d54c4", + "expected": "#ff3d54c4", + "matches": true, + "enforced": true + }, + { + "name": "linkWarningActiveColor", + "scenario": "dark/custom=false/pressed/icon", + "actual": "#ffa75d2b", + "expected": "#ffa75d2b", + "matches": true, + "enforced": true + }, + { + "name": "linkWarningActiveColor", + "scenario": "dark/custom=false/pressed/text", + "actual": "#ffa75d2b", + "expected": "#ffa75d2b", + "matches": true, + "enforced": true + }, + { + "name": "linkWarningActiveColor", + "scenario": "dark/custom=true/pressed/icon", + "actual": "#ff3e57cb", + "expected": "#ff3e57cb", + "matches": true, + "enforced": true + }, + { + "name": "linkWarningActiveColor", + "scenario": "dark/custom=true/pressed/text", + "actual": "#ff3e57cb", + "expected": "#ff3e57cb", + "matches": true, + "enforced": true + }, + { + "name": "linkWarningActiveColor", + "scenario": "light/custom=false/pressed/icon", + "actual": "#ffbe5a00", + "expected": "#ffbe5a00", + "matches": true, + "enforced": true + }, + { + "name": "linkWarningActiveColor", + "scenario": "light/custom=false/pressed/text", + "actual": "#ffbe5a00", + "expected": "#ffbe5a00", + "matches": true, + "enforced": true + }, + { + "name": "linkWarningActiveColor", + "scenario": "light/custom=true/pressed/icon", + "actual": "#ff3e57cb", + "expected": "#ff3e57cb", + "matches": true, + "enforced": true + }, + { + "name": "linkWarningActiveColor", + "scenario": "light/custom=true/pressed/text", + "actual": "#ff3e57cb", + "expected": "#ff3e57cb", + "matches": true, + "enforced": true + }, + { + "name": "linkWarningColor", + "scenario": "dark/custom=false/idle/icon", + "actual": "#ffcf6e2d", + "expected": "#ffcf6e2d", + "matches": true, + "enforced": true + }, + { + "name": "linkWarningColor", + "scenario": "dark/custom=false/idle/text", + "actual": "#ffcf6e2d", + "expected": "#ffcf6e2d", + "matches": true, + "enforced": true + }, + { + "name": "linkWarningColor", + "scenario": "dark/custom=true/idle/icon", + "actual": "#ff3b4eb6", + "expected": "#ff3b4eb6", + "matches": true, + "enforced": true + }, + { + "name": "linkWarningColor", + "scenario": "dark/custom=true/idle/text", + "actual": "#ff3b4eb6", + "expected": "#ff3b4eb6", + "matches": true, + "enforced": true + }, + { + "name": "linkWarningColor", + "scenario": "light/custom=false/idle/icon", + "actual": "#ffe37318", + "expected": "#ffe37318", + "matches": true, + "enforced": true + }, + { + "name": "linkWarningColor", + "scenario": "light/custom=false/idle/text", + "actual": "#ffe37318", + "expected": "#ffe37318", + "matches": true, + "enforced": true + }, + { + "name": "linkWarningColor", + "scenario": "light/custom=true/idle/icon", + "actual": "#ff3b4eb6", + "expected": "#ff3b4eb6", + "matches": true, + "enforced": true + }, + { + "name": "linkWarningColor", + "scenario": "light/custom=true/idle/text", + "actual": "#ff3b4eb6", + "expected": "#ff3b4eb6", + "matches": true, + "enforced": true + }, + { + "name": "linkWarningDisabledColor", + "scenario": "dark/custom=false/disabled/icon", + "actual": "#ff733c23", + "expected": "#ff733c23", + "matches": true, + "enforced": true + }, + { + "name": "linkWarningDisabledColor", + "scenario": "dark/custom=false/disabled/text", + "actual": "#ff733c23", + "expected": "#ff733c23", + "matches": true, + "enforced": true + }, + { + "name": "linkWarningDisabledColor", + "scenario": "dark/custom=true/disabled/icon", + "actual": "#ff3f5ad2", + "expected": "#ff3f5ad2", + "matches": true, + "enforced": true + }, + { + "name": "linkWarningDisabledColor", + "scenario": "dark/custom=true/disabled/text", + "actual": "#ff3f5ad2", + "expected": "#ff3f5ad2", + "matches": true, + "enforced": true + }, + { + "name": "linkWarningDisabledColor", + "scenario": "light/custom=false/disabled/icon", + "actual": "#ffffb98c", + "expected": "#ffffb98c", + "matches": true, + "enforced": true + }, + { + "name": "linkWarningDisabledColor", + "scenario": "light/custom=false/disabled/text", + "actual": "#ffffb98c", + "expected": "#ffffb98c", + "matches": true, + "enforced": true + }, + { + "name": "linkWarningDisabledColor", + "scenario": "light/custom=true/disabled/icon", + "actual": "#ff3f5ad2", + "expected": "#ff3f5ad2", + "matches": true, + "enforced": true + }, + { + "name": "linkWarningDisabledColor", + "scenario": "light/custom=true/disabled/text", + "actual": "#ff3f5ad2", + "expected": "#ff3f5ad2", + "matches": true, + "enforced": true + }, + { + "name": "progressCircleInnerBgColor", + "scenario": "dark/custom=false/circular", + "actual": "#00000000", + "expected": "#00000000", + "matches": true, + "enforced": true + }, + { + "name": "progressCircleInnerBgColor", + "scenario": "dark/custom=true/circular", + "actual": "#00000000", + "expected": "#00000000", + "matches": true, + "enforced": true + }, + { + "name": "progressCircleInnerBgColor", + "scenario": "light/custom=false/circular", + "actual": "#ffffffff", + "expected": "#ffffffff", + "matches": true, + "enforced": true + }, + { + "name": "progressCircleInnerBgColor", + "scenario": "light/custom=true/circular", + "actual": "#ff2e275b", + "expected": "#ff2e275b", + "matches": true, + "enforced": true + }, + { + "name": "progressCircleLabelFont", + "scenario": "dark/custom=false/circular", + "actual": "20.0/28.0/FontWeight.w600", + "expected": "20.0/28.0/FontWeight.w600", + "matches": true, + "enforced": true + }, + { + "name": "progressCircleLabelFont", + "scenario": "dark/custom=true/circular", + "actual": "23.0/31.0/FontWeight.w500", + "expected": "23.0/31.0/FontWeight.w500", + "matches": true, + "enforced": true + }, + { + "name": "progressCircleLabelFont", + "scenario": "light/custom=false/circular", + "actual": "20.0/28.0/FontWeight.w600", + "expected": "20.0/28.0/FontWeight.w600", + "matches": true, + "enforced": true + }, + { + "name": "progressCircleLabelFont", + "scenario": "light/custom=true/circular", + "actual": "23.0/31.0/FontWeight.w500", + "expected": "23.0/31.0/FontWeight.w500", + "matches": true, + "enforced": true + }, + { + "name": "progressCircleWidth", + "scenario": "dark/custom=false/circular", + "actual": 112, + "expected": 112, + "matches": true, + "enforced": true + }, + { + "name": "progressCircleWidth", + "scenario": "dark/custom=true/circular", + "actual": 112, + "expected": 112, + "matches": true, + "enforced": true + }, + { + "name": "progressCircleWidth", + "scenario": "light/custom=false/circular", + "actual": 112, + "expected": 112, + "matches": true, + "enforced": true + }, + { + "name": "progressCircleWidth", + "scenario": "light/custom=true/circular", + "actual": 112, + "expected": 112, + "matches": true, + "enforced": true + }, + { + "name": "progressInnerBgColor", + "scenario": "dark/custom=false/circular", + "actual": "#ff4582e6", + "expected": "#ff4582e6", + "matches": true, + "enforced": true + }, + { + "name": "progressInnerBgColor", + "scenario": "dark/custom=false/plump=false", + "actual": "#ff4582e6", + "expected": "#ff4582e6", + "matches": true, + "enforced": true + }, + { + "name": "progressInnerBgColor", + "scenario": "dark/custom=false/plump=true", + "actual": "#ff4582e6", + "expected": "#ff4582e6", + "matches": true, + "enforced": true + }, + { + "name": "progressInnerBgColor", + "scenario": "dark/custom=true/circular", + "actual": "#ff220307", + "expected": "#ff220307", + "matches": true, + "enforced": true + }, + { + "name": "progressInnerBgColor", + "scenario": "dark/custom=true/plump=false", + "actual": "#ff220307", + "expected": "#ff220307", + "matches": true, + "enforced": true + }, + { + "name": "progressInnerBgColor", + "scenario": "dark/custom=true/plump=true", + "actual": "#ff220307", + "expected": "#ff220307", + "matches": true, + "enforced": true + }, + { + "name": "progressInnerBgColor", + "scenario": "light/custom=false/circular", + "actual": "#ff0052d9", + "expected": "#ff0052d9", + "matches": true, + "enforced": true + }, + { + "name": "progressInnerBgColor", + "scenario": "light/custom=false/plump=false", + "actual": "#ff0052d9", + "expected": "#ff0052d9", + "matches": true, + "enforced": true + }, + { + "name": "progressInnerBgColor", + "scenario": "light/custom=false/plump=true", + "actual": "#ff0052d9", + "expected": "#ff0052d9", + "matches": true, + "enforced": true + }, + { + "name": "progressInnerBgColor", + "scenario": "light/custom=true/circular", + "actual": "#ff220307", + "expected": "#ff220307", + "matches": true, + "enforced": true + }, + { + "name": "progressInnerBgColor", + "scenario": "light/custom=true/plump=false", + "actual": "#ff220307", + "expected": "#ff220307", + "matches": true, + "enforced": true + }, + { + "name": "progressInnerBgColor", + "scenario": "light/custom=true/plump=true", + "actual": "#ff220307", + "expected": "#ff220307", + "matches": true, + "enforced": true + }, + { + "name": "progressLineStrokeWidth", + "scenario": "dark/custom=false/plump=false", + "actual": 6, + "expected": 6, + "matches": true, + "enforced": true + }, + { + "name": "progressLineStrokeWidth", + "scenario": "dark/custom=true/plump=false", + "actual": 6, + "expected": 6, + "matches": true, + "enforced": true + }, + { + "name": "progressLineStrokeWidth", + "scenario": "light/custom=false/plump=false", + "actual": 6, + "expected": 6, + "matches": true, + "enforced": true + }, + { + "name": "progressLineStrokeWidth", + "scenario": "light/custom=true/plump=false", + "actual": 6, + "expected": 6, + "matches": true, + "enforced": true + }, + { + "name": "progressStrokeCircleWidth", + "scenario": "dark/custom=false/circular", + "actual": 6, + "expected": 6, + "matches": true, + "enforced": true + }, + { + "name": "progressStrokeCircleWidth", + "scenario": "dark/custom=true/circular", + "actual": 6, + "expected": 6, + "matches": true, + "enforced": true + }, + { + "name": "progressStrokeCircleWidth", + "scenario": "light/custom=false/circular", + "actual": 6, + "expected": 6, + "matches": true, + "enforced": true + }, + { + "name": "progressStrokeCircleWidth", + "scenario": "light/custom=true/circular", + "actual": 6, + "expected": 6, + "matches": true, + "enforced": true + }, + { + "name": "progressStrokePlumpWidth", + "scenario": "dark/custom=false/plump=true", + "actual": 20, + "expected": 20, + "matches": true, + "enforced": true + }, + { + "name": "progressStrokePlumpWidth", + "scenario": "dark/custom=true/plump=true", + "actual": 20, + "expected": 20, + "matches": true, + "enforced": true + }, + { + "name": "progressStrokePlumpWidth", + "scenario": "light/custom=false/plump=true", + "actual": 20, + "expected": 20, + "matches": true, + "enforced": true + }, + { + "name": "progressStrokePlumpWidth", + "scenario": "light/custom=true/plump=true", + "actual": 20, + "expected": 20, + "matches": true, + "enforced": true + }, + { + "name": "progressTrackBgColor", + "scenario": "dark/custom=false/circular", + "actual": "#ff383838", + "expected": "#ff383838", + "matches": true, + "enforced": true + }, + { + "name": "progressTrackBgColor", + "scenario": "dark/custom=false/plump=false", + "actual": "#ff383838", + "expected": "#ff383838", + "matches": true, + "enforced": true + }, + { + "name": "progressTrackBgColor", + "scenario": "dark/custom=false/plump=true", + "actual": "#ff383838", + "expected": "#ff383838", + "matches": true, + "enforced": true + }, + { + "name": "progressTrackBgColor", + "scenario": "dark/custom=true/circular", + "actual": "#ff2b1e46", + "expected": "#ff2b1e46", + "matches": true, + "enforced": true + }, + { + "name": "progressTrackBgColor", + "scenario": "dark/custom=true/plump=false", + "actual": "#ff2b1e46", + "expected": "#ff2b1e46", + "matches": true, + "enforced": true + }, + { + "name": "progressTrackBgColor", + "scenario": "dark/custom=true/plump=true", + "actual": "#ff2b1e46", + "expected": "#ff2b1e46", + "matches": true, + "enforced": true + }, + { + "name": "progressTrackBgColor", + "scenario": "light/custom=false/circular", + "actual": "#ffe8e8e8", + "expected": "#ffe8e8e8", + "matches": true, + "enforced": true + }, + { + "name": "progressTrackBgColor", + "scenario": "light/custom=false/plump=false", + "actual": "#ffe8e8e8", + "expected": "#ffe8e8e8", + "matches": true, + "enforced": true + }, + { + "name": "progressTrackBgColor", + "scenario": "light/custom=false/plump=true", + "actual": "#ffe8e8e8", + "expected": "#ffe8e8e8", + "matches": true, + "enforced": true + }, + { + "name": "progressTrackBgColor", + "scenario": "light/custom=true/circular", + "actual": "#ff2b1e46", + "expected": "#ff2b1e46", + "matches": true, + "enforced": true + }, + { + "name": "progressTrackBgColor", + "scenario": "light/custom=true/plump=false", + "actual": "#ff2b1e46", + "expected": "#ff2b1e46", + "matches": true, + "enforced": true + }, + { + "name": "progressTrackBgColor", + "scenario": "light/custom=true/plump=true", + "actual": "#ff2b1e46", + "expected": "#ff2b1e46", + "matches": true, + "enforced": true + }, + { + "name": "switchCheckedColor", + "scenario": "dark/custom=false/enabled=true/value=false", + "actual": "#ff4582e6", + "expected": "#ff4582e6", + "matches": true, + "enforced": true + }, + { + "name": "switchCheckedColor", + "scenario": "dark/custom=false/enabled=true/value=true", + "actual": "#ff4582e6", + "expected": "#ff4582e6", + "matches": true, + "enforced": true + }, + { + "name": "switchCheckedColor", + "scenario": "dark/custom=true/enabled=true/value=false", + "actual": "#ff220307", + "expected": "#ff220307", + "matches": true, + "enforced": true + }, + { + "name": "switchCheckedColor", + "scenario": "dark/custom=true/enabled=true/value=true", + "actual": "#ff220307", + "expected": "#ff220307", + "matches": true, + "enforced": true + }, + { + "name": "switchCheckedColor", + "scenario": "light/custom=false/enabled=true/value=false", + "actual": "#ff0052d9", + "expected": "#ff0052d9", + "matches": true, + "enforced": true + }, + { + "name": "switchCheckedColor", + "scenario": "light/custom=false/enabled=true/value=true", + "actual": "#ff0052d9", + "expected": "#ff0052d9", + "matches": true, + "enforced": true + }, + { + "name": "switchCheckedColor", + "scenario": "light/custom=true/enabled=true/value=false", + "actual": "#ff220307", + "expected": "#ff220307", + "matches": true, + "enforced": true + }, + { + "name": "switchCheckedColor", + "scenario": "light/custom=true/enabled=true/value=true", + "actual": "#ff220307", + "expected": "#ff220307", + "matches": true, + "enforced": true + }, + { + "name": "switchCheckedDisabledColor", + "scenario": "dark/custom=false/enabled=false/value=false", + "actual": "#ff143975", + "expected": "#ff143975", + "matches": true, + "enforced": true + }, + { + "name": "switchCheckedDisabledColor", + "scenario": "dark/custom=false/enabled=false/value=true", + "actual": "#ff143975", + "expected": "#ff143975", + "matches": true, + "enforced": true + }, + { + "name": "switchCheckedDisabledColor", + "scenario": "dark/custom=true/enabled=false/value=false", + "actual": "#ff240915", + "expected": "#ff240915", + "matches": true, + "enforced": true + }, + { + "name": "switchCheckedDisabledColor", + "scenario": "dark/custom=true/enabled=false/value=true", + "actual": "#ff240915", + "expected": "#ff240915", + "matches": true, + "enforced": true + }, + { + "name": "switchCheckedDisabledColor", + "scenario": "light/custom=false/enabled=false/value=false", + "actual": "#ffb5c7ff", + "expected": "#ffb5c7ff", + "matches": true, + "enforced": true + }, + { + "name": "switchCheckedDisabledColor", + "scenario": "light/custom=false/enabled=false/value=true", + "actual": "#ffb5c7ff", + "expected": "#ffb5c7ff", + "matches": true, + "enforced": true + }, + { + "name": "switchCheckedDisabledColor", + "scenario": "light/custom=true/enabled=false/value=false", + "actual": "#ff240915", + "expected": "#ff240915", + "matches": true, + "enforced": true + }, + { + "name": "switchCheckedDisabledColor", + "scenario": "light/custom=true/enabled=false/value=true", + "actual": "#ff240915", + "expected": "#ff240915", + "matches": true, + "enforced": true + }, + { + "name": "switchDotDisabledColor", + "scenario": "dark/custom=false/enabled=false/value=false", + "actual": "#8cffffff", + "expected": "#8cffffff", + "matches": true, + "enforced": true + }, + { + "name": "switchDotDisabledColor", + "scenario": "dark/custom=false/enabled=false/value=true", + "actual": "#8cffffff", + "expected": "#8cffffff", + "matches": true, + "enforced": true + }, + { + "name": "switchDotDisabledColor", + "scenario": "dark/custom=true/enabled=false/value=false", + "actual": "#ff3845a1", + "expected": "#ff3845a1", + "matches": true, + "enforced": true + }, + { + "name": "switchDotDisabledColor", + "scenario": "dark/custom=true/enabled=false/value=true", + "actual": "#ff3845a1", + "expected": "#ff3845a1", + "matches": true, + "enforced": true + }, + { + "name": "switchDotDisabledColor", + "scenario": "light/custom=false/enabled=false/value=false", + "actual": "#ffffffff", + "expected": "#ffffffff", + "matches": true, + "enforced": true + }, + { + "name": "switchDotDisabledColor", + "scenario": "light/custom=false/enabled=false/value=true", + "actual": "#ffffffff", + "expected": "#ffffffff", + "matches": true, + "enforced": true + }, + { + "name": "switchDotDisabledColor", + "scenario": "light/custom=true/enabled=false/value=false", + "actual": "#ff37429a", + "expected": "#ff37429a", + "matches": true, + "enforced": true + }, + { + "name": "switchDotDisabledColor", + "scenario": "light/custom=true/enabled=false/value=true", + "actual": "#ff37429a", + "expected": "#ff37429a", + "matches": true, + "enforced": true + }, + { + "name": "switchDotLargeSize", + "scenario": "dark/large/value=false/icon", + "actual": 25.14285714, + "expected": 26, + "matches": false, + "enforced": false + }, + { + "name": "switchDotLargeSize", + "scenario": "dark/large/value=false/text", + "actual": 25.14285714, + "expected": 26, + "matches": false, + "enforced": false + }, + { + "name": "switchDotLargeSize", + "scenario": "dark/large/value=true/filled", + "actual": 25.14285714, + "expected": 26, + "matches": false, + "enforced": false + }, + { + "name": "switchDotLargeSize", + "scenario": "dark/large/value=true/icon", + "actual": 25.14285714, + "expected": 26, + "matches": false, + "enforced": false + }, + { + "name": "switchDotLargeSize", + "scenario": "dark/large/value=true/text", + "actual": 25.14285714, + "expected": 26, + "matches": false, + "enforced": false + }, + { + "name": "switchDotLargeSize", + "scenario": "light/large/value=false/icon", + "actual": 25.14285714, + "expected": 26, + "matches": false, + "enforced": false + }, + { + "name": "switchDotLargeSize", + "scenario": "light/large/value=false/text", + "actual": 25.14285714, + "expected": 26, + "matches": false, + "enforced": false + }, + { + "name": "switchDotLargeSize", + "scenario": "light/large/value=true/filled", + "actual": 25.14285714, + "expected": 26, + "matches": false, + "enforced": false + }, + { + "name": "switchDotLargeSize", + "scenario": "light/large/value=true/icon", + "actual": 25.14285714, + "expected": 26, + "matches": false, + "enforced": false + }, + { + "name": "switchDotLargeSize", + "scenario": "light/large/value=true/text", + "actual": 25.14285714, + "expected": 26, + "matches": false, + "enforced": false + }, + { + "name": "switchDotPlainLargeSize", + "scenario": "dark/large/value=false/filled", + "actual": 18.28571429, + "expected": 22, + "matches": false, + "enforced": false + }, + { + "name": "switchDotPlainLargeSize", + "scenario": "light/large/value=false/filled", + "actual": 18.28571429, + "expected": 22, + "matches": false, + "enforced": false + }, + { + "name": "switchDotPlainSize", + "scenario": "dark/medium/value=false/filled", + "actual": 16, + "expected": 18, + "matches": false, + "enforced": false + }, + { + "name": "switchDotPlainSize", + "scenario": "light/medium/value=false/filled", + "actual": 16, + "expected": 18, + "matches": false, + "enforced": false + }, + { + "name": "switchDotPlainSmallSize", + "scenario": "dark/small/value=false/filled", + "actual": 13.71428571, + "expected": 14, + "matches": false, + "enforced": false + }, + { + "name": "switchDotPlainSmallSize", + "scenario": "light/small/value=false/filled", + "actual": 13.71428571, + "expected": 14, + "matches": false, + "enforced": false + }, + { + "name": "switchDotSize", + "scenario": "dark/medium/value=false/icon", + "actual": 22, + "expected": 22, + "matches": true, + "enforced": true + }, + { + "name": "switchDotSize", + "scenario": "dark/medium/value=false/text", + "actual": 22, + "expected": 22, + "matches": true, + "enforced": true + }, + { + "name": "switchDotSize", + "scenario": "dark/medium/value=true/filled", + "actual": 22, + "expected": 22, + "matches": true, + "enforced": true + }, + { + "name": "switchDotSize", + "scenario": "dark/medium/value=true/icon", + "actual": 22, + "expected": 22, + "matches": true, + "enforced": true + }, + { + "name": "switchDotSize", + "scenario": "dark/medium/value=true/text", + "actual": 22, + "expected": 22, + "matches": true, + "enforced": true + }, + { + "name": "switchDotSize", + "scenario": "light/medium/value=false/icon", + "actual": 22, + "expected": 22, + "matches": true, + "enforced": true + }, + { + "name": "switchDotSize", + "scenario": "light/medium/value=false/text", + "actual": 22, + "expected": 22, + "matches": true, + "enforced": true + }, + { + "name": "switchDotSize", + "scenario": "light/medium/value=true/filled", + "actual": 22, + "expected": 22, + "matches": true, + "enforced": true + }, + { + "name": "switchDotSize", + "scenario": "light/medium/value=true/icon", + "actual": 22, + "expected": 22, + "matches": true, + "enforced": true + }, + { + "name": "switchDotSize", + "scenario": "light/medium/value=true/text", + "actual": 22, + "expected": 22, + "matches": true, + "enforced": true + }, + { + "name": "switchDotSmallSize", + "scenario": "dark/small/value=false/icon", + "actual": 18.85714286, + "expected": 18, + "matches": false, + "enforced": false + }, + { + "name": "switchDotSmallSize", + "scenario": "dark/small/value=false/text", + "actual": 18.85714286, + "expected": 18, + "matches": false, + "enforced": false + }, + { + "name": "switchDotSmallSize", + "scenario": "dark/small/value=true/filled", + "actual": 18.85714286, + "expected": 18, + "matches": false, + "enforced": false + }, + { + "name": "switchDotSmallSize", + "scenario": "dark/small/value=true/icon", + "actual": 18.85714286, + "expected": 18, + "matches": false, + "enforced": false + }, + { + "name": "switchDotSmallSize", + "scenario": "dark/small/value=true/text", + "actual": 18.85714286, + "expected": 18, + "matches": false, + "enforced": false + }, + { + "name": "switchDotSmallSize", + "scenario": "light/small/value=false/icon", + "actual": 18.85714286, + "expected": 18, + "matches": false, + "enforced": false + }, + { + "name": "switchDotSmallSize", + "scenario": "light/small/value=false/text", + "actual": 18.85714286, + "expected": 18, + "matches": false, + "enforced": false + }, + { + "name": "switchDotSmallSize", + "scenario": "light/small/value=true/filled", + "actual": 18.85714286, + "expected": 18, + "matches": false, + "enforced": false + }, + { + "name": "switchDotSmallSize", + "scenario": "light/small/value=true/icon", + "actual": 18.85714286, + "expected": 18, + "matches": false, + "enforced": false + }, + { + "name": "switchDotSmallSize", + "scenario": "light/small/value=true/text", + "actual": 18.85714286, + "expected": 18, + "matches": false, + "enforced": false + }, + { + "name": "switchHeight", + "scenario": "dark/medium/value=false/filled", + "actual": 28, + "expected": 28, + "matches": true, + "enforced": true + }, + { + "name": "switchHeight", + "scenario": "dark/medium/value=false/icon", + "actual": 28, + "expected": 28, + "matches": true, + "enforced": true + }, + { + "name": "switchHeight", + "scenario": "dark/medium/value=false/text", + "actual": 28, + "expected": 28, + "matches": true, + "enforced": true + }, + { + "name": "switchHeight", + "scenario": "dark/medium/value=true/filled", + "actual": 28, + "expected": 28, + "matches": true, + "enforced": true + }, + { + "name": "switchHeight", + "scenario": "dark/medium/value=true/icon", + "actual": 28, + "expected": 28, + "matches": true, + "enforced": true + }, + { + "name": "switchHeight", + "scenario": "dark/medium/value=true/text", + "actual": 28, + "expected": 28, + "matches": true, + "enforced": true + }, + { + "name": "switchHeight", + "scenario": "light/medium/value=false/filled", + "actual": 28, + "expected": 28, + "matches": true, + "enforced": true + }, + { + "name": "switchHeight", + "scenario": "light/medium/value=false/icon", + "actual": 28, + "expected": 28, + "matches": true, + "enforced": true + }, + { + "name": "switchHeight", + "scenario": "light/medium/value=false/text", + "actual": 28, + "expected": 28, + "matches": true, + "enforced": true + }, + { + "name": "switchHeight", + "scenario": "light/medium/value=true/filled", + "actual": 28, + "expected": 28, + "matches": true, + "enforced": true + }, + { + "name": "switchHeight", + "scenario": "light/medium/value=true/icon", + "actual": 28, + "expected": 28, + "matches": true, + "enforced": true + }, + { + "name": "switchHeight", + "scenario": "light/medium/value=true/text", + "actual": 28, + "expected": 28, + "matches": true, + "enforced": true + }, + { + "name": "switchIconLargeSize", + "scenario": "dark/large/value=false/icon", + "actual": 18.28571429, + "expected": 24, + "matches": false, + "enforced": false + }, + { + "name": "switchIconLargeSize", + "scenario": "dark/large/value=true/icon", + "actual": 18.28571429, + "expected": 24, + "matches": false, + "enforced": false + }, + { + "name": "switchIconLargeSize", + "scenario": "light/large/value=false/icon", + "actual": 18.28571429, + "expected": 24, + "matches": false, + "enforced": false + }, + { + "name": "switchIconLargeSize", + "scenario": "light/large/value=true/icon", + "actual": 18.28571429, + "expected": 24, + "matches": false, + "enforced": false + }, + { + "name": "switchIconSize", + "scenario": "dark/medium/value=false/icon", + "actual": 16, + "expected": 20, + "matches": false, + "enforced": false + }, + { + "name": "switchIconSize", + "scenario": "dark/medium/value=true/icon", + "actual": 16, + "expected": 20, + "matches": false, + "enforced": false + }, + { + "name": "switchIconSize", + "scenario": "light/medium/value=false/icon", + "actual": 16, + "expected": 20, + "matches": false, + "enforced": false + }, + { + "name": "switchIconSize", + "scenario": "light/medium/value=true/icon", + "actual": 16, + "expected": 20, + "matches": false, + "enforced": false + }, + { + "name": "switchIconSmallSize", + "scenario": "dark/small/value=false/icon", + "actual": 13.71428571, + "expected": 16, + "matches": false, + "enforced": false + }, + { + "name": "switchIconSmallSize", + "scenario": "dark/small/value=true/icon", + "actual": 13.71428571, + "expected": 16, + "matches": false, + "enforced": false + }, + { + "name": "switchIconSmallSize", + "scenario": "light/small/value=false/icon", + "actual": 13.71428571, + "expected": 16, + "matches": false, + "enforced": false + }, + { + "name": "switchIconSmallSize", + "scenario": "light/small/value=true/icon", + "actual": 13.71428571, + "expected": 16, + "matches": false, + "enforced": false + }, + { + "name": "switchLabelCheckedColor", + "scenario": "dark/custom=false/TSwitchVariant.icon/value=true", + "actual": "#ff4582e6", + "expected": "#ff4582e6", + "matches": true, + "enforced": true + }, + { + "name": "switchLabelCheckedColor", + "scenario": "dark/custom=false/TSwitchVariant.text/value=true", + "actual": "#ff4582e6", + "expected": "#ff4582e6", + "matches": true, + "enforced": true + }, + { + "name": "switchLabelCheckedColor", + "scenario": "dark/custom=true/TSwitchVariant.icon/value=true", + "actual": "#ff220307", + "expected": "#ff220307", + "matches": true, + "enforced": true + }, + { + "name": "switchLabelCheckedColor", + "scenario": "dark/custom=true/TSwitchVariant.text/value=true", + "actual": "#ff220307", + "expected": "#ff220307", + "matches": true, + "enforced": true + }, + { + "name": "switchLabelCheckedColor", + "scenario": "light/custom=false/TSwitchVariant.icon/value=true", + "actual": "#ff0052d9", + "expected": "#ff0052d9", + "matches": true, + "enforced": true + }, + { + "name": "switchLabelCheckedColor", + "scenario": "light/custom=false/TSwitchVariant.text/value=true", + "actual": "#ff0052d9", + "expected": "#ff0052d9", + "matches": true, + "enforced": true + }, + { + "name": "switchLabelCheckedColor", + "scenario": "light/custom=true/TSwitchVariant.icon/value=true", + "actual": "#ff220307", + "expected": "#ff220307", + "matches": true, + "enforced": true + }, + { + "name": "switchLabelCheckedColor", + "scenario": "light/custom=true/TSwitchVariant.text/value=true", + "actual": "#ff220307", + "expected": "#ff220307", + "matches": true, + "enforced": true + }, + { + "name": "switchLabelColor", + "scenario": "dark/custom=false/TSwitchVariant.icon/value=false", + "actual": "#38ffffff", + "expected": "#ff383838", + "matches": false, + "enforced": false + }, + { + "name": "switchLabelColor", + "scenario": "dark/custom=false/TSwitchVariant.text/value=false", + "actual": "#38ffffff", + "expected": "#ff383838", + "matches": false, + "enforced": false + }, + { + "name": "switchLabelColor", + "scenario": "dark/custom=true/TSwitchVariant.icon/value=false", + "actual": "#ff353c8c", + "expected": "#ff302d69", + "matches": false, + "enforced": false + }, + { + "name": "switchLabelColor", + "scenario": "dark/custom=true/TSwitchVariant.text/value=false", + "actual": "#ff353c8c", + "expected": "#ff302d69", + "matches": false, + "enforced": false + }, + { + "name": "switchLabelColor", + "scenario": "light/custom=false/TSwitchVariant.icon/value=false", + "actual": "#42000000", + "expected": "#ffdcdcdc", + "matches": false, + "enforced": false + }, + { + "name": "switchLabelColor", + "scenario": "light/custom=false/TSwitchVariant.text/value=false", + "actual": "#42000000", + "expected": "#ffdcdcdc", + "matches": false, + "enforced": false + }, + { + "name": "switchLabelColor", + "scenario": "light/custom=true/TSwitchVariant.icon/value=false", + "actual": "#ff353c8c", + "expected": "#ff302d69", + "matches": false, + "enforced": false + }, + { + "name": "switchLabelColor", + "scenario": "light/custom=true/TSwitchVariant.text/value=false", + "actual": "#ff353c8c", + "expected": "#ff302d69", + "matches": false, + "enforced": false + }, + { + "name": "switchLabelFontSize", + "scenario": "dark/medium/value=false/text", + "actual": 14, + "expected": 14, + "matches": true, + "enforced": true + }, + { + "name": "switchLabelFontSize", + "scenario": "dark/medium/value=true/text", + "actual": 14, + "expected": 14, + "matches": true, + "enforced": true + }, + { + "name": "switchLabelFontSize", + "scenario": "light/medium/value=false/text", + "actual": 14, + "expected": 14, + "matches": true, + "enforced": true + }, + { + "name": "switchLabelFontSize", + "scenario": "light/medium/value=true/text", + "actual": 14, + "expected": 14, + "matches": true, + "enforced": true + }, + { + "name": "switchLabelLargeFontSize", + "scenario": "dark/large/value=false/text", + "actual": 16, + "expected": 16, + "matches": true, + "enforced": true + }, + { + "name": "switchLabelLargeFontSize", + "scenario": "dark/large/value=true/text", + "actual": 16, + "expected": 16, + "matches": true, + "enforced": true + }, + { + "name": "switchLabelLargeFontSize", + "scenario": "light/large/value=false/text", + "actual": 16, + "expected": 16, + "matches": true, + "enforced": true + }, + { + "name": "switchLabelLargeFontSize", + "scenario": "light/large/value=true/text", + "actual": 16, + "expected": 16, + "matches": true, + "enforced": true + }, + { + "name": "switchLabelSmallFontSize", + "scenario": "dark/small/value=false/text", + "actual": 12, + "expected": 12, + "matches": true, + "enforced": true + }, + { + "name": "switchLabelSmallFontSize", + "scenario": "dark/small/value=true/text", + "actual": 12, + "expected": 12, + "matches": true, + "enforced": true + }, + { + "name": "switchLabelSmallFontSize", + "scenario": "light/small/value=false/text", + "actual": 12, + "expected": 12, + "matches": true, + "enforced": true + }, + { + "name": "switchLabelSmallFontSize", + "scenario": "light/small/value=true/text", + "actual": 12, + "expected": 12, + "matches": true, + "enforced": true + }, + { + "name": "switchLargeHeight", + "scenario": "dark/large/value=false/filled", + "actual": 32, + "expected": 32, + "matches": true, + "enforced": true + }, + { + "name": "switchLargeHeight", + "scenario": "dark/large/value=false/icon", + "actual": 32, + "expected": 32, + "matches": true, + "enforced": true + }, + { + "name": "switchLargeHeight", + "scenario": "dark/large/value=false/text", + "actual": 32, + "expected": 32, + "matches": true, + "enforced": true + }, + { + "name": "switchLargeHeight", + "scenario": "dark/large/value=true/filled", + "actual": 32, + "expected": 32, + "matches": true, + "enforced": true + }, + { + "name": "switchLargeHeight", + "scenario": "dark/large/value=true/icon", + "actual": 32, + "expected": 32, + "matches": true, + "enforced": true + }, + { + "name": "switchLargeHeight", + "scenario": "dark/large/value=true/text", + "actual": 32, + "expected": 32, + "matches": true, + "enforced": true + }, + { + "name": "switchLargeHeight", + "scenario": "light/large/value=false/filled", + "actual": 32, + "expected": 32, + "matches": true, + "enforced": true + }, + { + "name": "switchLargeHeight", + "scenario": "light/large/value=false/icon", + "actual": 32, + "expected": 32, + "matches": true, + "enforced": true + }, + { + "name": "switchLargeHeight", + "scenario": "light/large/value=false/text", + "actual": 32, + "expected": 32, + "matches": true, + "enforced": true + }, + { + "name": "switchLargeHeight", + "scenario": "light/large/value=true/filled", + "actual": 32, + "expected": 32, + "matches": true, + "enforced": true + }, + { + "name": "switchLargeHeight", + "scenario": "light/large/value=true/icon", + "actual": 32, + "expected": 32, + "matches": true, + "enforced": true + }, + { + "name": "switchLargeHeight", + "scenario": "light/large/value=true/text", + "actual": 32, + "expected": 32, + "matches": true, + "enforced": true + }, + { + "name": "switchLargeRadius", + "scenario": "dark/large/value=false/filled", + "actual": 16, + "expected": 16, + "matches": true, + "enforced": true + }, + { + "name": "switchLargeRadius", + "scenario": "dark/large/value=false/icon", + "actual": 16, + "expected": 16, + "matches": true, + "enforced": true + }, + { + "name": "switchLargeRadius", + "scenario": "dark/large/value=false/text", + "actual": 16, + "expected": 16, + "matches": true, + "enforced": true + }, + { + "name": "switchLargeRadius", + "scenario": "dark/large/value=true/filled", + "actual": 16, + "expected": 16, + "matches": true, + "enforced": true + }, + { + "name": "switchLargeRadius", + "scenario": "dark/large/value=true/icon", + "actual": 16, + "expected": 16, + "matches": true, + "enforced": true + }, + { + "name": "switchLargeRadius", + "scenario": "dark/large/value=true/text", + "actual": 16, + "expected": 16, + "matches": true, + "enforced": true + }, + { + "name": "switchLargeRadius", + "scenario": "light/large/value=false/filled", + "actual": 16, + "expected": 16, + "matches": true, + "enforced": true + }, + { + "name": "switchLargeRadius", + "scenario": "light/large/value=false/icon", + "actual": 16, + "expected": 16, + "matches": true, + "enforced": true + }, + { + "name": "switchLargeRadius", + "scenario": "light/large/value=false/text", + "actual": 16, + "expected": 16, + "matches": true, + "enforced": true + }, + { + "name": "switchLargeRadius", + "scenario": "light/large/value=true/filled", + "actual": 16, + "expected": 16, + "matches": true, + "enforced": true + }, + { + "name": "switchLargeRadius", + "scenario": "light/large/value=true/icon", + "actual": 16, + "expected": 16, + "matches": true, + "enforced": true + }, + { + "name": "switchLargeRadius", + "scenario": "light/large/value=true/text", + "actual": 16, + "expected": 16, + "matches": true, + "enforced": true + }, + { + "name": "switchLargeWidth", + "scenario": "dark/large/value=false/filled", + "actual": 51.42857143, + "expected": 52, + "matches": false, + "enforced": false + }, + { + "name": "switchLargeWidth", + "scenario": "dark/large/value=false/icon", + "actual": 51.42857143, + "expected": 52, + "matches": false, + "enforced": false + }, + { + "name": "switchLargeWidth", + "scenario": "dark/large/value=false/text", + "actual": 51.42857143, + "expected": 52, + "matches": false, + "enforced": false + }, + { + "name": "switchLargeWidth", + "scenario": "dark/large/value=true/filled", + "actual": 51.42857143, + "expected": 52, + "matches": false, + "enforced": false + }, + { + "name": "switchLargeWidth", + "scenario": "dark/large/value=true/icon", + "actual": 51.42857143, + "expected": 52, + "matches": false, + "enforced": false + }, + { + "name": "switchLargeWidth", + "scenario": "dark/large/value=true/text", + "actual": 51.42857143, + "expected": 52, + "matches": false, + "enforced": false + }, + { + "name": "switchLargeWidth", + "scenario": "light/large/value=false/filled", + "actual": 51.42857143, + "expected": 52, + "matches": false, + "enforced": false + }, + { + "name": "switchLargeWidth", + "scenario": "light/large/value=false/icon", + "actual": 51.42857143, + "expected": 52, + "matches": false, + "enforced": false + }, + { + "name": "switchLargeWidth", + "scenario": "light/large/value=false/text", + "actual": 51.42857143, + "expected": 52, + "matches": false, + "enforced": false + }, + { + "name": "switchLargeWidth", + "scenario": "light/large/value=true/filled", + "actual": 51.42857143, + "expected": 52, + "matches": false, + "enforced": false + }, + { + "name": "switchLargeWidth", + "scenario": "light/large/value=true/icon", + "actual": 51.42857143, + "expected": 52, + "matches": false, + "enforced": false + }, + { + "name": "switchLargeWidth", + "scenario": "light/large/value=true/text", + "actual": 51.42857143, + "expected": 52, + "matches": false, + "enforced": false + }, + { + "name": "switchLoadingColor", + "scenario": "dark/custom=false", + "actual": "#e6ffffff", + "expected": "#e6ffffff", + "matches": true, + "enforced": true + }, + { + "name": "switchLoadingColor", + "scenario": "dark/custom=true", + "actual": "#ff37429a", + "expected": "#ff37429a", + "matches": true, + "enforced": true + }, + { + "name": "switchLoadingColor", + "scenario": "light/custom=false", + "actual": "#ff0052d9", + "expected": "#ff0052d9", + "matches": true, + "enforced": true + }, + { + "name": "switchLoadingColor", + "scenario": "light/custom=true", + "actual": "#ff220307", + "expected": "#ff220307", + "matches": true, + "enforced": true + }, + { + "name": "switchRadius", + "scenario": "dark/medium/value=false/filled", + "actual": 14, + "expected": 14, + "matches": true, + "enforced": true + }, + { + "name": "switchRadius", + "scenario": "dark/medium/value=false/icon", + "actual": 14, + "expected": 14, + "matches": true, + "enforced": true + }, + { + "name": "switchRadius", + "scenario": "dark/medium/value=false/text", + "actual": 14, + "expected": 14, + "matches": true, + "enforced": true + }, + { + "name": "switchRadius", + "scenario": "dark/medium/value=true/filled", + "actual": 14, + "expected": 14, + "matches": true, + "enforced": true + }, + { + "name": "switchRadius", + "scenario": "dark/medium/value=true/icon", + "actual": 14, + "expected": 14, + "matches": true, + "enforced": true + }, + { + "name": "switchRadius", + "scenario": "dark/medium/value=true/text", + "actual": 14, + "expected": 14, + "matches": true, + "enforced": true + }, + { + "name": "switchRadius", + "scenario": "light/medium/value=false/filled", + "actual": 14, + "expected": 14, + "matches": true, + "enforced": true + }, + { + "name": "switchRadius", + "scenario": "light/medium/value=false/icon", + "actual": 14, + "expected": 14, + "matches": true, + "enforced": true + }, + { + "name": "switchRadius", + "scenario": "light/medium/value=false/text", + "actual": 14, + "expected": 14, + "matches": true, + "enforced": true + }, + { + "name": "switchRadius", + "scenario": "light/medium/value=true/filled", + "actual": 14, + "expected": 14, + "matches": true, + "enforced": true + }, + { + "name": "switchRadius", + "scenario": "light/medium/value=true/icon", + "actual": 14, + "expected": 14, + "matches": true, + "enforced": true + }, + { + "name": "switchRadius", + "scenario": "light/medium/value=true/text", + "actual": 14, + "expected": 14, + "matches": true, + "enforced": true + }, + { + "name": "switchSmallHeight", + "scenario": "dark/small/value=false/filled", + "actual": 24, + "expected": 24, + "matches": true, + "enforced": true + }, + { + "name": "switchSmallHeight", + "scenario": "dark/small/value=false/icon", + "actual": 24, + "expected": 24, + "matches": true, + "enforced": true + }, + { + "name": "switchSmallHeight", + "scenario": "dark/small/value=false/text", + "actual": 24, + "expected": 24, + "matches": true, + "enforced": true + }, + { + "name": "switchSmallHeight", + "scenario": "dark/small/value=true/filled", + "actual": 24, + "expected": 24, + "matches": true, + "enforced": true + }, + { + "name": "switchSmallHeight", + "scenario": "dark/small/value=true/icon", + "actual": 24, + "expected": 24, + "matches": true, + "enforced": true + }, + { + "name": "switchSmallHeight", + "scenario": "dark/small/value=true/text", + "actual": 24, + "expected": 24, + "matches": true, + "enforced": true + }, + { + "name": "switchSmallHeight", + "scenario": "light/small/value=false/filled", + "actual": 24, + "expected": 24, + "matches": true, + "enforced": true + }, + { + "name": "switchSmallHeight", + "scenario": "light/small/value=false/icon", + "actual": 24, + "expected": 24, + "matches": true, + "enforced": true + }, + { + "name": "switchSmallHeight", + "scenario": "light/small/value=false/text", + "actual": 24, + "expected": 24, + "matches": true, + "enforced": true + }, + { + "name": "switchSmallHeight", + "scenario": "light/small/value=true/filled", + "actual": 24, + "expected": 24, + "matches": true, + "enforced": true + }, + { + "name": "switchSmallHeight", + "scenario": "light/small/value=true/icon", + "actual": 24, + "expected": 24, + "matches": true, + "enforced": true + }, + { + "name": "switchSmallHeight", + "scenario": "light/small/value=true/text", + "actual": 24, + "expected": 24, + "matches": true, + "enforced": true + }, + { + "name": "switchSmallRadius", + "scenario": "dark/small/value=false/filled", + "actual": 12, + "expected": 12, + "matches": true, + "enforced": true + }, + { + "name": "switchSmallRadius", + "scenario": "dark/small/value=false/icon", + "actual": 12, + "expected": 12, + "matches": true, + "enforced": true + }, + { + "name": "switchSmallRadius", + "scenario": "dark/small/value=false/text", + "actual": 12, + "expected": 12, + "matches": true, + "enforced": true + }, + { + "name": "switchSmallRadius", + "scenario": "dark/small/value=true/filled", + "actual": 12, + "expected": 12, + "matches": true, + "enforced": true + }, + { + "name": "switchSmallRadius", + "scenario": "dark/small/value=true/icon", + "actual": 12, + "expected": 12, + "matches": true, + "enforced": true + }, + { + "name": "switchSmallRadius", + "scenario": "dark/small/value=true/text", + "actual": 12, + "expected": 12, + "matches": true, + "enforced": true + }, + { + "name": "switchSmallRadius", + "scenario": "light/small/value=false/filled", + "actual": 12, + "expected": 12, + "matches": true, + "enforced": true + }, + { + "name": "switchSmallRadius", + "scenario": "light/small/value=false/icon", + "actual": 12, + "expected": 12, + "matches": true, + "enforced": true + }, + { + "name": "switchSmallRadius", + "scenario": "light/small/value=false/text", + "actual": 12, + "expected": 12, + "matches": true, + "enforced": true + }, + { + "name": "switchSmallRadius", + "scenario": "light/small/value=true/filled", + "actual": 12, + "expected": 12, + "matches": true, + "enforced": true + }, + { + "name": "switchSmallRadius", + "scenario": "light/small/value=true/icon", + "actual": 12, + "expected": 12, + "matches": true, + "enforced": true + }, + { + "name": "switchSmallRadius", + "scenario": "light/small/value=true/text", + "actual": 12, + "expected": 12, + "matches": true, + "enforced": true + }, + { + "name": "switchSmallWidth", + "scenario": "dark/small/value=false/filled", + "actual": 38.57142857, + "expected": 39, + "matches": false, + "enforced": false + }, + { + "name": "switchSmallWidth", + "scenario": "dark/small/value=false/icon", + "actual": 38.57142857, + "expected": 39, + "matches": false, + "enforced": false + }, + { + "name": "switchSmallWidth", + "scenario": "dark/small/value=false/text", + "actual": 38.57142857, + "expected": 39, + "matches": false, + "enforced": false + }, + { + "name": "switchSmallWidth", + "scenario": "dark/small/value=true/filled", + "actual": 38.57142857, + "expected": 39, + "matches": false, + "enforced": false + }, + { + "name": "switchSmallWidth", + "scenario": "dark/small/value=true/icon", + "actual": 38.57142857, + "expected": 39, + "matches": false, + "enforced": false + }, + { + "name": "switchSmallWidth", + "scenario": "dark/small/value=true/text", + "actual": 38.57142857, + "expected": 39, + "matches": false, + "enforced": false + }, + { + "name": "switchSmallWidth", + "scenario": "light/small/value=false/filled", + "actual": 38.57142857, + "expected": 39, + "matches": false, + "enforced": false + }, + { + "name": "switchSmallWidth", + "scenario": "light/small/value=false/icon", + "actual": 38.57142857, + "expected": 39, + "matches": false, + "enforced": false + }, + { + "name": "switchSmallWidth", + "scenario": "light/small/value=false/text", + "actual": 38.57142857, + "expected": 39, + "matches": false, + "enforced": false + }, + { + "name": "switchSmallWidth", + "scenario": "light/small/value=true/filled", + "actual": 38.57142857, + "expected": 39, + "matches": false, + "enforced": false + }, + { + "name": "switchSmallWidth", + "scenario": "light/small/value=true/icon", + "actual": 38.57142857, + "expected": 39, + "matches": false, + "enforced": false + }, + { + "name": "switchSmallWidth", + "scenario": "light/small/value=true/text", + "actual": 38.57142857, + "expected": 39, + "matches": false, + "enforced": false + }, + { + "name": "switchUncheckedColor", + "scenario": "dark/custom=false/enabled=true/value=false", + "actual": "#ff383838", + "expected": "#ff383838", + "matches": true, + "enforced": true + }, + { + "name": "switchUncheckedColor", + "scenario": "dark/custom=false/enabled=true/value=true", + "actual": "#ff383838", + "expected": "#ff383838", + "matches": true, + "enforced": true + }, + { + "name": "switchUncheckedColor", + "scenario": "dark/custom=true/enabled=true/value=false", + "actual": "#ff302d69", + "expected": "#ff302d69", + "matches": true, + "enforced": true + }, + { + "name": "switchUncheckedColor", + "scenario": "dark/custom=true/enabled=true/value=true", + "actual": "#ff302d69", + "expected": "#ff302d69", + "matches": true, + "enforced": true + }, + { + "name": "switchUncheckedColor", + "scenario": "light/custom=false/enabled=true/value=false", + "actual": "#ffdcdcdc", + "expected": "#ffdcdcdc", + "matches": true, + "enforced": true + }, + { + "name": "switchUncheckedColor", + "scenario": "light/custom=false/enabled=true/value=true", + "actual": "#ffdcdcdc", + "expected": "#ffdcdcdc", + "matches": true, + "enforced": true + }, + { + "name": "switchUncheckedColor", + "scenario": "light/custom=true/enabled=true/value=false", + "actual": "#ff302d69", + "expected": "#ff302d69", + "matches": true, + "enforced": true + }, + { + "name": "switchUncheckedColor", + "scenario": "light/custom=true/enabled=true/value=true", + "actual": "#ff302d69", + "expected": "#ff302d69", + "matches": true, + "enforced": true + }, + { + "name": "switchUncheckedDisabledColor", + "scenario": "dark/custom=false/enabled=false/value=false", + "actual": "#ff2c2c2c", + "expected": "#ff2c2c2c", + "matches": true, + "enforced": true + }, + { + "name": "switchUncheckedDisabledColor", + "scenario": "dark/custom=false/enabled=false/value=true", + "actual": "#ff2c2c2c", + "expected": "#ff2c2c2c", + "matches": true, + "enforced": true + }, + { + "name": "switchUncheckedDisabledColor", + "scenario": "dark/custom=true/enabled=false/value=false", + "actual": "#ff2d2454", + "expected": "#ff2d2454", + "matches": true, + "enforced": true + }, + { + "name": "switchUncheckedDisabledColor", + "scenario": "dark/custom=true/enabled=false/value=true", + "actual": "#ff2d2454", + "expected": "#ff2d2454", + "matches": true, + "enforced": true + }, + { + "name": "switchUncheckedDisabledColor", + "scenario": "light/custom=false/enabled=false/value=false", + "actual": "#ffeeeeee", + "expected": "#ffeeeeee", + "matches": true, + "enforced": true + }, + { + "name": "switchUncheckedDisabledColor", + "scenario": "light/custom=false/enabled=false/value=true", + "actual": "#ffeeeeee", + "expected": "#ffeeeeee", + "matches": true, + "enforced": true + }, + { + "name": "switchUncheckedDisabledColor", + "scenario": "light/custom=true/enabled=false/value=false", + "actual": "#ff2d2454", + "expected": "#ff2d2454", + "matches": true, + "enforced": true + }, + { + "name": "switchUncheckedDisabledColor", + "scenario": "light/custom=true/enabled=false/value=true", + "actual": "#ff2d2454", + "expected": "#ff2d2454", + "matches": true, + "enforced": true + }, + { + "name": "switchWidth", + "scenario": "dark/medium/value=false/filled", + "actual": 45, + "expected": 45, + "matches": true, + "enforced": true + }, + { + "name": "switchWidth", + "scenario": "dark/medium/value=false/icon", + "actual": 45, + "expected": 45, + "matches": true, + "enforced": true + }, + { + "name": "switchWidth", + "scenario": "dark/medium/value=false/text", + "actual": 45, + "expected": 45, + "matches": true, + "enforced": true + }, + { + "name": "switchWidth", + "scenario": "dark/medium/value=true/filled", + "actual": 45, + "expected": 45, + "matches": true, + "enforced": true + }, + { + "name": "switchWidth", + "scenario": "dark/medium/value=true/icon", + "actual": 45, + "expected": 45, + "matches": true, + "enforced": true + }, + { + "name": "switchWidth", + "scenario": "dark/medium/value=true/text", + "actual": 45, + "expected": 45, + "matches": true, + "enforced": true + }, + { + "name": "switchWidth", + "scenario": "light/medium/value=false/filled", + "actual": 45, + "expected": 45, + "matches": true, + "enforced": true + }, + { + "name": "switchWidth", + "scenario": "light/medium/value=false/icon", + "actual": 45, + "expected": 45, + "matches": true, + "enforced": true + }, + { + "name": "switchWidth", + "scenario": "light/medium/value=false/text", + "actual": 45, + "expected": 45, + "matches": true, + "enforced": true + }, + { + "name": "switchWidth", + "scenario": "light/medium/value=true/filled", + "actual": 45, + "expected": 45, + "matches": true, + "enforced": true + }, + { + "name": "switchWidth", + "scenario": "light/medium/value=true/icon", + "actual": 45, + "expected": 45, + "matches": true, + "enforced": true + }, + { + "name": "switchWidth", + "scenario": "light/medium/value=true/text", + "actual": 45, + "expected": 45, + "matches": true, + "enforced": true + } + ] +} diff --git a/specs/059-component-token-runtime-evidence/runtime-review.json b/specs/059-component-token-runtime-evidence/runtime-review.json new file mode 100644 index 0000000000..713010fefa --- /dev/null +++ b/specs/059-component-token-runtime-evidence/runtime-review.json @@ -0,0 +1,40108 @@ +{ + "date": "2026-10-15", + "baseline": "30767a5521e871b1738040f854adf001e50e4774", + "miniprogramCommit": "1a1c5ca135b0e9bf19abc43a59870c4908a28ad5", + "frozenArchive": { + "url": "https://codeload.github.com/Tencent/tdesign-miniprogram/tar.gz/1a1c5ca135b0e9bf19abc43a59870c4908a28ad5", + "sha256": "632e13fb4152d2691c850b017335ec5ba0f7c50398a563e3ff9a2637e0fbba74" + }, + "scope": "677 historical pending rows; runtime default evidence and frozen source applicability are separate from final visual acceptance.", + "counts": { + "runtime-evidence-pending": 524, + "runtime-default-verified-visual-pending": 116, + "runtime-difference-needs-resolution": 31, + "platform-geometry-review-pending": 1, + "no-frozen-source-consumer-found": 5 + }, + "observationNames": 150, + "observationsPerSdk": 1008, + "identicalAcrossSdks": true, + "checkpoints": [ + { + "sdk": { + "frameworkVersion": "3.32.0", + "channel": "stable", + "repositoryUrl": "https://github.com/flutter/flutter.git", + "frameworkRevision": "be698c48a6750c8cb8e61c740ca9991bb947aba2", + "frameworkCommitDate": "2025-05-19 12:59:14 -0700", + "engineRevision": "18818009497c581ede5d8a3b8b833b81d00cebb7", + "engineCommitDate": "2025-05-19 10:54:07 -0700", + "dartSdkVersion": "3.8.0", + "devToolsVersion": "2.45.1", + "flutterVersion": "3.32.0", + "flutterRoot": "/private/tmp/tdesign-token-flutter-3.32.0" + }, + "lockSha256": "7deb49a80a8288c84280257591090c14c5fa1db08f8aabad6233b51a8a6e4d92", + "regressionCount": 439, + "regressionLogSha256": "6cdacd20642f7ab312434cbdd03113c10ac375fdb700906375b964b9bf900074", + "analysisLogSha256": "f257b389c6fbc3d9a50cbad25e96908c7c3541789dbc5c3ce6c64fcc2a4ea4b7", + "focusCount": 46, + "focusLogSha256": "4ef200dcea19d67025a70cac3da47360c6091c05e3e5d0869afbffdcc0b7373e", + "coverage": [ + { + "component": "button", + "hit": 471, + "found": 474, + "percent": 99.37, + "logSha256": "e7667b60b36d9cf1697dcab57d433755e536072cd686ccd2d605be2562e30056" + }, + { + "component": "switch", + "hit": 385, + "found": 401, + "percent": 96.01, + "logSha256": "960291d12ffa0579f21e0b9815f17db0486f53c3c304cdb5bd2be50c371406d2" + }, + { + "component": "input", + "hit": 321, + "found": 330, + "percent": 97.27, + "logSha256": "15e1240d66d70ea81af1ecba866e456e84012335c457efbd3f28a7629fa51d00" + }, + { + "component": "link", + "hit": 114, + "found": 116, + "percent": 98.28, + "logSha256": "2dafa9651eadaa060fae9b06491dd4bb1bfd5d5412ffe7dfe100d1a3b7f25dac" + }, + { + "component": "avatar", + "hit": 281, + "found": 285, + "percent": 98.6, + "logSha256": "e41486f9cd676cd74090f45379afacfffeef2b155d3c89ad7c9fbf2e81b3f0de" + }, + { + "component": "empty", + "hit": 33, + "found": 33, + "percent": 100, + "logSha256": "dd4a5dceb915e9748f71aa4b8064355ffcd74fe29157e647be420cc46f0fa006" + }, + { + "component": "progress", + "hit": 646, + "found": 655, + "percent": 98.63, + "logSha256": "0b0ffc8c9e25815cbd3532ebc3aad98364c635e42ee6912fdcba72eb17158914" + } + ] + }, + { + "sdk": { + "frameworkVersion": "3.47.7", + "channel": "stable", + "repositoryUrl": "https://github.com/flutter/flutter.git", + "frameworkRevision": "abaf9c523780a608bd46686fd5e53740a07077f8", + "frameworkCommitDate": "2026-10-08 09:51:21 -0700", + "engineRevision": "deb287481e3ce9468f3434937ced4240a70539ca", + "engineCommitDate": "2026-10-07 17:09:12.000Z", + "engineContentHash": "d8a2d6c768c334d53e16277f837970ffa1e2de81", + "engineBuildDate": "2026-10-08 01:51:44.552", + "dartSdkVersion": "3.13.5", + "devToolsVersion": "2.60.0", + "flutterVersion": "3.47.7", + "flutterRoot": "/private/tmp/tdesign-token-flutter-3.47.7" + }, + "lockSha256": "72ed71235498ba5e0b54fa7cafd55220347a0519feeb05b7b9221a254baa0cd3", + "regressionCount": 439, + "regressionLogSha256": "a2bec3200c7b1aab1b6bbdcaa2ac37b8b9cf4071dec65521e666899c81a56b0b", + "analysisLogSha256": "9a5c7017c51e643d0087f385d8d0c3208ebb972c9d0e9d9e9972e7c46c58ea17", + "focusCount": 46, + "focusLogSha256": "1b5a529538e8fc5ab332aa5a94199d7fd9e4304fa228b3cf9b29f110de32022e", + "coverage": [ + { + "component": "button", + "hit": 471, + "found": 474, + "percent": 99.37, + "logSha256": "e7667b60b36d9cf1697dcab57d433755e536072cd686ccd2d605be2562e30056" + }, + { + "component": "switch", + "hit": 385, + "found": 401, + "percent": 96.01, + "logSha256": "960291d12ffa0579f21e0b9815f17db0486f53c3c304cdb5bd2be50c371406d2" + }, + { + "component": "input", + "hit": 321, + "found": 330, + "percent": 97.27, + "logSha256": "15e1240d66d70ea81af1ecba866e456e84012335c457efbd3f28a7629fa51d00" + }, + { + "component": "link", + "hit": 114, + "found": 116, + "percent": 98.28, + "logSha256": "2dafa9651eadaa060fae9b06491dd4bb1bfd5d5412ffe7dfe100d1a3b7f25dac" + }, + { + "component": "avatar", + "hit": 281, + "found": 285, + "percent": 98.6, + "logSha256": "e41486f9cd676cd74090f45379afacfffeef2b155d3c89ad7c9fbf2e81b3f0de" + }, + { + "component": "empty", + "hit": 33, + "found": 33, + "percent": 100, + "logSha256": "dd4a5dceb915e9748f71aa4b8064355ffcd74fe29157e647be420cc46f0fa006" + }, + { + "component": "progress", + "hit": 646, + "found": 655, + "percent": 98.63, + "logSha256": "0b0ffc8c9e25815cbd3532ebc3aad98364c635e42ee6912fdcba72eb17158914" + } + ] + } + ], + "evidenceTools": [ + { + "file": "tool/audit_compiled_token_consumption.mjs", + "sha256": "752a13ce38c0211f1b9a1308e2faaf2fdb46743132ea2cbb7b42fd305abadf50" + }, + { + "file": "tool/summarize_component_token_evidence.mjs", + "sha256": "43b253db11e1cafbfa354bc3304f3de6eace643327c0725fc414c814a55a9c79" + } + ], + "sourceFingerprintSha256": "a7c679c8709bb8f5d0b4134bcb6a9860010d76bdba7ea66509a28b2e8b701128", + "fingerprints": [ + { + "file": "tdesign-component/lib/src/components/action_sheet/t_action_sheet_grid.dart", + "sha256": "64f5b8453b18c38b04c561dd4289ff0fb75b422ff942e4e664a3142f8b124727" + }, + { + "file": "tdesign-component/lib/src/components/action_sheet/t_action_sheet_item_widget.dart", + "sha256": "f4c0fb5d9c9f7cacc34e7acb514c7fc57165905bda8e1ea2c41f4c393e26e958" + }, + { + "file": "tdesign-component/lib/src/components/action_sheet/t_action_sheet_item.dart", + "sha256": "574d4ee50bc5771ca758620d01d3630551b99faeeb58b784d9d8e13f45bc4742" + }, + { + "file": "tdesign-component/lib/src/components/action_sheet/t_action_sheet_list.dart", + "sha256": "9a9edf863f9bfbed2135ca321f8e8119e1e70a0fa5fbcb037add33d88665a64f" + }, + { + "file": "tdesign-component/lib/src/components/action_sheet/t_action_sheet_theme_data.dart", + "sha256": "47e8cf56722cfd3c09cd0769bf7eb83050e05a5cea3935d5b688386db98bf005" + }, + { + "file": "tdesign-component/lib/src/components/action_sheet/t_action_sheet_types.dart", + "sha256": "bc953484f3fbcda85b2265e6da1f26359f5e1a7f0f6c79a36da400645bf744ce" + }, + { + "file": "tdesign-component/lib/src/components/action_sheet/t_action_sheet.dart", + "sha256": "9428b11143d3139efc714d9ea756f69b8bc266faa2630a6eff4e3118662d2e6e" + }, + { + "file": "tdesign-component/lib/src/components/avatar/t_avatar_defaults.dart", + "sha256": "e90f48ca3ffbcd128914ba5ba688ff46913bb3acbb0a1b6ca20bfed22f964716" + }, + { + "file": "tdesign-component/lib/src/components/avatar/t_avatar_theme_data.dart", + "sha256": "9dd201ea5e8cd4d2fec16b41f43baf3b364da03c8a751042768c9cc33ade1820" + }, + { + "file": "tdesign-component/lib/src/components/avatar/t_avatar_types.dart", + "sha256": "cd04d4ea83c659d6016ce5c67738678999d913d141a8132e04cd5b7686c56c96" + }, + { + "file": "tdesign-component/lib/src/components/avatar/t_avatar.dart", + "sha256": "cef88facb3314287a600e82fbce07dfa39258f99e5337d77a472ee3792fa0b6d" + }, + { + "file": "tdesign-component/lib/src/components/backtop/t_backtop_theme_data.dart", + "sha256": "6f10265e786cd9cc9493acca19c39b4998e0054aafbf1686e4dbb553740a7806" + }, + { + "file": "tdesign-component/lib/src/components/backtop/t_backtop.dart", + "sha256": "613c223e5e00f140a8a0613406fc0082485d142b568f9a12f9d98150be42017f" + }, + { + "file": "tdesign-component/lib/src/components/badge/t_badge_defaults.dart", + "sha256": "26df77972945bf1d6b7f1bc19a921011d40cc6f8aa30b6dbe9ddbb0d8d705772" + }, + { + "file": "tdesign-component/lib/src/components/badge/t_badge_fallback.dart", + "sha256": "b93bbf2d4d92b5baee8334133cfc184d5602f092a223415cd38c95242cfdbc75" + }, + { + "file": "tdesign-component/lib/src/components/badge/t_badge_internal.dart", + "sha256": "e178e81e3562f70354aa51db944529e65b1e1ac213b1d0864b909f4d4fcc647e" + }, + { + "file": "tdesign-component/lib/src/components/badge/t_badge_label.dart", + "sha256": "9705e282965abd1367a106a2e40d2f57a9125b567940f6a2e1f252c48314533f" + }, + { + "file": "tdesign-component/lib/src/components/badge/t_badge_layout.dart", + "sha256": "ea2048a7e8ee8113f006554205f0c3ef865c95372afc9350832563dc229f474a" + }, + { + "file": "tdesign-component/lib/src/components/badge/t_badge_resolved_style.dart", + "sha256": "2dc6b205d476eaffd0bd118de66d66eaa10c79788b075975f95c43ff6856ce58" + }, + { + "file": "tdesign-component/lib/src/components/badge/t_badge_theme_data.dart", + "sha256": "7502e10c9b472bf6d273ae84a62533c2e67e97baae5801ac6032f3e953d7667b" + }, + { + "file": "tdesign-component/lib/src/components/badge/t_badge.dart", + "sha256": "12d782a548187bfdcbaef3cd2601183d1b702ab11ca8be9509cc20fe70473d03" + }, + { + "file": "tdesign-component/lib/src/components/button/t_button_defaults.dart", + "sha256": "b4f0ad7379eefc2c562782ac0c1c48abe14d9ac59679d639c66a5790c38559f9" + }, + { + "file": "tdesign-component/lib/src/components/button/t_button_resolve.dart", + "sha256": "001d123b937cabad22bb67a11cb3cb9c75f68d7cb9f1654a80d7fc0301883f16" + }, + { + "file": "tdesign-component/lib/src/components/button/t_button_theme_data.dart", + "sha256": "db4f4331a5ebe200f03046ed95c5ff633abf7051f9064bdc986844c66216a35d" + }, + { + "file": "tdesign-component/lib/src/components/button/t_button_types.dart", + "sha256": "e223af1e6f201b93f5723500a4ae052836075abd45c635de230ae076491e22f5" + }, + { + "file": "tdesign-component/lib/src/components/button/t_button.dart", + "sha256": "44c74c64a84b70a4b2f0f3f816a6cab98843c42d7d43136cc25c91108e49e465" + }, + { + "file": "tdesign-component/lib/src/components/calendar/t_calendar_body.dart", + "sha256": "61a542f48bd16504562b47646c1c23564c4f280a63caf9e70bd4cd975d0a3d34" + }, + { + "file": "tdesign-component/lib/src/components/calendar/t_calendar_cell.dart", + "sha256": "77fae6aaf4728c6a915330f49eb51eb2f95cc7157c15840e6ac808b791373ce4" + }, + { + "file": "tdesign-component/lib/src/components/calendar/t_calendar_header.dart", + "sha256": "302e20b572330fa69a8658232d0667e75a4da1786b8557255471b88adb3fdd22" + }, + { + "file": "tdesign-component/lib/src/components/calendar/t_calendar_style.dart", + "sha256": "80985c34156b34552abd80304d3255856b60f02bc282987bfc2484ce2dfc61d9" + }, + { + "file": "tdesign-component/lib/src/components/calendar/t_calendar_theme_data.dart", + "sha256": "373c90441bc36e9dc0d1aae211de42c33b121264f8685a07c414b33df35784bd" + }, + { + "file": "tdesign-component/lib/src/components/calendar/t_calendar_types.dart", + "sha256": "59cb92666699dc56a4ecb1c9e32c17015a63a782bb8ba653bf5ca2d9840e7938" + }, + { + "file": "tdesign-component/lib/src/components/calendar/t_calendar.dart", + "sha256": "71e148330bac972531103e819edbc413d874517a3e4763c26fbe227e0914a6d9" + }, + { + "file": "tdesign-component/lib/src/components/cascader/t_cascader_defaults.dart", + "sha256": "b9f4a80d6c072db78ab4a6309ece17a0985ba902ecfd2b9fbb2a1f16b7848002" + }, + { + "file": "tdesign-component/lib/src/components/cascader/t_cascader_theme_data.dart", + "sha256": "6caa10215842400c0c4aa12e0a0bff20ce395f3b6e1555810886e1118377733d" + }, + { + "file": "tdesign-component/lib/src/components/cascader/t_cascader.dart", + "sha256": "2bb538d5ab0c463d7d50fa91c631df1fb654b20fe962e33c5e893a029e0a4baf" + }, + { + "file": "tdesign-component/lib/src/components/cell/t_cell_group.dart", + "sha256": "eb0964efc5c43717425022aaf4d143ff7f367c9a17fe39d29b51f18600584394" + }, + { + "file": "tdesign-component/lib/src/components/cell/t_cell_theme_data.dart", + "sha256": "65e0a50ec36c9073ec10d2744ccaa6599b6b9246669f6250cd8d04aedac8f092" + }, + { + "file": "tdesign-component/lib/src/components/cell/t_cell.dart", + "sha256": "b51f5446a1a670d4a0f065da5380735be0c20a7ff217c8f98889cc7c99824f8d" + }, + { + "file": "tdesign-component/lib/src/components/checkbox/t_check_box_group.dart", + "sha256": "f7fcfacb70d71ce63f621bccf5b01b48033363d4bd13233a5458d775f4bdd1a7" + }, + { + "file": "tdesign-component/lib/src/components/checkbox/t_check_box.dart", + "sha256": "586f2cce496a5713b8a8ed60b9cc92119caf57fe82823d087e5ec3292f53646a" + }, + { + "file": "tdesign-component/lib/src/components/checkbox/t_checkbox_theme_data.dart", + "sha256": "2993307ad235c587e13ced8ea891aaaef79735bd45283bc4e52ff3d79b23e872" + }, + { + "file": "tdesign-component/lib/src/components/checkbox/t_selection_card.dart", + "sha256": "2abe436f3c2d20f68c58c667707c777177e93ff10c26bf24733550c21ecc3a1d" + }, + { + "file": "tdesign-component/lib/src/components/collapse/t_collapse_panel.dart", + "sha256": "40a55022a7171100648c4c1dcf28a71f48f1b68e4bb69942ce9062a912a93918" + }, + { + "file": "tdesign-component/lib/src/components/collapse/t_collapse_theme_data.dart", + "sha256": "21df57f00f6b8be4d4e05f48f5882eedde0d686627bba074aa20b29d092ac418" + }, + { + "file": "tdesign-component/lib/src/components/collapse/t_collapse_types.dart", + "sha256": "8cf810fc56a98375b0eb82ef1f489d7a70c9bea46d43c969b1457e968f240332" + }, + { + "file": "tdesign-component/lib/src/components/collapse/t_collapse.dart", + "sha256": "b66d2558bb2b1efdb06abf449f72001756d28e4103dfb85a4b596d77d6bf19ef" + }, + { + "file": "tdesign-component/lib/src/components/collapse/t_inset_divider.dart", + "sha256": "028229a7a93bb48dc16df0f2732b726361f77d4b3edb9dfb771d0ef8b08ee1d2" + }, + { + "file": "tdesign-component/lib/src/components/collapse/t_nonanimated_expand_icon.dart", + "sha256": "c02ebe2f0ac947e0ec32f2da9c2bd64295e644781ae561d617f8cf014e69c59e" + }, + { + "file": "tdesign-component/lib/src/components/date_time_picker/t_date_time_picker_bounds.part.dart", + "sha256": "c2951704c1cdabe6d3e86e0ea0038c2bcbfa3fda264f7cd473284a10858e7f88" + }, + { + "file": "tdesign-component/lib/src/components/date_time_picker/t_date_time_picker_column.dart", + "sha256": "6e9e3c38cb2ed477ac22719d5a0e54744ed19f1e159961d10a829559c54091d2" + }, + { + "file": "tdesign-component/lib/src/components/date_time_picker/t_date_time_picker_enums.dart", + "sha256": "ea2d87d4af86d434db925b02fb482c3b0a8d4b4e76160b1f41b1e669759f5d3e" + }, + { + "file": "tdesign-component/lib/src/components/date_time_picker/t_date_time_picker_internal.dart", + "sha256": "3e228df7d76ddcec64172747f25ded8f1cc00cc91250f9a6bcba84d5e46fc143" + }, + { + "file": "tdesign-component/lib/src/components/date_time_picker/t_date_time_picker_labels.part.dart", + "sha256": "174a8c502b904564689b27335ba8b52520f26169d53e6c9e2fc1a75d19e49bdd" + }, + { + "file": "tdesign-component/lib/src/components/date_time_picker/t_date_time_picker_model.dart", + "sha256": "86d94cca286a468120acce851eb04d79b4ec7d5a1116d2abd262c93e82ddd448" + }, + { + "file": "tdesign-component/lib/src/components/date_time_picker/t_date_time_picker_snapshot.part.dart", + "sha256": "919ec53de51add20de5f6a6b3bf939617ef9d9adeb957f5e1c8219f625c5810d" + }, + { + "file": "tdesign-component/lib/src/components/date_time_picker/t_date_time_picker_wheel.dart", + "sha256": "8b6a61c1af65085c9082d044f533c8ca49f14dc80f3ac1bd96749db0411bac3c" + }, + { + "file": "tdesign-component/lib/src/components/date_time_picker/t_date_time_picker.dart", + "sha256": "b17d3fa5ae356ac83de83d34830ab06ae00deb5a93adaca43ca787dd8bef4e32" + }, + { + "file": "tdesign-component/lib/src/components/dialog/t_confirm_dialog.dart", + "sha256": "0f76e26085aaf1efe34935643ec037c1ec658b244a9822f698eec2b5f2e6a280" + }, + { + "file": "tdesign-component/lib/src/components/dialog/t_dialog_theme_data.dart", + "sha256": "e41f855132773e23484cc6d064b25af6b5cb42d2c61bc90532d10cb825900afd" + }, + { + "file": "tdesign-component/lib/src/components/dialog/t_dialog.dart", + "sha256": "33e77a731c06850e037f0c670ebaf0746e81650a031211a5171c56d75ae10912" + }, + { + "file": "tdesign-component/lib/src/components/divider/t_divider_painter.dart", + "sha256": "4ed3c0208e7270a00fe7c068212271425636c2acc61d60937eda5b2774400880" + }, + { + "file": "tdesign-component/lib/src/components/divider/t_divider_theme_data.dart", + "sha256": "a8d1e1d428034bab934870ac885932bebff816b100eaa837bb27c05fe0341536" + }, + { + "file": "tdesign-component/lib/src/components/divider/t_divider.dart", + "sha256": "24773ffcbc8e78be1134bd855b756cf0f86f9dbe4bd237a5c85d360d58ca3c0c" + }, + { + "file": "tdesign-component/lib/src/components/drawer/t_drawer_content.dart", + "sha256": "a63c3936b71c173dae5d10aefa57f8360f39633eef4b13b959dc2b4fd734a0ea" + }, + { + "file": "tdesign-component/lib/src/components/drawer/t_drawer_theme_data.dart", + "sha256": "e9cd44081104f73a2a1edb8bdbb296cd04e00e3883d006ad1b740a28748915fa" + }, + { + "file": "tdesign-component/lib/src/components/drawer/t_drawer.dart", + "sha256": "30452d798c103483cf674cccdc76f87f918518458fcf59d5239bd832ab0448be" + }, + { + "file": "tdesign-component/lib/src/components/dropdown_menu/t_dropdown_item.dart", + "sha256": "6b75f674caea72a6de714c13830ab7a9d21f582579bce55f08c356af585ed653" + }, + { + "file": "tdesign-component/lib/src/components/dropdown_menu/t_dropdown_menu.dart", + "sha256": "da57ca61b23d2326c102a1c2812059289dbfb6b5414719d91d5ff88d73da60c4" + }, + { + "file": "tdesign-component/lib/src/components/dropdown_menu/t_dropdown_theme_data.dart", + "sha256": "64d9c42720a8b7f1d9f23df56253498abc5b6a5d949286f36e9e2ec589213036" + }, + { + "file": "tdesign-component/lib/src/components/empty/t_empty_theme_data.dart", + "sha256": "fb7b77b8036225091a092b1c85f8c6ef8807649d9798de55c30042fa35f0ae32" + }, + { + "file": "tdesign-component/lib/src/components/empty/t_empty.dart", + "sha256": "37e4d30dd5d1616a7408d03f4a5b8bbd543e612a106b5a3a518e96f955795b2a" + }, + { + "file": "tdesign-component/lib/src/components/fab/t_fab_defaults.dart", + "sha256": "ad2a41b5c687cbaf5360224655a8ff02378fed5772bc6ddcca8569ea7085db93" + }, + { + "file": "tdesign-component/lib/src/components/fab/t_fab_drag.dart", + "sha256": "4ccd88fd8e58de4c56bfc8b73ed26c76161a8540cf0af68e2e727109553d6303" + }, + { + "file": "tdesign-component/lib/src/components/fab/t_fab_layout.dart", + "sha256": "059004be0b8d307f08e0f78605e2056f2376e031b85c84acdccc7a4f979f12c1" + }, + { + "file": "tdesign-component/lib/src/components/fab/t_fab_resolve.dart", + "sha256": "a2b2740f66c6a3937ad7e99c995e16264ffaa76b1f96a34c9afb7d7c4ff3793f" + }, + { + "file": "tdesign-component/lib/src/components/fab/t_fab_theme_data.dart", + "sha256": "4538dab2d7107f5a72a600c4deede1f2af9ea228e985c45f1567aac3d71939b7" + }, + { + "file": "tdesign-component/lib/src/components/fab/t_fab.dart", + "sha256": "ee5eea781f4546f478d587b5b8fc927ca5fbe7fe1e88edab0be74c1e94793453" + }, + { + "file": "tdesign-component/lib/src/components/footer/t_footer_theme_data.dart", + "sha256": "ed8f8ab934712b39825287d94c0af1e74012a605e8dba85d1536b2825217dfaf" + }, + { + "file": "tdesign-component/lib/src/components/footer/t_footer.dart", + "sha256": "8a0ad86db0d8c7f8eff1dae09818146847494c750a54620a3d615619646f4279" + }, + { + "file": "tdesign-component/lib/src/components/form/t_field_scope.dart", + "sha256": "a3a8f393c67eb66610d67c376c3931f2e2b074b838613f54378ef21fd32e0964" + }, + { + "file": "tdesign-component/lib/src/components/form/t_form_item_scope.dart", + "sha256": "011a3c6e16bc78e6f2868d73c9efec1d31eaae615eb3b2e9f69717af788e6b19" + }, + { + "file": "tdesign-component/lib/src/components/form/t_form_item.dart", + "sha256": "aa9102ca45fafc7c0e29fdb38f7319d6b11742328bcb88f800c719e037277b86" + }, + { + "file": "tdesign-component/lib/src/components/form/t_form_theme_data.dart", + "sha256": "53c614a3f66ee5e9be051921214f7eb30dca00cc4c0614d7a258f0f91df7d93c" + }, + { + "file": "tdesign-component/lib/src/components/form/t_form.dart", + "sha256": "b6985f3e443c16432919c329b2941bc8a74b56b4f836c007698f25bc65c1f3f4" + }, + { + "file": "tdesign-component/lib/src/components/icon/t_icon.dart", + "sha256": "2d1c9cc13dea4bca2b06a60ac9a768cbb81bca6d92c77399c5f4accf22e9a2f7" + }, + { + "file": "tdesign-component/lib/src/components/image/t_image_theme_data.dart", + "sha256": "1bb351535ae118890a931df5088cc1f0358d94aca0602bcd6ba465483d7be892" + }, + { + "file": "tdesign-component/lib/src/components/image/t_image.dart", + "sha256": "e379fe27d53b7bb9d09e21ec45838c4c47611e70f40ac8acf89a70513e7bf867" + }, + { + "file": "tdesign-component/lib/src/components/image_viewer/t_image_viewer_theme_data.dart", + "sha256": "10107fc4ea83dc9463ec9de61ea7f82d089dd76b3929e93a90695f47905364a9" + }, + { + "file": "tdesign-component/lib/src/components/image_viewer/t_image_viewer.dart", + "sha256": "ce6e8f4bdcf089239cf4759e03b51667d791d48eb37cc344125ac6671f56dedf" + }, + { + "file": "tdesign-component/lib/src/components/indexes/sticky_header/layout_builder_hook.dart", + "sha256": "5118b00b2a59e4d1aa7393b050099cdf2717b152735f30de0c51ae4634bf227e" + }, + { + "file": "tdesign-component/lib/src/components/indexes/sticky_header/sticky_header_layout_builder.dart", + "sha256": "b50798ce6617e087c3dc79388ee9793d77ea6baddbf63eb6e5e5fc6ca78ec111" + }, + { + "file": "tdesign-component/lib/src/components/indexes/sticky_header/sticky_header_render.dart", + "sha256": "babb662b1d13824612aece6caf80eca08a083066d8bbbc158d8d4cdd08b1f36e" + }, + { + "file": "tdesign-component/lib/src/components/indexes/sticky_header/sticky_header_widget.dart", + "sha256": "a20e7dcf603a7644a1cdf70b3fd6741211e5a21fc85a1ea21993792eaa10374f" + }, + { + "file": "tdesign-component/lib/src/components/indexes/t_indexes_anchor.dart", + "sha256": "26934564047b0324fb46dcffc6e657b0c80450a38e384e4d8b0a7a4753071e65" + }, + { + "file": "tdesign-component/lib/src/components/indexes/t_indexes_list.dart", + "sha256": "54bb80bd2e0859d6ada864a104971ef4ee993409c36369d8480a6e30591767ed" + }, + { + "file": "tdesign-component/lib/src/components/indexes/t_indexes_theme_data.dart", + "sha256": "49cfad6d986004960bbe2471d344d7950de5a02d0a743645a51521b5bb976913" + }, + { + "file": "tdesign-component/lib/src/components/indexes/t_indexes.dart", + "sha256": "da76a5a65b25b91c9bba3378f57f3d73a831f90a4d2f19558b6cb00192ec58f7" + }, + { + "file": "tdesign-component/lib/src/components/input/t_input_theme_data.dart", + "sha256": "411d7b685e37fa130ecb698e52f93c2258eae64fdab1443d17af5df4da824eb1" + }, + { + "file": "tdesign-component/lib/src/components/input/t_input_types.dart", + "sha256": "1feaa3b1f38f6a73880523ba2762b7e3c408ba30f22406d960524d1a108b247c" + }, + { + "file": "tdesign-component/lib/src/components/input/t_input.dart", + "sha256": "ee2edc9fbad7c46752ba08e3ba3d98451a61f6c0e71e95db265d11a520cb8d7f" + }, + { + "file": "tdesign-component/lib/src/components/link/t_link_resolve.dart", + "sha256": "19186939ee93f09d6c32e2612889ea1077cd9daf867decd4dde54c344b4aafb5" + }, + { + "file": "tdesign-component/lib/src/components/link/t_link_theme_data.dart", + "sha256": "46cf195252853164cb0e8f598133ccfdac931762a88493f1acb75c30aa04b5e9" + }, + { + "file": "tdesign-component/lib/src/components/link/t_link_types.dart", + "sha256": "ff5f34ab0302cd6ed966585cf63036b076f14e6dde38711f16017b0e75443630" + }, + { + "file": "tdesign-component/lib/src/components/link/t_link.dart", + "sha256": "fdcae77b2ff3845ab9ff37802641e2fd32b3cc185dce30c83c1a1c4a23d2cf70" + }, + { + "file": "tdesign-component/lib/src/components/loading/t_activity_indicator.dart", + "sha256": "58275f4985736435b0198a09c1865a2bb60d0f21468b3e7024004a00a69cf385" + }, + { + "file": "tdesign-component/lib/src/components/loading/t_circle_indicator.dart", + "sha256": "ca0eb207f4a10b369697f8b7de2f2d903349e6f85dcaace87754c50fe5378273" + }, + { + "file": "tdesign-component/lib/src/components/loading/t_loading_controller.dart", + "sha256": "20f537456edcb5b3ae3a20e9e60a1ecf98dfcf166173d519ed873aa37e622a55" + }, + { + "file": "tdesign-component/lib/src/components/loading/t_loading_theme_data.dart", + "sha256": "0217809b3b50b73be0710ab61bc76a1d8703a924d0c744fcc8868e4a99b3beb7" + }, + { + "file": "tdesign-component/lib/src/components/loading/t_loading.dart", + "sha256": "e1062a9a87b051fdcca2a0891e3dbdf300392b12d77765f3296f5e48e6c2d13f" + }, + { + "file": "tdesign-component/lib/src/components/loading/t_point_indicator.dart", + "sha256": "39c95d73d54fa810c95a28929b03d05c2c6f1dcf612cc34087431f1e17a3bd79" + }, + { + "file": "tdesign-component/lib/src/components/message/t_message_theme_data.dart", + "sha256": "178131a6a925602dc5eeb8e28b52b383a4af6da662530abf4e930e4a39dd0ae7" + }, + { + "file": "tdesign-component/lib/src/components/message/t_message_types.dart", + "sha256": "5e6c06b34b8668a4553e58920b92aaaa34739ac0f9dfe91cdd5db0181c28d52a" + }, + { + "file": "tdesign-component/lib/src/components/message/t_message.dart", + "sha256": "3b852b6881fd4a4ef43d11a8ee46a19058f2ba298d8b25ced736f9a4415fa444" + }, + { + "file": "tdesign-component/lib/src/components/navbar/t_nav_bar_theme_data.dart", + "sha256": "21f1796a4b4b5a084a598eb8c1fd50784251a898537618773f35e17014dc7753" + }, + { + "file": "tdesign-component/lib/src/components/navbar/t_nav_bar.dart", + "sha256": "3cb32ff05116935d45e6d0773eb74dbd58ef9f92c5c11ae67261c092665a94fb" + }, + { + "file": "tdesign-component/lib/src/components/notice_bar/t_notice_bar_theme_data.dart", + "sha256": "cd632cddcef45cb94ae6a0a0e23684b3e9a4e4a2669418cb7e2cb94ae10487f0" + }, + { + "file": "tdesign-component/lib/src/components/notice_bar/t_notice_bar_types.dart", + "sha256": "57bfe5b5b3148720a4f5241cea2e317fc30ac42fa4188ef99a064544c9d024a2" + }, + { + "file": "tdesign-component/lib/src/components/notice_bar/t_notice_bar.dart", + "sha256": "09f632ab81d08ef67ccb7a0a40ce54f2c2bc1465fc1b3f7308058d6bc3df9c2e" + }, + { + "file": "tdesign-component/lib/src/components/picker/multi_wheel_layout.dart", + "sha256": "e2c0cf62b68afdbb7712f8775a4bfd6b5e5b1610a21538041afff1a9e1f5465d" + }, + { + "file": "tdesign-component/lib/src/components/picker/picker_defaults.dart", + "sha256": "3e9b857a14233b5f09bcd961dd6dd7ab9dc1f0bfd7adf2f678cb93090fc9c5f9" + }, + { + "file": "tdesign-component/lib/src/components/picker/picker_item.dart", + "sha256": "db51764b25426849122a8731b36f6d89224d23af570456aa1dd8856b256efbb0" + }, + { + "file": "tdesign-component/lib/src/components/picker/t_picker_popup.dart", + "sha256": "12f93ed1a88d51191814939e47e5e0b53da5de7c1d989db5e64f73121c49a38b" + }, + { + "file": "tdesign-component/lib/src/components/picker/t_picker_theme_data.dart", + "sha256": "adf4e483ce3638f6e8350051d07e39c6b5a96a26f23a6f73f39f91caea393ee4" + }, + { + "file": "tdesign-component/lib/src/components/picker/t_picker_types.dart", + "sha256": "c30fe1fbdc492a983fb7405c9a4ce15aa7ccaa833582685001185e6ed8da9cf2" + }, + { + "file": "tdesign-component/lib/src/components/picker/t_picker.dart", + "sha256": "48643ca9c9d698441de14f0db062479b5693fb0925fb956b7d0d3c2949d949c0" + }, + { + "file": "tdesign-component/lib/src/components/picker/wheel_behavior.dart", + "sha256": "9ec31330de3f5c122911e89cedfba31ea926fcc91e4d827c8328327effa55227" + }, + { + "file": "tdesign-component/lib/src/components/picker/wheel_column.dart", + "sha256": "8dbe4b6caed43b8d19cac158cf4120819b899dc349d7a3b199a181078b2272db" + }, + { + "file": "tdesign-component/lib/src/components/popover/t_popover_theme_data.dart", + "sha256": "bd400a9abc392cef5e1b5ae9c5ca4a903a76144f4bb0426eb5d1280c2f1933ba" + }, + { + "file": "tdesign-component/lib/src/components/popover/t_popover_types.dart", + "sha256": "7df3d8b79e7b8e21722da58a24bdbcbbeb4099b25391cc0c9b1f9114faad9f2c" + }, + { + "file": "tdesign-component/lib/src/components/popover/t_popover_widget.dart", + "sha256": "51346815e0fea353c4e162f57b390fa17cf32a2dffea9d98b6e767b1b0e6e5d5" + }, + { + "file": "tdesign-component/lib/src/components/popover/t_popover.dart", + "sha256": "268507f0a2147843cde705f20ab8d6f1d6f40b48e4a9090e8f9629170133fb05" + }, + { + "file": "tdesign-component/lib/src/components/popup/_popup_center_close.dart", + "sha256": "133784217a629e14358a099d67d8a07e7a3ade133767b20fd43bef5d964db620" + }, + { + "file": "tdesign-component/lib/src/components/popup/_popup_header.dart", + "sha256": "21955e2c211e2e45b92dfa561e5b26ed3f37eb860957d94de198cdef329b79a4" + }, + { + "file": "tdesign-component/lib/src/components/popup/_popup_layout.dart", + "sha256": "304894e147421324df5e2daa787e2e7e9d27f0c2f5797fb23a9ca899a1a0d050" + }, + { + "file": "tdesign-component/lib/src/components/popup/_popup_route.dart", + "sha256": "7660fd75e5157ec70c40a41f77fdf59c8d5c052034ac2f0e3a18242845afe90e" + }, + { + "file": "tdesign-component/lib/src/components/popup/_popup_shell.dart", + "sha256": "0eedcd8c228bd91589c784a5b45f5ad58e78c47d7e26639ca434c4f1efec2091" + }, + { + "file": "tdesign-component/lib/src/components/popup/_popup_tracker.dart", + "sha256": "84c7692faae29ba8b67eccb364265c60d06f5758d31cb7b264e0fcb8712e9039" + }, + { + "file": "tdesign-component/lib/src/components/popup/t_popup_handle.dart", + "sha256": "2423e31d4f31839f8729212ddb6b118a08606ef5fa61f4499ca39f7e336c17e0" + }, + { + "file": "tdesign-component/lib/src/components/popup/t_popup_inset.dart", + "sha256": "6db46ece40ddf554b29cf32ea95aed01a363d0665557ef78770909e06be637f3" + }, + { + "file": "tdesign-component/lib/src/components/popup/t_popup_options.dart", + "sha256": "4fb5d1d4499b2933e45f14b7e1312dbc933ded37e519f9406e6867134e164c40" + }, + { + "file": "tdesign-component/lib/src/components/popup/t_popup_theme_data.dart", + "sha256": "bd206e7ff0dde2ecd86d3d69a82c2942bb9ddd320d54929fc43106851964f5db" + }, + { + "file": "tdesign-component/lib/src/components/popup/t_popup_types.dart", + "sha256": "b29f14246b271b5a7c5e26f4cb78ab42b44d7342341ee3b10de43aea5b60de3c" + }, + { + "file": "tdesign-component/lib/src/components/popup/t_popup.dart", + "sha256": "0b428c76d216ab79f6e401574a740b1fa45ef40a93dcb854bcd23fe77be08514" + }, + { + "file": "tdesign-component/lib/src/components/progress/t_progress_circular.dart", + "sha256": "377b6b349fe97743c28d768f62b4838478cc80c841343823d6ca403800299609" + }, + { + "file": "tdesign-component/lib/src/components/progress/t_progress_defaults.dart", + "sha256": "d9e8f51807288f6271fd2fcf7c47e2ce9b48e34ad55c5b9cb75ad24ea030a66f" + }, + { + "file": "tdesign-component/lib/src/components/progress/t_progress_theme_data.dart", + "sha256": "216e7d98d8bf990c9ccd3f260bb4ea459c8243426e0e24766582773cd4c81ffe" + }, + { + "file": "tdesign-component/lib/src/components/progress/t_progress.dart", + "sha256": "b5cc33c69fa0402428e71169285008e033fc6fe9565a4f3af47151ce5d0f75a9" + }, + { + "file": "tdesign-component/lib/src/components/radio/t_radio_theme_data.dart", + "sha256": "8f188b5291acb706434a2bda57095276402377f768c8b70fb2813557f14b991d" + }, + { + "file": "tdesign-component/lib/src/components/radio/t_radio.dart", + "sha256": "bebf8c21a0a8b365bc910ccd54f3a29bf632fbae7096126cde11d248ca8bb052" + }, + { + "file": "tdesign-component/lib/src/components/rate/t_rate_theme_data.dart", + "sha256": "edf4a823b99d493c461bac7b6fe99ffa654c05e02ba89679dc1e15d5db64b612" + }, + { + "file": "tdesign-component/lib/src/components/rate/t_rate.dart", + "sha256": "186a2d4d792c3c1dd6f4f476baff651c640c4309db2c2b0ff08593f517f87de5" + }, + { + "file": "tdesign-component/lib/src/components/refresh/t_pull_down_refresh_controller.dart", + "sha256": "e0e9552f863c46815ee14675e9f26c2277fb246c1e26bd89f3e4143c81f7bbbb" + }, + { + "file": "tdesign-component/lib/src/components/refresh/t_pull_down_refresh_texts.dart", + "sha256": "577ce6b831a12205e2b141471dd7dff8d4c93318bebf2e36e06eb0ca4a631a7f" + }, + { + "file": "tdesign-component/lib/src/components/refresh/t_pull_down_refresh.dart", + "sha256": "007c79896c2a2b768367b9dff972a6d30de3ef0438cf06bfef4c478acec80f74" + }, + { + "file": "tdesign-component/lib/src/components/result/t_result_theme_data.dart", + "sha256": "e1eb3b53cec69c84a25fc14e3c90b00f6ff24eed0a298a7119c3ca3ba31cde8b" + }, + { + "file": "tdesign-component/lib/src/components/result/t_result.dart", + "sha256": "78be893b63731d0be35bdad8b1a625fd338a3c3513fc42fc2930c6a1a07c984a" + }, + { + "file": "tdesign-component/lib/src/components/search/t_search_bar_theme_data.dart", + "sha256": "f25e86a5669cc71bb3feccb9e1bd2dd40cb6323b39994c96b74f5bb39e52abee" + }, + { + "file": "tdesign-component/lib/src/components/search/t_search_bar.dart", + "sha256": "82ef124d6c94419e05cbd54aeb3f977a2320c7cecbf30554e236e4da0480c031" + }, + { + "file": "tdesign-component/lib/src/components/sidebar/t_sidebar_item.dart", + "sha256": "ec4d1e773e677ba7307ac3d7f67db98bb6cc18684cce23df1fed1d46dd8823b1" + }, + { + "file": "tdesign-component/lib/src/components/sidebar/t_sidebar_theme_data.dart", + "sha256": "ba41313c54134ed0e5b8e58b7c5e3423fe54ec4649aa19f8c016de00c860ec21" + }, + { + "file": "tdesign-component/lib/src/components/sidebar/t_sidebar.dart", + "sha256": "216f92edf3a94865d7c5975b8e54a7626455999de74ee151778b49a681a68a10" + }, + { + "file": "tdesign-component/lib/src/components/sidebar/t_wrap_sidebar_item.dart", + "sha256": "c8afe24c65707b3c1acb79a0c1d91f08d0764f59f203b443ebc1bf8fe6fd11af" + }, + { + "file": "tdesign-component/lib/src/components/skeleton/t_skeleton_layout.dart", + "sha256": "cf2b697b3ad300bbc580ee1d05840504ec32668d083795b598cc488ee7601554" + }, + { + "file": "tdesign-component/lib/src/components/skeleton/t_skeleton_theme_data.dart", + "sha256": "da5a0f765aed1fb34ee30cf61513cc950c5a6391eb428b6e0c4da815d11d312e" + }, + { + "file": "tdesign-component/lib/src/components/skeleton/t_skeleton.dart", + "sha256": "263d2cfb9d2d7008acd59f161e84b0facdf5670eeb4458853e0cefb31089f377" + }, + { + "file": "tdesign-component/lib/src/components/slider/t_slider_theme.dart", + "sha256": "f994388adfaff57609d214478d93b7198194025b350f921a4bc81d9850678c67" + }, + { + "file": "tdesign-component/lib/src/components/slider/t_slider.dart", + "sha256": "1e5ccc7e1ff64e1ad2465a225c0e1a79aa5f55b60d0e577e0bc7178af1efd163" + }, + { + "file": "tdesign-component/lib/src/components/stepper/t_stepper_defaults.dart", + "sha256": "a538967b6abba1080899c70cddc8f1cebb5fe3f6b4788c2de6b1ee3d3cb99558" + }, + { + "file": "tdesign-component/lib/src/components/stepper/t_stepper_theme_data.dart", + "sha256": "abce20572ccf8e2828beeba558e6ba366820ccfe210e3926f63c328216b9a66e" + }, + { + "file": "tdesign-component/lib/src/components/stepper/t_stepper_theme_interpolation.dart", + "sha256": "1decd5487909342c3baacb1e98efc46382cf9e8a7277948c12d4256f7874bf62" + }, + { + "file": "tdesign-component/lib/src/components/stepper/t_stepper_types.dart", + "sha256": "feba5fbfe83c7b283da1fdf332156d086bd0f60c834453fbd54fe9bed85a79fb" + }, + { + "file": "tdesign-component/lib/src/components/stepper/t_stepper.dart", + "sha256": "e0582b5f1d288333c33ac5f9e2bea28715096091a188e9d41c0277e282a67083" + }, + { + "file": "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart", + "sha256": "80c0bfccb2b2f7bd2b96fee0b639eb124441fd5d2d1e0a3bb461d146c9e505a6" + }, + { + "file": "tdesign-component/lib/src/components/steps/t_steps_horizontal.dart", + "sha256": "e1ba9a44db6b8772adc6e0b0d1a210242873353834125cded007e4e2fac716db" + }, + { + "file": "tdesign-component/lib/src/components/steps/t_steps_mode.dart", + "sha256": "f96975092611043583629bc5d790fd9f3e5d13ff169aac1a216c2925a961810f" + }, + { + "file": "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart", + "sha256": "d101ec7d9ccf3ac0e557aa60b5e4fa32bf68f8594d2862a79e90e9332c0fc3c0" + }, + { + "file": "tdesign-component/lib/src/components/steps/t_steps_vertical.dart", + "sha256": "298c164b53a66b4bcc27d15b380ade52fb44bc2f4830628059cd83c8a6e7cb1c" + }, + { + "file": "tdesign-component/lib/src/components/steps/t_steps.dart", + "sha256": "9d638edac67122bdee3937eadc92fc8d93087c3bf7689b22f243f38ab76e8aac" + }, + { + "file": "tdesign-component/lib/src/components/swipe_cell/t_swipe_cell_action.dart", + "sha256": "00bd8483f07454d1c6fbebd2b426c148ff6e40c9ea81504e6410d14f45f0eb01" + }, + { + "file": "tdesign-component/lib/src/components/swipe_cell/t_swipe_cell_inherited.dart", + "sha256": "42b7417a77fa75282c05c7af10990db9981e87503abc91b84b68603b4ff9f3b1" + }, + { + "file": "tdesign-component/lib/src/components/swipe_cell/t_swipe_cell_panel.dart", + "sha256": "2e60fb03f8e4ec818bdbabd98e9ec5f0af95715ac784381bb1a7840620600622" + }, + { + "file": "tdesign-component/lib/src/components/swipe_cell/t_swipe_cell_theme_data.dart", + "sha256": "e37a83966081fbe016958c66aaa6bca266e5b03b401d7e0d54444e723ffaab49" + }, + { + "file": "tdesign-component/lib/src/components/swipe_cell/t_swipe_cell.dart", + "sha256": "151b03380c9e7eba1074cd984e0c173c7e4b8cf371fcec98155ef16c39ab7cff" + }, + { + "file": "tdesign-component/lib/src/components/swiper/t_swiper_theme_data.dart", + "sha256": "16d92386a189a411d7a380ac5108b7f93d6fc42110260aaf47100a3e10f88f89" + }, + { + "file": "tdesign-component/lib/src/components/swiper/t_swiper_types.dart", + "sha256": "a0658544128a021628cde6bdee28e9e9f93d791c039f6400b0b04f09294be5e4" + }, + { + "file": "tdesign-component/lib/src/components/swiper/t_swiper.dart", + "sha256": "798d7713700ecaa94b448ebdbf4943807062b4579d327a91cd3ce594e6be1abc" + }, + { + "file": "tdesign-component/lib/src/components/switch/t_cupertino_switch.dart", + "sha256": "80001f11e88b8c8131f754f023588d76973158a40d3bcaca4cada48c3e87f177" + }, + { + "file": "tdesign-component/lib/src/components/switch/t_switch_resolve.dart", + "sha256": "75f4bc2353098292fee80cf7959ddd118cd0c806008c1152fb3b4cdd3d6bd2c1" + }, + { + "file": "tdesign-component/lib/src/components/switch/t_switch_theme_data.dart", + "sha256": "cfab457b9930daabcfc71e332ff0d8791ca4e19c9b9133e73171aa52f5f64fc1" + }, + { + "file": "tdesign-component/lib/src/components/switch/t_switch_types.dart", + "sha256": "48776a87e0bb52ad72f53ed6ae04474e8a1ddc98f23e71495feb0751fb80418d" + }, + { + "file": "tdesign-component/lib/src/components/switch/t_switch.dart", + "sha256": "ca46c242e3a309d30c688507805f34084d52395847f6ed5a400995fca00493cc" + }, + { + "file": "tdesign-component/lib/src/components/tabbar/t_tab_bar_theme_data.dart", + "sha256": "ce398447092f2010ce32585969072449f1d20127fbf98cbbb2bb640f10774087" + }, + { + "file": "tdesign-component/lib/src/components/tabbar/t_tab_bar.dart", + "sha256": "864dfdc60346c9d518553361258851b07e943d167d9f5d20ea5cd67c0364d1c3" + }, + { + "file": "tdesign-component/lib/src/components/table/t_table_col.dart", + "sha256": "2d4a73d7c21f42e432cf3e8c22ee2ab2d861ef7458ab6ad31605a23217c70ead" + }, + { + "file": "tdesign-component/lib/src/components/table/t_table_theme_data.dart", + "sha256": "1a7b081ca34ccbd28ed68375292bf2fd735d069c17ef52bc0fb27562d02628d6" + }, + { + "file": "tdesign-component/lib/src/components/table/t_table_types.dart", + "sha256": "421e8c13cc6ec6ef27204ac17e3ccd7414648267e68fbb5c2c18ee40bf73b4ee" + }, + { + "file": "tdesign-component/lib/src/components/table/t_table.dart", + "sha256": "c5589ce8cc0198af1be1a149c2711b28e0bbc2334e3fc4b776e9f0636a1589a7" + }, + { + "file": "tdesign-component/lib/src/components/tabs/t_horizontal_tab_bar.dart", + "sha256": "4bc61decb69e43b94a5b58cb434273ff8493947389d33c878d629e994f7b1c6a" + }, + { + "file": "tdesign-component/lib/src/components/tabs/t_tab_bar_theme_data.dart", + "sha256": "b8834b984aa9c8be75882eb3518ecd0fb44cd60528bd9a5d42bd945cda55ba5c" + }, + { + "file": "tdesign-component/lib/src/components/tabs/t_tab_bar_view.dart", + "sha256": "262d681558421d9693a71a589b3fa96bf32cb419558a8ea77c8000ff5bcec6ff" + }, + { + "file": "tdesign-component/lib/src/components/tabs/t_tab_bar.dart", + "sha256": "ceea2da6332b886d416a5d664e1dd8fd088999a46d3588aa7098d2a676b822a9" + }, + { + "file": "tdesign-component/lib/src/components/tabs/t_tab.dart", + "sha256": "73eaf5b11b8a48c7ab832ebab4fd73566a017a6d9f367ddcf1e99a0ed301a2ff" + }, + { + "file": "tdesign-component/lib/src/components/tag/t_select_tag.dart", + "sha256": "5b8b82f610345dc9b6ec021b8de97d6cf69560795b3edd0619cf0e82bf9cafe4" + }, + { + "file": "tdesign-component/lib/src/components/tag/t_tag_theme_data.dart", + "sha256": "992cfb7c8c78f0c0d05c954f707a6f982bdbdc1ed2b5ecaebf315810798616bf" + }, + { + "file": "tdesign-component/lib/src/components/tag/t_tag_types.dart", + "sha256": "ce68263caea41285873253427d0158e1ce71a885e80645c5af1156f7a0a5e225" + }, + { + "file": "tdesign-component/lib/src/components/tag/t_tag.dart", + "sha256": "2d7bc17b3e2d56da4b4fdcf89080138c84842c5f1e6cc4759d674555441a12d5" + }, + { + "file": "tdesign-component/lib/src/components/text/t_font_loader.dart", + "sha256": "fca1fe8128238820b8ac4529e798a64065e5ee280523bdf3b91cfed393c4e845" + }, + { + "file": "tdesign-component/lib/src/components/text/t_text_resolve.dart", + "sha256": "ec12723dfd4fdc6f4199d6a53e1819bc51b3c383b3f0caefaef99d2890721f5a" + }, + { + "file": "tdesign-component/lib/src/components/text/t_text_style_scope.dart", + "sha256": "ba34f4411a6a3add8e7ad5b59e00b79ba38893deef34e360f162fefc7e74aadb" + }, + { + "file": "tdesign-component/lib/src/components/text/t_text_styled.dart", + "sha256": "48dd1012f89e0fcd9d26242f3401f9db00debc28693c406261a1a150fe5eeb95" + }, + { + "file": "tdesign-component/lib/src/components/text/t_text_theme_data.dart", + "sha256": "cd0a068507dbe383c6d1bfe8e45e079d75d846e3e840c81ba3e6cead4606bdb1" + }, + { + "file": "tdesign-component/lib/src/components/text/t_text.dart", + "sha256": "24d31259ae53929347f8e567fc9a255815844f5805b19daeea38124af1d748c9" + }, + { + "file": "tdesign-component/lib/src/components/textarea/t_textarea.dart", + "sha256": "71514bca99bb519ac717a06251cc49d81c9194e2301b00e86817703f3b5a479d" + }, + { + "file": "tdesign-component/lib/src/components/time_counter/t_time_counter_controller.dart", + "sha256": "61419d95bb649590492c3dc3d592dcef60c399af0cc7bb03b0c2d7fc26c11bb8" + }, + { + "file": "tdesign-component/lib/src/components/time_counter/t_time_counter_style.dart", + "sha256": "96fc838fe5a5e176fb391145239284f95c547e67178d3a796756a6473ded9edd" + }, + { + "file": "tdesign-component/lib/src/components/time_counter/t_time_counter_theme_data.dart", + "sha256": "622a4eea07f1a462182173136b9b2be504023b2db04ac8375ea64340c7501922" + }, + { + "file": "tdesign-component/lib/src/components/time_counter/t_time_counter_types.dart", + "sha256": "9bfc7e5e372081380a80a14c20d3ab8d11439b838bdabd23c5e30aad39b34583" + }, + { + "file": "tdesign-component/lib/src/components/time_counter/t_time_counter.dart", + "sha256": "304cbe0b7c084ff44f02a402067fd4f5460fc678f816656a9109ee6c4ac8eda4" + }, + { + "file": "tdesign-component/lib/src/components/toast/t_toast_theme_data.dart", + "sha256": "d90a632873c2323cd1b24b8d65878daab42496fc6de5627b70c1f87e721a6431" + }, + { + "file": "tdesign-component/lib/src/components/toast/t_toast.dart", + "sha256": "a417162331b11a405f4abaef43282526c54651c49302cf8e97e743bed08a7ac2" + }, + { + "file": "tdesign-component/lib/src/components/tree/t_tree_select_theme_data.dart", + "sha256": "6e64b7c2b77449613c5b351e807a3eb238ca5cf1227c01b25d4e428abec22ed6" + }, + { + "file": "tdesign-component/lib/src/components/tree/t_tree_select.dart", + "sha256": "3e2b11ff4e13b761f3c86b7e1028f936fe35005c7df77e7f8ea5c6119bf9797b" + }, + { + "file": "tdesign-component/lib/src/components/upload/t_upload_theme_data.dart", + "sha256": "6e518ccd0f1314011a51358c417f0a514b294174619fee7d4210e2007cf805f0" + }, + { + "file": "tdesign-component/lib/src/components/upload/t_upload_types.dart", + "sha256": "82aeb54e6193b17f7856b5fc02127ac52ecacb90eeb0fe5b99497f3960ec993a" + }, + { + "file": "tdesign-component/lib/src/components/upload/t_upload.dart", + "sha256": "83d1ad81afd31fb25c75de51725b4f7d31e179f2a6debc794f660771bf0c0b12" + }, + { + "file": "tdesign-component/lib/src/theme/basic.dart", + "sha256": "82176cb7a416e2882fe22b4c9f3e011607a916345687986231759cb79f049250" + }, + { + "file": "tdesign-component/lib/src/theme/resource_delegate.dart", + "sha256": "1ebd7bf58528f2a815efbc7adee8b207e4cc8f1a8af39e1c3790bec5933d7c78" + }, + { + "file": "tdesign-component/lib/src/theme/t_colors.dart", + "sha256": "80aa53da0e06a60e845aac3eb00049cb7035c99741b76e0551efbb9438aadb94" + }, + { + "file": "tdesign-component/lib/src/theme/t_component_theme_data.dart", + "sha256": "4f3252da9acdd54dc181716db277d2aeee409b3efea3d188d286029edae9125d" + }, + { + "file": "tdesign-component/lib/src/theme/t_default_theme.dart", + "sha256": "743894c68e5877861c11e517d5836efe0253b25d3cc48bb2389fe9e126d8be36" + }, + { + "file": "tdesign-component/lib/src/theme/t_font_family.dart", + "sha256": "1863ddb6674e70d23cd60247b0da03c5920da3cc0185c913c8b536d47edfef6b" + }, + { + "file": "tdesign-component/lib/src/theme/t_fonts.dart", + "sha256": "4fff418e487039865e79e5481733dbf4f88db8697b783a69709389d79aec305f" + }, + { + "file": "tdesign-component/lib/src/theme/t_internal_material.dart", + "sha256": "a6d6a6e1199e9e2ac145a85c38cace35326e2d7f5e6435f390011e85774bc530" + }, + { + "file": "tdesign-component/lib/src/theme/t_radius.dart", + "sha256": "284cf6ff6a57b4f5b56d542f0f254ef4ee390307eb5a57a50fb6e23f4b7f4476" + }, + { + "file": "tdesign-component/lib/src/theme/t_shadows.dart", + "sha256": "1b7486aa7a6f991b5f263f94af52d59a5814c87becccb2e24d76b8b7cf49a9f0" + }, + { + "file": "tdesign-component/lib/src/theme/t_spacers.dart", + "sha256": "e133289a8df2d7f0fb7e35737152eecaa5c00b6432b207ee709083f4cd8caa31" + }, + { + "file": "tdesign-component/lib/src/theme/t_theme.dart", + "sha256": "5a5e30e228609a97cf5a0a8132a8149e02c49ac41b590fad767f4d9c02cc41c9" + }, + { + "file": "tdesign-component/lib/src/util/auto_size.dart", + "sha256": "92e8d364c9c679faa4b8c41b065e7fb30980a45a50009d49655a43ad12d250b9" + }, + { + "file": "tdesign-component/lib/src/util/context_extension.dart", + "sha256": "5eb9eedbb49821651af98f582b056a6f18cd772626a78d8f0bba1f3b3662d65b" + }, + { + "file": "tdesign-component/lib/src/util/iterable_ext.dart", + "sha256": "395f2dc4615f531604845c25faf1527f00ebb7081372ca2a629b18001a0149d3" + }, + { + "file": "tdesign-component/lib/src/util/list_ext.dart", + "sha256": "9ae31f662e8c26195ee8821763e126ba05c90372b500be90c02d8dbac78fc5fb" + }, + { + "file": "tdesign-component/lib/src/util/log.dart", + "sha256": "9dfe1251793a0b1825ac0e8490d0471dc3dcec272a631f865d7b2b68a4ceaca8" + }, + { + "file": "tdesign-component/lib/src/util/map_ext.dart", + "sha256": "7f4971c1cc5ee9fa0fd94c1a0d414665c556866104d9c4d6b2c679168cfaf966" + }, + { + "file": "tdesign-component/lib/src/util/platform_util.dart", + "sha256": "9203fe2d1a9ed9fed442cd7645089acfda3238e89b1ffd874b203525b92f3b1d" + }, + { + "file": "tdesign-component/lib/src/util/string_util.dart", + "sha256": "332a04e28162425c7b3aa59cc1a733457ff0e47bfc80034945e18c454047e2ce" + }, + { + "file": "tdesign-component/lib/src/util/t_toolbar_pressable.dart", + "sha256": "53b4d7fd26f6dc491b4db7684ffeac9720c42ff5bf02c361f9e9abecd8cda081" + }, + { + "file": "tdesign-component/lib/src/util/throttle.dart", + "sha256": "24118fa46782ba8c206dc1c98c12fdd58c9544a7c296503b4fa276f03edf7c05" + }, + { + "file": "tdesign-component/lib/src/util/version_util.dart", + "sha256": "6d12fa479de56b37322583aa74c4c1cb37503a40ef6dddfa9d3a5bbd51dd4c68" + }, + { + "file": "tdesign-component/lib/tdesign_flutter.dart", + "sha256": "20d895fbcb470e4a0d093319fef668fb46eb98e8acc186758d4ffeed00754cfa" + }, + { + "file": "tdesign-component/assets/tdesign/TCloudNumberVF.ttf", + "sha256": "f712f74bdb5343c12d6801b349fd5a1b07c54b9ab31023098803b98dc2ac6063" + }, + { + "file": "tdesign-component/test/components/button/t_button_test.dart", + "sha256": "3e8709b68de351fc65e3fb4dbe473348f02623a170910855639e581376659945" + }, + { + "file": "tdesign-component/test/components/button/t_button_theme_priority_test.dart", + "sha256": "3c5bb3437dbbfbbebce899d38a5b2385d4c327f64679ecd50991aadb79e13ee9" + }, + { + "file": "tdesign-component/test/components/button/t_button_theme_test.dart", + "sha256": "a0b9d187d0c927c8f72665c334e4682a2550c20c92c1ee06c5b9d5e9262f7bf9" + }, + { + "file": "tdesign-component/test/components/button/t_button_widget_test.dart", + "sha256": "14cc23c989161d9a14eab19276e77259a79e87ce812c5e17bde6213d8a98a252" + }, + { + "file": "tdesign-component/test/components/switch/t_switch_test.dart", + "sha256": "754d70d6b933b1069928802a85aaff30f30ded042bf92e417477175ae154fb26" + }, + { + "file": "tdesign-component/test/components/switch/t_switch_typography_test.dart", + "sha256": "88a16e42c497cf02de643b3a82b308033973c9264108ea6b80f99fc6aea26823" + }, + { + "file": "tdesign-component/test/components/switch/t_cupertino_switch_test.dart", + "sha256": "1af92430111f1dff0d062064e718bf4ad1807a8a412880bf146b099987fb2844" + }, + { + "file": "tdesign-component/test/components/input/t_input_test.dart", + "sha256": "1cc393aebc08d96fbdffa8598a84811f84e1f78546242a4eee3ab0b758f4131f" + }, + { + "file": "tdesign-component/test/components/input/t_input_theme_test.dart", + "sha256": "6b6ea3128760632295eca295c519f024bd7d0e771149ac5db5510d5d4810a429" + }, + { + "file": "tdesign-component/test/components/link/t_link_resolve_test.dart", + "sha256": "518a08ef4051acddacc1debe200af8569d58b747a42d41728775f3baf65ab401" + }, + { + "file": "tdesign-component/test/components/link/t_link_test.dart", + "sha256": "5f0a867c04df0d6065d9f08812affdc29debb79ced5bd0f8302dba4e2a173371" + }, + { + "file": "tdesign-component/test/components/link/t_link_theme_test.dart", + "sha256": "2914f838c499bf4abd1decc479a1405bffc282b5219b0723de91f1b80db4030d" + }, + { + "file": "tdesign-component/test/components/link/t_link_widget_test.dart", + "sha256": "5dd427e0cf57c73af81674b406e4b0490f7791875eba75220c694af876d38202" + }, + { + "file": "tdesign-component/test/components/avatar/t_avatar_test.dart", + "sha256": "45bf19d2832ef71de5b92a298c5f2e4b1e2985fe6cc145598ecc4916a345fa02" + }, + { + "file": "tdesign-component/test/components/empty/t_empty_test.dart", + "sha256": "dbf1a324bf48e241bb0710de08c2601ae22bbe933f2eddc2a02f1b8fac9b64f1" + }, + { + "file": "tdesign-component/test/components/progress/t_progress_test.dart", + "sha256": "61e834c2320e54faf21b36215be791823d8113a974e5a2ab5876491e65b5d0b3" + }, + { + "file": "tdesign-component/test/support/token_consumption_evidence.dart", + "sha256": "02bc17e5a852df363a7791e2eb05295a54ceca63eef414c14035dede753ba815" + }, + { + "file": "tdesign-component/tool/component_test_manifest.dart", + "sha256": "0d1eba025f0f62486d9b681d66a11b04dd2993bbb40119011d868d608faaceeb" + }, + { + "file": "tdesign-component/pubspec.yaml", + "sha256": "bed96a58589070205525cdc9a026d5d55eb04962f7016958c34ea7f765554202" + } + ], + "rows": [ + { + "name": "actionSheetBorderColor", + "component": "action-sheet", + "previousDecision": "pending", + "frozenTarget": { + "light": "#e7e7e7", + "dark": "#383838", + "expressions": [ + "@component-stroke" + ], + "source": [ + "packages/components/action-sheet/action-sheet.less:6" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/action-sheet/action-sheet.less", + "selector": ".t-action-sheet__description::after", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-action-sheet-border-color, var(--td-component-stroke, var(--td-gray-color-3, #e7e7e7)))" + }, + { + "file": "packages/components/action-sheet/action-sheet.less", + "selector": ".t-action-sheet__list-item:not(:last-child)::after", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-action-sheet-border-color, var(--td-component-stroke, var(--td-gray-color-3, #e7e7e7)))" + }, + { + "file": "packages/components/action-sheet/action-sheet.less", + "selector": ".t-action-sheet__gap-grid", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-action-sheet-border-color, var(--td-component-stroke, var(--td-gray-color-3, #e7e7e7)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "componentStroke": [ + "tdesign-component/lib/src/components/action_sheet/t_action_sheet_list.dart:168", + "tdesign-component/lib/src/components/action_sheet/t_action_sheet_list.dart:225", + "tdesign-component/lib/src/components/action_sheet/t_action_sheet_item_widget.dart:183" + ] + }, + "approvedGlobalException": "引用已批准修正的浅色 grayColor3", + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "actionSheetBorderRadius", + "component": "action-sheet", + "previousDecision": "pending", + "frozenTarget": { + "light": "12dp", + "dark": "12dp", + "expressions": [ + "@radius-extraLarge" + ], + "source": [ + "packages/components/action-sheet/action-sheet.less:9" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/action-sheet/action-sheet.less", + "selector": ".t-action-sheet__content", + "property": "border-top-left-radius", + "kind": "render-property", + "value": "var(--td-action-sheet-border-radius, var(--td-radius-extraLarge, 24rpx))" + }, + { + "file": "packages/components/action-sheet/action-sheet.less", + "selector": ".t-action-sheet__content", + "property": "border-top-right-radius", + "kind": "render-property", + "value": "var(--td-action-sheet-border-radius, var(--td-radius-extraLarge, 24rpx))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "radiusExtraLarge": [ + "tdesign-component/lib/src/components/action_sheet/t_action_sheet_list.dart:132", + "tdesign-component/lib/src/components/action_sheet/t_action_sheet_grid.dart:117", + "tdesign-component/lib/src/components/action_sheet/t_action_sheet_grid.dart:408" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "actionSheetCancelColor", + "component": "action-sheet", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.9)", + "dark": "rgba(255, 255, 255, 90%)", + "expressions": [ + "@text-color-primary" + ], + "source": [ + "packages/components/action-sheet/action-sheet.less:12" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/action-sheet/action-sheet.less", + "selector": ".t-action-sheet__cancel", + "property": "color", + "kind": "render-property", + "value": "var(--td-action-sheet-cancel-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorPrimary": [ + "tdesign-component/lib/src/components/action_sheet/t_action_sheet_list.dart:245", + "tdesign-component/lib/src/components/action_sheet/t_action_sheet_list.dart:297", + "tdesign-component/lib/src/components/action_sheet/t_action_sheet_item_widget.dart:46", + "tdesign-component/lib/src/components/action_sheet/t_action_sheet_item_widget.dart:195", + "tdesign-component/lib/src/components/action_sheet/t_action_sheet_item_widget.dart:210", + "tdesign-component/lib/src/components/action_sheet/t_action_sheet_item_widget.dart:241" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "actionSheetColor", + "component": "action-sheet", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.9)", + "dark": "rgba(255, 255, 255, 90%)", + "expressions": [ + "@text-color-primary" + ], + "source": [ + "packages/components/action-sheet/action-sheet.less:8" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/action-sheet/action-sheet.less", + "selector": ".t-action-sheet__content", + "property": "color", + "kind": "render-property", + "value": "var(--td-action-sheet-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorPrimary": [ + "tdesign-component/lib/src/components/action_sheet/t_action_sheet_list.dart:245", + "tdesign-component/lib/src/components/action_sheet/t_action_sheet_list.dart:297", + "tdesign-component/lib/src/components/action_sheet/t_action_sheet_item_widget.dart:46", + "tdesign-component/lib/src/components/action_sheet/t_action_sheet_item_widget.dart:195", + "tdesign-component/lib/src/components/action_sheet/t_action_sheet_item_widget.dart:210", + "tdesign-component/lib/src/components/action_sheet/t_action_sheet_item_widget.dart:241" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "actionSheetDescriptionColor", + "component": "action-sheet", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.4)", + "dark": "rgba(255, 255, 255, 35%)", + "expressions": [ + "@text-color-placeholder" + ], + "source": [ + "packages/components/action-sheet/action-sheet.less:11" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/action-sheet/action-sheet.less", + "selector": ".t-action-sheet__description", + "property": "color", + "kind": "render-property", + "value": "var(--td-action-sheet-description-color, var(--td-text-color-placeholder, var(--td-font-gray-3, rgba(0, 0, 0, 0.4))))" + }, + { + "file": "packages/components/action-sheet/action-sheet.less", + "selector": ".t-action-sheet__list-item-desc", + "property": "color", + "kind": "render-property", + "value": "var(--td-action-sheet-description-color, var(--td-text-color-placeholder, var(--td-font-gray-3, rgba(0, 0, 0, 0.4))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorPlaceholder": [ + "tdesign-component/lib/src/components/action_sheet/t_action_sheet_list.dart:83", + "tdesign-component/lib/src/components/action_sheet/t_action_sheet_list.dart:119", + "tdesign-component/lib/src/components/action_sheet/t_action_sheet_list.dart:186", + "tdesign-component/lib/src/components/action_sheet/t_action_sheet_list.dart:274", + "tdesign-component/lib/src/components/action_sheet/t_action_sheet_grid.dart:84", + "tdesign-component/lib/src/components/action_sheet/t_action_sheet_grid.dart:176", + "tdesign-component/lib/src/components/action_sheet/t_action_sheet_grid.dart:391", + "tdesign-component/lib/src/components/action_sheet/t_action_sheet_grid.dart:469" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/action_sheet/t_action_sheet_list_test.dart:361", + "text": "expect(panelDescription.style?.color, token.textColorPlaceholder);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/action_sheet/t_action_sheet_list_test.dart:362", + "text": "expect(itemDescription.style?.color, token.textColorPlaceholder);", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "actionSheetDescriptionFont", + "component": "action-sheet", + "previousDecision": "pending", + "frozenTarget": { + "light": "14dp / 22dp PingFang SC, Microsoft YaHei, Arial Regular", + "dark": "14dp / 22dp PingFang SC, Microsoft YaHei, Arial Regular", + "expressions": [ + "@font-body-medium" + ], + "source": [ + "packages/components/action-sheet/action-sheet.less:10" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/action-sheet/action-sheet.less", + "selector": ".t-action-sheet__description", + "property": "font", + "kind": "render-property", + "value": "var(--td-action-sheet-description-font, var(--td-font-body-medium, 28rpx / 44rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "fontBodyMedium": [ + "tdesign-component/lib/src/components/action_sheet/t_action_sheet_list.dart:82", + "tdesign-component/lib/src/components/action_sheet/t_action_sheet_list.dart:118", + "tdesign-component/lib/src/components/action_sheet/t_action_sheet_list.dart:180", + "tdesign-component/lib/src/components/action_sheet/t_action_sheet_list.dart:270", + "tdesign-component/lib/src/components/action_sheet/t_action_sheet_grid.dart:83", + "tdesign-component/lib/src/components/action_sheet/t_action_sheet_grid.dart:174", + "tdesign-component/lib/src/components/action_sheet/t_action_sheet_grid.dart:390", + "tdesign-component/lib/src/components/action_sheet/t_action_sheet_grid.dart:468" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "actionSheetDisabledColor", + "component": "action-sheet", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.26)", + "dark": "rgba(255, 255, 255, 22%)", + "expressions": [ + "@text-color-disabled" + ], + "source": [ + "packages/components/action-sheet/action-sheet.less:5" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/action-sheet/action-sheet.less", + "selector": ".t-action-sheet__list-item--disabled", + "property": "color", + "kind": "render-property", + "value": "var(--td-action-sheet-disabled-color, var(--td-text-color-disabled, var(--td-font-gray-4, rgba(0, 0, 0, 0.26))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorDisabled": [ + "tdesign-component/lib/src/components/action_sheet/t_action_sheet_list.dart:243", + "tdesign-component/lib/src/components/action_sheet/t_action_sheet_list.dart:296", + "tdesign-component/lib/src/components/action_sheet/t_action_sheet_grid.dart:321", + "tdesign-component/lib/src/components/action_sheet/t_action_sheet_item_widget.dart:45" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/action_sheet/t_action_sheet_grid_test.dart:240", + "text": "expect(dotColors, contains(token.textColorDisabled));", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "actionSheetDotActiveColor", + "component": "action-sheet", + "previousDecision": "pending", + "frozenTarget": { + "light": "#0052d9", + "dark": "#4582e6", + "expressions": [ + "@brand-color" + ], + "source": [ + "packages/components/action-sheet/action-sheet.less:15" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/action-sheet/action-sheet.less", + "selector": ".t-action-sheet__dots-item.t-is-active", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-action-sheet-dot-active-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "brandColor": [ + "tdesign-component/lib/src/components/action_sheet/t_action_sheet_grid.dart:320" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/action_sheet/t_action_sheet_grid_test.dart:239", + "text": "expect(dotColors, contains(token.brandColor));", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "actionSheetDotColor", + "component": "action-sheet", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.26)", + "dark": "rgba(255, 255, 255, 22%)", + "expressions": [ + "@text-color-disabled" + ], + "source": [ + "packages/components/action-sheet/action-sheet.less:14" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/action-sheet/action-sheet.less", + "selector": ".t-action-sheet__dots-item", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-action-sheet-dot-color, var(--td-text-color-disabled, var(--td-font-gray-4, rgba(0, 0, 0, 0.26))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorDisabled": [ + "tdesign-component/lib/src/components/action_sheet/t_action_sheet_list.dart:243", + "tdesign-component/lib/src/components/action_sheet/t_action_sheet_list.dart:296", + "tdesign-component/lib/src/components/action_sheet/t_action_sheet_grid.dart:321", + "tdesign-component/lib/src/components/action_sheet/t_action_sheet_item_widget.dart:45" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/action_sheet/t_action_sheet_grid_test.dart:240", + "text": "expect(dotColors, contains(token.textColorDisabled));", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "actionSheetDotSize", + "component": "action-sheet", + "previousDecision": "pending", + "frozenTarget": { + "light": "8dp", + "dark": "8dp", + "expressions": [ + "16rpx" + ], + "source": [ + "packages/components/action-sheet/action-sheet.less:13" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/action-sheet/action-sheet.less", + "selector": ".t-action-sheet__dots-item", + "property": "width", + "kind": "render-property", + "value": "var(--td-action-sheet-dot-size, 16rpx)" + }, + { + "file": "packages/components/action-sheet/action-sheet.less", + "selector": ".t-action-sheet__dots-item", + "property": "height", + "kind": "render-property", + "value": "var(--td-action-sheet-dot-size, 16rpx)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "actionSheetGapColor", + "component": "action-sheet", + "previousDecision": "pending", + "frozenTarget": { + "light": "#f3f3f3", + "dark": "#181818", + "expressions": [ + "@bg-color-page" + ], + "source": [ + "packages/components/action-sheet/action-sheet.less:7" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/action-sheet/action-sheet.less", + "selector": ".t-action-sheet__gap-list", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-action-sheet-gap-color, var(--td-bg-color-page, var(--td-gray-color-1, #f3f3f3)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "bgColorPage": [ + "tdesign-component/lib/src/components/action_sheet/t_action_sheet_item_widget.dart:170" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/action_sheet/t_action_sheet_item_widget_test.dart:269", + "text": "expect(divider.color, TThemeData.defaultData().bgColorPage);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/action_sheet/t_action_sheet_item_widget_test.dart:293", + "text": "expect(divider.color, TThemeData.defaultData().bgColorPage);", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "avatarBgColor", + "component": "avatar", + "previousDecision": "pending", + "frozenTarget": { + "light": "#d9e1ff", + "dark": "#173463", + "expressions": [ + "@brand-color-light-active" + ], + "source": [ + "packages/components/avatar/avatar.less:3" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/avatar/avatar.less", + "selector": ".t-avatar", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-avatar-bg-color, var(--td-brand-color-light-active, var(--td-primary-color-2, #d9e1ff)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "brandColorLightActive": [ + "tdesign-component/lib/src/components/avatar/t_avatar.dart:76" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/avatar/t_avatar_test.dart:909", + "observedScenariosPerSdk": 12, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "avatarBorderColor", + "component": "avatar", + "previousDecision": "pending", + "frozenTarget": { + "light": "#fff", + "dark": "#fff", + "expressions": [ + "#fff" + ], + "source": [ + "packages/components/avatar/avatar.less:20" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/avatar/avatar.less", + "selector": ".t-avatar--border", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-avatar-border-color, #fff)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-difference-needs-resolution", + "runtimeDefaultVerified": false, + "testEntry": "tdesign-component/test/components/avatar/t_avatar_test.dart:909", + "observedScenariosPerSdk": 24, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": "Frozen avatar border default is literal white; Flutter avatar groups use bgColorContainer. Light default matches, dark/custom differ. Needs recorded design disposition.", + "candidateExistingTests": [], + "requiredEvidence": [ + "Resolve recorded target/runtime differences through an implementation fix or documented design/contract adjudication.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "avatarBorderWidthLarge", + "component": "avatar", + "previousDecision": "pending", + "frozenTarget": { + "light": "3dp", + "dark": "3dp", + "expressions": [ + "6rpx" + ], + "source": [ + "packages/components/avatar/avatar.less:19" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/avatar/avatar.less", + "selector": ".t-avatar--border-large", + "property": "border-width", + "kind": "render-property", + "value": "var(--td-avatar-border-width-large, 6rpx)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/avatar/t_avatar_test.dart:909", + "observedScenariosPerSdk": 8, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "avatarBorderWidthMedium", + "component": "avatar", + "previousDecision": "pending", + "frozenTarget": { + "light": "2dp", + "dark": "2dp", + "expressions": [ + "4rpx" + ], + "source": [ + "packages/components/avatar/avatar.less:18" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/avatar/avatar.less", + "selector": ".t-avatar--border-medium", + "property": "border-width", + "kind": "render-property", + "value": "var(--td-avatar-border-width-medium, 4rpx)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/avatar/t_avatar_test.dart:909", + "observedScenariosPerSdk": 8, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "avatarBorderWidthSmall", + "component": "avatar", + "previousDecision": "pending", + "frozenTarget": { + "light": "1dp", + "dark": "1dp", + "expressions": [ + "2rpx" + ], + "source": [ + "packages/components/avatar/avatar.less:17" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/avatar/avatar.less", + "selector": ".t-avatar--border-small", + "property": "border-width", + "kind": "render-property", + "value": "var(--td-avatar-border-width-small, 2rpx)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/avatar/t_avatar_test.dart:909", + "observedScenariosPerSdk": 8, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "avatarCircleBorderRadius", + "component": "avatar", + "previousDecision": "pending", + "frozenTarget": { + "light": "50%", + "dark": "50%", + "expressions": [ + "@radius-circle" + ], + "source": [ + "packages/components/avatar/avatar.less:21" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/avatar/avatar.less", + "selector": ".t-avatar--circle", + "property": "border-radius", + "kind": "render-property", + "value": "var(--td-avatar-circle-border-radius, var(--td-radius-circle, 50%))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "radiusCircle": [ + "tdesign-component/lib/src/components/avatar/t_avatar.dart:54", + "tdesign-component/lib/src/components/avatar/t_avatar.dart:55", + "tdesign-component/lib/src/components/avatar/t_avatar.dart:246", + "tdesign-component/lib/src/components/avatar/t_avatar.dart:247" + ], + "circleBorderRadius": [ + "tdesign-component/lib/src/components/avatar/t_avatar_theme_data.dart:20", + "tdesign-component/lib/src/components/avatar/t_avatar_theme_data.dart:35", + "tdesign-component/lib/src/components/avatar/t_avatar_theme_data.dart:36", + "tdesign-component/lib/src/components/avatar/t_avatar_theme_data.dart:69", + "tdesign-component/lib/src/components/avatar/t_avatar_theme_data.dart:115", + "tdesign-component/lib/src/components/avatar/t_avatar_theme_data.dart:148", + "tdesign-component/lib/src/components/avatar/t_avatar_theme_data.dart:160", + "tdesign-component/lib/src/components/avatar/t_avatar_theme_data.dart:170", + "tdesign-component/lib/src/components/avatar/t_avatar_theme_data.dart:216", + "tdesign-component/lib/src/components/avatar/t_avatar_theme_data.dart:217", + "tdesign-component/lib/src/components/avatar/t_avatar_theme_data.dart:218", + "tdesign-component/lib/src/components/avatar/t_avatar_theme_data.dart:222", + "tdesign-component/lib/src/components/avatar/t_avatar_theme_data.dart:224", + "tdesign-component/lib/src/components/avatar/t_avatar_theme_data.dart:290" + ] + }, + "approvedGlobalException": "小程序 CSS 50%;Flutter 固定 9999dp 圆角", + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/avatar/t_avatar_test.dart:909", + "observedScenariosPerSdk": 12, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": "Existing approved radiusCircle exception: CSS 50% versus Flutter 9999dp; custom radius forwarding is exercised.", + "candidateExistingTests": [], + "requiredEvidence": [ + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "avatarContentColor", + "component": "avatar", + "previousDecision": "pending", + "frozenTarget": { + "light": "#0052d9", + "dark": "#4582e6", + "expressions": [ + "@brand-color" + ], + "source": [ + "packages/components/avatar/avatar.less:4" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/avatar/avatar.less", + "selector": ".t-avatar", + "property": "color", + "kind": "render-property", + "value": "var(--td-avatar-content-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "brandColor": [ + "tdesign-component/lib/src/components/avatar/t_avatar.dart:59" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/avatar/t_avatar_test.dart:909", + "observedScenariosPerSdk": 12, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "avatarGroupInitZIndex", + "component": "avatar-group", + "previousDecision": "pending", + "frozenTarget": { + "light": "", + "dark": "", + "expressions": [ + "@avatar-group-init-zIndex" + ], + "source": [ + "packages/components/avatar-group/avatar-group.less:13" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/avatar-group/avatar-group.less", + "selector": ".t-avatar-group-offset-left .t-avatar__wrapper:nth-child(1)", + "property": "z-index", + "kind": "render-property", + "value": "calc(var(--td-avatar-group-init-z-index, 50) - 1)" + }, + { + "file": "packages/components/avatar-group/avatar-group.less", + "selector": ".t-avatar-group-offset-left .t-avatar__wrapper:nth-child(2)", + "property": "z-index", + "kind": "render-property", + "value": "calc(var(--td-avatar-group-init-z-index, 50) - 2)" + }, + { + "file": "packages/components/avatar-group/avatar-group.less", + "selector": ".t-avatar-group-offset-left .t-avatar__wrapper:nth-child(3)", + "property": "z-index", + "kind": "render-property", + "value": "calc(var(--td-avatar-group-init-z-index, 50) - 3)" + }, + { + "file": "packages/components/avatar-group/avatar-group.less", + "selector": ".t-avatar-group-offset-left .t-avatar__wrapper:nth-child(4)", + "property": "z-index", + "kind": "render-property", + "value": "calc(var(--td-avatar-group-init-z-index, 50) - 4)" + }, + { + "file": "packages/components/avatar-group/avatar-group.less", + "selector": ".t-avatar-group-offset-left .t-avatar__wrapper:nth-child(5)", + "property": "z-index", + "kind": "render-property", + "value": "calc(var(--td-avatar-group-init-z-index, 50) - 5)" + }, + { + "file": "packages/components/avatar-group/avatar-group.less", + "selector": ".t-avatar-group-offset-left .t-avatar__wrapper:nth-child(6)", + "property": "z-index", + "kind": "render-property", + "value": "calc(var(--td-avatar-group-init-z-index, 50) - 6)" + }, + { + "file": "packages/components/avatar-group/avatar-group.less", + "selector": ".t-avatar-group-offset-left .t-avatar__wrapper:nth-child(7)", + "property": "z-index", + "kind": "render-property", + "value": "calc(var(--td-avatar-group-init-z-index, 50) - 7)" + }, + { + "file": "packages/components/avatar-group/avatar-group.less", + "selector": ".t-avatar-group-offset-left .t-avatar__wrapper:nth-child(8)", + "property": "z-index", + "kind": "render-property", + "value": "calc(var(--td-avatar-group-init-z-index, 50) - 8)" + }, + { + "file": "packages/components/avatar-group/avatar-group.less", + "selector": ".t-avatar-group-offset-left .t-avatar__wrapper:nth-child(9)", + "property": "z-index", + "kind": "render-property", + "value": "calc(var(--td-avatar-group-init-z-index, 50) - 9)" + }, + { + "file": "packages/components/avatar-group/avatar-group.less", + "selector": ".t-avatar-group-offset-left .t-avatar__wrapper:nth-child(10)", + "property": "z-index", + "kind": "render-property", + "value": "calc(var(--td-avatar-group-init-z-index, 50) - 10)" + }, + { + "file": "packages/components/avatar-group/avatar-group.less", + "selector": ".t-avatar-group-offset-left .t-avatar__wrapper:nth-child(11)", + "property": "z-index", + "kind": "render-property", + "value": "calc(var(--td-avatar-group-init-z-index, 50) - 11)" + }, + { + "file": "packages/components/avatar-group/avatar-group.less", + "selector": ".t-avatar-group-offset-left .t-avatar__wrapper:nth-child(12)", + "property": "z-index", + "kind": "render-property", + "value": "calc(var(--td-avatar-group-init-z-index, 50) - 12)" + }, + { + "file": "packages/components/avatar-group/avatar-group.less", + "selector": ".t-avatar-group-offset-left .t-avatar__wrapper:nth-child(13)", + "property": "z-index", + "kind": "render-property", + "value": "calc(var(--td-avatar-group-init-z-index, 50) - 13)" + }, + { + "file": "packages/components/avatar-group/avatar-group.less", + "selector": ".t-avatar-group-offset-left .t-avatar__wrapper:nth-child(14)", + "property": "z-index", + "kind": "render-property", + "value": "calc(var(--td-avatar-group-init-z-index, 50) - 14)" + }, + { + "file": "packages/components/avatar-group/avatar-group.less", + "selector": ".t-avatar-group-offset-left .t-avatar__wrapper:nth-child(15)", + "property": "z-index", + "kind": "render-property", + "value": "calc(var(--td-avatar-group-init-z-index, 50) - 15)" + }, + { + "file": "packages/components/avatar-group/avatar-group.less", + "selector": ".t-avatar-group-offset-left .t-avatar__wrapper:nth-child(16)", + "property": "z-index", + "kind": "render-property", + "value": "calc(var(--td-avatar-group-init-z-index, 50) - 16)" + }, + { + "file": "packages/components/avatar-group/avatar-group.less", + "selector": ".t-avatar-group-offset-left .t-avatar__wrapper:nth-child(17)", + "property": "z-index", + "kind": "render-property", + "value": "calc(var(--td-avatar-group-init-z-index, 50) - 17)" + }, + { + "file": "packages/components/avatar-group/avatar-group.less", + "selector": ".t-avatar-group-offset-left .t-avatar__wrapper:nth-child(18)", + "property": "z-index", + "kind": "render-property", + "value": "calc(var(--td-avatar-group-init-z-index, 50) - 18)" + }, + { + "file": "packages/components/avatar-group/avatar-group.less", + "selector": ".t-avatar-group-offset-left .t-avatar__wrapper:nth-child(19)", + "property": "z-index", + "kind": "render-property", + "value": "calc(var(--td-avatar-group-init-z-index, 50) - 19)" + }, + { + "file": "packages/components/avatar-group/avatar-group.less", + "selector": ".t-avatar-group-offset-left .t-avatar__wrapper:nth-child(20)", + "property": "z-index", + "kind": "render-property", + "value": "calc(var(--td-avatar-group-init-z-index, 50) - 20)" + }, + { + "file": "packages/components/avatar-group/avatar-group.less", + "selector": ".t-avatar-group-offset-left .t-avatar__wrapper:nth-child(21)", + "property": "z-index", + "kind": "render-property", + "value": "calc(var(--td-avatar-group-init-z-index, 50) - 21)" + }, + { + "file": "packages/components/avatar-group/avatar-group.less", + "selector": ".t-avatar-group-offset-left .t-avatar__wrapper:nth-child(22)", + "property": "z-index", + "kind": "render-property", + "value": "calc(var(--td-avatar-group-init-z-index, 50) - 22)" + }, + { + "file": "packages/components/avatar-group/avatar-group.less", + "selector": ".t-avatar-group-offset-left .t-avatar__wrapper:nth-child(23)", + "property": "z-index", + "kind": "render-property", + "value": "calc(var(--td-avatar-group-init-z-index, 50) - 23)" + }, + { + "file": "packages/components/avatar-group/avatar-group.less", + "selector": ".t-avatar-group-offset-left .t-avatar__wrapper:nth-child(24)", + "property": "z-index", + "kind": "render-property", + "value": "calc(var(--td-avatar-group-init-z-index, 50) - 24)" + }, + { + "file": "packages/components/avatar-group/avatar-group.less", + "selector": ".t-avatar-group-offset-left .t-avatar__wrapper:nth-child(25)", + "property": "z-index", + "kind": "render-property", + "value": "calc(var(--td-avatar-group-init-z-index, 50) - 25)" + }, + { + "file": "packages/components/avatar-group/avatar-group.less", + "selector": ".t-avatar-group-offset-left .t-avatar__wrapper:nth-child(26)", + "property": "z-index", + "kind": "render-property", + "value": "calc(var(--td-avatar-group-init-z-index, 50) - 26)" + }, + { + "file": "packages/components/avatar-group/avatar-group.less", + "selector": ".t-avatar-group-offset-left .t-avatar__wrapper:nth-child(27)", + "property": "z-index", + "kind": "render-property", + "value": "calc(var(--td-avatar-group-init-z-index, 50) - 27)" + }, + { + "file": "packages/components/avatar-group/avatar-group.less", + "selector": ".t-avatar-group-offset-left .t-avatar__wrapper:nth-child(28)", + "property": "z-index", + "kind": "render-property", + "value": "calc(var(--td-avatar-group-init-z-index, 50) - 28)" + }, + { + "file": "packages/components/avatar-group/avatar-group.less", + "selector": ".t-avatar-group-offset-left .t-avatar__wrapper:nth-child(29)", + "property": "z-index", + "kind": "render-property", + "value": "calc(var(--td-avatar-group-init-z-index, 50) - 29)" + }, + { + "file": "packages/components/avatar-group/avatar-group.less", + "selector": ".t-avatar-group-offset-left .t-avatar__wrapper:nth-child(30)", + "property": "z-index", + "kind": "render-property", + "value": "calc(var(--td-avatar-group-init-z-index, 50) - 30)" + }, + { + "file": "packages/components/avatar-group/avatar-group.less", + "selector": ".t-avatar-group-offset-left .t-avatar__wrapper:nth-child(31)", + "property": "z-index", + "kind": "render-property", + "value": "calc(var(--td-avatar-group-init-z-index, 50) - 31)" + }, + { + "file": "packages/components/avatar-group/avatar-group.less", + "selector": ".t-avatar-group-offset-left .t-avatar__wrapper:nth-child(32)", + "property": "z-index", + "kind": "render-property", + "value": "calc(var(--td-avatar-group-init-z-index, 50) - 32)" + }, + { + "file": "packages/components/avatar-group/avatar-group.less", + "selector": ".t-avatar-group-offset-left .t-avatar__wrapper:nth-child(33)", + "property": "z-index", + "kind": "render-property", + "value": "calc(var(--td-avatar-group-init-z-index, 50) - 33)" + }, + { + "file": "packages/components/avatar-group/avatar-group.less", + "selector": ".t-avatar-group-offset-left .t-avatar__wrapper:nth-child(34)", + "property": "z-index", + "kind": "render-property", + "value": "calc(var(--td-avatar-group-init-z-index, 50) - 34)" + }, + { + "file": "packages/components/avatar-group/avatar-group.less", + "selector": ".t-avatar-group-offset-left .t-avatar__wrapper:nth-child(35)", + "property": "z-index", + "kind": "render-property", + "value": "calc(var(--td-avatar-group-init-z-index, 50) - 35)" + }, + { + "file": "packages/components/avatar-group/avatar-group.less", + "selector": ".t-avatar-group-offset-left .t-avatar__wrapper:nth-child(36)", + "property": "z-index", + "kind": "render-property", + "value": "calc(var(--td-avatar-group-init-z-index, 50) - 36)" + }, + { + "file": "packages/components/avatar-group/avatar-group.less", + "selector": ".t-avatar-group-offset-left .t-avatar__wrapper:nth-child(37)", + "property": "z-index", + "kind": "render-property", + "value": "calc(var(--td-avatar-group-init-z-index, 50) - 37)" + }, + { + "file": "packages/components/avatar-group/avatar-group.less", + "selector": ".t-avatar-group-offset-left .t-avatar__wrapper:nth-child(38)", + "property": "z-index", + "kind": "render-property", + "value": "calc(var(--td-avatar-group-init-z-index, 50) - 38)" + }, + { + "file": "packages/components/avatar-group/avatar-group.less", + "selector": ".t-avatar-group-offset-left .t-avatar__wrapper:nth-child(39)", + "property": "z-index", + "kind": "render-property", + "value": "calc(var(--td-avatar-group-init-z-index, 50) - 39)" + }, + { + "file": "packages/components/avatar-group/avatar-group.less", + "selector": ".t-avatar-group-offset-left .t-avatar__wrapper:nth-child(40)", + "property": "z-index", + "kind": "render-property", + "value": "calc(var(--td-avatar-group-init-z-index, 50) - 40)" + }, + { + "file": "packages/components/avatar-group/avatar-group.less", + "selector": ".t-avatar-group-offset-left .t-avatar__wrapper:nth-child(41)", + "property": "z-index", + "kind": "render-property", + "value": "calc(var(--td-avatar-group-init-z-index, 50) - 41)" + }, + { + "file": "packages/components/avatar-group/avatar-group.less", + "selector": ".t-avatar-group-offset-left .t-avatar__wrapper:nth-child(42)", + "property": "z-index", + "kind": "render-property", + "value": "calc(var(--td-avatar-group-init-z-index, 50) - 42)" + }, + { + "file": "packages/components/avatar-group/avatar-group.less", + "selector": ".t-avatar-group-offset-left .t-avatar__wrapper:nth-child(43)", + "property": "z-index", + "kind": "render-property", + "value": "calc(var(--td-avatar-group-init-z-index, 50) - 43)" + }, + { + "file": "packages/components/avatar-group/avatar-group.less", + "selector": ".t-avatar-group-offset-left .t-avatar__wrapper:nth-child(44)", + "property": "z-index", + "kind": "render-property", + "value": "calc(var(--td-avatar-group-init-z-index, 50) - 44)" + }, + { + "file": "packages/components/avatar-group/avatar-group.less", + "selector": ".t-avatar-group-offset-left .t-avatar__wrapper:nth-child(45)", + "property": "z-index", + "kind": "render-property", + "value": "calc(var(--td-avatar-group-init-z-index, 50) - 45)" + }, + { + "file": "packages/components/avatar-group/avatar-group.less", + "selector": ".t-avatar-group-offset-left .t-avatar__wrapper:nth-child(46)", + "property": "z-index", + "kind": "render-property", + "value": "calc(var(--td-avatar-group-init-z-index, 50) - 46)" + }, + { + "file": "packages/components/avatar-group/avatar-group.less", + "selector": ".t-avatar-group-offset-left .t-avatar__wrapper:nth-child(47)", + "property": "z-index", + "kind": "render-property", + "value": "calc(var(--td-avatar-group-init-z-index, 50) - 47)" + }, + { + "file": "packages/components/avatar-group/avatar-group.less", + "selector": ".t-avatar-group-offset-left .t-avatar__wrapper:nth-child(48)", + "property": "z-index", + "kind": "render-property", + "value": "calc(var(--td-avatar-group-init-z-index, 50) - 48)" + }, + { + "file": "packages/components/avatar-group/avatar-group.less", + "selector": ".t-avatar-group-offset-left .t-avatar__wrapper:nth-child(49)", + "property": "z-index", + "kind": "render-property", + "value": "calc(var(--td-avatar-group-init-z-index, 50) - 49)" + }, + { + "file": "packages/components/avatar-group/avatar-group.less", + "selector": ".t-avatar-group-offset-left .t-avatar__wrapper:nth-child(50)", + "property": "z-index", + "kind": "render-property", + "value": "calc(var(--td-avatar-group-init-z-index, 50) - 50)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "avatarGroupLineSpacing", + "component": "avatar-group", + "previousDecision": "pending", + "frozenTarget": { + "light": "calc(8dp / 4)", + "dark": "calc(8dp / 4)", + "expressions": [ + "calc(@spacer / 4)" + ], + "source": [ + "packages/components/avatar-group/avatar-group.less:7" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/avatar-group/avatar-group.less", + "selector": ".t-avatar-group-offset-left .t-avatar__wrapper,\n.t-avatar-group-offset-right .t-avatar__wrapper", + "property": "padding", + "kind": "render-property", + "value": "var(--td-avatar-group-line-spacing, calc(var(--td-spacer, 16rpx) / 4)) 0" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "avatarGroupMarginLeftLarge", + "component": "avatar-group", + "previousDecision": "pending", + "frozenTarget": { + "light": "calc(-1 * 8dp)", + "dark": "calc(-1 * 8dp)", + "expressions": [ + "calc(-1 * @spacer)" + ], + "source": [ + "packages/components/avatar-group/avatar-group.less:6" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/avatar-group/avatar-group.less", + "selector": ".t-avatar-group-offset-left-large,\n.t-avatar-group-offset-right-large", + "property": "--td-avatar-margin-left", + "kind": "custom-property-forward", + "value": "var(--td-avatar-group-margin-left-large, calc(-1 * var(--td-spacer, 16rpx)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "avatarGroupMarginLeftMedium", + "component": "avatar-group", + "previousDecision": "pending", + "frozenTarget": { + "light": "calc(-1 * 8dp)", + "dark": "calc(-1 * 8dp)", + "expressions": [ + "calc(-1 * @spacer)" + ], + "source": [ + "packages/components/avatar-group/avatar-group.less:5" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/avatar-group/avatar-group.less", + "selector": ".t-avatar-group-offset-left-medium,\n.t-avatar-group-offset-right-medium", + "property": "--td-avatar-margin-left", + "kind": "custom-property-forward", + "value": "var(--td-avatar-group-margin-left-medium, calc(-1 * var(--td-spacer, 16rpx)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "avatarGroupMarginLeftSmall", + "component": "avatar-group", + "previousDecision": "pending", + "frozenTarget": { + "light": "calc(-1 * 8dp)", + "dark": "calc(-1 * 8dp)", + "expressions": [ + "calc(-1 * @spacer)" + ], + "source": [ + "packages/components/avatar-group/avatar-group.less:4" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/avatar-group/avatar-group.less", + "selector": ".t-avatar-group-offset-left-small,\n.t-avatar-group-offset-right-small", + "property": "--td-avatar-margin-left", + "kind": "custom-property-forward", + "value": "var(--td-avatar-group-margin-left-small, calc(-1 * var(--td-spacer, 16rpx)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "avatarIconLargeFontSize", + "component": "avatar", + "previousDecision": "pending", + "frozenTarget": { + "light": "32dp", + "dark": "32dp", + "expressions": [ + "64rpx" + ], + "source": [ + "packages/components/avatar/avatar.less:15" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/avatar/avatar.less", + "selector": ".t-avatar--large .t-avatar__icon", + "property": "font-size", + "kind": "render-property", + "value": "var(--td-avatar-icon-large-font-size, 64rpx)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/avatar/t_avatar_test.dart:909", + "observedScenariosPerSdk": 4, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "avatarIconMediumFontSize", + "component": "avatar", + "previousDecision": "pending", + "frozenTarget": { + "light": "24dp", + "dark": "24dp", + "expressions": [ + "48rpx" + ], + "source": [ + "packages/components/avatar/avatar.less:14" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/avatar/avatar.less", + "selector": ".t-avatar--medium .t-avatar__icon", + "property": "font-size", + "kind": "render-property", + "value": "var(--td-avatar-icon-medium-font-size, 48rpx)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/avatar/t_avatar_test.dart:909", + "observedScenariosPerSdk": 4, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "avatarIconSmallFontSize", + "component": "avatar", + "previousDecision": "pending", + "frozenTarget": { + "light": "20dp", + "dark": "20dp", + "expressions": [ + "@font-size-xl" + ], + "source": [ + "packages/components/avatar/avatar.less:13" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/avatar/avatar.less", + "selector": ".t-avatar--small .t-avatar__icon", + "property": "font-size", + "kind": "render-property", + "value": "var(--td-avatar-icon-small-font-size, var(--td-font-size-xl, 40rpx))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "fontSizeXl": [] + }, + "approvedGlobalException": null, + "stage": "runtime-difference-needs-resolution", + "runtimeDefaultVerified": false, + "testEntry": "tdesign-component/test/components/avatar/t_avatar_test.dart:909", + "observedScenariosPerSdk": 4, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Resolve recorded target/runtime differences through an implementation fix or documented design/contract adjudication.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "avatarLargeWidth", + "component": "avatar", + "previousDecision": "pending", + "frozenTarget": { + "light": "64dp", + "dark": "64dp", + "expressions": [ + "128rpx" + ], + "source": [ + "packages/components/avatar/avatar.less:7" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/avatar/avatar.less", + "selector": ".t-avatar--large", + "property": "width", + "kind": "render-property", + "value": "var(--td-avatar-large-width, 128rpx)" + }, + { + "file": "packages/components/avatar/avatar.less", + "selector": ".t-avatar--large", + "property": "height", + "kind": "render-property", + "value": "var(--td-avatar-large-width, 128rpx)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/avatar/t_avatar_test.dart:909", + "observedScenariosPerSdk": 4, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "avatarMarginLeft", + "component": "avatar", + "previousDecision": "pending", + "frozenTarget": { + "light": "0", + "dark": "0", + "expressions": [ + "0" + ], + "source": [ + "packages/components/avatar/avatar.less:24" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/avatar/avatar.less", + "selector": ".t-avatar__wrapper", + "property": "margin-left", + "kind": "render-property", + "value": "var(--td-avatar-margin-left, 0)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "avatarMediumWidth", + "component": "avatar", + "previousDecision": "pending", + "frozenTarget": { + "light": "48dp", + "dark": "48dp", + "expressions": [ + "96rpx" + ], + "source": [ + "packages/components/avatar/avatar.less:6" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/avatar/avatar.less", + "selector": ".t-avatar--medium", + "property": "width", + "kind": "render-property", + "value": "var(--td-avatar-medium-width, 96rpx)" + }, + { + "file": "packages/components/avatar/avatar.less", + "selector": ".t-avatar--medium", + "property": "height", + "kind": "render-property", + "value": "var(--td-avatar-medium-width, 96rpx)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/avatar/t_avatar_test.dart:909", + "observedScenariosPerSdk": 4, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "avatarRoundBorderRadius", + "component": "avatar", + "previousDecision": "pending", + "frozenTarget": { + "light": "6dp", + "dark": "6dp", + "expressions": [ + "@radius-default" + ], + "source": [ + "packages/components/avatar/avatar.less:22" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/avatar/avatar.less", + "selector": ".t-avatar--round", + "property": "border-radius", + "kind": "render-property", + "value": "var(--td-avatar-round-border-radius, var(--td-radius-default, 12rpx))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "radiusDefault": [ + "tdesign-component/lib/src/components/avatar/t_avatar.dart:56", + "tdesign-component/lib/src/components/avatar/t_avatar.dart:57", + "tdesign-component/lib/src/components/avatar/t_avatar.dart:243", + "tdesign-component/lib/src/components/avatar/t_avatar.dart:244" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/avatar/t_avatar_test.dart:909", + "observedScenariosPerSdk": 12, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "avatarSmallWidth", + "component": "avatar", + "previousDecision": "pending", + "frozenTarget": { + "light": "40dp", + "dark": "40dp", + "expressions": [ + "80rpx" + ], + "source": [ + "packages/components/avatar/avatar.less:5" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/avatar/avatar.less", + "selector": ".t-avatar--small", + "property": "width", + "kind": "render-property", + "value": "var(--td-avatar-small-width, 80rpx)" + }, + { + "file": "packages/components/avatar/avatar.less", + "selector": ".t-avatar--small", + "property": "height", + "kind": "render-property", + "value": "var(--td-avatar-small-width, 80rpx)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/avatar/t_avatar_test.dart:909", + "observedScenariosPerSdk": 4, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "avatarTextLargeFontSize", + "component": "avatar", + "previousDecision": "pending", + "frozenTarget": { + "light": "20dp", + "dark": "20dp", + "expressions": [ + "@font-size-xl" + ], + "source": [ + "packages/components/avatar/avatar.less:11" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/avatar/avatar.less", + "selector": ".t-avatar--large", + "property": "font-size", + "kind": "render-property", + "value": "var(--td-avatar-text-large-font-size, var(--td-font-size-xl, 40rpx))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "fontSizeXl": [] + }, + "approvedGlobalException": null, + "stage": "runtime-difference-needs-resolution", + "runtimeDefaultVerified": false, + "testEntry": "tdesign-component/test/components/avatar/t_avatar_test.dart:909", + "observedScenariosPerSdk": 4, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Resolve recorded target/runtime differences through an implementation fix or documented design/contract adjudication.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "avatarTextMediumFontSize", + "component": "avatar", + "previousDecision": "pending", + "frozenTarget": { + "light": "16dp", + "dark": "16dp", + "expressions": [ + "@font-size-m" + ], + "source": [ + "packages/components/avatar/avatar.less:10" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/avatar/avatar.less", + "selector": ".t-avatar--medium", + "property": "font-size", + "kind": "render-property", + "value": "var(--td-avatar-text-medium-font-size, var(--td-font-size-m, 32rpx))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "fontSizeM": [] + }, + "approvedGlobalException": null, + "stage": "runtime-difference-needs-resolution", + "runtimeDefaultVerified": false, + "testEntry": "tdesign-component/test/components/avatar/t_avatar_test.dart:909", + "observedScenariosPerSdk": 4, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Resolve recorded target/runtime differences through an implementation fix or documented design/contract adjudication.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "avatarTextSmallFontSize", + "component": "avatar", + "previousDecision": "pending", + "frozenTarget": { + "light": "14dp", + "dark": "14dp", + "expressions": [ + "@font-size-base" + ], + "source": [ + "packages/components/avatar/avatar.less:9" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/avatar/avatar.less", + "selector": ".t-avatar--small", + "property": "font-size", + "kind": "render-property", + "value": "var(--td-avatar-text-small-font-size, var(--td-font-size-base, 28rpx))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "fontSizeBase": [] + }, + "approvedGlobalException": null, + "stage": "runtime-difference-needs-resolution", + "runtimeDefaultVerified": false, + "testEntry": "tdesign-component/test/components/avatar/t_avatar_test.dart:909", + "observedScenariosPerSdk": 4, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Resolve recorded target/runtime differences through an implementation fix or documented design/contract adjudication.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "backTopRoundBgColor", + "component": "back-top", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(255, 255, 255, 1)", + "dark": "#242424", + "expressions": [ + "@bg-color-container" + ], + "source": [ + "packages/components/back-top/back-top.less:15" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/back-top/back-top.less", + "selector": ".t-back-top--round,\n.t-back-top--half-round", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-back-top-round-bg-color, var(--td-bg-color-container, var(--td-font-white-1, #ffffff)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "bgColorContainer": [ + "tdesign-component/lib/src/components/backtop/t_backtop.dart:188" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/backtop/t_backtop_test.dart:371", + "text": "expect(decoration.color, token.bgColorContainer);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/backtop/t_backtop_test.dart:568", + "text": "expect(decoration.color, token.bgColorContainer);", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "backTopRoundBorderColor", + "component": "back-top", + "previousDecision": "pending", + "frozenTarget": { + "light": "#dcdcdc", + "dark": "#5e5e5e", + "expressions": [ + "@component-border" + ], + "source": [ + "packages/components/back-top/back-top.less:16" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/back-top/back-top.less", + "selector": ".t-back-top--round,\n.t-back-top--half-round", + "property": "border", + "kind": "render-property", + "value": "1rpx solid var(--td-back-top-round-border-color, var(--td-component-border, var(--td-gray-color-4, #dcdcdc)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "componentBorder": [ + "tdesign-component/lib/src/components/backtop/t_backtop.dart:194" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/backtop/t_backtop_test.dart:75", + "text": "side: BorderSide(color: token.componentBorder, width: 0.5),", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/backtop/t_backtop_test.dart:102", + "text": "final side = BorderSide(color: token.componentBorder, width: 0.5);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/backtop/t_backtop_test.dart:376", + "text": "side: BorderSide(color: token.componentBorder, width: 0.5),", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/backtop/t_backtop_test.dart:573", + "text": "side: BorderSide(color: token.componentBorder, width: 0.5),", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "backTopRoundBorderRadius", + "component": "back-top", + "previousDecision": "pending", + "frozenTarget": { + "light": "50%", + "dark": "50%", + "expressions": [ + "@radius-circle" + ], + "source": [ + "packages/components/back-top/back-top.less:17" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/back-top/back-top.less", + "selector": ".t-back-top--round,\n.t-back-top--round-dark", + "property": "border-radius", + "kind": "render-property", + "value": "var(--td-back-top-round-border-radius, var(--td-radius-circle, 50%))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "radiusCircle": [ + "tdesign-component/lib/src/components/backtop/t_backtop.dart:241" + ] + }, + "approvedGlobalException": "小程序 CSS 50%;Flutter 固定 9999dp 圆角", + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/backtop/t_backtop_test.dart:13", + "text": "borderRadius: BorderRadius.circular(token.radiusCircle),", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "backTopRoundColor", + "component": "back-top", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.9)", + "dark": "rgba(255, 255, 255, 90%)", + "expressions": [ + "@text-color-primary" + ], + "source": [ + "packages/components/back-top/back-top.less:14" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/back-top/back-top.less", + "selector": ".t-back-top--round,\n.t-back-top--half-round", + "property": "color", + "kind": "render-property", + "value": "var(--td-back-top-round-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorPrimary": [ + "tdesign-component/lib/src/components/backtop/t_backtop.dart:189" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/backtop/t_backtop_test.dart:381", + "text": "token.textColorPrimary,", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/backtop/t_backtop_test.dart:578", + "text": "token.textColorPrimary,", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "backTopRoundDarkBgColor", + "component": "back-top", + "previousDecision": "pending", + "frozenTarget": { + "light": "#242424", + "dark": "#242424", + "expressions": [ + "@gray-color-13" + ], + "source": [ + "packages/components/back-top/back-top.less:19" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/back-top/back-top.less", + "selector": ".t-back-top--round-dark,\n.t-back-top--half-round-dark", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-back-top-round-dark-bg-color, var(--td-gray-color-13, #242424))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "grayColor13": [ + "tdesign-component/lib/src/components/backtop/t_backtop.dart:186" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/backtop/t_backtop_test.dart:612", + "text": "expect(decorations[0].color, token.grayColor13);", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "backTopRoundDarkColor", + "component": "back-top", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(255, 255, 255, 1)", + "dark": "rgba(255, 255, 255, 90%)", + "expressions": [ + "@text-color-anti" + ], + "source": [ + "packages/components/back-top/back-top.less:18" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/back-top/back-top.less", + "selector": ".t-back-top--round-dark,\n.t-back-top--half-round-dark", + "property": "color", + "kind": "render-property", + "value": "var(--td-back-top-round-dark-color, var(--td-text-color-anti, var(--td-font-white-1, #ffffff)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorAnti": [] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "badgeBasicHeight", + "component": "badge", + "previousDecision": "pending", + "frozenTarget": { + "light": "16dp", + "dark": "16dp", + "expressions": [ + "32rpx" + ], + "source": [ + "packages/components/badge/badge.less:8" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/badge/badge.less", + "selector": ".t-badge--basic", + "property": "height", + "kind": "render-property", + "value": "var(--td-badge-basic-height, 32rpx)" + }, + { + "file": "packages/components/badge/badge.less", + "selector": ".t-badge--circle", + "property": "border-radius", + "kind": "render-property", + "value": "calc(var(--td-badge-basic-height, 32rpx) / 2)" + }, + { + "file": "packages/components/badge/badge.less", + "selector": ".t-badge--ribbon,\n.t-badge--ribbon-right,\n.t-badge--ribbon-left,\n.t-badge--triangle-left,\n.t-badge--triangle-right", + "property": "width", + "kind": "render-property", + "value": "calc(var(--td-badge-basic-height, 32rpx) * 2)" + }, + { + "file": "packages/components/badge/badge.less", + "selector": ".t-badge--ribbon,\n.t-badge--ribbon-right,\n.t-badge--ribbon-left,\n.t-badge--triangle-left,\n.t-badge--triangle-right", + "property": "height", + "kind": "render-property", + "value": "calc(var(--td-badge-basic-height, 32rpx) * 2)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "badgeBasicPadding", + "component": "badge", + "previousDecision": "pending", + "frozenTarget": { + "light": "calc(8dp / 2)", + "dark": "calc(8dp / 2)", + "expressions": [ + "calc(@spacer / 2)" + ], + "source": [ + "packages/components/badge/badge.less:10" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/badge/badge.less", + "selector": ".t-badge--basic", + "property": "padding", + "kind": "render-property", + "value": "0 var(--td-badge-basic-padding, calc(var(--td-spacer, 16rpx) / 2))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "badgeBasicWidth", + "component": "badge", + "previousDecision": "pending", + "frozenTarget": { + "light": "16dp", + "dark": "16dp", + "expressions": [ + "32rpx" + ], + "source": [ + "packages/components/badge/badge.less:9" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/badge/badge.less", + "selector": ".t-badge--count", + "property": "min-width", + "kind": "render-property", + "value": "var(--td-badge-basic-width, 32rpx)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "badgeBgColor", + "component": "badge", + "previousDecision": "pending", + "frozenTarget": { + "light": "#d54941", + "dark": "#c64751", + "expressions": [ + "@error-color" + ], + "source": [ + "packages/components/badge/badge.less:6" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/badge/badge.less", + "selector": ".t-badge--basic", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-badge-bg-color, var(--td-error-color, var(--td-error-color-6, #d54941)))" + }, + { + "file": "packages/components/badge/badge.less", + "selector": ".t-badge--ribbon,\n.t-badge--ribbon-right", + "property": "background", + "kind": "render-property", + "value": "linear-gradient(45deg, transparent 50%, var(--td-badge-bg-color, var(--td-error-color, var(--td-error-color-6, #d54941))) 50%, var(--td-badge-bg-color, var(--td-error-color, var(--td-error-color-6, #d54941))) 85%, transparent 85%)" + }, + { + "file": "packages/components/badge/badge.less", + "selector": ".t-badge--triangle-right", + "property": "background", + "kind": "render-property", + "value": "linear-gradient(45deg, transparent 50%, var(--td-badge-bg-color, var(--td-error-color, var(--td-error-color-6, #d54941))) 50%)" + }, + { + "file": "packages/components/badge/badge.less", + "selector": ".t-badge--ribbon-left", + "property": "background", + "kind": "render-property", + "value": "linear-gradient(-45deg, transparent 50%, var(--td-badge-bg-color, var(--td-error-color, var(--td-error-color-6, #d54941))) 50%, var(--td-badge-bg-color, var(--td-error-color, var(--td-error-color-6, #d54941))) 85%, transparent 85%)" + }, + { + "file": "packages/components/badge/badge.less", + "selector": ".t-badge--triangle-left", + "property": "background", + "kind": "render-property", + "value": "linear-gradient(-45deg, transparent 50%, var(--td-badge-bg-color, var(--td-error-color, var(--td-error-color-6, #d54941))) 50%)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "errorColor": [ + "tdesign-component/lib/src/components/badge/t_badge_resolved_style.dart:38" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/badge/t_badge_test.dart:860", + "text": "expect(badge.backgroundColor, token.errorColor);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/badge/t_badge_test.dart:921", + "text": "expect(badge.backgroundColor, token.errorColor);", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "badgeBorderRadius", + "component": "badge", + "previousDecision": "pending", + "frozenTarget": { + "light": "2dp", + "dark": "2dp", + "expressions": [ + "4rpx" + ], + "source": [ + "packages/components/badge/badge.less:11" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/badge/badge.less", + "selector": ".t-badge--basic", + "property": "border-radius", + "kind": "render-property", + "value": "var(--td-badge-border-radius, 4rpx)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "badgeBubbleBorderRadius", + "component": "badge", + "previousDecision": "pending", + "frozenTarget": { + "light": "10dp 10dp 10dp 1px", + "dark": "10dp 10dp 10dp 1px", + "expressions": [ + "20rpx 20rpx 20rpx 1px" + ], + "source": [ + "packages/components/badge/badge.less:12" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/badge/badge.less", + "selector": ".t-badge--bubble", + "property": "border-radius", + "kind": "render-property", + "value": "var(--td-badge-bubble-border-radius, 20rpx 20rpx 20rpx 1px)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "badgeContentTextColor", + "component": "badge", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.9)", + "dark": "rgba(255, 255, 255, 90%)", + "expressions": [ + "@text-color-primary" + ], + "source": [ + "packages/components/badge/badge.less:4" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/badge/badge.less", + "selector": ".t-badge__content-text", + "property": "color", + "kind": "render-property", + "value": "var(--td-badge-content-text-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorPrimary": [] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "badgeContentTextFont", + "component": "badge", + "previousDecision": "pending", + "frozenTarget": { + "light": "16dp / 24dp PingFang SC, Microsoft YaHei, Arial Regular", + "dark": "16dp / 24dp PingFang SC, Microsoft YaHei, Arial Regular", + "expressions": [ + "@font-body-large" + ], + "source": [ + "packages/components/badge/badge.less:5" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/badge/badge.less", + "selector": ".t-badge__content-text", + "property": "font", + "kind": "render-property", + "value": "var(--td-badge-content-text-font, var(--td-font-body-large, 32rpx / 48rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "fontBodyLarge": [] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "badgeDotSize", + "component": "badge", + "previousDecision": "pending", + "frozenTarget": { + "light": "8dp", + "dark": "8dp", + "expressions": [ + "16rpx" + ], + "source": [ + "packages/components/badge/badge.less:13" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/badge/badge.less", + "selector": ".t-badge--dot", + "property": "height", + "kind": "render-property", + "value": "var(--td-badge-dot-size, 16rpx)" + }, + { + "file": "packages/components/badge/badge.less", + "selector": ".t-badge--dot", + "property": "min-width", + "kind": "render-property", + "value": "var(--td-badge-dot-size, 16rpx)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "badgeFont", + "component": "badge", + "previousDecision": "pending", + "frozenTarget": { + "light": "600 10dp / 16dp\n PingFang SC, Microsoft YaHei, Arial Regular", + "dark": "600 10dp / 16dp\n PingFang SC, Microsoft YaHei, Arial Regular", + "expressions": [ + "@font-mark-extraSmall" + ], + "source": [ + "packages/components/badge/badge.less:7" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/badge/badge.less", + "selector": ".t-badge--basic", + "property": "font", + "kind": "render-property", + "value": "var(--td-badge-font, var(--td-font-mark-extraSmall, 600 20rpx / 32rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "fontMarkExtraSmall": [ + "tdesign-component/lib/src/components/badge/t_badge_resolved_style.dart:41" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/badge/t_badge_test.dart:237", + "text": "expect(label.style?.fontSize, token.fontMarkExtraSmall?.size);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/badge/t_badge_test.dart:238", + "text": "expect(label.style?.height, token.fontMarkExtraSmall?.height);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/badge/t_badge_test.dart:239", + "text": "expect(label.style?.fontWeight, token.fontMarkExtraSmall?.fontWeight);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/badge/t_badge_test.dart:865", + "text": "expect(badge.textStyle?.fontSize, token.fontMarkExtraSmall?.size);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/badge/t_badge_test.dart:866", + "text": "expect(badge.textStyle?.height, token.fontMarkExtraSmall?.height);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/badge/t_badge_test.dart:882", + "text": "expect(badge.textStyle?.fontSize, token.fontMarkExtraSmall?.size);", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "badgeLargeFont", + "component": "badge", + "previousDecision": "pending", + "frozenTarget": { + "light": "600 12dp / 20dp PingFang SC, Microsoft YaHei, Arial Regular", + "dark": "600 12dp / 20dp PingFang SC, Microsoft YaHei, Arial Regular", + "expressions": [ + "@font-mark-small" + ], + "source": [ + "packages/components/badge/badge.less:16" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/badge/badge.less", + "selector": ".t-badge--large", + "property": "font", + "kind": "render-property", + "value": "var(--td-badge-large-font, var(--td-font-mark-small, 600 24rpx / 40rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "fontMarkSmall": [ + "tdesign-component/lib/src/components/badge/t_badge_resolved_style.dart:41" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/badge/t_badge_test.dart:357", + "text": "expect(label.style?.fontSize, token.fontMarkSmall?.size);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/badge/t_badge_test.dart:358", + "text": "expect(label.style?.height, token.fontMarkSmall?.height);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/badge/t_badge_test.dart:980", + "text": "expect(badges[1].textStyle?.fontSize, token.fontMarkSmall?.size);", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "badgeLargeHeight", + "component": "badge", + "previousDecision": "pending", + "frozenTarget": { + "light": "20dp", + "dark": "20dp", + "expressions": [ + "40rpx" + ], + "source": [ + "packages/components/badge/badge.less:17" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/badge/badge.less", + "selector": ".t-badge--large", + "property": "height", + "kind": "render-property", + "value": "var(--td-badge-large-height, 40rpx)" + }, + { + "file": "packages/components/badge/badge.less", + "selector": ".t-badge--large", + "property": "min-width", + "kind": "render-property", + "value": "var(--td-badge-large-height, 40rpx)" + }, + { + "file": "packages/components/badge/badge.less", + "selector": ".t-badge--large.t-badge--circle", + "property": "border-radius", + "kind": "render-property", + "value": "calc(var(--td-badge-large-height, 40rpx) / 2)" + }, + { + "file": "packages/components/badge/badge.less", + "selector": ".t-badge--large.t-badge--ribbon,\n.t-badge--large.t-badge--ribbon-right,\n.t-badge--large.t-badge--ribbon-left,\n.t-badge--large.t-badge--triangle-right,\n.t-badge--large.t-badge--triangle-left", + "property": "width", + "kind": "render-property", + "value": "calc(var(--td-badge-large-height, 40rpx) * 2)" + }, + { + "file": "packages/components/badge/badge.less", + "selector": ".t-badge--large.t-badge--ribbon,\n.t-badge--large.t-badge--ribbon-right,\n.t-badge--large.t-badge--ribbon-left,\n.t-badge--large.t-badge--triangle-right,\n.t-badge--large.t-badge--triangle-left", + "property": "height", + "kind": "render-property", + "value": "calc(var(--td-badge-large-height, 40rpx) * 2)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "badgeLargePadding", + "component": "badge", + "previousDecision": "pending", + "frozenTarget": { + "light": "5dp", + "dark": "5dp", + "expressions": [ + "10rpx" + ], + "source": [ + "packages/components/badge/badge.less:18" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/badge/badge.less", + "selector": ".t-badge--large", + "property": "padding", + "kind": "render-property", + "value": "0 var(--td-badge-large-padding, 10rpx)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "badgeTextColor", + "component": "badge", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(255, 255, 255, 1)", + "dark": "rgba(255, 255, 255, 90%)", + "expressions": [ + "@text-color-anti" + ], + "source": [ + "packages/components/badge/badge.less:3" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/badge/badge.less", + "selector": ".t-badge--basic", + "property": "color", + "kind": "render-property", + "value": "var(--td-badge-text-color, var(--td-text-color-anti, var(--td-font-white-1, #ffffff)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorAnti": [ + "tdesign-component/lib/src/components/badge/t_badge_resolved_style.dart:39" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/badge/t_badge_test.dart:266", + "text": "TThemeData.defaultData().textColorAnti,", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/badge/t_badge_test.dart:861", + "text": "expect(badge.textColor, token.textColorAnti);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/badge/t_badge_test.dart:922", + "text": "expect(badge.textColor, token.textColorAnti);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/badge/t_badge_test.dart:1000", + "text": "expect(badge.textStyle?.color, token.textColorAnti);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/badge/t_badge_test.dart:1026", + "text": "expect(badge.textColor, token.textColorAnti);", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "buttonBorderRadius", + "component": "button", + "previousDecision": "pending", + "frozenTarget": { + "light": "6dp", + "dark": "6dp", + "expressions": [ + "@radius-default" + ], + "source": [ + "packages/components/button/button.less:4" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button", + "property": "border-radius", + "kind": "render-property", + "value": "var(--td-button-border-radius, var(--td-radius-default, 12rpx))" + }, + { + "file": "packages/components/button/button.less", + "selector": ".t-button::after", + "property": "border-radius", + "kind": "render-property", + "value": "calc(var(--td-button-border-radius, var(--td-radius-default, 12rpx)) * 2)" + } + ], + "nonLessReferences": [ + { + "file": "packages/components/qrcode/_example/size/index.wxss", + "line": 24, + "text": "--td-button-border-radius: 0px;" + } + ] + }, + "flutterNameLocators": { + "radiusDefault": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:420", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:423" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/button/t_button_test.dart:3059", + "observedScenariosPerSdk": 16, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "buttonBorderWidth", + "component": "button", + "previousDecision": "pending", + "frozenTarget": { + "light": "2dp", + "dark": "2dp", + "expressions": [ + "4rpx" + ], + "source": [ + "packages/components/button/button.less:3" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--default::after", + "property": "border-width", + "kind": "render-property", + "value": "var(--td-button-border-width, 4rpx)" + }, + { + "file": "packages/components/button/button.less", + "selector": ".t-button--primary::after", + "property": "border-width", + "kind": "render-property", + "value": "var(--td-button-border-width, 4rpx)" + }, + { + "file": "packages/components/button/button.less", + "selector": ".t-button--light::after", + "property": "border-width", + "kind": "render-property", + "value": "var(--td-button-border-width, 4rpx)" + }, + { + "file": "packages/components/button/button.less", + "selector": ".t-button--danger::after", + "property": "border-width", + "kind": "render-property", + "value": "var(--td-button-border-width, 4rpx)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "platform-geometry-review-pending", + "runtimeDefaultVerified": false, + "testEntry": "tdesign-component/test/components/button/t_button_test.dart:3059", + "observedScenariosPerSdk": 48, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": "Flutter outline/ghost width is 1dp. Frozen Less declares 4rpx on a WeChat button pseudo-element. Native pseudo-element geometry/design evidence is still required; do not infer a 2dp Flutter border from the raw declaration.", + "candidateExistingTests": [], + "requiredEvidence": [ + "Flutter outline/ghost width is 1dp. Frozen Less declares 4rpx on a WeChat button pseudo-element. Native pseudo-element geometry/design evidence is still required; do not infer a 2dp Flutter border from the raw declaration.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "buttonDangerActiveBgColor", + "component": "button", + "previousDecision": "pending", + "frozenTarget": { + "light": "#ad352f", + "dark": "#a03f46", + "expressions": [ + "@error-color-active" + ], + "source": [ + "packages/components/button/button.less:112" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--danger.t-button--hover,\n.t-button--danger.t-button--hover::after", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-button-danger-active-bg-color, var(--td-error-color-active, var(--td-error-color-7, #ad352f)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "errorColorActive": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:299", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:323", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:567" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/button/t_button_test.dart:3059", + "observedScenariosPerSdk": 4, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "buttonDangerActiveBorderColor", + "component": "button", + "previousDecision": "pending", + "frozenTarget": { + "light": "#ad352f", + "dark": "#a03f46", + "expressions": [ + "@error-color-active" + ], + "source": [ + "packages/components/button/button.less:113" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--danger.t-button--hover,\n.t-button--danger.t-button--hover::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-button-danger-active-border-color, var(--td-error-color-active, var(--td-error-color-7, #ad352f)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "errorColorActive": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:299", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:323", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:567" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/button/t_button_test.dart:3084", + "text": "TButtonColorPreset.danger => token.errorColorActive,", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/button/t_button_test.dart:3223", + "text": "? token.errorColorActive", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/button/t_button_test.dart:3292", + "text": ": token.errorColorActive)", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Check whether the frozen fill border is visually represented by the Flutter fill; color equality alone does not prove border geometry.", + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "buttonDangerBgColor", + "component": "button", + "previousDecision": "pending", + "frozenTarget": { + "light": "#d54941", + "dark": "#c64751", + "expressions": [ + "@error-color" + ], + "source": [ + "packages/components/button/button.less:56" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--danger", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-button-danger-bg-color, var(--td-error-color, var(--td-error-color-6, #d54941)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "errorColor": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:214", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:260", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:261", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:348", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:386" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/button/t_button_test.dart:3059", + "observedScenariosPerSdk": 4, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "buttonDangerBorderColor", + "component": "button", + "previousDecision": "pending", + "frozenTarget": { + "light": "#d54941", + "dark": "#c64751", + "expressions": [ + "@error-color" + ], + "source": [ + "packages/components/button/button.less:55" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--danger", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-button-danger-border-color, var(--td-error-color, var(--td-error-color-6, #d54941)))" + }, + { + "file": "packages/components/button/button.less", + "selector": ".t-button--danger::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-button-danger-border-color, var(--td-error-color, var(--td-error-color-6, #d54941)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "errorColor": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:214", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:260", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:261", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:348", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:386" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/button/t_button_test.dart:2649", + "text": "expect(foreground(), token.errorColor);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/button/t_button_test.dart:2663", + "text": "token.errorColor.withValues(alpha: 0.08),", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/button/t_button_test.dart:2680", + "text": "expect(foreground(), token.errorColor);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/button/t_button_test.dart:3078", + "text": "TButtonColorPreset.danger => token.errorColor,", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/button/t_button_test.dart:3098", + "text": "TButtonColorPreset.danger => token.errorColor,", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Check whether the frozen fill border is visually represented by the Flutter fill; color equality alone does not prove border geometry.", + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "buttonDangerColor", + "component": "button", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(255, 255, 255, 1)", + "dark": "rgba(255, 255, 255, 90%)", + "expressions": [ + "@text-color-anti" + ], + "source": [ + "packages/components/button/button.less:54" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--danger", + "property": "color", + "kind": "render-property", + "value": "var(--td-button-danger-color, var(--td-text-color-anti, var(--td-font-white-1, #ffffff)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorAnti": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:212", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:215", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:542" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/button/t_button_test.dart:3059", + "observedScenariosPerSdk": 8, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "buttonDangerDashedBorderColor", + "component": "button", + "previousDecision": "pending", + "frozenTarget": { + "light": "#d54941", + "dark": "#c64751", + "expressions": [ + "@button-danger-dashed-color" + ], + "source": [ + "packages/components/button/button.less:83" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--dashed.t-button--danger,\n.t-button--dashed.t-button--danger::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-button-danger-dashed-border-color, var(--td-button-danger-dashed-color, var(--td-error-color, var(--td-error-color-6, #d54941))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Check whether the frozen fill border is visually represented by the Flutter fill; color equality alone does not prove border geometry.", + "Current TButtonVariant has no dashed case: resolve the supported capability/migration contract, then test the chosen behavior. Outline is not equivalent evidence.", + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "buttonDangerDashedColor", + "component": "button", + "previousDecision": "pending", + "frozenTarget": { + "light": "#d54941", + "dark": "#c64751", + "expressions": [ + "@error-color" + ], + "source": [ + "packages/components/button/button.less:82" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--dashed.t-button--danger", + "property": "color", + "kind": "render-property", + "value": "var(--td-button-danger-dashed-color, var(--td-error-color, var(--td-error-color-6, #d54941)))" + }, + { + "file": "packages/components/button/button.less", + "selector": ".t-button--dashed.t-button--danger,\n.t-button--dashed.t-button--danger::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-button-danger-dashed-border-color, var(--td-button-danger-dashed-color, var(--td-error-color, var(--td-error-color-6, #d54941))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "errorColor": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:214", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:260", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:261", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:348", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:386" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/button/t_button_test.dart:2649", + "text": "expect(foreground(), token.errorColor);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/button/t_button_test.dart:2663", + "text": "token.errorColor.withValues(alpha: 0.08),", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/button/t_button_test.dart:2680", + "text": "expect(foreground(), token.errorColor);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/button/t_button_test.dart:3078", + "text": "TButtonColorPreset.danger => token.errorColor,", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/button/t_button_test.dart:3098", + "text": "TButtonColorPreset.danger => token.errorColor,", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Current TButtonVariant has no dashed case: resolve the supported capability/migration contract, then test the chosen behavior. Outline is not equivalent evidence.", + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "buttonDangerDashedDisabledColor", + "component": "button", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(255, 255, 255, 1)", + "dark": "rgba(255, 255, 255, 90%)", + "expressions": [ + "@button-danger-disabled-color" + ], + "source": [ + "packages/components/button/button.less:84" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--dashed.t-button--danger.t-button--disabled", + "property": "color", + "kind": "render-property", + "value": "var(--td-button-danger-dashed-disabled-color, var(--td-button-danger-disabled-color, var(--td-font-white-1, #ffffff)))" + }, + { + "file": "packages/components/button/button.less", + "selector": ".t-button--dashed.t-button--danger.t-button--disabled::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-button-danger-dashed-disabled-color, var(--td-button-danger-disabled-color, var(--td-font-white-1, #ffffff)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Current TButtonVariant has no dashed case: resolve the supported capability/migration contract, then test the chosen behavior. Outline is not equivalent evidence.", + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "buttonDangerDisabledBg", + "component": "button", + "previousDecision": "pending", + "frozenTarget": { + "light": "#ffb9b0", + "dark": "#703439", + "expressions": [ + "@error-color-3" + ], + "source": [ + "packages/components/button/button.less:58" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--danger.t-button--disabled", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-button-danger-disabled-bg, var(--td-error-color-3, #ffb9b0))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "errorColor3": [] + }, + "approvedGlobalException": null, + "stage": "runtime-difference-needs-resolution", + "runtimeDefaultVerified": false, + "testEntry": "tdesign-component/test/components/button/t_button_test.dart:3059", + "observedScenariosPerSdk": 4, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Resolve recorded target/runtime differences through an implementation fix or documented design/contract adjudication.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "buttonDangerDisabledBorderColor", + "component": "button", + "previousDecision": "pending", + "frozenTarget": { + "light": "#ffb9b0", + "dark": "#703439", + "expressions": [ + "@error-color-3" + ], + "source": [ + "packages/components/button/button.less:59" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--danger.t-button--disabled,\n.t-button--danger.t-button--disabled::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-button-danger-disabled-border-color, var(--td-error-color-3, #ffb9b0))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "errorColor3": [] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/button/t_button_test.dart:3166", + "text": "? token.errorColor3", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/button/t_button_test.dart:3217", + "text": "? token.errorColor3", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/button/t_button_test.dart:3241", + "text": "? token.errorColor3", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Check whether the frozen fill border is visually represented by the Flutter fill; color equality alone does not prove border geometry.", + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "buttonDangerDisabledColor", + "component": "button", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(255, 255, 255, 1)", + "dark": "rgba(255, 255, 255, 90%)", + "expressions": [ + "@font-white-1" + ], + "source": [ + "packages/components/button/button.less:57" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--danger.t-button--disabled", + "property": "color", + "kind": "render-property", + "value": "var(--td-button-danger-disabled-color, var(--td-font-white-1, #ffffff))" + }, + { + "file": "packages/components/button/button.less", + "selector": ".t-button--text.t-button--danger.t-button--disabled", + "property": "color", + "kind": "render-property", + "value": "var(--td-button-danger-text-disabled-color, var(--td-button-danger-disabled-color, var(--td-font-white-1, #ffffff)))" + }, + { + "file": "packages/components/button/button.less", + "selector": ".t-button--dashed.t-button--danger.t-button--disabled", + "property": "color", + "kind": "render-property", + "value": "var(--td-button-danger-dashed-disabled-color, var(--td-button-danger-disabled-color, var(--td-font-white-1, #ffffff)))" + }, + { + "file": "packages/components/button/button.less", + "selector": ".t-button--dashed.t-button--danger.t-button--disabled::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-button-danger-dashed-disabled-color, var(--td-button-danger-disabled-color, var(--td-font-white-1, #ffffff)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "fontWhite1": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:390" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-difference-needs-resolution", + "runtimeDefaultVerified": false, + "testEntry": "tdesign-component/test/components/button/t_button_test.dart:3059", + "observedScenariosPerSdk": 4, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Resolve recorded target/runtime differences through an implementation fix or documented design/contract adjudication.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "buttonDangerOutlineActiveBgColor", + "component": "button", + "previousDecision": "pending", + "frozenTarget": { + "light": "#e7e7e7", + "dark": "#2c2c2c", + "expressions": [ + "@bg-color-container-active" + ], + "source": [ + "packages/components/button/button.less:118" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--outline.t-button--danger.t-button--hover::after", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-button-danger-outline-active-bg-color, var(--td-bg-color-container-active, var(--td-gray-color-3, #e7e7e7)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "bgColorContainerActive": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:280", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:358" + ] + }, + "approvedGlobalException": "引用已批准修正的浅色 grayColor3", + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/button/t_button_test.dart:3059", + "observedScenariosPerSdk": 4, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "buttonDangerOutlineActiveBorderColor", + "component": "button", + "previousDecision": "pending", + "frozenTarget": { + "light": "#ad352f", + "dark": "#a03f46", + "expressions": [ + "@error-color-active" + ], + "source": [ + "packages/components/button/button.less:119" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--outline.t-button--danger.t-button--hover", + "property": "color", + "kind": "render-property", + "value": "var(--td-button-danger-outline-active-border-color, var(--td-error-color-active, var(--td-error-color-7, #ad352f)))" + }, + { + "file": "packages/components/button/button.less", + "selector": ".t-button--outline.t-button--danger.t-button--hover::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-button-danger-outline-active-border-color, var(--td-error-color-active, var(--td-error-color-7, #ad352f)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "errorColorActive": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:299", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:323", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:567" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/button/t_button_test.dart:3059", + "observedScenariosPerSdk": 4, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "buttonDangerOutlineBorderColor", + "component": "button", + "previousDecision": "pending", + "frozenTarget": { + "light": "#d54941", + "dark": "#c64751", + "expressions": [ + "@button-danger-outline-color" + ], + "source": [ + "packages/components/button/button.less:70" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--outline.t-button--danger,\n.t-button--outline.t-button--danger::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-button-danger-outline-border-color, var(--td-button-danger-outline-color, var(--td-error-color, var(--td-error-color-6, #d54941))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/button/t_button_test.dart:3059", + "observedScenariosPerSdk": 4, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "buttonDangerOutlineColor", + "component": "button", + "previousDecision": "pending", + "frozenTarget": { + "light": "#d54941", + "dark": "#c64751", + "expressions": [ + "@error-color" + ], + "source": [ + "packages/components/button/button.less:69" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--outline.t-button--danger", + "property": "color", + "kind": "render-property", + "value": "var(--td-button-danger-outline-color, var(--td-error-color, var(--td-error-color-6, #d54941)))" + }, + { + "file": "packages/components/button/button.less", + "selector": ".t-button--outline.t-button--danger,\n.t-button--outline.t-button--danger::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-button-danger-outline-border-color, var(--td-button-danger-outline-color, var(--td-error-color, var(--td-error-color-6, #d54941))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "errorColor": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:214", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:260", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:261", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:348", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:386" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/button/t_button_test.dart:3059", + "observedScenariosPerSdk": 8, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "buttonDangerOutlineDisabledColor", + "component": "button", + "previousDecision": "pending", + "frozenTarget": { + "light": "#ffb9b0", + "dark": "#703439", + "expressions": [ + "@error-color-3" + ], + "source": [ + "packages/components/button/button.less:71" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--outline.t-button--danger.t-button--disabled", + "property": "color", + "kind": "render-property", + "value": "var(--td-button-danger-outline-disabled-color, var(--td-error-color-3, #ffb9b0))" + }, + { + "file": "packages/components/button/button.less", + "selector": ".t-button--outline.t-button--danger.t-button--disabled,\n.t-button--outline.t-button--danger.t-button--disabled::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-button-danger-outline-disabled-color, var(--td-error-color-3, #ffb9b0))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "errorColor3": [] + }, + "approvedGlobalException": null, + "stage": "runtime-difference-needs-resolution", + "runtimeDefaultVerified": false, + "testEntry": "tdesign-component/test/components/button/t_button_test.dart:3059", + "observedScenariosPerSdk": 8, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Resolve recorded target/runtime differences through an implementation fix or documented design/contract adjudication.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "buttonDangerTextActiveBgColor", + "component": "button", + "previousDecision": "pending", + "frozenTarget": { + "light": "#e7e7e7", + "dark": "#2c2c2c", + "expressions": [ + "@bg-color-container-active" + ], + "source": [ + "packages/components/button/button.less:124" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--text.t-button--danger.t-button--hover,\n.t-button--text.t-button--danger.t-button--hover::after", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-button-danger-text-active-bg-color, var(--td-bg-color-container-active, var(--td-gray-color-3, #e7e7e7)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "bgColorContainerActive": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:280", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:358" + ] + }, + "approvedGlobalException": "引用已批准修正的浅色 grayColor3", + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/button/t_button_test.dart:3059", + "observedScenariosPerSdk": 4, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "buttonDangerTextColor", + "component": "button", + "previousDecision": "pending", + "frozenTarget": { + "light": "#d54941", + "dark": "#c64751", + "expressions": [ + "@error-color" + ], + "source": [ + "packages/components/button/button.less:89" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--text.t-button--danger", + "property": "color", + "kind": "render-property", + "value": "var(--td-button-danger-text-color, var(--td-error-color, var(--td-error-color-6, #d54941)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "errorColor": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:214", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:260", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:261", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:348", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:386" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/button/t_button_test.dart:3059", + "observedScenariosPerSdk": 8, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "buttonDangerTextDisabledColor", + "component": "button", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(255, 255, 255, 1)", + "dark": "rgba(255, 255, 255, 90%)", + "expressions": [ + "@button-danger-disabled-color" + ], + "source": [ + "packages/components/button/button.less:90" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--text.t-button--danger.t-button--disabled", + "property": "color", + "kind": "render-property", + "value": "var(--td-button-danger-text-disabled-color, var(--td-button-danger-disabled-color, var(--td-font-white-1, #ffffff)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-difference-needs-resolution", + "runtimeDefaultVerified": false, + "testEntry": "tdesign-component/test/components/button/t_button_test.dart:3059", + "observedScenariosPerSdk": 4, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Resolve recorded target/runtime differences through an implementation fix or documented design/contract adjudication.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "buttonDefaultActiveBgColor", + "component": "button", + "previousDecision": "pending", + "frozenTarget": { + "light": "#a6a6a6", + "dark": "#4b4b4b", + "expressions": [ + "@bg-color-component-active" + ], + "source": [ + "packages/components/button/button.less:106" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--default.t-button--hover,\n.t-button--default.t-button--hover::after", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-button-default-active-bg-color, var(--td-bg-color-component-active, var(--td-gray-color-6, #a6a6a6)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "bgColorComponentActive": [] + }, + "approvedGlobalException": null, + "stage": "runtime-difference-needs-resolution", + "runtimeDefaultVerified": false, + "testEntry": "tdesign-component/test/components/button/t_button_test.dart:3059", + "observedScenariosPerSdk": 4, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Resolve recorded target/runtime differences through an implementation fix or documented design/contract adjudication.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "buttonDefaultActiveBorderColor", + "component": "button", + "previousDecision": "pending", + "frozenTarget": { + "light": "#a6a6a6", + "dark": "#4b4b4b", + "expressions": [ + "@bg-color-component-active" + ], + "source": [ + "packages/components/button/button.less:107" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--default.t-button--hover,\n.t-button--default.t-button--hover::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-button-default-active-border-color, var(--td-bg-color-component-active, var(--td-gray-color-6, #a6a6a6)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "bgColorComponentActive": [] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/button/t_button_test.dart:3082", + "text": "TButtonColorPreset.defaultTheme => token.bgColorComponentActive,", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Check whether the frozen fill border is visually represented by the Flutter fill; color equality alone does not prove border geometry.", + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "buttonDefaultBgColor", + "component": "button", + "previousDecision": "pending", + "frozenTarget": { + "light": "#e7e7e7", + "dark": "#383838", + "expressions": [ + "@bg-color-component" + ], + "source": [ + "packages/components/button/button.less:34" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--default", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-button-default-bg-color, var(--td-bg-color-component, var(--td-gray-color-3, #e7e7e7)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "bgColorComponent": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:220", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:569" + ] + }, + "approvedGlobalException": "引用已批准修正的浅色 grayColor3", + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/button/t_button_test.dart:3059", + "observedScenariosPerSdk": 4, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "buttonDefaultBorderColor", + "component": "button", + "previousDecision": "pending", + "frozenTarget": { + "light": "#e7e7e7", + "dark": "#383838", + "expressions": [ + "@bg-color-component" + ], + "source": [ + "packages/components/button/button.less:35" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--default", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-button-default-border-color, var(--td-bg-color-component, var(--td-gray-color-3, #e7e7e7)))" + }, + { + "file": "packages/components/button/button.less", + "selector": ".t-button--default::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-button-default-border-color, var(--td-bg-color-component, var(--td-gray-color-3, #e7e7e7)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "bgColorComponent": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:220", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:569" + ] + }, + "approvedGlobalException": "引用已批准修正的浅色 grayColor3", + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/button/t_button_test.dart:3076", + "text": "TButtonColorPreset.defaultTheme => token.bgColorComponent,", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/button/t_button_theme_priority_test.dart:55", + "text": "expect(TThemeData.defaultData().bgColorComponent, const Color(0xFFE8E8E8));", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/button/t_button_theme_priority_test.dart:74", + "text": "expect(await resolve(generatedTheme), token.bgColorComponent);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/button/t_button_theme_priority_test.dart:81", + "text": "expect(await resolve(customizedTheme), token.bgColorComponent);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/button/t_button_theme_priority_test.dart:87", + "text": "expect(background(tester), TThemeData.defaultData().bgColorComponent);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/button/t_button_theme_priority_test.dart:107", + "text": "expect(background(tester), TThemeData.defaultData().bgColorComponent);", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Check whether the frozen fill border is visually represented by the Flutter fill; color equality alone does not prove border geometry.", + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "buttonDefaultColor", + "component": "button", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.9)", + "dark": "rgba(255, 255, 255, 90%)", + "expressions": [ + "@text-color-primary" + ], + "source": [ + "packages/components/button/button.less:33" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--default", + "property": "color", + "kind": "render-property", + "value": "var(--td-button-default-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + }, + { + "file": "packages/components/button/button.less", + "selector": ".t-button--text", + "property": "color", + "kind": "render-property", + "value": "var(--td-button-default-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorPrimary": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:149", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:221", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:267", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:352" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/button/t_button_test.dart:3059", + "observedScenariosPerSdk": 8, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "buttonDefaultDisabledBg", + "component": "button", + "previousDecision": "pending", + "frozenTarget": { + "light": "#eeeeee", + "dark": "#2c2c2c", + "expressions": [ + "@bg-color-component-disabled" + ], + "source": [ + "packages/components/button/button.less:37" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--default.t-button--disabled", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-button-default-disabled-bg, var(--td-bg-color-component-disabled, var(--td-gray-color-2, #eeeeee)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "bgColorComponentDisabled": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:531" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/button/t_button_test.dart:3059", + "observedScenariosPerSdk": 4, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "buttonDefaultDisabledBorderColor", + "component": "button", + "previousDecision": "pending", + "frozenTarget": { + "light": "#eeeeee", + "dark": "#2c2c2c", + "expressions": [ + "@bg-color-component-disabled" + ], + "source": [ + "packages/components/button/button.less:38" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--default.t-button--disabled,\n.t-button--default.t-button--disabled::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-button-default-disabled-border-color, var(--td-bg-color-component-disabled, var(--td-gray-color-2, #eeeeee)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "bgColorComponentDisabled": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:531" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/button/t_button_test.dart:3089", + "text": "token.bgColorComponentDisabled,", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Check whether the frozen fill border is visually represented by the Flutter fill; color equality alone does not prove border geometry.", + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "buttonDefaultDisabledColor", + "component": "button", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.26)", + "dark": "rgba(255, 255, 255, 22%)", + "expressions": [ + "@text-color-disabled" + ], + "source": [ + "packages/components/button/button.less:36" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--default.t-button--disabled", + "property": "color", + "kind": "render-property", + "value": "var(--td-button-default-disabled-color, var(--td-text-color-disabled, var(--td-font-gray-4, rgba(0, 0, 0, 0.26))))" + }, + { + "file": "packages/components/button/button.less", + "selector": ".t-button--text.t-button--disabled", + "property": "color", + "kind": "render-property", + "value": "var(--td-button-default-disabled-color, var(--td-text-color-disabled, var(--td-font-gray-4, rgba(0, 0, 0, 0.26))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorDisabled": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:545", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:557" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/button/t_button_test.dart:3059", + "observedScenariosPerSdk": 4, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "buttonDefaultOutlineActiveBgColor", + "component": "button", + "previousDecision": "pending", + "frozenTarget": { + "light": "#e7e7e7", + "dark": "#2c2c2c", + "expressions": [ + "@bg-color-container-active" + ], + "source": [ + "packages/components/button/button.less:114" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--outline.t-button--hover,\n.t-button--outline.t-button--hover::after", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-button-default-outline-active-bg-color, var(--td-bg-color-container-active, var(--td-gray-color-3, #e7e7e7)))" + }, + { + "file": "packages/components/button/button.less", + "selector": ".t-button--dashed.t-button--hover,\n.t-button--dashed.t-button--hover::after", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-button-default-outline-active-bg-color, var(--td-bg-color-container-active, var(--td-gray-color-3, #e7e7e7)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "bgColorContainerActive": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:280", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:358" + ] + }, + "approvedGlobalException": "引用已批准修正的浅色 grayColor3", + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/button/t_button_test.dart:3059", + "observedScenariosPerSdk": 4, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "buttonDefaultOutlineActiveBorderColor", + "component": "button", + "previousDecision": "pending", + "frozenTarget": { + "light": "#dcdcdc", + "dark": "#5e5e5e", + "expressions": [ + "@component-border" + ], + "source": [ + "packages/components/button/button.less:115" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--outline.t-button--hover,\n.t-button--outline.t-button--hover::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-button-default-outline-active-border-color, var(--td-component-border, var(--td-gray-color-4, #dcdcdc)))" + }, + { + "file": "packages/components/button/button.less", + "selector": ".t-button--dashed.t-button--hover,\n.t-button--dashed.t-button--hover::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-button-default-outline-active-border-color, var(--td-component-border, var(--td-gray-color-4, #dcdcdc)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "componentBorder": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:266", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:289", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:309" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/button/t_button_test.dart:3059", + "observedScenariosPerSdk": 4, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "buttonDefaultOutlineBorderColor", + "component": "button", + "previousDecision": "pending", + "frozenTarget": { + "light": "#dcdcdc", + "dark": "#5e5e5e", + "expressions": [ + "@component-border" + ], + "source": [ + "packages/components/button/button.less:62" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--outline,\n.t-button--outline::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-button-default-outline-border-color, var(--td-component-border, var(--td-gray-color-4, #dcdcdc)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "componentBorder": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:266", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:289", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:309" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/button/t_button_test.dart:3059", + "observedScenariosPerSdk": 4, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "buttonDefaultOutlineColor", + "component": "button", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.9)", + "dark": "rgba(255, 255, 255, 90%)", + "expressions": [ + "@text-color-primary" + ], + "source": [ + "packages/components/button/button.less:61" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--outline", + "property": "color", + "kind": "render-property", + "value": "var(--td-button-default-outline-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorPrimary": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:149", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:221", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:267", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:352" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/button/t_button_test.dart:3059", + "observedScenariosPerSdk": 8, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "buttonDefaultOutlineDisabledColor", + "component": "button", + "previousDecision": "pending", + "frozenTarget": { + "light": "#dcdcdc", + "dark": "#5e5e5e", + "expressions": [ + "@component-border" + ], + "source": [ + "packages/components/button/button.less:63" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--outline.t-button--disabled", + "property": "color", + "kind": "render-property", + "value": "var(--td-button-default-outline-disabled-color, var(--td-component-border, var(--td-gray-color-4, #dcdcdc)))" + }, + { + "file": "packages/components/button/button.less", + "selector": ".t-button--outline.t-button--disabled,\n.t-button--outline.t-button--disabled::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-button-default-outline-disabled-color, var(--td-component-border, var(--td-gray-color-4, #dcdcdc)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "componentBorder": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:266", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:289", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:309" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/button/t_button_test.dart:3059", + "observedScenariosPerSdk": 8, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "buttonDefaultTextActiveBgColor", + "component": "button", + "previousDecision": "pending", + "frozenTarget": { + "light": "#e7e7e7", + "dark": "#2c2c2c", + "expressions": [ + "@bg-color-container-active" + ], + "source": [ + "packages/components/button/button.less:122" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--text.t-button--hover,\n.t-button--text.t-button--hover::after", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-button-default-text-active-bg-color, var(--td-bg-color-container-active, var(--td-gray-color-3, #e7e7e7)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "bgColorContainerActive": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:280", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:358" + ] + }, + "approvedGlobalException": "引用已批准修正的浅色 grayColor3", + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/button/t_button_test.dart:3059", + "observedScenariosPerSdk": 4, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "buttonExtraSmallFont", + "component": "button", + "previousDecision": "pending", + "frozenTarget": { + "light": "600 14dp / 22dp PingFang SC, Microsoft YaHei, Arial Regular", + "dark": "600 14dp / 22dp PingFang SC, Microsoft YaHei, Arial Regular", + "expressions": [ + "@font-mark-medium" + ], + "source": [ + "packages/components/button/button.less:6" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--size-extra-small", + "property": "font", + "kind": "render-property", + "value": "var(--td-button-extra-small-font, var(--td-font-mark-medium, 600 28rpx / 44rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "fontMarkMedium": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:477" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/button/t_button_test.dart:3059", + "observedScenariosPerSdk": 4, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "buttonGhostBorderColor", + "component": "button", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(255, 255, 255, 1)", + "dark": "rgba(255, 255, 255, 90%)", + "expressions": [ + "@button-ghost-color" + ], + "source": [ + "packages/components/button/button.less:95" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--ghost,\n.t-button--ghost::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-button-ghost-border-color, var(--td-button-ghost-color, var(--td-text-color-anti, var(--td-font-white-1, #ffffff))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-difference-needs-resolution", + "runtimeDefaultVerified": false, + "testEntry": "tdesign-component/test/components/button/t_button_test.dart:3059", + "observedScenariosPerSdk": 4, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Resolve recorded target/runtime differences through an implementation fix or documented design/contract adjudication.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "buttonGhostColor", + "component": "button", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(255, 255, 255, 1)", + "dark": "rgba(255, 255, 255, 90%)", + "expressions": [ + "@text-color-anti" + ], + "source": [ + "packages/components/button/button.less:94" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--ghost", + "property": "color", + "kind": "render-property", + "value": "var(--td-button-ghost-color, var(--td-text-color-anti, var(--td-font-white-1, #ffffff)))" + }, + { + "file": "packages/components/button/button.less", + "selector": ".t-button--ghost,\n.t-button--ghost::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-button-ghost-border-color, var(--td-button-ghost-color, var(--td-text-color-anti, var(--td-font-white-1, #ffffff))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorAnti": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:212", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:215", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:542" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-difference-needs-resolution", + "runtimeDefaultVerified": false, + "testEntry": "tdesign-component/test/components/button/t_button_test.dart:3059", + "observedScenariosPerSdk": 4, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Resolve recorded target/runtime differences through an implementation fix or documented design/contract adjudication.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "buttonGhostDangerBorderColor", + "component": "button", + "previousDecision": "pending", + "frozenTarget": { + "light": "#d54941", + "dark": "#c64751", + "expressions": [ + "@error-color" + ], + "source": [ + "packages/components/button/button.less:102" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--ghost.t-button--danger,\n.t-button--ghost.t-button--danger::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-button-ghost-danger-border-color, var(--td-error-color, var(--td-error-color-6, #d54941)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "errorColor": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:214", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:260", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:261", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:348", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:386" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/button/t_button_test.dart:3059", + "observedScenariosPerSdk": 4, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "buttonGhostDangerColor", + "component": "button", + "previousDecision": "pending", + "frozenTarget": { + "light": "#d54941", + "dark": "#c64751", + "expressions": [ + "@error-color" + ], + "source": [ + "packages/components/button/button.less:101" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--ghost.t-button--danger", + "property": "color", + "kind": "render-property", + "value": "var(--td-button-ghost-danger-color, var(--td-error-color, var(--td-error-color-6, #d54941)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "errorColor": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:214", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:260", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:261", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:348", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:386" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/button/t_button_test.dart:3059", + "observedScenariosPerSdk": 4, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "buttonGhostDangerHoverColor", + "component": "button", + "previousDecision": "pending", + "frozenTarget": { + "light": "#ad352f", + "dark": "#a03f46", + "expressions": [ + "@error-color-active" + ], + "source": [ + "packages/components/button/button.less:103" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--ghost.t-button--danger.t-button--hover", + "property": "color", + "kind": "render-property", + "value": "var(--td-button-ghost-danger-hover-color, var(--td-error-color-active, var(--td-error-color-7, #ad352f)))" + }, + { + "file": "packages/components/button/button.less", + "selector": ".t-button--ghost.t-button--danger.t-button--hover,\n.t-button--ghost.t-button--danger.t-button--hover::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-button-ghost-danger-hover-color, var(--td-error-color-active, var(--td-error-color-7, #ad352f)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "errorColorActive": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:299", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:323", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:567" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-difference-needs-resolution", + "runtimeDefaultVerified": false, + "testEntry": "tdesign-component/test/components/button/t_button_test.dart:3059", + "observedScenariosPerSdk": 4, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Resolve recorded target/runtime differences through an implementation fix or documented design/contract adjudication.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "buttonGhostDisabledColor", + "component": "button", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(255, 255, 255, 0.22)", + "dark": "rgba(255, 255, 255, 22%)", + "expressions": [ + "@font-white-4" + ], + "source": [ + "packages/components/button/button.less:96" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--ghost.t-button--primary.t-button--disabled", + "property": "color", + "kind": "render-property", + "value": "var(--td-button-ghost-disabled-color, var(--td-font-white-4, rgba(255, 255, 255, 0.22)))" + }, + { + "file": "packages/components/button/button.less", + "selector": ".t-button--ghost.t-button--primary.t-button--disabled,\n.t-button--ghost.t-button--primary.t-button--disabled::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-button-ghost-disabled-color, var(--td-font-white-4, rgba(255, 255, 255, 0.22)))" + }, + { + "file": "packages/components/button/button.less", + "selector": ".t-button--ghost.t-button--danger.t-button--disabled", + "property": "color", + "kind": "render-property", + "value": "var(--td-button-ghost-disabled-color, var(--td-font-white-4, rgba(255, 255, 255, 0.22)))" + }, + { + "file": "packages/components/button/button.less", + "selector": ".t-button--ghost.t-button--danger.t-button--disabled,\n.t-button--ghost.t-button--danger.t-button--disabled::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-button-ghost-disabled-color, var(--td-font-white-4, rgba(255, 255, 255, 0.22)))" + }, + { + "file": "packages/components/button/button.less", + "selector": ".t-button--ghost.t-button--default.t-button--disabled", + "property": "color", + "kind": "render-property", + "value": "var(--td-button-ghost-disabled-color, var(--td-font-white-4, rgba(255, 255, 255, 0.22)))" + }, + { + "file": "packages/components/button/button.less", + "selector": ".t-button--ghost.t-button--default.t-button--disabled,\n.t-button--ghost.t-button--default.t-button--disabled::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-button-ghost-disabled-color, var(--td-font-white-4, rgba(255, 255, 255, 0.22)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "fontWhite4": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:397", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:403", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:542" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/button/t_button_test.dart:3059", + "observedScenariosPerSdk": 12, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "buttonGhostHoverColor", + "component": "button", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(255, 255, 255, 0.55)", + "dark": "rgba(255, 255, 255, 55%)", + "expressions": [ + "@font-white-2" + ], + "source": [ + "packages/components/button/button.less:97" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--ghost.t-button--default.t-button--hover", + "property": "color", + "kind": "render-property", + "value": "var(--td-button-ghost-hover-color, var(--td-font-white-2, rgba(255, 255, 255, 0.55)))" + }, + { + "file": "packages/components/button/button.less", + "selector": ".t-button--ghost.t-button--default.t-button--hover,\n.t-button--ghost.t-button--default.t-button--hover::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-button-ghost-hover-color, var(--td-font-white-2, rgba(255, 255, 255, 0.55)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "fontWhite2": [] + }, + "approvedGlobalException": null, + "stage": "runtime-difference-needs-resolution", + "runtimeDefaultVerified": false, + "testEntry": "tdesign-component/test/components/button/t_button_test.dart:3059", + "observedScenariosPerSdk": 4, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Resolve recorded target/runtime differences through an implementation fix or documented design/contract adjudication.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "buttonGhostPrimaryBorderColor", + "component": "button", + "previousDecision": "pending", + "frozenTarget": { + "light": "#0052d9", + "dark": "#4582e6", + "expressions": [ + "@brand-color" + ], + "source": [ + "packages/components/button/button.less:99" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--ghost.t-button--primary,\n.t-button--ghost.t-button--primary::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-button-ghost-primary-border-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "brandColor": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:211", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:218", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:257", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:258", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:263", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:264", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:346", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:350", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:384", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:388" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/button/t_button_test.dart:3059", + "observedScenariosPerSdk": 4, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "buttonGhostPrimaryColor", + "component": "button", + "previousDecision": "pending", + "frozenTarget": { + "light": "#0052d9", + "dark": "#4582e6", + "expressions": [ + "@brand-color" + ], + "source": [ + "packages/components/button/button.less:98" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--ghost.t-button--primary", + "property": "color", + "kind": "render-property", + "value": "var(--td-button-ghost-primary-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "brandColor": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:211", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:218", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:257", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:258", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:263", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:264", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:346", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:350", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:384", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:388" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/button/t_button_test.dart:3059", + "observedScenariosPerSdk": 4, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "buttonGhostPrimaryHoverColor", + "component": "button", + "previousDecision": "pending", + "frozenTarget": { + "light": "#003cab", + "dark": "#699ef5", + "expressions": [ + "@brand-color-active" + ], + "source": [ + "packages/components/button/button.less:100" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--ghost.t-button--primary.t-button--hover", + "property": "color", + "kind": "render-property", + "value": "var(--td-button-ghost-primary-hover-color, var(--td-brand-color-active, var(--td-primary-color-8, #003cab)))" + }, + { + "file": "packages/components/button/button.less", + "selector": ".t-button--ghost.t-button--primary.t-button--hover,\n.t-button--ghost.t-button--primary.t-button--hover::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-button-ghost-primary-hover-color, var(--td-brand-color-active, var(--td-primary-color-8, #003cab)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "brandColorActive": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:298", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:322", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:566" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-difference-needs-resolution", + "runtimeDefaultVerified": false, + "testEntry": "tdesign-component/test/components/button/t_button_test.dart:3059", + "observedScenariosPerSdk": 4, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Resolve recorded target/runtime differences through an implementation fix or documented design/contract adjudication.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "buttonIconBorderRadius", + "component": "button", + "previousDecision": "pending", + "frozenTarget": { + "light": "4dp", + "dark": "4dp", + "expressions": [ + "8rpx" + ], + "source": [ + "packages/components/button/button.less:18" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button__icon", + "property": "border-radius", + "kind": "render-property", + "value": "var(--td-button-icon-border-radius, 8rpx)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "buttonIconSpacer", + "component": "button", + "previousDecision": "pending", + "frozenTarget": { + "light": "8dp", + "dark": "8dp", + "expressions": [ + "@spacer" + ], + "source": [ + "packages/components/button/button.less:17" + ] + }, + "compiledSource": { + "conclusion": "no-consumer-in-compiled-css-or-other-source", + "selectors": [], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "spacer": [] + }, + "approvedGlobalException": null, + "stage": "no-frozen-source-consumer-found", + "runtimeDefaultVerified": false, + "testEntry": "tdesign-component/test/components/button/t_button_test.dart:3059", + "observedScenariosPerSdk": 16, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": "The declaration has no consumer in compiled frozen CSS or other frozen source. The observed Flutter 4dp gap versus declared 8dp alone is not a defect; inspect actual upstream markup/global spacer use before making a visual change.", + "candidateExistingTests": [], + "requiredEvidence": [], + "finalPaintVerified": false + }, + { + "name": "buttonLargeFont", + "component": "button", + "previousDecision": "pending", + "frozenTarget": { + "light": "600 16dp / 24dp PingFang SC, Microsoft YaHei, Arial Regular", + "dark": "600 16dp / 24dp PingFang SC, Microsoft YaHei, Arial Regular", + "expressions": [ + "@font-mark-large" + ], + "source": [ + "packages/components/button/button.less:9" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--size-large", + "property": "font", + "kind": "render-property", + "value": "var(--td-button-large-font, var(--td-font-mark-large, 600 32rpx / 48rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "fontMarkLarge": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:476" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/button/t_button_test.dart:3059", + "observedScenariosPerSdk": 4, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "buttonLightActiveBgColor", + "component": "button", + "previousDecision": "pending", + "frozenTarget": { + "light": "#d9e1ff", + "dark": "#173463", + "expressions": [ + "@brand-color-light-active" + ], + "source": [ + "packages/components/button/button.less:108" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--light.t-button--hover,\n.t-button--light.t-button--hover::after", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-button-light-active-bg-color, var(--td-brand-color-light-active, var(--td-primary-color-2, #d9e1ff)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "brandColorLightActive": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:279" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-difference-needs-resolution", + "runtimeDefaultVerified": false, + "testEntry": "tdesign-component/test/components/button/t_button_test.dart:3059", + "observedScenariosPerSdk": 4, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Resolve recorded target/runtime differences through an implementation fix or documented design/contract adjudication.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "buttonLightActiveBorderColor", + "component": "button", + "previousDecision": "pending", + "frozenTarget": { + "light": "#d9e1ff", + "dark": "#173463", + "expressions": [ + "@brand-color-light-active" + ], + "source": [ + "packages/components/button/button.less:109" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--light.t-button--hover,\n.t-button--light.t-button--hover::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-button-light-active-border-color, var(--td-brand-color-light-active, var(--td-primary-color-2, #d9e1ff)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "brandColorLightActive": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:279" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/button/t_button_test.dart:2042", + "text": "token.brandColorLightActive,", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/button/t_button_test.dart:3085", + "text": "TButtonColorPreset.light => token.brandColorLightActive,", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/button/t_button_test.dart:3204", + "text": "? token.brandColorLightActive", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Check whether the frozen fill border is visually represented by the Flutter fill; color equality alone does not prove border geometry.", + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "buttonLightBgColor", + "component": "button", + "previousDecision": "pending", + "frozenTarget": { + "light": "#f2f3ff", + "dark": "#1b2f51", + "expressions": [ + "@brand-color-light" + ], + "source": [ + "packages/components/button/button.less:49" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--light", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-button-light-bg-color, var(--td-brand-color-light, var(--td-primary-color-1, #f2f3ff)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "brandColorLight": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:217", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:283", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:530" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/button/t_button_test.dart:3059", + "observedScenariosPerSdk": 4, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "buttonLightBorderColor", + "component": "button", + "previousDecision": "pending", + "frozenTarget": { + "light": "#f2f3ff", + "dark": "#1b2f51", + "expressions": [ + "@brand-color-light" + ], + "source": [ + "packages/components/button/button.less:48" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--light", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-button-light-border-color, var(--td-brand-color-light, var(--td-primary-color-1, #f2f3ff)))" + }, + { + "file": "packages/components/button/button.less", + "selector": ".t-button--light::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-button-light-border-color, var(--td-brand-color-light, var(--td-primary-color-1, #f2f3ff)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "brandColorLight": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:217", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:283", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:530" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/button/t_button_test.dart:2012", + "text": "expect(button.style?.backgroundColor?.resolve({}), token.brandColorLight);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/button/t_button_test.dart:2041", + "text": "token.brandColorLight,", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/button/t_button_test.dart:3079", + "text": "TButtonColorPreset.light => token.brandColorLight,", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/button/t_button_test.dart:3092", + "text": "TButtonColorPreset.light => token.brandColorLight,", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/button/t_button_test.dart:3211", + "text": "token.brandColorLight,", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Check whether the frozen fill border is visually represented by the Flutter fill; color equality alone does not prove border geometry.", + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "buttonLightColor", + "component": "button", + "previousDecision": "pending", + "frozenTarget": { + "light": "#0052d9", + "dark": "#4582e6", + "expressions": [ + "@brand-color" + ], + "source": [ + "packages/components/button/button.less:47" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--light", + "property": "color", + "kind": "render-property", + "value": "var(--td-button-light-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "brandColor": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:211", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:218", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:257", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:258", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:263", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:264", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:346", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:350", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:384", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:388" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/button/t_button_test.dart:3059", + "observedScenariosPerSdk": 8, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "buttonLightDisabledBg", + "component": "button", + "previousDecision": "pending", + "frozenTarget": { + "light": "#f2f3ff", + "dark": "#1b2f51", + "expressions": [ + "@brand-color-light" + ], + "source": [ + "packages/components/button/button.less:51" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--light.t-button--disabled", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-button-light-disabled-bg, var(--td-brand-color-light, var(--td-primary-color-1, #f2f3ff)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "brandColorLight": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:217", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:283", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:530" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/button/t_button_test.dart:3059", + "observedScenariosPerSdk": 4, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "buttonLightDisabledBorderColor", + "component": "button", + "previousDecision": "pending", + "frozenTarget": { + "light": "#f2f3ff", + "dark": "#1b2f51", + "expressions": [ + "@brand-color-light" + ], + "source": [ + "packages/components/button/button.less:52" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--light.t-button--disabled,\n.t-button--light.t-button--disabled::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-button-light-disabled-border-color, var(--td-brand-color-light, var(--td-primary-color-1, #f2f3ff)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "brandColorLight": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:217", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:283", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:530" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/button/t_button_test.dart:2012", + "text": "expect(button.style?.backgroundColor?.resolve({}), token.brandColorLight);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/button/t_button_test.dart:2041", + "text": "token.brandColorLight,", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/button/t_button_test.dart:3079", + "text": "TButtonColorPreset.light => token.brandColorLight,", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/button/t_button_test.dart:3092", + "text": "TButtonColorPreset.light => token.brandColorLight,", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/button/t_button_test.dart:3211", + "text": "token.brandColorLight,", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Check whether the frozen fill border is visually represented by the Flutter fill; color equality alone does not prove border geometry.", + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "buttonLightDisabledColor", + "component": "button", + "previousDecision": "pending", + "frozenTarget": { + "light": "#b5c7ff", + "dark": "#143975", + "expressions": [ + "@brand-color-disabled" + ], + "source": [ + "packages/components/button/button.less:50" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--light.t-button--disabled", + "property": "color", + "kind": "render-property", + "value": "var(--td-button-light-disabled-color, var(--td-brand-color-disabled, var(--td-primary-color-3, #b5c7ff)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "brandColorDisabled": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:291", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:311", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:528", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:543", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:555" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/button/t_button_test.dart:3059", + "observedScenariosPerSdk": 4, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "buttonLightOutlineActiveBgColor", + "component": "button", + "previousDecision": "pending", + "frozenTarget": { + "light": "#d9e1ff", + "dark": "#173463", + "expressions": [ + "@brand-color-light-active" + ], + "source": [ + "packages/components/button/button.less:120" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--outline.t-button--light.t-button--hover,\n.t-button--outline.t-button--light.t-button--hover::after", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-button-light-outline-active-bg-color, var(--td-brand-color-light-active, var(--td-primary-color-2, #d9e1ff)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "brandColorLightActive": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:279" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/button/t_button_test.dart:3059", + "observedScenariosPerSdk": 4, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "buttonLightOutlineActiveBorderColor", + "component": "button", + "previousDecision": "pending", + "frozenTarget": { + "light": "#003cab", + "dark": "#699ef5", + "expressions": [ + "@brand-color-active" + ], + "source": [ + "packages/components/button/button.less:121" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--outline.t-button--light.t-button--hover", + "property": "color", + "kind": "render-property", + "value": "var(--td-button-light-outline-active-border-color, var(--td-brand-color-active, var(--td-primary-color-8, #003cab)))" + }, + { + "file": "packages/components/button/button.less", + "selector": ".t-button--outline.t-button--light.t-button--hover,\n.t-button--outline.t-button--light.t-button--hover::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-button-light-outline-active-border-color, var(--td-brand-color-active, var(--td-primary-color-8, #003cab)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "brandColorActive": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:298", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:322", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:566" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/button/t_button_test.dart:3059", + "observedScenariosPerSdk": 4, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "buttonLightOutlineBgColor", + "component": "button", + "previousDecision": "pending", + "frozenTarget": { + "light": "#f2f3ff", + "dark": "#1b2f51", + "expressions": [ + "@brand-color-light" + ], + "source": [ + "packages/components/button/button.less:75" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--outline.t-button--light", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-button-light-outline-bg-color, var(--td-brand-color-light, var(--td-primary-color-1, #f2f3ff)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "brandColorLight": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:217", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:283", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:530" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/button/t_button_test.dart:3059", + "observedScenariosPerSdk": 4, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "buttonLightOutlineBorderColor", + "component": "button", + "previousDecision": "pending", + "frozenTarget": { + "light": "#0052d9", + "dark": "#4582e6", + "expressions": [ + "@button-light-outline-color" + ], + "source": [ + "packages/components/button/button.less:74" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--outline.t-button--light,\n.t-button--outline.t-button--light::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-button-light-outline-border-color, var(--td-button-light-outline-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/button/t_button_test.dart:3059", + "observedScenariosPerSdk": 4, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "buttonLightOutlineColor", + "component": "button", + "previousDecision": "pending", + "frozenTarget": { + "light": "#0052d9", + "dark": "#4582e6", + "expressions": [ + "@brand-color" + ], + "source": [ + "packages/components/button/button.less:73" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--outline.t-button--light", + "property": "color", + "kind": "render-property", + "value": "var(--td-button-light-outline-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + }, + { + "file": "packages/components/button/button.less", + "selector": ".t-button--outline.t-button--light,\n.t-button--outline.t-button--light::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-button-light-outline-border-color, var(--td-button-light-outline-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "brandColor": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:211", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:218", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:257", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:258", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:263", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:264", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:346", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:350", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:384", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:388" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/button/t_button_test.dart:3059", + "observedScenariosPerSdk": 8, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "buttonLightOutlineDisabledColor", + "component": "button", + "previousDecision": "pending", + "frozenTarget": { + "light": "#b5c7ff", + "dark": "#143975", + "expressions": [ + "@brand-color-disabled" + ], + "source": [ + "packages/components/button/button.less:76" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--outline.t-button--light.t-button--disabled", + "property": "color", + "kind": "render-property", + "value": "var(--td-button-light-outline-disabled-color, var(--td-brand-color-disabled, var(--td-primary-color-3, #b5c7ff)))" + }, + { + "file": "packages/components/button/button.less", + "selector": ".t-button--outline.t-button--light.t-button--disabled,\n.t-button--outline.t-button--light.t-button--disabled::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-button-light-outline-disabled-color, var(--td-brand-color-disabled, var(--td-primary-color-3, #b5c7ff)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "brandColorDisabled": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:291", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:311", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:528", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:543", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:555" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/button/t_button_test.dart:3059", + "observedScenariosPerSdk": 8, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "buttonLightTextActiveBgColor", + "component": "button", + "previousDecision": "pending", + "frozenTarget": { + "light": "#e7e7e7", + "dark": "#2c2c2c", + "expressions": [ + "@bg-color-container-active" + ], + "source": [ + "packages/components/button/button.less:125" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--text.t-button--light.t-button--hover,\n.t-button--text.t-button--light.t-button--hover::after", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-button-light-text-active-bg-color, var(--td-bg-color-container-active, var(--td-gray-color-3, #e7e7e7)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "bgColorContainerActive": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:280", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:358" + ] + }, + "approvedGlobalException": "引用已批准修正的浅色 grayColor3", + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/button/t_button_test.dart:3059", + "observedScenariosPerSdk": 4, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "buttonLightTextColor", + "component": "button", + "previousDecision": "pending", + "frozenTarget": { + "light": "#0052d9", + "dark": "#4582e6", + "expressions": [ + "@brand-color" + ], + "source": [ + "packages/components/button/button.less:92" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--text.t-button--light", + "property": "color", + "kind": "render-property", + "value": "var(--td-button-light-text-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "brandColor": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:211", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:218", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:257", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:258", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:263", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:264", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:346", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:350", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:384", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:388" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/button/t_button_test.dart:3059", + "observedScenariosPerSdk": 8, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "buttonMediumFont", + "component": "button", + "previousDecision": "pending", + "frozenTarget": { + "light": "600 16dp / 24dp PingFang SC, Microsoft YaHei, Arial Regular", + "dark": "600 16dp / 24dp PingFang SC, Microsoft YaHei, Arial Regular", + "expressions": [ + "@font-mark-large" + ], + "source": [ + "packages/components/button/button.less:8" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--size-medium", + "property": "font", + "kind": "render-property", + "value": "var(--td-button-medium-font, var(--td-font-mark-large, 600 32rpx / 48rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "fontMarkLarge": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:476" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/button/t_button_test.dart:3059", + "observedScenariosPerSdk": 4, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "buttonPrimaryActiveBgColor", + "component": "button", + "previousDecision": "pending", + "frozenTarget": { + "light": "#003cab", + "dark": "#699ef5", + "expressions": [ + "@brand-color-active" + ], + "source": [ + "packages/components/button/button.less:110" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--primary.t-button--hover,\n.t-button--primary.t-button--hover::after", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-button-primary-active-bg-color, var(--td-brand-color-active, var(--td-primary-color-8, #003cab)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "brandColorActive": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:298", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:322", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:566" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/button/t_button_test.dart:3059", + "observedScenariosPerSdk": 4, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "buttonPrimaryActiveBorderColor", + "component": "button", + "previousDecision": "pending", + "frozenTarget": { + "light": "#003cab", + "dark": "#699ef5", + "expressions": [ + "@brand-color-active" + ], + "source": [ + "packages/components/button/button.less:111" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--primary.t-button--hover,\n.t-button--primary.t-button--hover::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-button-primary-active-border-color, var(--td-brand-color-active, var(--td-primary-color-8, #003cab)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "brandColorActive": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:298", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:322", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:566" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/button/t_button_test.dart:3083", + "text": "TButtonColorPreset.primary => token.brandColorActive,", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/button/t_button_test.dart:3224", + "text": ": token.brandColorActive)", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/button/t_button_test.dart:3291", + "text": "? token.brandColorActive", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Check whether the frozen fill border is visually represented by the Flutter fill; color equality alone does not prove border geometry.", + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "buttonPrimaryBgColor", + "component": "button", + "previousDecision": "pending", + "frozenTarget": { + "light": "#0052d9", + "dark": "#4582e6", + "expressions": [ + "@brand-color" + ], + "source": [ + "packages/components/button/button.less:42" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--primary", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-button-primary-bg-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + } + ], + "nonLessReferences": [ + { + "file": "packages/components/config-provider/__test__/index.test.js", + "line": 552, + "text": "'--td-button-primary-bg-color-hover': '#ff0000'," + } + ] + }, + "flutterNameLocators": { + "brandColor": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:211", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:218", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:257", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:258", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:263", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:264", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:346", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:350", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:384", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:388" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/button/t_button_test.dart:3059", + "observedScenariosPerSdk": 4, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "buttonPrimaryBorderColor", + "component": "button", + "previousDecision": "pending", + "frozenTarget": { + "light": "#0052d9", + "dark": "#4582e6", + "expressions": [ + "@brand-color" + ], + "source": [ + "packages/components/button/button.less:41" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--primary", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-button-primary-border-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + }, + { + "file": "packages/components/button/button.less", + "selector": ".t-button--primary::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-button-primary-border-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "brandColor": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:211", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:218", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:257", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:258", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:263", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:264", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:346", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:350", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:384", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:388" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/button/t_button_test.dart:3077", + "text": "TButtonColorPreset.primary => token.brandColor,", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/button/t_button_test.dart:3097", + "text": "TButtonColorPreset.light => token.brandColor,", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Check whether the frozen fill border is visually represented by the Flutter fill; color equality alone does not prove border geometry.", + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "buttonPrimaryColor", + "component": "button", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(255, 255, 255, 1)", + "dark": "rgba(255, 255, 255, 90%)", + "expressions": [ + "@text-color-anti" + ], + "source": [ + "packages/components/button/button.less:40" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--primary", + "property": "color", + "kind": "render-property", + "value": "var(--td-button-primary-color, var(--td-text-color-anti, var(--td-font-white-1, #ffffff)))" + } + ], + "nonLessReferences": [ + { + "file": "packages/components/config-provider/__test__/index.test.js", + "line": 528, + "text": "expect(result).toEqual({ '--td-button-primary-color': '#ff0000' });" + }, + { + "file": "packages/components/config-provider/__test__/index.test.js", + "line": 533, + "text": "expect(result).toEqual({ '--td-button-primary-color': '#ff0000' });" + }, + { + "file": "packages/components/config-provider/__test__/index.test.js", + "line": 549, + "text": "'--td-button-primary-color': '#ff0000'," + } + ] + }, + "flutterNameLocators": { + "textColorAnti": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:212", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:215", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:542" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/button/t_button_test.dart:3059", + "observedScenariosPerSdk": 8, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "buttonPrimaryDashedBorderColor", + "component": "button", + "previousDecision": "pending", + "frozenTarget": { + "light": "#0052d9", + "dark": "#4582e6", + "expressions": [ + "@button-primary-dashed-color" + ], + "source": [ + "packages/components/button/button.less:79" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--dashed.t-button--primary,\n.t-button--dashed.t-button--primary::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-button-primary-dashed-border-color, var(--td-button-primary-dashed-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Check whether the frozen fill border is visually represented by the Flutter fill; color equality alone does not prove border geometry.", + "Current TButtonVariant has no dashed case: resolve the supported capability/migration contract, then test the chosen behavior. Outline is not equivalent evidence.", + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "buttonPrimaryDashedColor", + "component": "button", + "previousDecision": "pending", + "frozenTarget": { + "light": "#0052d9", + "dark": "#4582e6", + "expressions": [ + "@brand-color" + ], + "source": [ + "packages/components/button/button.less:78" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--dashed.t-button--primary", + "property": "color", + "kind": "render-property", + "value": "var(--td-button-primary-dashed-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + }, + { + "file": "packages/components/button/button.less", + "selector": ".t-button--dashed.t-button--primary,\n.t-button--dashed.t-button--primary::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-button-primary-dashed-border-color, var(--td-button-primary-dashed-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "brandColor": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:211", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:218", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:257", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:258", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:263", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:264", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:346", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:350", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:384", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:388" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/button/t_button_test.dart:3077", + "text": "TButtonColorPreset.primary => token.brandColor,", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/button/t_button_test.dart:3097", + "text": "TButtonColorPreset.light => token.brandColor,", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Current TButtonVariant has no dashed case: resolve the supported capability/migration contract, then test the chosen behavior. Outline is not equivalent evidence.", + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "buttonPrimaryDashedDisabledColor", + "component": "button", + "previousDecision": "pending", + "frozenTarget": { + "light": "#b5c7ff", + "dark": "#143975", + "expressions": [ + "@brand-color-disabled" + ], + "source": [ + "packages/components/button/button.less:80" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--dashed.t-button--primary.t-button--disabled", + "property": "color", + "kind": "render-property", + "value": "var(--td-button-primary-dashed-disabled-color, var(--td-brand-color-disabled, var(--td-primary-color-3, #b5c7ff)))" + }, + { + "file": "packages/components/button/button.less", + "selector": ".t-button--dashed.t-button--primary.t-button--disabled,\n.t-button--dashed.t-button--primary.t-button--disabled::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-button-primary-dashed-disabled-color, var(--td-brand-color-disabled, var(--td-primary-color-3, #b5c7ff)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "brandColorDisabled": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:291", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:311", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:528", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:543", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:555" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/button/t_button_test.dart:1964", + "text": ": token.brandColorDisabled,", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/button/t_button_test.dart:1969", + "text": "token.brandColorDisabled,", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/button/t_button_test.dart:2029", + "text": "token.brandColorDisabled,", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/button/t_button_test.dart:2043", + "text": "token.brandColorDisabled,", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/button/t_button_test.dart:3090", + "text": "TButtonColorPreset.primary => token.brandColorDisabled,", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/button/t_button_test.dart:3103", + "text": "TButtonColorPreset.light => token.brandColorDisabled,", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Current TButtonVariant has no dashed case: resolve the supported capability/migration contract, then test the chosen behavior. Outline is not equivalent evidence.", + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "buttonPrimaryDisabledBg", + "component": "button", + "previousDecision": "pending", + "frozenTarget": { + "light": "#b5c7ff", + "dark": "#143975", + "expressions": [ + "@brand-color-disabled" + ], + "source": [ + "packages/components/button/button.less:44" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--primary.t-button--disabled", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-button-primary-disabled-bg, var(--td-brand-color-disabled, var(--td-primary-color-3, #b5c7ff)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "brandColorDisabled": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:291", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:311", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:528", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:543", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:555" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/button/t_button_test.dart:3059", + "observedScenariosPerSdk": 4, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "buttonPrimaryDisabledBorderColor", + "component": "button", + "previousDecision": "pending", + "frozenTarget": { + "light": "#b5c7ff", + "dark": "#143975", + "expressions": [ + "@brand-color-disabled" + ], + "source": [ + "packages/components/button/button.less:45" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--primary.t-button--disabled,\n.t-button--primary.t-button--disabled::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-button-primary-disabled-border-color, var(--td-brand-color-disabled, var(--td-primary-color-3, #b5c7ff)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "brandColorDisabled": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:291", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:311", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:528", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:543", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:555" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/button/t_button_test.dart:1964", + "text": ": token.brandColorDisabled,", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/button/t_button_test.dart:1969", + "text": "token.brandColorDisabled,", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/button/t_button_test.dart:2029", + "text": "token.brandColorDisabled,", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/button/t_button_test.dart:2043", + "text": "token.brandColorDisabled,", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/button/t_button_test.dart:3090", + "text": "TButtonColorPreset.primary => token.brandColorDisabled,", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/button/t_button_test.dart:3103", + "text": "TButtonColorPreset.light => token.brandColorDisabled,", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Check whether the frozen fill border is visually represented by the Flutter fill; color equality alone does not prove border geometry.", + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "buttonPrimaryDisabledColor", + "component": "button", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(255, 255, 255, 1)", + "dark": "rgba(255, 255, 255, 22%)", + "expressions": [ + "@text-color-anti" + ], + "source": [ + "packages/components/button/button.less:43" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--primary.t-button--disabled", + "property": "color", + "kind": "render-property", + "value": "var(--td-button-primary-disabled-color, var(--td-text-color-anti, var(--td-font-white-1, #ffffff)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorAnti": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:212", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:215", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:542" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/button/t_button_test.dart:3059", + "observedScenariosPerSdk": 4, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": "Dark primary fill foreground is an existing explicit Spec048 adjudication (fontWhite4), overriding the older frozen CSS default. This audit does not reverse it.", + "candidateExistingTests": [], + "requiredEvidence": [ + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "buttonPrimaryOutlineActiveBgColor", + "component": "button", + "previousDecision": "pending", + "frozenTarget": { + "light": "#e7e7e7", + "dark": "#2c2c2c", + "expressions": [ + "@bg-color-container-active" + ], + "source": [ + "packages/components/button/button.less:116" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--outline.t-button--primary.t-button--hover::after", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-button-primary-outline-active-bg-color, var(--td-bg-color-container-active, var(--td-gray-color-3, #e7e7e7)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "bgColorContainerActive": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:280", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:358" + ] + }, + "approvedGlobalException": "引用已批准修正的浅色 grayColor3", + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/button/t_button_test.dart:3059", + "observedScenariosPerSdk": 4, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "buttonPrimaryOutlineActiveBorderColor", + "component": "button", + "previousDecision": "pending", + "frozenTarget": { + "light": "#003cab", + "dark": "#699ef5", + "expressions": [ + "@brand-color-active" + ], + "source": [ + "packages/components/button/button.less:117" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--outline.t-button--primary.t-button--hover", + "property": "color", + "kind": "render-property", + "value": "var(--td-button-primary-outline-active-border-color, var(--td-brand-color-active, var(--td-primary-color-8, #003cab)))" + }, + { + "file": "packages/components/button/button.less", + "selector": ".t-button--outline.t-button--primary.t-button--hover::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-button-primary-outline-active-border-color, var(--td-brand-color-active, var(--td-primary-color-8, #003cab)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "brandColorActive": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:298", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:322", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:566" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/button/t_button_test.dart:3059", + "observedScenariosPerSdk": 4, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "buttonPrimaryOutlineBorderColor", + "component": "button", + "previousDecision": "pending", + "frozenTarget": { + "light": "#0052d9", + "dark": "#4582e6", + "expressions": [ + "@button-primary-outline-color" + ], + "source": [ + "packages/components/button/button.less:66" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--outline.t-button--primary,\n.t-button--outline.t-button--primary::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-button-primary-outline-border-color, var(--td-button-primary-outline-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/button/t_button_test.dart:3059", + "observedScenariosPerSdk": 4, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "buttonPrimaryOutlineColor", + "component": "button", + "previousDecision": "pending", + "frozenTarget": { + "light": "#0052d9", + "dark": "#4582e6", + "expressions": [ + "@brand-color" + ], + "source": [ + "packages/components/button/button.less:65" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--outline.t-button--primary", + "property": "color", + "kind": "render-property", + "value": "var(--td-button-primary-outline-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + }, + { + "file": "packages/components/button/button.less", + "selector": ".t-button--outline.t-button--primary,\n.t-button--outline.t-button--primary::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-button-primary-outline-border-color, var(--td-button-primary-outline-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "brandColor": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:211", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:218", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:257", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:258", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:263", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:264", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:346", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:350", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:384", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:388" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/button/t_button_test.dart:3059", + "observedScenariosPerSdk": 8, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "buttonPrimaryOutlineDisabledColor", + "component": "button", + "previousDecision": "pending", + "frozenTarget": { + "light": "#b5c7ff", + "dark": "#143975", + "expressions": [ + "@brand-color-disabled" + ], + "source": [ + "packages/components/button/button.less:67" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--outline.t-button--primary.t-button--disabled", + "property": "color", + "kind": "render-property", + "value": "var(--td-button-primary-outline-disabled-color, var(--td-brand-color-disabled, var(--td-primary-color-3, #b5c7ff)))" + }, + { + "file": "packages/components/button/button.less", + "selector": ".t-button--outline.t-button--primary.t-button--disabled,\n.t-button--outline.t-button--primary.t-button--disabled::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-button-primary-outline-disabled-color, var(--td-brand-color-disabled, var(--td-primary-color-3, #b5c7ff)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "brandColorDisabled": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:291", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:311", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:528", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:543", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:555" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/button/t_button_test.dart:3059", + "observedScenariosPerSdk": 8, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "buttonPrimaryTextActiveBgColor", + "component": "button", + "previousDecision": "pending", + "frozenTarget": { + "light": "#e7e7e7", + "dark": "#2c2c2c", + "expressions": [ + "@bg-color-container-active" + ], + "source": [ + "packages/components/button/button.less:123" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--text.t-button--primary.t-button--hover,\n.t-button--text.t-button--primary.t-button--hover::after", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-button-primary-text-active-bg-color, var(--td-bg-color-container-active, var(--td-gray-color-3, #e7e7e7)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "bgColorContainerActive": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:280", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:358" + ] + }, + "approvedGlobalException": "引用已批准修正的浅色 grayColor3", + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/button/t_button_test.dart:3059", + "observedScenariosPerSdk": 4, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "buttonPrimaryTextColor", + "component": "button", + "previousDecision": "pending", + "frozenTarget": { + "light": "#0052d9", + "dark": "#4582e6", + "expressions": [ + "@brand-color" + ], + "source": [ + "packages/components/button/button.less:86" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--text.t-button--primary", + "property": "color", + "kind": "render-property", + "value": "var(--td-button-primary-text-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "brandColor": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:211", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:218", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:257", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:258", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:263", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:264", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:346", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:350", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:384", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:388" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/button/t_button_test.dart:3059", + "observedScenariosPerSdk": 8, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "buttonPrimaryTextDisabledColor", + "component": "button", + "previousDecision": "pending", + "frozenTarget": { + "light": "#b5c7ff", + "dark": "#143975", + "expressions": [ + "@brand-color-disabled" + ], + "source": [ + "packages/components/button/button.less:87" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--text.t-button--primary.t-button--disabled", + "property": "color", + "kind": "render-property", + "value": "var(--td-button-primary-text-disabled-color, var(--td-brand-color-disabled, var(--td-primary-color-3, #b5c7ff)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "brandColorDisabled": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:291", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:311", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:528", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:543", + "tdesign-component/lib/src/components/button/t_button_resolve.dart:555" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/button/t_button_test.dart:3059", + "observedScenariosPerSdk": 4, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "buttonSmallFont", + "component": "button", + "previousDecision": "pending", + "frozenTarget": { + "light": "600 14dp / 22dp PingFang SC, Microsoft YaHei, Arial Regular", + "dark": "600 14dp / 22dp PingFang SC, Microsoft YaHei, Arial Regular", + "expressions": [ + "@font-mark-medium" + ], + "source": [ + "packages/components/button/button.less:7" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/button/button.less", + "selector": ".t-button--size-small", + "property": "font", + "kind": "render-property", + "value": "var(--td-button-small-font, var(--td-font-mark-medium, 600 28rpx / 44rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "fontMarkMedium": [ + "tdesign-component/lib/src/components/button/t_button_resolve.dart:477" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/button/t_button_test.dart:3059", + "observedScenariosPerSdk": 4, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "calendarActiveColor", + "component": "calendar", + "previousDecision": "pending", + "frozenTarget": { + "light": "#0052d9", + "dark": "#4582e6", + "expressions": [ + "@brand-color" + ], + "source": [ + "packages/components/calendar/calendar.less:5" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/calendar/calendar.less", + "selector": ".t-calendar__dates-item--selected,\n.t-calendar__dates-item--start-end,\n.t-calendar__dates-item--start,\n.t-calendar__dates-item--end", + "property": "background", + "kind": "render-property", + "value": "var(--td-calendar-active-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + }, + { + "file": "packages/components/calendar/calendar.less", + "selector": ".t-calendar__dates-item--start + .t-calendar__dates-item--end::before", + "property": "background", + "kind": "render-property", + "value": "var(--td-calendar-active-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "brandColor": [ + "tdesign-component/lib/src/components/calendar/t_calendar_style.dart:109", + "tdesign-component/lib/src/components/calendar/t_calendar_style.dart:127", + "tdesign-component/lib/src/components/calendar/t_calendar_style.dart:160", + "tdesign-component/lib/src/components/calendar/t_calendar_style.dart:166" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/calendar/t_calendar_cell_test.dart:133", + "text": "expect(decoration.color, token.brandColor);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/calendar/t_calendar_cell_test.dart:171", + "text": "expect(dayText.style?.color, isNot(token.brandColor));", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "calendarBgColor", + "component": "calendar", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(255, 255, 255, 1)", + "dark": "#242424", + "expressions": [ + "@bg-color-container" + ], + "source": [ + "packages/components/calendar/calendar.less:4" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/calendar/calendar.less", + "selector": ".t-calendar", + "property": "background", + "kind": "render-property", + "value": "var(--td-calendar-bg-color, var(--td-bg-color-container, var(--td-font-white-1, #ffffff)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "bgColorContainer": [ + "tdesign-component/lib/src/components/calendar/t_calendar_style.dart:84" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "calendarDaysColor", + "component": "calendar", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.6)", + "dark": "rgba(255, 255, 255, 55%)", + "expressions": [ + "@text-color-secondary" + ], + "source": [ + "packages/components/calendar/calendar.less:10" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/calendar/calendar.less", + "selector": ".t-calendar__days-item", + "property": "color", + "kind": "render-property", + "value": "var(--td-calendar-days-color, var(--td-text-color-secondary, var(--td-font-gray-2, rgba(0, 0, 0, 0.6))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorSecondary": [ + "tdesign-component/lib/src/components/calendar/t_calendar_style.dart:91" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "calendarItemCentreColor", + "component": "calendar", + "previousDecision": "pending", + "frozenTarget": { + "light": "#f2f3ff", + "dark": "#1b2f51", + "expressions": [ + "@brand-color-light" + ], + "source": [ + "packages/components/calendar/calendar.less:12" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/calendar/calendar.less", + "selector": ".t-calendar__dates-item--centre", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-calendar-item-centre-color, var(--td-brand-color-light, var(--td-primary-color-1, #f2f3ff)))" + }, + { + "file": "packages/components/calendar/calendar.less", + "selector": ".t-calendar__dates-item--centre::before,\n.t-calendar__dates-item--centre::after", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-calendar-item-centre-color, var(--td-brand-color-light, var(--td-primary-color-1, #f2f3ff)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "brandColorLight": [ + "tdesign-component/lib/src/components/calendar/t_calendar_style.dart:138", + "tdesign-component/lib/src/components/calendar/t_calendar_cell.dart:211" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/calendar/t_calendar_cell_test.dart:102", + "text": "TThemeData.defaultData().brandColorLight,", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/calendar/t_calendar_cell_test.dart:288", + "text": "expect(bridge.color, isNot(token.brandColorLight));", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "calendarItemDisabledColor", + "component": "calendar", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.26)", + "dark": "rgba(255, 255, 255, 22%)", + "expressions": [ + "@text-color-disabled" + ], + "source": [ + "packages/components/calendar/calendar.less:13" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/calendar/calendar.less", + "selector": ".t-calendar__dates-item-suffix--disabled", + "property": "color", + "kind": "render-property", + "value": "var(--td-calendar-item-disabled-color, var(--td-text-color-disabled, var(--td-font-gray-4, rgba(0, 0, 0, 0.26))))" + }, + { + "file": "packages/components/calendar/calendar.less", + "selector": ".t-calendar__dates-item--disabled", + "property": "color", + "kind": "render-property", + "value": "var(--td-calendar-item-disabled-color, var(--td-text-color-disabled, var(--td-font-gray-4, rgba(0, 0, 0, 0.26))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorDisabled": [ + "tdesign-component/lib/src/components/calendar/t_calendar_style.dart:189", + "tdesign-component/lib/src/components/calendar/t_calendar_style.dart:195" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "calendarItemSuffixColor", + "component": "calendar", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.4)", + "dark": "rgba(255, 255, 255, 35%)", + "expressions": [ + "@text-color-placeholder" + ], + "source": [ + "packages/components/calendar/calendar.less:11" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/calendar/calendar.less", + "selector": ".t-calendar__dates-item-suffix", + "property": "color", + "kind": "render-property", + "value": "var(--td-calendar-item-suffix-color, var(--td-text-color-placeholder, var(--td-font-gray-3, rgba(0, 0, 0, 0.4))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorPlaceholder": [ + "tdesign-component/lib/src/components/calendar/t_calendar_style.dart:133" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "calendarRadius", + "component": "calendar", + "previousDecision": "pending", + "frozenTarget": { + "light": "12dp", + "dark": "12dp", + "expressions": [ + "@radius-extraLarge" + ], + "source": [ + "packages/components/calendar/calendar.less:3" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/calendar/calendar.less", + "selector": ".t-calendar--popup", + "property": "border-top-left-radius", + "kind": "render-property", + "value": "var(--td-calendar-radius, var(--td-radius-extraLarge, 24rpx))" + }, + { + "file": "packages/components/calendar/calendar.less", + "selector": ".t-calendar--popup", + "property": "border-top-right-radius", + "kind": "render-property", + "value": "var(--td-calendar-radius, var(--td-radius-extraLarge, 24rpx))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "radiusExtraLarge": [ + "tdesign-component/lib/src/components/calendar/t_calendar_style.dart:86" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "calendarSelectedBorderRadius", + "component": "calendar", + "previousDecision": "pending", + "frozenTarget": { + "light": "6dp", + "dark": "6dp", + "expressions": [ + "@radius-default" + ], + "source": [ + "packages/components/calendar/calendar.less:7" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/calendar/calendar.less", + "selector": ".t-calendar__dates-item", + "property": "border-radius", + "kind": "render-property", + "value": "var(--td-calendar-selected-border-radius, var(--td-radius-default, 12rpx))" + }, + { + "file": "packages/components/calendar/calendar.less", + "selector": ".t-calendar__dates-item--selected,\n.t-calendar__dates-item--start-end,\n.t-calendar__dates-item--start,\n.t-calendar__dates-item--end", + "property": "border-radius", + "kind": "render-property", + "value": "var(--td-calendar-selected-border-radius, var(--td-radius-default, 12rpx))" + }, + { + "file": "packages/components/calendar/calendar.less", + "selector": ".t-calendar__dates-item--start", + "property": "border-radius", + "kind": "render-property", + "value": "var(--td-calendar-selected-border-radius, var(--td-radius-default, 12rpx)) 0 0 var(--td-calendar-selected-border-radius, var(--td-radius-default, 12rpx))" + }, + { + "file": "packages/components/calendar/calendar.less", + "selector": ".t-calendar__dates-item--end", + "property": "border-radius", + "kind": "render-property", + "value": "0 var(--td-calendar-selected-border-radius, var(--td-radius-default, 12rpx)) var(--td-calendar-selected-border-radius, var(--td-radius-default, 12rpx)) 0" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "radiusDefault": [ + "tdesign-component/lib/src/components/calendar/t_calendar_style.dart:119" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/calendar/t_calendar_cell_test.dart:134", + "text": "expect(decoration.borderRadius, BorderRadius.circular(token.radiusDefault));", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/calendar/t_calendar_cell_test.dart:214", + "text": "expect(decoration.borderRadius, BorderRadius.circular(token.radiusDefault));", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "calendarSelectedColor", + "component": "calendar", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(255, 255, 255, 1)", + "dark": "rgba(255, 255, 255, 90%)", + "expressions": [ + "@text-color-anti" + ], + "source": [ + "packages/components/calendar/calendar.less:6" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/calendar/calendar.less", + "selector": ".t-calendar__dates-item-suffix--selected,\n.t-calendar__dates-item-suffix--start,\n.t-calendar__dates-item-suffix--end", + "property": "color", + "kind": "render-property", + "value": "var(--td-calendar-selected-color, var(--td-text-color-anti, var(--td-font-white-1, #ffffff)))" + }, + { + "file": "packages/components/calendar/calendar.less", + "selector": ".t-calendar__dates-item--selected,\n.t-calendar__dates-item--start-end,\n.t-calendar__dates-item--start,\n.t-calendar__dates-item--end", + "property": "color", + "kind": "render-property", + "value": "var(--td-calendar-selected-color, var(--td-text-color-anti, var(--td-font-white-1, #ffffff)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorAnti": [ + "tdesign-component/lib/src/components/calendar/t_calendar_style.dart:200", + "tdesign-component/lib/src/components/calendar/t_calendar_style.dart:206", + "tdesign-component/lib/src/components/calendar/t_calendar_style.dart:219", + "tdesign-component/lib/src/components/calendar/t_calendar_style.dart:225", + "tdesign-component/lib/src/components/calendar/t_calendar_style.dart:233", + "tdesign-component/lib/src/components/calendar/t_calendar_style.dart:239" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/calendar/t_calendar_cell_test.dart:65", + "text": "expect(style.color, TThemeData.defaultData().textColorAnti);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/calendar/t_calendar_cell_test.dart:137", + "text": "expect(dayText.style?.color, token.textColorAnti);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/calendar/t_calendar_cell_test.dart:170", + "text": "expect(dayText.style?.color, token.textColorAnti);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/calendar/t_calendar_cell_test.dart:208", + "text": "expect(dayText.style?.color, token.textColorAnti);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/calendar/t_calendar_cell_test.dart:254", + "text": "expect(inherited.style.color, TThemeData.defaultData().textColorAnti);", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "calendarSwitchModeIconColor", + "component": "calendar", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.6)", + "dark": "rgba(255, 255, 255, 55%)", + "expressions": [ + "@text-color-secondary" + ], + "source": [ + "packages/components/calendar/calendar.less:14" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/calendar/calendar.less", + "selector": ".t-calendar-header__action", + "property": "color", + "kind": "render-property", + "value": "var(--td-calendar-switch-mode-icon-color, var(--td-text-color-secondary, var(--td-font-gray-2, rgba(0, 0, 0, 0.6))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorSecondary": [ + "tdesign-component/lib/src/components/calendar/t_calendar_style.dart:91" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "calendarSwitchModeIconDisabledColor", + "component": "calendar", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.26)", + "dark": "rgba(255, 255, 255, 22%)", + "expressions": [ + "@text-color-disabled" + ], + "source": [ + "packages/components/calendar/calendar.less:15" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/calendar/calendar.less", + "selector": ".t-calendar-header__icon--disabled", + "property": "color", + "kind": "render-property", + "value": "var(--td-calendar-switch-mode-icon-disabled-color, var(--td-text-color-disabled, var(--td-font-gray-4, rgba(0, 0, 0, 0.26))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorDisabled": [ + "tdesign-component/lib/src/components/calendar/t_calendar_style.dart:189", + "tdesign-component/lib/src/components/calendar/t_calendar_style.dart:195" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "calendarTitleColor", + "component": "calendar", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.9)", + "dark": "rgba(255, 255, 255, 90%)", + "expressions": [ + "@text-color-primary" + ], + "source": [ + "packages/components/calendar/calendar.less:9" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/calendar/calendar.less", + "selector": ".t-calendar__title", + "property": "color", + "kind": "render-property", + "value": "var(--td-calendar-title-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + }, + { + "file": "packages/components/calendar/calendar.less", + "selector": ".t-calendar__close-btn", + "property": "color", + "kind": "render-property", + "value": "var(--td-calendar-title-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + }, + { + "file": "packages/components/calendar/calendar.less", + "selector": ".t-calendar__month", + "property": "color", + "kind": "render-property", + "value": "var(--td-calendar-title-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + }, + { + "file": "packages/components/calendar/calendar.less", + "selector": ".t-calendar__dates-item", + "property": "color", + "kind": "render-property", + "value": "var(--td-calendar-title-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorPrimary": [ + "tdesign-component/lib/src/components/calendar/t_calendar_style.dart:97", + "tdesign-component/lib/src/components/calendar/t_calendar_style.dart:103", + "tdesign-component/lib/src/components/calendar/t_calendar_style.dart:124" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/calendar/t_calendar_cell_test.dart:35", + "text": "TThemeData.defaultData().textColorPrimary,", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "calendarTitleFont", + "component": "calendar", + "previousDecision": "pending", + "frozenTarget": { + "light": "600 18dp / 26dp PingFang SC, Microsoft YaHei, Arial Regular", + "dark": "600 18dp / 26dp PingFang SC, Microsoft YaHei, Arial Regular", + "expressions": [ + "@font-title-large" + ], + "source": [ + "packages/components/calendar/calendar.less:8" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/calendar/calendar.less", + "selector": ".t-calendar__title", + "property": "font", + "kind": "render-property", + "value": "var(--td-calendar-title-font, var(--td-font-title-large, 600 36rpx / 52rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "fontTitleLarge": [] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "cascaderActiveColor", + "component": "cascader", + "previousDecision": "pending", + "frozenTarget": { + "light": "#0052d9", + "dark": "#4582e6", + "expressions": [ + "@brand-color" + ], + "source": [ + "packages/components/cascader/cascader.less:6" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/cascader/cascader.less", + "selector": ".t-cascader", + "property": "--td-radio-icon-checked-color", + "kind": "custom-property-forward", + "value": "var(--td-cascader-active-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + }, + { + "file": "packages/components/cascader/cascader.less", + "selector": ".t-cascader", + "property": "--td-tab-item-active-color", + "kind": "custom-property-forward", + "value": "var(--td-cascader-active-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + }, + { + "file": "packages/components/cascader/cascader.less", + "selector": ".t-cascader", + "property": "--td-tab-track-color", + "kind": "custom-property-forward", + "value": "var(--td-cascader-active-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + }, + { + "file": "packages/components/cascader/cascader.less", + "selector": ".t-cascader__step-dot", + "property": "border", + "kind": "render-property", + "value": "2rpx solid var(--td-cascader-active-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + }, + { + "file": "packages/components/cascader/cascader.less", + "selector": ".t-cascader__step-dot:not(.t-cascader__step-dot--last)::after", + "property": "background", + "kind": "render-property", + "value": "var(--td-cascader-active-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + }, + { + "file": "packages/components/cascader/cascader.less", + "selector": ".t-cascader__step-dot--active", + "property": "background", + "kind": "render-property", + "value": "var(--td-cascader-active-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + }, + { + "file": "packages/components/cascader/cascader.less", + "selector": ".t-cascader__step-dot--active", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-cascader-active-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + }, + { + "file": "packages/components/cascader/cascader.less", + "selector": ".t-cascader__step-label--active", + "property": "color", + "kind": "render-property", + "value": "var(--td-cascader-active-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + } + ], + "nonLessReferences": [ + { + "file": "packages/components/cascader/_example/keys/index.wxss", + "line": 2, + "text": "--td-cascader-active-color: green;" + } + ] + }, + "flutterNameLocators": { + "brandColor": [ + "tdesign-component/lib/src/components/cascader/t_cascader.dart:295", + "tdesign-component/lib/src/components/cascader/t_cascader.dart:503", + "tdesign-component/lib/src/components/cascader/t_cascader.dart:564" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/cascader/t_cascader_test.dart:263", + "text": "expect(indicator.color, TThemeData.defaultData().brandColor);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/cascader/t_cascader_test.dart:320", + "text": "expect(selectedText.style?.color, isNot(token.brandColor));", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/cascader/t_cascader_test.dart:455", + "text": "expect(active.style?.color, TThemeData.defaultData().brandColor);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/cascader/t_cascader_test.dart:463", + "text": "TThemeData.defaultData().brandColor,", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/cascader/t_cascader_test.dart:574", + "text": "TThemeData.defaultData().brandColor,", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "cascaderBgColor", + "component": "cascader", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(255, 255, 255, 1)", + "dark": "#242424", + "expressions": [ + "@bg-color-container" + ], + "source": [ + "packages/components/cascader/cascader.less:5" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/cascader/cascader.less", + "selector": ".t-cascader", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-cascader-bg-color, var(--td-bg-color-container, var(--td-font-white-1, #ffffff)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "bgColorContainer": [ + "tdesign-component/lib/src/components/cascader/t_cascader.dart:155", + "tdesign-component/lib/src/components/cascader/t_cascader.dart:406" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/cascader/t_cascader_test.dart:70", + "text": "TThemeData.defaultData().bgColorContainer,", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "cascaderBorderColor", + "component": "cascader", + "previousDecision": "pending", + "frozenTarget": { + "light": "#e7e7e7", + "dark": "#383838", + "expressions": [ + "@component-stroke" + ], + "source": [ + "packages/components/cascader/cascader.less:12" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/cascader/cascader.less", + "selector": ".t-cascader__steps::after", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-cascader-border-color, var(--td-component-stroke, var(--td-gray-color-3, #e7e7e7)))" + }, + { + "file": "packages/components/cascader/cascader.less", + "selector": ".t-cascader__filter-result-item::after", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-cascader-border-color, var(--td-component-stroke, var(--td-gray-color-3, #e7e7e7)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "componentStroke": [ + "tdesign-component/lib/src/components/cascader/t_cascader.dart:255" + ] + }, + "approvedGlobalException": "引用已批准修正的浅色 grayColor3", + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/cascader/t_cascader_test.dart:685", + "text": "token.componentStroke,", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "cascaderContentHeight", + "component": "cascader", + "previousDecision": "pending", + "frozenTarget": { + "light": "78vh", + "dark": "78vh", + "expressions": [ + "78vh" + ], + "source": [ + "packages/components/cascader/cascader.less:13" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/cascader/cascader.less", + "selector": ".t-cascader__content", + "property": "height", + "kind": "render-property", + "value": "var(--td-cascader-content-height, 78vh)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "cascaderFilterEmptyColor", + "component": "cascader", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.4)", + "dark": "rgba(255, 255, 255, 35%)", + "expressions": [ + "@text-color-placeholder" + ], + "source": [ + "packages/components/cascader/cascader.less:22" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/cascader/cascader.less", + "selector": ".t-cascader__filter-empty", + "property": "color", + "kind": "render-property", + "value": "var(--td-cascader-filter-empty-color, var(--td-text-color-placeholder, var(--td-font-gray-3, rgba(0, 0, 0, 0.4))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorPlaceholder": [ + "tdesign-component/lib/src/components/cascader/t_cascader.dart:429", + "tdesign-component/lib/src/components/cascader/t_cascader.dart:484", + "tdesign-component/lib/src/components/cascader/t_cascader.dart:542" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/cascader/t_cascader_test.dart:395", + "text": "expect(arrow.color, TThemeData.defaultData().textColorPlaceholder);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/cascader/t_cascader_test.dart:689", + "text": "token.textColorPlaceholder,", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "cascaderFilterEmptyPadding", + "component": "cascader", + "previousDecision": "pending", + "frozenTarget": { + "light": "48dp 16dp", + "dark": "48dp 16dp", + "expressions": [ + "@spacer-5 @spacer-2" + ], + "source": [ + "packages/components/cascader/cascader.less:23" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/cascader/cascader.less", + "selector": ".t-cascader__filter-empty", + "property": "padding", + "kind": "render-property", + "value": "var(--td-cascader-filter-empty-padding, var(--td-spacer-5, 96rpx) var(--td-spacer-2, 32rpx))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "cascaderFilterHighlightColor", + "component": "cascader", + "previousDecision": "pending", + "frozenTarget": { + "light": "#0052d9", + "dark": "#4582e6", + "expressions": [ + "@brand-color" + ], + "source": [ + "packages/components/cascader/cascader.less:21" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/cascader/cascader.less", + "selector": ".t-cascader__filter-highlight", + "property": "color", + "kind": "render-property", + "value": "var(--td-cascader-filter-highlight-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "brandColor": [ + "tdesign-component/lib/src/components/cascader/t_cascader.dart:295", + "tdesign-component/lib/src/components/cascader/t_cascader.dart:503", + "tdesign-component/lib/src/components/cascader/t_cascader.dart:564" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/cascader/t_cascader_test.dart:263", + "text": "expect(indicator.color, TThemeData.defaultData().brandColor);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/cascader/t_cascader_test.dart:320", + "text": "expect(selectedText.style?.color, isNot(token.brandColor));", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/cascader/t_cascader_test.dart:455", + "text": "expect(active.style?.color, TThemeData.defaultData().brandColor);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/cascader/t_cascader_test.dart:463", + "text": "TThemeData.defaultData().brandColor,", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/cascader/t_cascader_test.dart:574", + "text": "TThemeData.defaultData().brandColor,", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "cascaderFilterItemColor", + "component": "cascader", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.9)", + "dark": "rgba(255, 255, 255, 90%)", + "expressions": [ + "@text-color-primary" + ], + "source": [ + "packages/components/cascader/cascader.less:18" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/cascader/cascader.less", + "selector": ".t-cascader__filter-result-item", + "property": "color", + "kind": "render-property", + "value": "var(--td-cascader-filter-item-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorPrimary": [ + "tdesign-component/lib/src/components/cascader/t_cascader.dart:558" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/cascader/t_cascader_test.dart:319", + "text": "expect(selectedText.style?.color, token.textColorPrimary);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/cascader/t_cascader_test.dart:453", + "text": "expect(option.style?.color, TThemeData.defaultData().textColorPrimary);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/cascader/t_cascader_test.dart:570", + "text": "TThemeData.defaultData().textColorPrimary,", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "cascaderFilterItemDisabledColor", + "component": "cascader", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.26)", + "dark": "rgba(255, 255, 255, 22%)", + "expressions": [ + "@text-color-disabled" + ], + "source": [ + "packages/components/cascader/cascader.less:20" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/cascader/cascader.less", + "selector": ".t-cascader__filter-result-item--disabled", + "property": "color", + "kind": "render-property", + "value": "var(--td-cascader-filter-item-disabled-color, var(--td-text-color-disabled, var(--td-font-gray-4, rgba(0, 0, 0, 0.26))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorDisabled": [ + "tdesign-component/lib/src/components/cascader/t_cascader.dart:567" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "cascaderFilterItemHoverBg", + "component": "cascader", + "previousDecision": "pending", + "frozenTarget": { + "light": "#f3f3f3", + "dark": "#2c2c2c", + "expressions": [ + "@bg-color-secondarycontainer" + ], + "source": [ + "packages/components/cascader/cascader.less:19" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/cascader/cascader.less", + "selector": ".t-cascader__filter-result-item--hover", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-cascader-filter-item-hover-bg, var(--td-bg-color-secondarycontainer, var(--td-gray-color-1, #f3f3f3)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "bgColorSecondaryContainer": [] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "cascaderFilterItemPadding", + "component": "cascader", + "previousDecision": "pending", + "frozenTarget": { + "light": "12dp 16dp", + "dark": "12dp 16dp", + "expressions": [ + "@spacer-1 @spacer-2" + ], + "source": [ + "packages/components/cascader/cascader.less:17" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/cascader/cascader.less", + "selector": ".t-cascader__filter-result-item", + "property": "padding", + "kind": "render-property", + "value": "var(--td-cascader-filter-item-padding, var(--td-spacer-1, 24rpx) var(--td-spacer-2, 32rpx))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "cascaderFilterPadding", + "component": "cascader", + "previousDecision": "pending", + "frozenTarget": { + "light": "0 16dp 12dp", + "dark": "0 16dp 12dp", + "expressions": [ + "0 @spacer-2 @spacer-1" + ], + "source": [ + "packages/components/cascader/cascader.less:16" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/cascader/cascader.less", + "selector": ".t-cascader__filter", + "property": "padding", + "kind": "render-property", + "value": "var(--td-cascader-filter-padding, 0 var(--td-spacer-2, 32rpx) var(--td-spacer-1, 24rpx))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "cascaderOptionsTitleColor", + "component": "cascader", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.4)", + "dark": "rgba(255, 255, 255, 35%)", + "expressions": [ + "@text-color-placeholder" + ], + "source": [ + "packages/components/cascader/cascader.less:11" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/cascader/cascader.less", + "selector": ".t-cascader__options-title", + "property": "color", + "kind": "render-property", + "value": "var(--td-cascader-options-title-color, var(--td-text-color-placeholder, var(--td-font-gray-3, rgba(0, 0, 0, 0.4))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorPlaceholder": [ + "tdesign-component/lib/src/components/cascader/t_cascader.dart:429", + "tdesign-component/lib/src/components/cascader/t_cascader.dart:484", + "tdesign-component/lib/src/components/cascader/t_cascader.dart:542" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/cascader/t_cascader_test.dart:395", + "text": "expect(arrow.color, TThemeData.defaultData().textColorPlaceholder);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/cascader/t_cascader_test.dart:689", + "text": "token.textColorPlaceholder,", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "cascaderStepArrowColor", + "component": "cascader", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.4)", + "dark": "rgba(255, 255, 255, 35%)", + "expressions": [ + "@text-color-placeholder" + ], + "source": [ + "packages/components/cascader/cascader.less:27" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/cascader/cascader.less", + "selector": ".t-cascader__step-arrow", + "property": "color", + "kind": "render-property", + "value": "var(--td-cascader-step-arrow-color, var(--td-text-color-placeholder, var(--td-font-gray-3, rgba(0, 0, 0, 0.4))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorPlaceholder": [ + "tdesign-component/lib/src/components/cascader/t_cascader.dart:429", + "tdesign-component/lib/src/components/cascader/t_cascader.dart:484", + "tdesign-component/lib/src/components/cascader/t_cascader.dart:542" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/cascader/t_cascader_test.dart:395", + "text": "expect(arrow.color, TThemeData.defaultData().textColorPlaceholder);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/cascader/t_cascader_test.dart:689", + "text": "token.textColorPlaceholder,", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "cascaderStepDotSize", + "component": "cascader", + "previousDecision": "pending", + "frozenTarget": { + "light": "8dp", + "dark": "8dp", + "expressions": [ + "16rpx" + ], + "source": [ + "packages/components/cascader/cascader.less:26" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/cascader/cascader.less", + "selector": ".t-cascader__step-dot", + "property": "width", + "kind": "render-property", + "value": "var(--td-cascader-step-dot-size, 16rpx)" + }, + { + "file": "packages/components/cascader/cascader.less", + "selector": ".t-cascader__step-dot", + "property": "height", + "kind": "render-property", + "value": "var(--td-cascader-step-dot-size, 16rpx)" + }, + { + "file": "packages/components/cascader/cascader.less", + "selector": ".t-cascader__step-dot:not(.t-cascader__step-dot--last)::after", + "property": "top", + "kind": "render-property", + "value": "calc(var(--td-cascader-step-dot-size, 16rpx) + 14rpx)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "cascaderStepHeight", + "component": "cascader", + "previousDecision": "pending", + "frozenTarget": { + "light": "44dp", + "dark": "44dp", + "expressions": [ + "88rpx" + ], + "source": [ + "packages/components/cascader/cascader.less:25" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/cascader/cascader.less", + "selector": ".t-cascader__step", + "property": "height", + "kind": "render-property", + "value": "var(--td-cascader-step-height, 88rpx)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "cascaderTitleColor", + "component": "cascader", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.9)", + "dark": "rgba(255, 255, 255, 90%)", + "expressions": [ + "@text-color-primary" + ], + "source": [ + "packages/components/cascader/cascader.less:8" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/cascader/cascader.less", + "selector": ".t-cascader", + "property": "color", + "kind": "render-property", + "value": "var(--td-cascader-title-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorPrimary": [ + "tdesign-component/lib/src/components/cascader/t_cascader.dart:558" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/cascader/t_cascader_test.dart:319", + "text": "expect(selectedText.style?.color, token.textColorPrimary);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/cascader/t_cascader_test.dart:453", + "text": "expect(option.style?.color, TThemeData.defaultData().textColorPrimary);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/cascader/t_cascader_test.dart:570", + "text": "TThemeData.defaultData().textColorPrimary,", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "cascaderTitleFont", + "component": "cascader", + "previousDecision": "pending", + "frozenTarget": { + "light": "600 18dp / 26dp PingFang SC, Microsoft YaHei, Arial Regular", + "dark": "600 18dp / 26dp PingFang SC, Microsoft YaHei, Arial Regular", + "expressions": [ + "@font-title-large" + ], + "source": [ + "packages/components/cascader/cascader.less:10" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/cascader/cascader.less", + "selector": ".t-cascader__title", + "property": "font", + "kind": "render-property", + "value": "var(--td-cascader-title-font, var(--td-font-title-large, 600 36rpx / 52rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "fontTitleLarge": [] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "cascaderTitlePadding", + "component": "cascader", + "previousDecision": "pending", + "frozenTarget": { + "light": "16dp", + "dark": "16dp", + "expressions": [ + "@spacer-2" + ], + "source": [ + "packages/components/cascader/cascader.less:9" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/cascader/cascader.less", + "selector": ".t-cascader__title", + "property": "padding", + "kind": "render-property", + "value": "var(--td-cascader-title-padding, var(--td-spacer-2, 32rpx))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "spacer2": [ + "tdesign-component/lib/src/components/cascader/t_cascader.dart:221", + "tdesign-component/lib/src/components/cascader/t_cascader.dart:319", + "tdesign-component/lib/src/components/cascader/t_cascader.dart:321", + "tdesign-component/lib/src/components/cascader/t_cascader.dart:414", + "tdesign-component/lib/src/components/cascader/t_cascader.dart:451", + "tdesign-component/lib/src/components/cascader/t_cascader.dart:475", + "tdesign-component/lib/src/components/cascader/t_cascader.dart:477", + "tdesign-component/lib/src/components/cascader/t_cascader.dart:522" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "cellBgColor", + "component": "cell", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(255, 255, 255, 1)", + "dark": "#242424", + "expressions": [ + "@bg-color-container" + ], + "source": [ + "packages/components/cell/cell.less:6" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/cell/cell.less", + "selector": ".t-cell", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-cell-bg-color, var(--td-bg-color-container, var(--td-font-white-1, #ffffff)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "bgColorContainer": [ + "tdesign-component/lib/src/components/cell/t_cell.dart:125" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "cellBorderColor", + "component": "cell", + "previousDecision": "pending", + "frozenTarget": { + "light": "#e7e7e7", + "dark": "#383838", + "expressions": [ + "@component-stroke" + ], + "source": [ + "packages/components/cell/cell.less:8" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/cell/cell.less", + "selector": ".t-cell--bordered::after", + "property": "border-bottom", + "kind": "render-property", + "value": "var(--td-cell-border-width, 1px) solid var(--td-cell-border-color, var(--td-component-stroke, var(--td-gray-color-3, #e7e7e7)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "componentStroke": [ + "tdesign-component/lib/src/components/cell/t_cell_group.dart:73", + "tdesign-component/lib/src/components/cell/t_cell_group.dart:130", + "tdesign-component/lib/src/components/cell/t_cell.dart:130" + ], + "borderColor": [ + "tdesign-component/lib/src/components/cell/t_cell_group.dart:130", + "tdesign-component/lib/src/components/cell/t_cell_theme_data.dart:28", + "tdesign-component/lib/src/components/cell/t_cell_theme_data.dart:67", + "tdesign-component/lib/src/components/cell/t_cell_theme_data.dart:125", + "tdesign-component/lib/src/components/cell/t_cell_theme_data.dart:145", + "tdesign-component/lib/src/components/cell/t_cell_theme_data.dart:187", + "tdesign-component/lib/src/components/cell/t_cell.dart:130" + ] + }, + "approvedGlobalException": "引用已批准修正的浅色 grayColor3", + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "cellBorderLeftSpace", + "component": "cell", + "previousDecision": "pending", + "frozenTarget": { + "light": "16dp", + "dark": "16dp", + "expressions": [ + "@cell-horizontal-padding" + ], + "source": [ + "packages/components/cell/cell.less:10" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/cell/cell.less", + "selector": ".t-cell--bordered::after", + "property": "left", + "kind": "render-property", + "value": "var(--td-cell-border-left-space, var(--td-cell-horizontal-padding, var(--td-spacer-2, 32rpx)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "cellBorderRightSpace", + "component": "cell", + "previousDecision": "pending", + "frozenTarget": { + "light": "0", + "dark": "0", + "expressions": [ + "0" + ], + "source": [ + "packages/components/cell/cell.less:11" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/cell/cell.less", + "selector": ".t-cell--bordered::after", + "property": "right", + "kind": "render-property", + "value": "var(--td-cell-border-right-space, 0)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "cellBorderWidth", + "component": "cell", + "previousDecision": "pending", + "frozenTarget": { + "light": "1px", + "dark": "1px", + "expressions": [ + "1px" + ], + "source": [ + "packages/components/cell/cell.less:9" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/cell/cell.less", + "selector": ".t-cell--bordered::after", + "property": "border-bottom", + "kind": "render-property", + "value": "var(--td-cell-border-width, 1px) solid var(--td-cell-border-color, var(--td-component-stroke, var(--td-gray-color-3, #e7e7e7)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "cellDescriptionColor", + "component": "cell", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.6)", + "dark": "rgba(255, 255, 255, 55%)", + "expressions": [ + "@text-color-secondary" + ], + "source": [ + "packages/components/cell/cell.less:12" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/cell/cell.less", + "selector": ".t-cell__description", + "property": "color", + "kind": "render-property", + "value": "var(--td-cell-description-color, var(--td-text-color-secondary, var(--td-font-gray-2, rgba(0, 0, 0, 0.6))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorSecondary": [ + "tdesign-component/lib/src/components/cell/t_cell.dart:96" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "cellDescriptionFont", + "component": "cell", + "previousDecision": "pending", + "frozenTarget": { + "light": "14dp / 22dp PingFang SC, Microsoft YaHei, Arial Regular", + "dark": "14dp / 22dp PingFang SC, Microsoft YaHei, Arial Regular", + "expressions": [ + "@font-body-medium" + ], + "source": [ + "packages/components/cell/cell.less:13" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/cell/cell.less", + "selector": ".t-cell__description", + "property": "font", + "kind": "render-property", + "value": "var(--td-cell-description-font, var(--td-font-body-medium, 28rpx / 44rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "fontBodyMedium": [ + "tdesign-component/lib/src/components/cell/t_cell_group.dart:98", + "tdesign-component/lib/src/components/cell/t_cell_group.dart:99", + "tdesign-component/lib/src/components/cell/t_cell_group.dart:101", + "tdesign-component/lib/src/components/cell/t_cell.dart:97", + "tdesign-component/lib/src/components/cell/t_cell.dart:98", + "tdesign-component/lib/src/components/cell/t_cell.dart:99" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/cell/t_cell_test.dart:51", + "text": "('副标题', token.fontBodyMedium!, Colors.green),", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/cell/t_cell_test.dart:54", + "text": "('组标题', token.fontBodyMedium!, Colors.purple),", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/cell/t_cell_test.dart:272", + "text": "expect(text.style?.fontSize, token.fontBodyMedium?.size);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/cell/t_cell_test.dart:417", + "text": "expect(subtitleStyle.style.fontSize, token.fontBodyMedium?.size);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/cell/t_cell_test.dart:418", + "text": "expect(subtitleStyle.style.height, token.fontBodyMedium?.height);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/cell/t_cell_test.dart:535", + "text": "expect(titleStyle.style.fontSize, token.fontBodyMedium?.size);", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "cellGroupBorderColor", + "component": "cell-group", + "previousDecision": "pending", + "frozenTarget": { + "light": "#e7e7e7", + "dark": "#383838", + "expressions": [ + "@component-stroke" + ], + "source": [ + "packages/components/cell-group/cell-group.less:9" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/cell-group/cell-group.less", + "selector": ".t-cell-group--bordered::before", + "property": "border-top", + "kind": "render-property", + "value": "1px solid var(--td-cell-group-border-color, var(--td-component-stroke, var(--td-gray-color-3, #e7e7e7)))" + }, + { + "file": "packages/components/cell-group/cell-group.less", + "selector": ".t-cell-group--bordered::after", + "property": "border-bottom", + "kind": "render-property", + "value": "1px solid var(--td-cell-group-border-color, var(--td-component-stroke, var(--td-gray-color-3, #e7e7e7)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "componentStroke": [ + "tdesign-component/lib/src/components/cell/t_cell_group.dart:73", + "tdesign-component/lib/src/components/cell/t_cell_group.dart:130", + "tdesign-component/lib/src/components/cell/t_cell.dart:130" + ] + }, + "approvedGlobalException": "引用已批准修正的浅色 grayColor3", + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "cellGroupTitleBgColor", + "component": "cell-group", + "previousDecision": "pending", + "frozenTarget": { + "light": "#f3f3f3", + "dark": "#2c2c2c", + "expressions": [ + "@bg-color-secondarycontainer" + ], + "source": [ + "packages/components/cell-group/cell-group.less:7" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/cell-group/cell-group.less", + "selector": ".t-cell-group__title", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-cell-group-title-bg-color, var(--td-bg-color-secondarycontainer, var(--td-gray-color-1, #f3f3f3)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "bgColorSecondaryContainer": [ + "tdesign-component/lib/src/components/cell/t_cell.dart:124" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "cellGroupTitleColor", + "component": "cell-group", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.4)", + "dark": "rgba(255, 255, 255, 35%)", + "expressions": [ + "@text-color-placeholder" + ], + "source": [ + "packages/components/cell-group/cell-group.less:8" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/cell-group/cell-group.less", + "selector": ".t-cell-group__title", + "property": "color", + "kind": "render-property", + "value": "var(--td-cell-group-title-color, var(--td-text-color-placeholder, var(--td-font-gray-3, rgba(0, 0, 0, 0.4))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorPlaceholder": [ + "tdesign-component/lib/src/components/cell/t_cell.dart:102", + "tdesign-component/lib/src/components/cell/t_cell.dart:225" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "cellGroupTitleFontSize", + "component": "cell-group", + "previousDecision": "pending", + "frozenTarget": { + "light": "14dp", + "dark": "14dp", + "expressions": [ + "@font-size-base" + ], + "source": [ + "packages/components/cell-group/cell-group.less:4" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/cell-group/cell-group.less", + "selector": ".t-cell-group__title", + "property": "font-size", + "kind": "render-property", + "value": "var(--td-cell-group-title-font-size, var(--td-font-size-base, 28rpx))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "fontSizeBase": [] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "cellGroupTitleLineHeight", + "component": "cell-group", + "previousDecision": "pending", + "frozenTarget": { + "light": "45dp", + "dark": "45dp", + "expressions": [ + "90rpx" + ], + "source": [ + "packages/components/cell-group/cell-group.less:5" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/cell-group/cell-group.less", + "selector": ".t-cell-group__title", + "property": "line-height", + "kind": "render-property", + "value": "var(--td-cell-group-title-line-height, 90rpx)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "cellGroupTitlePaddingLeft", + "component": "cell-group", + "previousDecision": "pending", + "frozenTarget": { + "light": "16dp", + "dark": "16dp", + "expressions": [ + "@spacer-2" + ], + "source": [ + "packages/components/cell-group/cell-group.less:6" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/cell-group/cell-group.less", + "selector": ".t-cell-group__title", + "property": "padding-left", + "kind": "render-property", + "value": "var(--td-cell-group-title-padding-left, var(--td-spacer-2, 32rpx))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "spacer2": [ + "tdesign-component/lib/src/components/cell/t_cell.dart:121" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "cellHeight", + "component": "cell", + "previousDecision": "pending", + "frozenTarget": { + "light": "auto", + "dark": "auto", + "expressions": [ + "auto" + ], + "source": [ + "packages/components/cell/cell.less:3" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/cell/cell.less", + "selector": ".t-cell", + "property": "height", + "kind": "render-property", + "value": "var(--td-cell-height, auto)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "height": [ + "tdesign-component/lib/src/components/cell/t_cell_group.dart:99", + "tdesign-component/lib/src/components/cell/t_cell_group.dart:127", + "tdesign-component/lib/src/components/cell/t_cell_theme_data.dart:37", + "tdesign-component/lib/src/components/cell/t_cell_theme_data.dart:103", + "tdesign-component/lib/src/components/cell/t_cell_theme_data.dart:134", + "tdesign-component/lib/src/components/cell/t_cell_theme_data.dart:154", + "tdesign-component/lib/src/components/cell/t_cell_theme_data.dart:204", + "tdesign-component/lib/src/components/cell/t_cell.dart:92", + "tdesign-component/lib/src/components/cell/t_cell.dart:98", + "tdesign-component/lib/src/components/cell/t_cell.dart:104", + "tdesign-component/lib/src/components/cell/t_cell.dart:120", + "tdesign-component/lib/src/components/cell/t_cell.dart:176" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "cellHorizontalPadding", + "component": "cell", + "previousDecision": "pending", + "frozenTarget": { + "light": "16dp", + "dark": "16dp", + "expressions": [ + "@spacer-2" + ], + "source": [ + "packages/components/cell/cell.less:5" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/cell/cell.less", + "selector": ".t-cell", + "property": "padding", + "kind": "render-property", + "value": "var(--td-cell-vertical-padding, var(--td-spacer-2, 32rpx)) var(--td-cell-horizontal-padding, var(--td-spacer-2, 32rpx))" + }, + { + "file": "packages/components/cell/cell.less", + "selector": ".t-cell--bordered::after", + "property": "left", + "kind": "render-property", + "value": "var(--td-cell-border-left-space, var(--td-cell-horizontal-padding, var(--td-spacer-2, 32rpx)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "spacer2": [ + "tdesign-component/lib/src/components/cell/t_cell.dart:121" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "cellHoverColor", + "component": "cell", + "previousDecision": "pending", + "frozenTarget": { + "light": "#f3f3f3", + "dark": "#2c2c2c", + "expressions": [ + "@bg-color-secondarycontainer" + ], + "source": [ + "packages/components/cell/cell.less:7" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/cell/cell.less", + "selector": ".t-cell--hover", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-cell-hover-color, var(--td-bg-color-secondarycontainer, var(--td-gray-color-1, #f3f3f3)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "bgColorSecondaryContainer": [ + "tdesign-component/lib/src/components/cell/t_cell.dart:124" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "cellImageHeight", + "component": "cell", + "previousDecision": "pending", + "frozenTarget": { + "light": "48dp", + "dark": "48dp", + "expressions": [ + "96rpx" + ], + "source": [ + "packages/components/cell/cell.less:25" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/cell/cell.less", + "selector": ".t-cell__left-image", + "property": "height", + "kind": "render-property", + "value": "var(--td-cell-image-height, 96rpx)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "cellImageWidth", + "component": "cell", + "previousDecision": "pending", + "frozenTarget": { + "light": "48dp", + "dark": "48dp", + "expressions": [ + "96rpx" + ], + "source": [ + "packages/components/cell/cell.less:24" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/cell/cell.less", + "selector": ".t-cell__left-image", + "property": "width", + "kind": "render-property", + "value": "var(--td-cell-image-width, 96rpx)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "cellLeftIconColor", + "component": "cell", + "previousDecision": "pending", + "frozenTarget": { + "light": "#0052d9", + "dark": "#4582e6", + "expressions": [ + "@brand-color" + ], + "source": [ + "packages/components/cell/cell.less:18" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/cell/cell.less", + "selector": ".t-cell__left-icon", + "property": "color", + "kind": "render-property", + "value": "var(--td-cell-left-icon-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "brandColor": [] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "cellLeftIconSize", + "component": "cell", + "previousDecision": "pending", + "frozenTarget": { + "light": "24dp", + "dark": "24dp", + "expressions": [ + "48rpx" + ], + "source": [ + "packages/components/cell/cell.less:19" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/cell/cell.less", + "selector": ".t-cell__left-icon", + "property": "font-size", + "kind": "render-property", + "value": "var(--td-cell-left-icon-size, 48rpx)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "cellNoteColor", + "component": "cell", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.4)", + "dark": "rgba(255, 255, 255, 35%)", + "expressions": [ + "@text-color-placeholder" + ], + "source": [ + "packages/components/cell/cell.less:14" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/cell/cell.less", + "selector": ".t-cell__note", + "property": "color", + "kind": "render-property", + "value": "var(--td-cell-note-color, var(--td-text-color-placeholder, var(--td-font-gray-3, rgba(0, 0, 0, 0.4))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorPlaceholder": [ + "tdesign-component/lib/src/components/cell/t_cell.dart:102", + "tdesign-component/lib/src/components/cell/t_cell.dart:225" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "cellNoteFontSize", + "component": "cell", + "previousDecision": "pending", + "frozenTarget": { + "light": "16dp", + "dark": "16dp", + "expressions": [ + "@font-size-m" + ], + "source": [ + "packages/components/cell/cell.less:15" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/cell/cell.less", + "selector": ".t-cell__note", + "property": "font-size", + "kind": "render-property", + "value": "var(--td-cell-note-font-size, var(--td-font-size-m, 32rpx))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "fontSizeM": [] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "cellRequiredColor", + "component": "cell", + "previousDecision": "pending", + "frozenTarget": { + "light": "#d54941", + "dark": "#c64751", + "expressions": [ + "@error-color" + ], + "source": [ + "packages/components/cell/cell.less:22" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/cell/cell.less", + "selector": ".t-cell--required", + "property": "color", + "kind": "render-property", + "value": "var(--td-cell-required-color, var(--td-error-color, var(--td-error-color-6, #d54941)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "errorColor": [ + "tdesign-component/lib/src/components/cell/t_cell.dart:170" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/cell/t_cell_test.dart:67", + "text": "token.errorColor,", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "cellRequiredFontSize", + "component": "cell", + "previousDecision": "pending", + "frozenTarget": { + "light": "16dp", + "dark": "16dp", + "expressions": [ + "@font-size-m" + ], + "source": [ + "packages/components/cell/cell.less:23" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/cell/cell.less", + "selector": ".t-cell--required", + "property": "font-size", + "kind": "render-property", + "value": "var(--td-cell-required-font-size, var(--td-font-size-m, 32rpx))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "fontSizeM": [] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "cellRightIconColor", + "component": "cell", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.4)", + "dark": "rgba(255, 255, 255, 35%)", + "expressions": [ + "@text-color-placeholder" + ], + "source": [ + "packages/components/cell/cell.less:20" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/cell/cell.less", + "selector": ".t-cell__right-icon", + "property": "color", + "kind": "render-property", + "value": "var(--td-cell-right-icon-color, var(--td-text-color-placeholder, var(--td-font-gray-3, rgba(0, 0, 0, 0.4))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorPlaceholder": [ + "tdesign-component/lib/src/components/cell/t_cell.dart:102", + "tdesign-component/lib/src/components/cell/t_cell.dart:225" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "cellRightIconSize", + "component": "cell", + "previousDecision": "pending", + "frozenTarget": { + "light": "24dp", + "dark": "24dp", + "expressions": [ + "48rpx" + ], + "source": [ + "packages/components/cell/cell.less:21" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/cell/cell.less", + "selector": ".t-cell__right-icon", + "property": "font-size", + "kind": "render-property", + "value": "var(--td-cell-right-icon-size, 48rpx)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "cellTitleColor", + "component": "cell", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.9)", + "dark": "rgba(255, 255, 255, 90%)", + "expressions": [ + "@text-color-primary" + ], + "source": [ + "packages/components/cell/cell.less:16" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/cell/cell.less", + "selector": ".t-cell__title-text", + "property": "color", + "kind": "render-property", + "value": "var(--td-cell-title-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorPrimary": [ + "tdesign-component/lib/src/components/cell/t_cell_group.dart:97", + "tdesign-component/lib/src/components/cell/t_cell.dart:90" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/cell/t_cell_test.dart:273", + "text": "expect(text.style?.color, token.textColorPrimary);", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "cellTitleFont", + "component": "cell", + "previousDecision": "pending", + "frozenTarget": { + "light": "16dp / 24dp PingFang SC, Microsoft YaHei, Arial Regular", + "dark": "16dp / 24dp PingFang SC, Microsoft YaHei, Arial Regular", + "expressions": [ + "@font-body-large" + ], + "source": [ + "packages/components/cell/cell.less:17" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/cell/cell.less", + "selector": ".t-cell__title-text", + "property": "font", + "kind": "render-property", + "value": "var(--td-cell-title-font, var(--td-font-body-large, 32rpx / 48rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "fontBodyLarge": [ + "tdesign-component/lib/src/components/cell/t_cell.dart:91", + "tdesign-component/lib/src/components/cell/t_cell.dart:92", + "tdesign-component/lib/src/components/cell/t_cell.dart:93", + "tdesign-component/lib/src/components/cell/t_cell.dart:103", + "tdesign-component/lib/src/components/cell/t_cell.dart:104", + "tdesign-component/lib/src/components/cell/t_cell.dart:105" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/cell/t_cell_test.dart:50", + "text": "('标题', token.fontBodyLarge!, Colors.red),", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/cell/t_cell_test.dart:52", + "text": "('说明', token.fontBodyLarge!, Colors.blue),", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/cell/t_cell_test.dart:53", + "text": "('独立说明', token.fontBodyLarge!, Colors.blue),", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/cell/t_cell_test.dart:403", + "text": "expect(titleStyle.style.fontSize, token.fontBodyLarge?.size);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/cell/t_cell_test.dart:404", + "text": "expect(titleStyle.style.height, token.fontBodyLarge?.height);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/cell/t_cell_test.dart:410", + "text": "expect(noteStyle.style.fontSize, token.fontBodyLarge?.size);", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "cellVerticalPadding", + "component": "cell", + "previousDecision": "pending", + "frozenTarget": { + "light": "16dp", + "dark": "16dp", + "expressions": [ + "@spacer-2" + ], + "source": [ + "packages/components/cell/cell.less:4" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/cell/cell.less", + "selector": ".t-cell", + "property": "padding", + "kind": "render-property", + "value": "var(--td-cell-vertical-padding, var(--td-spacer-2, 32rpx)) var(--td-cell-horizontal-padding, var(--td-spacer-2, 32rpx))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "spacer2": [ + "tdesign-component/lib/src/components/cell/t_cell.dart:121" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "checkboxBgColor", + "component": "checkbox", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(255, 255, 255, 1)", + "dark": "#242424", + "expressions": [ + "@bg-color-container" + ], + "source": [ + "packages/components/checkbox/checkbox.less:11" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/checkbox/checkbox.less", + "selector": ".t-checkbox", + "property": "background", + "kind": "render-property", + "value": "var(--td-checkbox-bg-color, var(--td-bg-color-container, var(--td-font-white-1, #ffffff)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "bgColorContainer": [ + "tdesign-component/lib/src/components/checkbox/t_check_box.dart:168", + "tdesign-component/lib/src/components/checkbox/t_check_box.dart:196", + "tdesign-component/lib/src/components/checkbox/t_check_box.dart:220" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/checkbox/t_checkbox_test.dart:306", + "text": "TThemeData.defaultData().bgColorContainer,", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "checkboxBorderColor", + "component": "checkbox", + "previousDecision": "pending", + "frozenTarget": { + "light": "#e7e7e7", + "dark": "#383838", + "expressions": [ + "@component-stroke" + ], + "source": [ + "packages/components/checkbox/checkbox.less:12" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/checkbox/checkbox.less", + "selector": ".t-checkbox__border", + "property": "background", + "kind": "render-property", + "value": "var(--td-checkbox-border-color, var(--td-component-stroke, var(--td-gray-color-3, #e7e7e7)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "componentStroke": [] + }, + "approvedGlobalException": "引用已批准修正的浅色 grayColor3", + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "checkboxDescriptionColor", + "component": "checkbox", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.6)", + "dark": "rgba(255, 255, 255, 55%)", + "expressions": [ + "@text-color-secondary" + ], + "source": [ + "packages/components/checkbox/checkbox.less:15" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/checkbox/checkbox.less", + "selector": ".t-checkbox__description", + "property": "color", + "kind": "render-property", + "value": "var(--td-checkbox-description-color, var(--td-text-color-secondary, var(--td-font-gray-2, rgba(0, 0, 0, 0.6))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorSecondary": [ + "tdesign-component/lib/src/components/checkbox/t_check_box.dart:459" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/checkbox/t_checkbox_test.dart:444", + "text": "token.textColorSecondary,", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "checkboxDescriptionDisabledColor", + "component": "checkbox", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.26)", + "dark": "rgba(255, 255, 255, 22%)", + "expressions": [ + "@text-color-disabled" + ], + "source": [ + "packages/components/checkbox/checkbox.less:16" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/checkbox/checkbox.less", + "selector": ".t-checkbox__description--disabled", + "property": "color", + "kind": "render-property", + "value": "var(--td-checkbox-description-disabled-color, var(--td-text-color-disabled, var(--td-font-gray-4, rgba(0, 0, 0, 0.26))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorDisabled": [ + "tdesign-component/lib/src/components/checkbox/t_check_box.dart:446", + "tdesign-component/lib/src/components/checkbox/t_check_box.dart:458" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/checkbox/t_checkbox_test.dart:176", + "text": "expect(disabledTitle.style?.color, token.textColorDisabled);", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "checkboxDescriptionFont", + "component": "checkbox", + "previousDecision": "pending", + "frozenTarget": { + "light": "14dp / 22dp PingFang SC, Microsoft YaHei, Arial Regular", + "dark": "14dp / 22dp PingFang SC, Microsoft YaHei, Arial Regular", + "expressions": [ + "@font-body-medium" + ], + "source": [ + "packages/components/checkbox/checkbox.less:9" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/checkbox/checkbox.less", + "selector": ".t-checkbox__description", + "property": "font", + "kind": "render-property", + "value": "var(--td-checkbox-description-font, var(--td-font-body-medium, 28rpx / 44rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "fontBodyMedium": [ + "tdesign-component/lib/src/components/checkbox/t_selection_card.dart:24", + "tdesign-component/lib/src/components/checkbox/t_check_box.dart:421" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/checkbox/t_checkbox_test.dart:414", + "text": "expect(subTitle.fontSize, token.fontBodyMedium?.size);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/checkbox/t_checkbox_test.dart:415", + "text": "expect(subTitle.height, token.fontBodyMedium?.height);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/checkbox/t_checkbox_test.dart:416", + "text": "expect(subTitle.fontWeight, token.fontBodyMedium?.fontWeight);", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "checkboxIconCheckedColor", + "component": "checkbox", + "previousDecision": "pending", + "frozenTarget": { + "light": "#0052d9", + "dark": "#4582e6", + "expressions": [ + "@brand-color" + ], + "source": [ + "packages/components/checkbox/checkbox.less:20" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/checkbox/checkbox.less", + "selector": ".t-checkbox__icon--checked", + "property": "color", + "kind": "render-property", + "value": "var(--td-checkbox-icon-checked-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + }, + { + "file": "packages/components/checkbox/checkbox.less", + "selector": ".t-checkbox__icon-line::before,\n.t-checkbox__icon-line::after", + "property": "background", + "kind": "render-property", + "value": "var(--td-checkbox-icon-checked-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "brandColor": [ + "tdesign-component/lib/src/components/checkbox/t_check_box.dart:192", + "tdesign-component/lib/src/components/checkbox/t_check_box.dart:302" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/checkbox/t_checkbox_test.dart:152", + "text": "expect(icon.color, token.brandColor);", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "checkboxIconColor", + "component": "checkbox", + "previousDecision": "pending", + "frozenTarget": { + "light": "#dcdcdc", + "dark": "#5e5e5e", + "expressions": [ + "@component-border" + ], + "source": [ + "packages/components/checkbox/checkbox.less:17" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/checkbox/checkbox.less", + "selector": ".t-checkbox__icon", + "property": "color", + "kind": "render-property", + "value": "var(--td-checkbox-icon-color, var(--td-component-border, var(--td-gray-color-4, #dcdcdc)))" + }, + { + "file": "packages/components/checkbox/checkbox.less", + "selector": ".t-checkbox__icon-circle", + "property": "border", + "kind": "render-property", + "value": "calc(4rpx * 2) solid var(--td-checkbox-icon-color, var(--td-component-border, var(--td-gray-color-4, #dcdcdc)))" + }, + { + "file": "packages/components/checkbox/checkbox.less", + "selector": ".t-checkbox__icon-rectangle", + "property": "border", + "kind": "render-property", + "value": "calc(4rpx * 2) solid var(--td-checkbox-icon-color, var(--td-component-border, var(--td-gray-color-4, #dcdcdc)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "componentBorder": [ + "tdesign-component/lib/src/components/checkbox/t_check_box.dart:303", + "tdesign-component/lib/src/components/checkbox/t_check_box.dart:319", + "tdesign-component/lib/src/components/checkbox/t_check_box.dart:360", + "tdesign-component/lib/src/components/checkbox/t_check_box.dart:363" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/checkbox/t_checkbox_test.dart:174", + "text": "expect(uncheckedIcon.color, token.componentBorder);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/checkbox/t_checkbox_test.dart:197", + "text": "expect(token.componentBorder, const Color(0xFFDCDCDC));", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/checkbox/t_checkbox_test.dart:287", + "text": "expect(border.top.color, TThemeData.defaultData().componentBorder);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/checkbox/t_checkbox_test.dart:511", + "text": "expect(border.top.color, token.componentBorder);", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "checkboxIconDisabledBgColor", + "component": "checkbox", + "previousDecision": "pending", + "frozenTarget": { + "light": "#eeeeee", + "dark": "#2c2c2c", + "expressions": [ + "@bg-color-component-disabled" + ], + "source": [ + "packages/components/checkbox/checkbox.less:19" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/checkbox/checkbox.less", + "selector": ".t-checkbox__icon-circle--disabled", + "property": "background", + "kind": "render-property", + "value": "var(--td-checkbox-icon-disabled-bg-color, var(--td-bg-color-component-disabled, var(--td-gray-color-2, #eeeeee)))" + }, + { + "file": "packages/components/checkbox/checkbox.less", + "selector": ".t-checkbox__icon-rectangle--disabled", + "property": "background", + "kind": "render-property", + "value": "var(--td-checkbox-icon-disabled-bg-color, var(--td-bg-color-component-disabled, var(--td-gray-color-2, #eeeeee)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "bgColorComponentDisabled": [ + "tdesign-component/lib/src/components/checkbox/t_check_box.dart:324", + "tdesign-component/lib/src/components/checkbox/t_check_box.dart:355" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/checkbox/t_checkbox_test.dart:191", + "text": "decoration.color == token.bgColorComponentDisabled &&", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/checkbox/t_checkbox_test.dart:282", + "text": "TThemeData.defaultData().bgColorComponentDisabled &&", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/checkbox/t_checkbox_test.dart:510", + "text": "expect(decoration.color, token.bgColorComponentDisabled);", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "checkboxIconDisabledColor", + "component": "checkbox", + "previousDecision": "pending", + "frozenTarget": { + "light": "#b5c7ff", + "dark": "#143975", + "expressions": [ + "@brand-color-disabled" + ], + "source": [ + "packages/components/checkbox/checkbox.less:18" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/checkbox/checkbox.less", + "selector": ".t-checkbox__icon--disabled", + "property": "color", + "kind": "render-property", + "value": "var(--td-checkbox-icon-disabled-color, var(--td-brand-color-disabled, var(--td-primary-color-3, #b5c7ff)))" + }, + { + "file": "packages/components/checkbox/checkbox.less", + "selector": ".t-checkbox__icon-line--disabled::before,\n.t-checkbox__icon-line--disabled::after", + "property": "background", + "kind": "render-property", + "value": "var(--td-checkbox-icon-disabled-color, var(--td-brand-color-disabled, var(--td-primary-color-3, #b5c7ff)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "brandColorDisabled": [ + "tdesign-component/lib/src/components/checkbox/t_check_box.dart:194", + "tdesign-component/lib/src/components/checkbox/t_check_box.dart:300" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/checkbox/t_checkbox_test.dart:175", + "text": "expect(disabledCheckedIcon.color, token.brandColorDisabled);", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "checkboxIconSize", + "component": "checkbox", + "previousDecision": "pending", + "frozenTarget": { + "light": "24dp", + "dark": "24dp", + "expressions": [ + "48rpx" + ], + "source": [ + "packages/components/checkbox/checkbox.less:6" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/checkbox/checkbox.less", + "selector": ".t-checkbox__icon-image", + "property": "width", + "kind": "render-property", + "value": "var(--td-checkbox-icon-size, 48rpx)" + }, + { + "file": "packages/components/checkbox/checkbox.less", + "selector": ".t-checkbox__icon-image", + "property": "height", + "kind": "render-property", + "value": "var(--td-checkbox-icon-size, 48rpx)" + }, + { + "file": "packages/components/checkbox/checkbox.less", + "selector": ".t-checkbox__icon", + "property": "width", + "kind": "render-property", + "value": "var(--td-checkbox-icon-size, 48rpx)" + }, + { + "file": "packages/components/checkbox/checkbox.less", + "selector": ".t-checkbox__icon", + "property": "height", + "kind": "render-property", + "value": "var(--td-checkbox-icon-size, 48rpx)" + }, + { + "file": "packages/components/checkbox/checkbox.less", + "selector": ".t-checkbox__icon", + "property": "font-size", + "kind": "render-property", + "value": "var(--td-checkbox-icon-size, 48rpx)" + }, + { + "file": "packages/components/checkbox/checkbox.less", + "selector": ".t-checkbox__icon", + "property": "margin-top", + "kind": "render-property", + "value": "calc((var(--td-checkbox-title-line-height, var(--td-line-height-title-medium, 48rpx)) - var(--td-checkbox-icon-size, 48rpx)) / 2)" + }, + { + "file": "packages/components/checkbox/checkbox.less", + "selector": ".t-checkbox__icon-circle", + "property": "width", + "kind": "render-property", + "value": "calc((var(--td-checkbox-icon-size, 48rpx) - 4rpx) * 2)" + }, + { + "file": "packages/components/checkbox/checkbox.less", + "selector": ".t-checkbox__icon-circle", + "property": "height", + "kind": "render-property", + "value": "calc((var(--td-checkbox-icon-size, 48rpx) - 4rpx) * 2)" + }, + { + "file": "packages/components/checkbox/checkbox.less", + "selector": ".t-checkbox__icon-rectangle", + "property": "width", + "kind": "render-property", + "value": "calc((var(--td-checkbox-icon-size, 48rpx) - 4rpx * 2) * 2)" + }, + { + "file": "packages/components/checkbox/checkbox.less", + "selector": ".t-checkbox__icon-rectangle", + "property": "height", + "kind": "render-property", + "value": "calc((var(--td-checkbox-icon-size, 48rpx) - 4rpx * 2) * 2)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "checkboxTagActiveBgColor", + "component": "checkbox", + "previousDecision": "pending", + "frozenTarget": { + "light": "#f2f3ff", + "dark": "#1b2f51", + "expressions": [ + "@brand-color-light" + ], + "source": [ + "packages/components/checkbox/checkbox.less:21" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/checkbox/checkbox.less", + "selector": ".t-checkbox--tag.t-checkbox--checked", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-checkbox-tag-active-bg-color, var(--td-brand-color-light, var(--td-primary-color-1, #f2f3ff)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "brandColorLight": [] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "checkboxTagActiveColor", + "component": "checkbox", + "previousDecision": "pending", + "frozenTarget": { + "light": "#0052d9", + "dark": "#4582e6", + "expressions": [ + "@brand-color" + ], + "source": [ + "packages/components/checkbox/checkbox.less:22" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/checkbox/checkbox.less", + "selector": ".t-checkbox--tag.t-checkbox--checked", + "property": "color", + "kind": "render-property", + "value": "var(--td-checkbox-tag-active-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + }, + { + "file": "packages/components/checkbox/checkbox.less", + "selector": ".t-checkbox--tag .t-checkbox__title--checked", + "property": "color", + "kind": "render-property", + "value": "var(--td-checkbox-tag-active-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "brandColor": [ + "tdesign-component/lib/src/components/checkbox/t_check_box.dart:192", + "tdesign-component/lib/src/components/checkbox/t_check_box.dart:302" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/checkbox/t_checkbox_test.dart:152", + "text": "expect(icon.color, token.brandColor);", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "checkboxTitleColor", + "component": "checkbox", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.9)", + "dark": "rgba(255, 255, 255, 90%)", + "expressions": [ + "@text-color-primary" + ], + "source": [ + "packages/components/checkbox/checkbox.less:13" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/checkbox/checkbox.less", + "selector": ".t-checkbox__title", + "property": "color", + "kind": "render-property", + "value": "var(--td-checkbox-title-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorPrimary": [ + "tdesign-component/lib/src/components/checkbox/t_check_box.dart:447" + ], + "titleColor": [ + "tdesign-component/lib/src/components/checkbox/t_checkbox_theme_data.dart:24", + "tdesign-component/lib/src/components/checkbox/t_checkbox_theme_data.dart:50", + "tdesign-component/lib/src/components/checkbox/t_checkbox_theme_data.dart:67", + "tdesign-component/lib/src/components/checkbox/t_checkbox_theme_data.dart:77", + "tdesign-component/lib/src/components/checkbox/t_checkbox_theme_data.dart:87", + "tdesign-component/lib/src/components/checkbox/t_checkbox_theme_data.dart:122", + "tdesign-component/lib/src/components/checkbox/t_check_box.dart:447" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/checkbox/t_checkbox_test.dart:440", + "text": "token.textColorPrimary,", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "checkboxTitleDisabledColor", + "component": "checkbox", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.26)", + "dark": "rgba(255, 255, 255, 22%)", + "expressions": [ + "@text-color-disabled" + ], + "source": [ + "packages/components/checkbox/checkbox.less:14" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/checkbox/checkbox.less", + "selector": ".t-checkbox__title--disabled", + "property": "color", + "kind": "render-property", + "value": "var(--td-checkbox-title-disabled-color, var(--td-text-color-disabled, var(--td-font-gray-4, rgba(0, 0, 0, 0.26))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorDisabled": [ + "tdesign-component/lib/src/components/checkbox/t_check_box.dart:446", + "tdesign-component/lib/src/components/checkbox/t_check_box.dart:458" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/checkbox/t_checkbox_test.dart:176", + "text": "expect(disabledTitle.style?.color, token.textColorDisabled);", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "checkboxTitleFont", + "component": "checkbox", + "previousDecision": "pending", + "frozenTarget": { + "light": "16dp / 24dp PingFang SC, Microsoft YaHei, Arial Regular", + "dark": "16dp / 24dp PingFang SC, Microsoft YaHei, Arial Regular", + "expressions": [ + "@font-body-large" + ], + "source": [ + "packages/components/checkbox/checkbox.less:7" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/checkbox/checkbox.less", + "selector": ".t-checkbox__title", + "property": "font", + "kind": "render-property", + "value": "var(--td-checkbox-title-font, var(--td-font-body-large, 32rpx / 48rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "fontBodyLarge": [ + "tdesign-component/lib/src/components/checkbox/t_selection_card.dart:22", + "tdesign-component/lib/src/components/checkbox/t_check_box.dart:412" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/checkbox/t_checkbox_test.dart:410", + "text": "expect(title.fontSize, token.fontBodyLarge?.size);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/checkbox/t_checkbox_test.dart:411", + "text": "expect(title.height, token.fontBodyLarge?.height);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/checkbox/t_checkbox_test.dart:412", + "text": "expect(title.fontWeight, token.fontBodyLarge?.fontWeight);", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "checkboxTitleLineHeight", + "component": "checkbox", + "previousDecision": "pending", + "frozenTarget": { + "light": "24dp", + "dark": "24dp", + "expressions": [ + "@text-line-height-m" + ], + "source": [ + "packages/components/checkbox/checkbox.less:8" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/checkbox/checkbox.less", + "selector": ".t-checkbox__icon", + "property": "margin-top", + "kind": "render-property", + "value": "calc((var(--td-checkbox-title-line-height, var(--td-line-height-title-medium, 48rpx)) - var(--td-checkbox-icon-size, 48rpx)) / 2)" + }, + { + "file": "packages/components/checkbox/checkbox.less", + "selector": ".t-checkbox__title", + "property": "line-height", + "kind": "render-property", + "value": "var(--td-checkbox-title-line-height, var(--td-line-height-title-medium, 48rpx))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "checkboxVerticalPadding", + "component": "checkbox", + "previousDecision": "pending", + "frozenTarget": { + "light": "16dp", + "dark": "16dp", + "expressions": [ + "@spacer-2" + ], + "source": [ + "packages/components/checkbox/checkbox.less:10" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/checkbox/checkbox.less", + "selector": ".t-checkbox--block", + "property": "padding", + "kind": "render-property", + "value": "var(--td-checkbox-vertical-padding, var(--td-spacer-2, 32rpx))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "spacer2": [ + "tdesign-component/lib/src/components/checkbox/t_selection_card.dart:26", + "tdesign-component/lib/src/components/checkbox/t_selection_card.dart:112", + "tdesign-component/lib/src/components/checkbox/t_selection_card.dart:138", + "tdesign-component/lib/src/components/checkbox/t_check_box.dart:131", + "tdesign-component/lib/src/components/checkbox/t_check_box.dart:133", + "tdesign-component/lib/src/components/checkbox/t_check_box.dart:227", + "tdesign-component/lib/src/components/checkbox/t_check_box.dart:230", + "tdesign-component/lib/src/components/checkbox/t_check_box.dart:252", + "tdesign-component/lib/src/components/checkbox/t_check_box.dart:262" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "collapseBorderColor", + "component": "collapse-panel", + "previousDecision": "pending", + "frozenTarget": { + "light": "#e7e7e7", + "dark": "#383838", + "expressions": [ + "@border-level-1-color" + ], + "source": [ + "packages/components/collapse-panel/collapse-panel.less:16" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/collapse-panel/collapse-panel.less", + "selector": ".t-collapse-panel__header--top::after", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-collapse-border-color, var(--td-border-level-1-color, var(--td-gray-color-3, #e7e7e7)))" + }, + { + "file": "packages/components/collapse-panel/collapse-panel.less", + "selector": ".t-collapse-panel__header--bottom::after", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-collapse-border-color, var(--td-border-level-1-color, var(--td-gray-color-3, #e7e7e7)))" + }, + { + "file": "packages/components/collapse-panel/collapse-panel.less", + "selector": ".t-collapse-panel__body::after", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-collapse-border-color, var(--td-border-level-1-color, var(--td-gray-color-3, #e7e7e7)))" + }, + { + "file": "packages/components/collapse-panel/collapse-panel.less", + "selector": ".t-collapse-panel__content--expanded.t-collapse-panel__content--bottom::after", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-collapse-border-color, var(--td-border-level-1-color, var(--td-gray-color-3, #e7e7e7)))" + }, + { + "file": "packages/components/collapse-panel/collapse-panel.less", + "selector": ".t-collapse-panel__content--expanded.t-collapse-panel__content--top::after", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-collapse-border-color, var(--td-border-level-1-color, var(--td-gray-color-3, #e7e7e7)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "borderLevel1Color": [] + }, + "approvedGlobalException": "引用已批准修正的浅色 grayColor3", + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "collapseContentFont", + "component": "collapse-panel", + "previousDecision": "pending", + "frozenTarget": { + "light": "14dp / 22dp PingFang SC, Microsoft YaHei, Arial Regular", + "dark": "14dp / 22dp PingFang SC, Microsoft YaHei, Arial Regular", + "expressions": [ + "@font-body-medium" + ], + "source": [ + "packages/components/collapse-panel/collapse-panel.less:11" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/collapse-panel/collapse-panel.less", + "selector": ".t-collapse-panel__content", + "property": "font", + "kind": "render-property", + "value": "var(--td-collapse-content-font, var(--td-font-body-medium, 28rpx / 44rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "fontBodyMedium": [ + "tdesign-component/lib/src/components/collapse/t_collapse.dart:412" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/collapse/t_collapse_test.dart:274", + "text": "TThemeData.defaultData().fontBodyMedium?.size,", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "collapseContentPadding", + "component": "collapse-panel", + "previousDecision": "pending", + "frozenTarget": { + "light": "16dp", + "dark": "16dp", + "expressions": [ + "@spacer-2" + ], + "source": [ + "packages/components/collapse-panel/collapse-panel.less:15" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/collapse-panel/collapse-panel.less", + "selector": ".t-collapse-panel__content", + "property": "padding", + "kind": "render-property", + "value": "var(--td-collapse-content-padding, var(--td-spacer-2, 32rpx))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "spacer2": [ + "tdesign-component/lib/src/components/collapse/t_inset_divider.dart:24", + "tdesign-component/lib/src/components/collapse/t_collapse.dart:156", + "tdesign-component/lib/src/components/collapse/t_collapse.dart:276", + "tdesign-component/lib/src/components/collapse/t_collapse.dart:368", + "tdesign-component/lib/src/components/collapse/t_collapse.dart:377", + "tdesign-component/lib/src/components/collapse/t_collapse.dart:378", + "tdesign-component/lib/src/components/collapse/t_collapse.dart:379", + "tdesign-component/lib/src/components/collapse/t_collapse.dart:381" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "collapseContentTextColor", + "component": "collapse-panel", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.9)", + "dark": "rgba(255, 255, 255, 90%)", + "expressions": [ + "@text-color-primary" + ], + "source": [ + "packages/components/collapse-panel/collapse-panel.less:5" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/collapse-panel/collapse-panel.less", + "selector": ".t-collapse-panel__content", + "property": "color", + "kind": "render-property", + "value": "var(--td-collapse-content-text-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorPrimary": [ + "tdesign-component/lib/src/components/collapse/t_collapse.dart:392", + "tdesign-component/lib/src/components/collapse/t_collapse.dart:414" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "collapseDisabledColor", + "component": "collapse-panel", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.26)", + "dark": "rgba(255, 255, 255, 22%)", + "expressions": [ + "@text-color-disabled" + ], + "source": [ + "packages/components/collapse-panel/collapse-panel.less:3" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/collapse-panel/collapse-panel.less", + "selector": ".t-collapse-panel__content--disabled", + "property": "color", + "kind": "render-property", + "value": "var(--td-collapse-disabled-color, var(--td-text-color-disabled, var(--td-font-gray-4, rgba(0, 0, 0, 0.26))))" + }, + { + "file": "packages/components/collapse-panel/collapse-panel.less", + "selector": ".class-title--disabled,\n.class-note--disabled,\n.class-left-icon--disabled,\n.class-right-icon--disabled", + "property": "color", + "kind": "render-property", + "value": "var(--td-collapse-disabled-color, var(--td-text-color-disabled, var(--td-font-gray-4, rgba(0, 0, 0, 0.26))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorDisabled": [ + "tdesign-component/lib/src/components/collapse/t_collapse.dart:314", + "tdesign-component/lib/src/components/collapse/t_collapse.dart:342", + "tdesign-component/lib/src/components/collapse/t_collapse.dart:372", + "tdesign-component/lib/src/components/collapse/t_collapse.dart:407" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/collapse/t_collapse_test.dart:546", + "text": "TThemeData.defaultData().textColorDisabled,", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/collapse/t_collapse_test.dart:550", + "text": "TThemeData.defaultData().textColorDisabled,", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "collapseExtraFont", + "component": "collapse-panel", + "previousDecision": "pending", + "frozenTarget": { + "light": "16dp / 24dp PingFang SC, Microsoft YaHei, Arial Regular", + "dark": "16dp / 24dp PingFang SC, Microsoft YaHei, Arial Regular", + "expressions": [ + "@font-body-large" + ], + "source": [ + "packages/components/collapse-panel/collapse-panel.less:10" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/collapse-panel/collapse-panel.less", + "selector": ".t-collapse-panel__extra", + "property": "font", + "kind": "render-property", + "value": "var(--td-collapse-extra-font, var(--td-font-body-large, 32rpx / 48rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "fontBodyLarge": [ + "tdesign-component/lib/src/components/collapse/t_collapse.dart:390" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "collapseHeaderHeight", + "component": "collapse-panel", + "previousDecision": "pending", + "frozenTarget": { + "light": "auto", + "dark": "auto", + "expressions": [ + "auto" + ], + "source": [ + "packages/components/collapse-panel/collapse-panel.less:13" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/collapse-panel/collapse-panel.less", + "selector": ".t-collapse-panel__header", + "property": "height", + "kind": "render-property", + "value": "var(--td-collapse-header-height, auto)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "collapseHeaderTextColor", + "component": "collapse-panel", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.9)", + "dark": "rgba(255, 255, 255, 90%)", + "expressions": [ + "@text-color-primary" + ], + "source": [ + "packages/components/collapse-panel/collapse-panel.less:4" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/collapse-panel/collapse-panel.less", + "selector": ".class-title", + "property": "color", + "kind": "render-property", + "value": "var(--td-collapse-header-text-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorPrimary": [ + "tdesign-component/lib/src/components/collapse/t_collapse.dart:392", + "tdesign-component/lib/src/components/collapse/t_collapse.dart:414" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "collapseHorizontalPadding", + "component": "collapse-panel", + "previousDecision": "pending", + "frozenTarget": { + "light": "16dp", + "dark": "16dp", + "expressions": [ + "@spacer-2" + ], + "source": [ + "packages/components/collapse-panel/collapse-panel.less:14" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/collapse-panel/collapse-panel.less", + "selector": ".t-collapse-panel__header", + "property": "padding-left", + "kind": "render-property", + "value": "var(--td-collapse-horizontal-padding, var(--td-spacer-2, 32rpx))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "spacer2": [ + "tdesign-component/lib/src/components/collapse/t_inset_divider.dart:24", + "tdesign-component/lib/src/components/collapse/t_collapse.dart:156", + "tdesign-component/lib/src/components/collapse/t_collapse.dart:276", + "tdesign-component/lib/src/components/collapse/t_collapse.dart:368", + "tdesign-component/lib/src/components/collapse/t_collapse.dart:377", + "tdesign-component/lib/src/components/collapse/t_collapse.dart:378", + "tdesign-component/lib/src/components/collapse/t_collapse.dart:379", + "tdesign-component/lib/src/components/collapse/t_collapse.dart:381" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "collapseIconColor", + "component": "collapse-panel", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.4)", + "dark": "rgba(255, 255, 255, 35%)", + "expressions": [ + "@text-color-placeholder" + ], + "source": [ + "packages/components/collapse-panel/collapse-panel.less:18" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/collapse-panel/collapse-panel.less", + "selector": ".class-right-icon", + "property": "color", + "kind": "render-property", + "value": "var(--td-collapse-icon-color, var(--td-text-color-placeholder, var(--td-font-gray-3, rgba(0, 0, 0, 0.4))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorPlaceholder": [ + "tdesign-component/lib/src/components/collapse/t_collapse.dart:315", + "tdesign-component/lib/src/components/collapse/t_collapse.dart:343", + "tdesign-component/lib/src/components/collapse/t_collapse.dart:373" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/collapse/t_collapse_misc_test.dart:16", + "text": "color: token.textColorPlaceholder,", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/collapse/t_collapse_misc_test.dart:21", + "text": "expect(icon.color, token.textColorPlaceholder);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/collapse/t_collapse_misc_test.dart:33", + "text": "color: token.textColorPlaceholder,", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/collapse/t_collapse_misc_test.dart:38", + "text": "expect(icon.color, token.textColorPlaceholder);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/collapse/t_collapse_test.dart:414", + "text": "token.textColorPlaceholder,", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "collapseLeftIconColor", + "component": "collapse-panel", + "previousDecision": "pending", + "frozenTarget": { + "light": "#0052d9", + "dark": "#4582e6", + "expressions": [ + "@brand-color" + ], + "source": [ + "packages/components/collapse-panel/collapse-panel.less:17" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/collapse-panel/collapse-panel.less", + "selector": ".class-left-icon", + "property": "color", + "kind": "render-property", + "value": "var(--td-collapse-left-icon-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "brandColor": [] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "collapsePanelBgColor", + "component": "collapse-panel", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(255, 255, 255, 1)", + "dark": "#242424", + "expressions": [ + "@bg-color-container" + ], + "source": [ + "packages/components/collapse-panel/collapse-panel.less:20" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/collapse-panel/collapse-panel.less", + "selector": ".t-collapse-panel", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-collapse-panel-bg-color, var(--td-bg-color-container, var(--td-font-white-1, #ffffff)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "bgColorContainer": [ + "tdesign-component/lib/src/components/collapse/t_collapse.dart:104", + "tdesign-component/lib/src/components/collapse/t_collapse.dart:146" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "collapseTitleFont", + "component": "collapse-panel", + "previousDecision": "pending", + "frozenTarget": { + "light": "16dp / 24dp PingFang SC, Microsoft YaHei, Arial Regular", + "dark": "16dp / 24dp PingFang SC, Microsoft YaHei, Arial Regular", + "expressions": [ + "@font-body-large" + ], + "source": [ + "packages/components/collapse-panel/collapse-panel.less:9" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/collapse-panel/collapse-panel.less", + "selector": ".class-title", + "property": "font", + "kind": "render-property", + "value": "var(--td-collapse-title-font, var(--td-font-body-large, 32rpx / 48rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "fontBodyLarge": [ + "tdesign-component/lib/src/components/collapse/t_collapse.dart:390" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "dataTimePickerYearWidth", + "component": "date-time-picker", + "previousDecision": "pending", + "frozenTarget": { + "light": "64dp", + "dark": "64dp", + "expressions": [ + "128rpx" + ], + "source": [ + "packages/components/date-time-picker/date-time-picker.less:3" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/date-time-picker/date-time-picker.less", + "selector": ".t-date-time-picker__item--roomly", + "property": "width", + "kind": "render-property", + "value": "var(--td-data-time-picker-year-width, 128rpx)" + }, + { + "file": "packages/components/date-time-picker/date-time-picker.less", + "selector": ".t-date-time-picker__item--roomly", + "property": "flex", + "kind": "render-property", + "value": "0 0 var(--td-data-time-picker-year-width, 128rpx)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "dialogBodyMaxHeight", + "component": "dialog", + "previousDecision": "pending", + "frozenTarget": { + "light": "456dp", + "dark": "456dp", + "expressions": [ + "912rpx" + ], + "source": [ + "packages/components/dialog/dialog.less:9" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/dialog/dialog.less", + "selector": ".t-dialog__content", + "property": "max-height", + "kind": "render-property", + "value": "var(--td-dialog-body-max-height, 912rpx)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "dialogBorderRadius", + "component": "dialog", + "previousDecision": "pending", + "frozenTarget": { + "light": "12dp", + "dark": "12dp", + "expressions": [ + "@radius-extraLarge" + ], + "source": [ + "packages/components/dialog/dialog.less:8" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/dialog/dialog.less", + "selector": ".t-dialog", + "property": "border-radius", + "kind": "render-property", + "value": "var(--td-dialog-border-radius, var(--td-radius-extraLarge, 24rpx))" + }, + { + "file": "packages/components/dialog/dialog.less", + "selector": ".t-dialog__wrapper", + "property": "--td-popup-border-radius", + "kind": "custom-property-forward", + "value": "var(--td-dialog-border-radius, var(--td-radius-extraLarge, 24rpx))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "radiusExtraLarge": [ + "tdesign-component/lib/src/components/dialog/t_dialog.dart:246" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "dialogCloseColor", + "component": "dialog", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.4)", + "dark": "rgba(255, 255, 255, 35%)", + "expressions": [ + "@text-color-placeholder" + ], + "source": [ + "packages/components/dialog/dialog.less:18" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/dialog/dialog.less", + "selector": ".t-dialog__close-btn", + "property": "color", + "kind": "render-property", + "value": "var(--td-dialog-close-color, var(--td-text-color-placeholder, var(--td-font-gray-3, rgba(0, 0, 0, 0.4))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorPlaceholder": [ + "tdesign-component/lib/src/components/dialog/t_dialog.dart:386" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "dialogContentColor", + "component": "dialog", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.6)", + "dark": "rgba(255, 255, 255, 55%)", + "expressions": [ + "@text-color-secondary" + ], + "source": [ + "packages/components/dialog/dialog.less:16" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/dialog/dialog.less", + "selector": ".t-dialog__body", + "property": "color", + "kind": "render-property", + "value": "var(--td-dialog-content-color, var(--td-text-color-secondary, var(--td-font-gray-2, rgba(0, 0, 0, 0.6))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorSecondary": [ + "tdesign-component/lib/src/components/dialog/t_dialog.dart:279" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "dialogContentFont", + "component": "dialog", + "previousDecision": "pending", + "frozenTarget": { + "light": "16dp / 24dp PingFang SC, Microsoft YaHei, Arial Regular", + "dark": "16dp / 24dp PingFang SC, Microsoft YaHei, Arial Regular", + "expressions": [ + "@font-body-large" + ], + "source": [ + "packages/components/dialog/dialog.less:15" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/dialog/dialog.less", + "selector": ".t-dialog__body", + "property": "font", + "kind": "render-property", + "value": "var(--td-dialog-content-font, var(--td-font-body-large, 32rpx / 48rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "fontBodyLarge": [ + "tdesign-component/lib/src/components/dialog/t_dialog.dart:280", + "tdesign-component/lib/src/components/dialog/t_dialog.dart:281", + "tdesign-component/lib/src/components/dialog/t_dialog.dart:282" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "dialogTitleColor", + "component": "dialog", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.9)", + "dark": "rgba(255, 255, 255, 90%)", + "expressions": [ + "@text-color-primary" + ], + "source": [ + "packages/components/dialog/dialog.less:13" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/dialog/dialog.less", + "selector": ".t-dialog__header", + "property": "color", + "kind": "render-property", + "value": "var(--td-dialog-title-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorPrimary": [ + "tdesign-component/lib/src/components/dialog/t_dialog.dart:271" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "dialogTitleFont", + "component": "dialog", + "previousDecision": "pending", + "frozenTarget": { + "light": "600 18dp / 26dp PingFang SC, Microsoft YaHei, Arial Regular", + "dark": "600 18dp / 26dp PingFang SC, Microsoft YaHei, Arial Regular", + "expressions": [ + "@font-title-large" + ], + "source": [ + "packages/components/dialog/dialog.less:12" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/dialog/dialog.less", + "selector": ".t-dialog__header", + "property": "font", + "kind": "render-property", + "value": "var(--td-dialog-title-font, var(--td-font-title-large, 600 36rpx / 52rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "fontTitleLarge": [ + "tdesign-component/lib/src/components/dialog/t_dialog.dart:272", + "tdesign-component/lib/src/components/dialog/t_dialog.dart:273", + "tdesign-component/lib/src/components/dialog/t_dialog.dart:274" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "dialogWidth", + "component": "dialog", + "previousDecision": "pending", + "frozenTarget": { + "light": "311dp", + "dark": "311dp", + "expressions": [ + "622rpx" + ], + "source": [ + "packages/components/dialog/dialog.less:7" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/dialog/dialog.less", + "selector": ".t-dialog", + "property": "width", + "kind": "render-property", + "value": "var(--td-dialog-width, 622rpx)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "width": [ + "tdesign-component/lib/src/components/dialog/t_dialog_theme_data.dart:41", + "tdesign-component/lib/src/components/dialog/t_dialog_theme_data.dart:51", + "tdesign-component/lib/src/components/dialog/t_dialog_theme_data.dart:73", + "tdesign-component/lib/src/components/dialog/t_dialog_theme_data.dart:90", + "tdesign-component/lib/src/components/dialog/t_dialog_theme_data.dart:100", + "tdesign-component/lib/src/components/dialog/t_dialog_theme_data.dart:136", + "tdesign-component/lib/src/components/dialog/t_dialog.dart:249", + "tdesign-component/lib/src/components/dialog/t_dialog.dart:262", + "tdesign-component/lib/src/components/dialog/t_dialog.dart:369", + "tdesign-component/lib/src/components/dialog/t_dialog.dart:626", + "tdesign-component/lib/src/components/dialog/t_dialog.dart:638", + "tdesign-component/lib/src/components/dialog/t_dialog.dart:653" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "dividerBorderWidth", + "component": "divider", + "previousDecision": "pending", + "frozenTarget": { + "light": "1dp", + "dark": "1dp", + "expressions": [ + "2rpx" + ], + "source": [ + "packages/components/divider/divider.less:4" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/divider/divider.less", + "selector": ".t-divider--horizontal::before,\n.t-divider--horizontal::after", + "property": "border-top-width", + "kind": "render-property", + "value": "var(--td-divider-border-width, 2rpx)" + }, + { + "file": "packages/components/divider/divider.less", + "selector": ".t-divider--vertical::before,\n.t-divider--vertical::after", + "property": "border-left-width", + "kind": "render-property", + "value": "var(--td-divider-border-width, 2rpx)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "dividerColor", + "component": "divider", + "previousDecision": "pending", + "frozenTarget": { + "light": "#e7e7e7", + "dark": "#383838", + "expressions": [ + "@bg-color-component" + ], + "source": [ + "packages/components/divider/divider.less:3" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/divider/divider.less", + "selector": ".t-divider", + "property": "color", + "kind": "render-property", + "value": "var(--td-divider-color, var(--td-bg-color-component, var(--td-gray-color-3, #e7e7e7)))" + }, + { + "file": "packages/components/divider/divider.less", + "selector": ".t-divider", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-divider-color, var(--td-bg-color-component, var(--td-gray-color-3, #e7e7e7)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "bgColorComponent": [ + "tdesign-component/lib/src/components/divider/t_divider.dart:61" + ], + "color": [ + "tdesign-component/lib/src/components/divider/t_divider_theme_data.dart:14", + "tdesign-component/lib/src/components/divider/t_divider_theme_data.dart:35", + "tdesign-component/lib/src/components/divider/t_divider_theme_data.dart:50", + "tdesign-component/lib/src/components/divider/t_divider_theme_data.dart:59", + "tdesign-component/lib/src/components/divider/t_divider_theme_data.dart:86", + "tdesign-component/lib/src/components/divider/t_divider_painter.dart:10", + "tdesign-component/lib/src/components/divider/t_divider_painter.dart:17", + "tdesign-component/lib/src/components/divider/t_divider_painter.dart:31", + "tdesign-component/lib/src/components/divider/t_divider_painter.dart:60", + "tdesign-component/lib/src/components/divider/t_divider.dart:61", + "tdesign-component/lib/src/components/divider/t_divider.dart:74", + "tdesign-component/lib/src/components/divider/t_divider.dart:115", + "tdesign-component/lib/src/components/divider/t_divider.dart:126", + "tdesign-component/lib/src/components/divider/t_divider.dart:130", + "tdesign-component/lib/src/components/divider/t_divider.dart:148", + "tdesign-component/lib/src/components/divider/t_divider.dart:152", + "tdesign-component/lib/src/components/divider/t_divider.dart:158", + "tdesign-component/lib/src/components/divider/t_divider.dart:192", + "tdesign-component/lib/src/components/divider/t_divider.dart:194", + "tdesign-component/lib/src/components/divider/t_divider.dart:203", + "tdesign-component/lib/src/components/divider/t_divider.dart:207" + ] + }, + "approvedGlobalException": "引用已批准修正的浅色 grayColor3", + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "dividerContentColor", + "component": "divider", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.4)", + "dark": "rgba(255, 255, 255, 35%)", + "expressions": [ + "@text-color-placeholder" + ], + "source": [ + "packages/components/divider/divider.less:7" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/divider/divider.less", + "selector": ".t-divider__content", + "property": "color", + "kind": "render-property", + "value": "var(--td-divider-content-color, var(--td-text-color-placeholder, var(--td-font-gray-3, rgba(0, 0, 0, 0.4))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorPlaceholder": [ + "tdesign-component/lib/src/components/divider/t_divider.dart:74" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/divider/t_divider_test.dart:248", + "text": "expect(style.color, token.textColorPlaceholder);", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "dividerContentFont", + "component": "divider", + "previousDecision": "pending", + "frozenTarget": { + "light": "12dp / 20dp PingFang SC, Microsoft YaHei, Arial Regular", + "dark": "12dp / 20dp PingFang SC, Microsoft YaHei, Arial Regular", + "expressions": [ + "@font-body-small" + ], + "source": [ + "packages/components/divider/divider.less:8" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/divider/divider.less", + "selector": ".t-divider__content", + "property": "font", + "kind": "render-property", + "value": "var(--td-divider-content-font, var(--td-font-body-small, 24rpx / 40rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "fontBodySmall": [ + "tdesign-component/lib/src/components/divider/t_divider.dart:69" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "dividerContentLineStyle", + "component": "divider", + "previousDecision": "pending", + "frozenTarget": { + "light": "solid", + "dark": "solid", + "expressions": [ + "solid" + ], + "source": [ + "packages/components/divider/divider.less:9" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/divider/divider.less", + "selector": ".t-divider", + "property": "border-style", + "kind": "render-property", + "value": "var(--td-divider-content-line-style, solid)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "dividerContentMargin", + "component": "divider", + "previousDecision": "pending", + "frozenTarget": { + "light": "12dp", + "dark": "12dp", + "expressions": [ + "@spacer-1" + ], + "source": [ + "packages/components/divider/divider.less:10" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/divider/divider.less", + "selector": ".t-divider--horizontal .t-divider__content:not(:empty)", + "property": "margin", + "kind": "render-property", + "value": "0 var(--td-divider-content-margin, var(--td-spacer-1, 24rpx))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "spacer1": [ + "tdesign-component/lib/src/components/divider/t_divider.dart:66" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "dividerHorizontalMargin", + "component": "divider", + "previousDecision": "pending", + "frozenTarget": { + "light": "10dp", + "dark": "10dp", + "expressions": [ + "20rpx" + ], + "source": [ + "packages/components/divider/divider.less:5" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/divider/divider.less", + "selector": ".t-divider--horizontal", + "property": "margin", + "kind": "render-property", + "value": "var(--td-divider-horizontal-margin, 20rpx) 0" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "dividerVerticalMargin", + "component": "divider", + "previousDecision": "pending", + "frozenTarget": { + "light": "8dp", + "dark": "8dp", + "expressions": [ + "@spacer" + ], + "source": [ + "packages/components/divider/divider.less:6" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/divider/divider.less", + "selector": ".t-divider--vertical", + "property": "margin", + "kind": "render-property", + "value": "0 var(--td-divider-vertical-margin, var(--td-spacer, 16rpx))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "spacer": [] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "drawerBgColor", + "component": "drawer", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(255, 255, 255, 1)", + "dark": "#242424", + "expressions": [ + "@bg-color-container" + ], + "source": [ + "packages/components/drawer/drawer.less:6" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/drawer/drawer.less", + "selector": ".t-drawer", + "property": "background", + "kind": "render-property", + "value": "var(--td-drawer-bg-color, var(--td-bg-color-container, var(--td-font-white-1, #ffffff)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "bgColorContainer": [ + "tdesign-component/lib/src/components/drawer/t_drawer_content.dart:58" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/drawer/t_drawer_test.dart:574", + "text": "final container = drawerContainer(tester, color: token.bgColorContainer);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/drawer/t_drawer_test.dart:576", + "text": "expect(container.color, token.bgColorContainer);", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "drawerBorderColor", + "component": "drawer", + "previousDecision": "pending", + "frozenTarget": { + "light": "#e7e7e7", + "dark": "#383838", + "expressions": [ + "@border-level-1-color" + ], + "source": [ + "packages/components/drawer/drawer.less:7" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/drawer/drawer.less", + "selector": ".t-drawer__sidebar-item::after", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-drawer-border-color, var(--td-border-level-1-color, var(--td-gray-color-3, #e7e7e7)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "borderLevel1Color": [] + }, + "approvedGlobalException": "引用已批准修正的浅色 grayColor3", + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "drawerFooterPaddingBottom", + "component": "drawer", + "previousDecision": "pending", + "frozenTarget": { + "light": "20dp", + "dark": "20dp", + "expressions": [ + "40rpx" + ], + "source": [ + "packages/components/drawer/drawer.less:13" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/drawer/drawer.less", + "selector": ".t-drawer__footer", + "property": "padding-bottom", + "kind": "render-property", + "value": "var(--td-drawer-footer-padding-bottom, 40rpx)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "drawerHoverColor", + "component": "drawer", + "previousDecision": "pending", + "frozenTarget": { + "light": "#f3f3f3", + "dark": "#2c2c2c", + "expressions": [ + "@bg-color-secondarycontainer" + ], + "source": [ + "packages/components/drawer/drawer.less:14" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/drawer/drawer.less", + "selector": ".t-drawer--hover", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-drawer-hover-color, var(--td-bg-color-secondarycontainer, var(--td-gray-color-1, #f3f3f3)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "bgColorSecondaryContainer": [ + "tdesign-component/lib/src/components/drawer/t_drawer_content.dart:104" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "drawerItemIconColor", + "component": "drawer", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.9)", + "dark": "rgba(255, 255, 255, 90%)", + "expressions": [ + "@drawer-title-color" + ], + "source": [ + "packages/components/drawer/drawer.less:9" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/drawer/drawer.less", + "selector": ".t-drawer__sidebar-item-icon", + "property": "color", + "kind": "render-property", + "value": "var(--td-drawer-item-icon-color, var(--td-drawer-title-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9)))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "itemIconColor": [ + "tdesign-component/lib/src/components/drawer/t_drawer_theme_data.dart:40", + "tdesign-component/lib/src/components/drawer/t_drawer_theme_data.dart:70", + "tdesign-component/lib/src/components/drawer/t_drawer_theme_data.dart:97", + "tdesign-component/lib/src/components/drawer/t_drawer_theme_data.dart:114", + "tdesign-component/lib/src/components/drawer/t_drawer_theme_data.dart:163", + "tdesign-component/lib/src/components/drawer/t_drawer_content.dart:109" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "drawerItemIconSize", + "component": "drawer", + "previousDecision": "pending", + "frozenTarget": { + "light": "24dp", + "dark": "24dp", + "expressions": [ + "48rpx" + ], + "source": [ + "packages/components/drawer/drawer.less:11" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/drawer/drawer.less", + "selector": ".t-drawer__sidebar-item-icon", + "property": "font-size", + "kind": "render-property", + "value": "var(--td-drawer-item-icon-size, 48rpx)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "itemIconSize": [ + "tdesign-component/lib/src/components/drawer/t_drawer_theme_data.dart:43", + "tdesign-component/lib/src/components/drawer/t_drawer_theme_data.dart:71", + "tdesign-component/lib/src/components/drawer/t_drawer_theme_data.dart:78", + "tdesign-component/lib/src/components/drawer/t_drawer_theme_data.dart:98", + "tdesign-component/lib/src/components/drawer/t_drawer_theme_data.dart:115", + "tdesign-component/lib/src/components/drawer/t_drawer_theme_data.dart:164", + "tdesign-component/lib/src/components/drawer/t_drawer_theme_data.dart:165", + "tdesign-component/lib/src/components/drawer/t_drawer_theme_data.dart:166", + "tdesign-component/lib/src/components/drawer/t_drawer_content.dart:111" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "drawerItemPadding", + "component": "drawer", + "previousDecision": "pending", + "frozenTarget": { + "light": "16dp", + "dark": "16dp", + "expressions": [ + "@spacer-2" + ], + "source": [ + "packages/components/drawer/drawer.less:10" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/drawer/drawer.less", + "selector": ".t-drawer__sidebar-item", + "property": "padding-top", + "kind": "render-property", + "value": "var(--td-drawer-item-padding, var(--td-spacer-2, 32rpx))" + }, + { + "file": "packages/components/drawer/drawer.less", + "selector": ".t-drawer__sidebar-item", + "property": "padding-bottom", + "kind": "render-property", + "value": "var(--td-drawer-item-padding, var(--td-spacer-2, 32rpx))" + }, + { + "file": "packages/components/drawer/drawer.less", + "selector": ".t-drawer__sidebar-item", + "property": "padding-left", + "kind": "render-property", + "value": "var(--td-drawer-item-padding, var(--td-spacer-2, 32rpx))" + }, + { + "file": "packages/components/drawer/drawer.less", + "selector": ".t-drawer__sidebar-item::after", + "property": "left", + "kind": "render-property", + "value": "var(--td-drawer-item-padding, var(--td-spacer-2, 32rpx))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "spacer2": [], + "itemPadding": [ + "tdesign-component/lib/src/components/drawer/t_drawer_theme_data.dart:36", + "tdesign-component/lib/src/components/drawer/t_drawer_theme_data.dart:69", + "tdesign-component/lib/src/components/drawer/t_drawer_theme_data.dart:96", + "tdesign-component/lib/src/components/drawer/t_drawer_theme_data.dart:113", + "tdesign-component/lib/src/components/drawer/t_drawer_theme_data.dart:157", + "tdesign-component/lib/src/components/drawer/t_drawer_theme_data.dart:158", + "tdesign-component/lib/src/components/drawer/t_drawer_theme_data.dart:159", + "tdesign-component/lib/src/components/drawer/t_drawer_content.dart:106" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "drawerSidebarHeight", + "component": "drawer", + "previousDecision": "pending", + "frozenTarget": { + "light": "70vh", + "dark": "70vh", + "expressions": [ + "70vh" + ], + "source": [ + "packages/components/drawer/drawer.less:12" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/drawer/drawer.less", + "selector": ".t-drawer__sidebar", + "property": "height", + "kind": "render-property", + "value": "var(--td-drawer-sidebar-height, 70vh)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "drawerTitleColor", + "component": "drawer", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.9)", + "dark": "rgba(255, 255, 255, 90%)", + "expressions": [ + "@text-color-primary" + ], + "source": [ + "packages/components/drawer/drawer.less:8" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/drawer/drawer.less", + "selector": ".t-drawer__title", + "property": "color", + "kind": "render-property", + "value": "var(--td-drawer-title-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + }, + { + "file": "packages/components/drawer/drawer.less", + "selector": ".t-drawer__sidebar-item-title", + "property": "color", + "kind": "render-property", + "value": "var(--td-drawer-title-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + }, + { + "file": "packages/components/drawer/drawer.less", + "selector": ".t-drawer__sidebar-item-icon", + "property": "color", + "kind": "render-property", + "value": "var(--td-drawer-item-icon-color, var(--td-drawer-title-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9)))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorPrimary": [ + "tdesign-component/lib/src/components/drawer/t_drawer_content.dart:110", + "tdesign-component/lib/src/components/drawer/t_drawer_content.dart:156", + "tdesign-component/lib/src/components/drawer/t_drawer_content.dart:170" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/drawer/t_drawer_test.dart:345", + "text": "expect(title.style?.color, TThemeData.defaultData().textColorPrimary);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/drawer/t_drawer_test.dart:424", + "text": "expect(iconTheme.data.color, TThemeData.defaultData().textColorPrimary);", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "drawerTitleFont", + "component": "drawer", + "previousDecision": "pending", + "frozenTarget": { + "light": "600 18dp / 26dp PingFang SC, Microsoft YaHei, Arial Regular", + "dark": "600 18dp / 26dp PingFang SC, Microsoft YaHei, Arial Regular", + "expressions": [ + "@font-title-large" + ], + "source": [ + "packages/components/drawer/drawer.less:4" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/drawer/drawer.less", + "selector": ".t-drawer__title", + "property": "font", + "kind": "render-property", + "value": "var(--td-drawer-title-font, var(--td-font-title-large, 600 36rpx / 52rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "fontTitleLarge": [ + "tdesign-component/lib/src/components/drawer/t_drawer_content.dart:168" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "drawerWidth", + "component": "drawer", + "previousDecision": "pending", + "frozenTarget": { + "light": "280dp", + "dark": "280dp", + "expressions": [ + "560rpx" + ], + "source": [ + "packages/components/drawer/drawer.less:3" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/drawer/drawer.less", + "selector": ".t-drawer", + "property": "width", + "kind": "render-property", + "value": "var(--td-drawer-width, 560rpx)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "width": [ + "tdesign-component/lib/src/components/drawer/t_drawer_theme_data.dart:13", + "tdesign-component/lib/src/components/drawer/t_drawer_theme_data.dart:62", + "tdesign-component/lib/src/components/drawer/t_drawer_theme_data.dart:77", + "tdesign-component/lib/src/components/drawer/t_drawer_theme_data.dart:89", + "tdesign-component/lib/src/components/drawer/t_drawer_theme_data.dart:106", + "tdesign-component/lib/src/components/drawer/t_drawer_theme_data.dart:141", + "tdesign-component/lib/src/components/drawer/t_drawer_content.dart:56", + "tdesign-component/lib/src/components/drawer/t_drawer_content.dart:141", + "tdesign-component/lib/src/components/drawer/t_drawer_content.dart:234", + "tdesign-component/lib/src/components/drawer/t_drawer.dart:120" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "dropdownMenuActiveColor", + "component": "dropdown-menu", + "previousDecision": "pending", + "frozenTarget": { + "light": "#0052d9", + "dark": "#4582e6", + "expressions": [ + "@brand-color" + ], + "source": [ + "packages/components/dropdown-menu/dropdown-menu.less:6" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/dropdown-menu/dropdown-menu.less", + "selector": ".t-dropdown-menu__item--active", + "property": "color", + "kind": "render-property", + "value": "var(--td-dropdown-menu-active-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "brandColor": [ + "tdesign-component/lib/src/components/dropdown_menu/t_dropdown_menu.dart:745", + "tdesign-component/lib/src/components/dropdown_menu/t_dropdown_menu.dart:754", + "tdesign-component/lib/src/components/dropdown_menu/t_dropdown_item.dart:313", + "tdesign-component/lib/src/components/dropdown_menu/t_dropdown_item.dart:331", + "tdesign-component/lib/src/components/dropdown_menu/t_dropdown_item.dart:437", + "tdesign-component/lib/src/components/dropdown_menu/t_dropdown_item.dart:485" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/dropdown_menu/t_dropdown_item_test.dart:220", + "text": "TThemeData.defaultData().brandColor,", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "dropdownMenuBgColor", + "component": "dropdown-menu", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(255, 255, 255, 1)", + "dark": "#242424", + "expressions": [ + "@bg-color-container" + ], + "source": [ + "packages/components/dropdown-item/dropdown-item.less:3", + "packages/components/dropdown-menu/dropdown-menu.less:4" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/dropdown-item/dropdown-item.less", + "selector": ".t-dropdown-item__body", + "property": "background", + "kind": "render-property", + "value": "var(--td-dropdown-menu-bg-color, var(--td-bg-color-container, var(--td-font-white-1, #ffffff)))" + }, + { + "file": "packages/components/dropdown-item/dropdown-item.less", + "selector": ".t-dropdown-item__footer", + "property": "background", + "kind": "render-property", + "value": "var(--td-dropdown-menu-bg-color, var(--td-bg-color-container, var(--td-font-white-1, #ffffff)))" + }, + { + "file": "packages/components/dropdown-menu/dropdown-menu.less", + "selector": ".t-dropdown-menu", + "property": "background", + "kind": "render-property", + "value": "var(--td-dropdown-menu-bg-color, var(--td-bg-color-container, var(--td-font-white-1, #ffffff)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "bgColorContainer": [ + "tdesign-component/lib/src/components/dropdown_menu/t_dropdown_menu.dart:689", + "tdesign-component/lib/src/components/dropdown_menu/t_dropdown_menu.dart:1146", + "tdesign-component/lib/src/components/dropdown_menu/t_dropdown_item.dart:297" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "dropdownMenuBorderWidth", + "component": "dropdown-menu", + "previousDecision": "pending", + "frozenTarget": { + "light": "1px", + "dark": "1px", + "expressions": [ + "1px" + ], + "source": [ + "packages/components/dropdown-menu/dropdown-menu.less:10" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/dropdown-menu/dropdown-menu.less", + "selector": ".t-dropdown-menu:after", + "property": "height", + "kind": "render-property", + "value": "var(--td-dropdown-menu-border-width, 1px)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "dropdownMenuColor", + "component": "dropdown-menu", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.9)", + "dark": "rgba(255, 255, 255, 90%)", + "expressions": [ + "@text-color-primary" + ], + "source": [ + "packages/components/dropdown-menu/dropdown-menu.less:5" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/dropdown-menu/dropdown-menu.less", + "selector": ".t-dropdown-menu__item", + "property": "color", + "kind": "render-property", + "value": "var(--td-dropdown-menu-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorPrimary": [ + "tdesign-component/lib/src/components/dropdown_menu/t_dropdown_menu.dart:734", + "tdesign-component/lib/src/components/dropdown_menu/t_dropdown_menu.dart:749", + "tdesign-component/lib/src/components/dropdown_menu/t_dropdown_menu.dart:755", + "tdesign-component/lib/src/components/dropdown_menu/t_dropdown_item.dart:219", + "tdesign-component/lib/src/components/dropdown_menu/t_dropdown_item.dart:390", + "tdesign-component/lib/src/components/dropdown_menu/t_dropdown_item.dart:475" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/dropdown_menu/t_dropdown_item_test.dart:216", + "text": "TThemeData.defaultData().textColorPrimary,", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/dropdown_menu/t_dropdown_menu_test.dart:366", + "text": "TThemeData.defaultData().textColorPrimary,", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "dropdownMenuDisabledColor", + "component": "dropdown-menu", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.26)", + "dark": "rgba(255, 255, 255, 22%)", + "expressions": [ + "@text-color-disabled" + ], + "source": [ + "packages/components/dropdown-menu/dropdown-menu.less:7" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/dropdown-menu/dropdown-menu.less", + "selector": ".t-dropdown-menu__item--disabled", + "property": "color", + "kind": "render-property", + "value": "var(--td-dropdown-menu-disabled-color, var(--td-text-color-disabled, var(--td-font-gray-4, rgba(0, 0, 0, 0.26))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorDisabled": [ + "tdesign-component/lib/src/components/dropdown_menu/t_dropdown_menu.dart:741", + "tdesign-component/lib/src/components/dropdown_menu/t_dropdown_menu.dart:752", + "tdesign-component/lib/src/components/dropdown_menu/t_dropdown_item.dart:397", + "tdesign-component/lib/src/components/dropdown_menu/t_dropdown_item.dart:482" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "dropdownMenuFontSize", + "component": "dropdown-menu", + "previousDecision": "pending", + "frozenTarget": { + "light": "14dp", + "dark": "14dp", + "expressions": [ + "@font-size-base" + ], + "source": [ + "packages/components/dropdown-menu/dropdown-menu.less:8" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/dropdown-menu/dropdown-menu.less", + "selector": ".t-dropdown-menu__title", + "property": "font-size", + "kind": "render-property", + "value": "var(--td-dropdown-menu-font-size, var(--td-font-size-base, 28rpx))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "fontSizeBase": [] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "dropdownMenuHeight", + "component": "dropdown-menu", + "previousDecision": "pending", + "frozenTarget": { + "light": "48dp", + "dark": "48dp", + "expressions": [ + "96rpx" + ], + "source": [ + "packages/components/dropdown-menu/dropdown-menu.less:3" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/dropdown-menu/dropdown-menu.less", + "selector": ".t-dropdown-menu", + "property": "height", + "kind": "render-property", + "value": "var(--td-dropdown-menu-height, 96rpx)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "dropdownMenuIconSize", + "component": "dropdown-menu", + "previousDecision": "pending", + "frozenTarget": { + "light": "20dp", + "dark": "20dp", + "expressions": [ + "40rpx" + ], + "source": [ + "packages/components/dropdown-menu/dropdown-menu.less:9" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/dropdown-menu/dropdown-menu.less", + "selector": ".t-dropdown-menu__icon", + "property": "font-size", + "kind": "render-property", + "value": "var(--td-dropdown-menu-icon-size, 40rpx)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "iconSize": [ + "tdesign-component/lib/src/components/dropdown_menu/t_dropdown_menu.dart:789", + "tdesign-component/lib/src/components/dropdown_menu/t_dropdown_theme_data.dart:17", + "tdesign-component/lib/src/components/dropdown_menu/t_dropdown_theme_data.dart:61", + "tdesign-component/lib/src/components/dropdown_menu/t_dropdown_theme_data.dart:123", + "tdesign-component/lib/src/components/dropdown_menu/t_dropdown_theme_data.dart:155", + "tdesign-component/lib/src/components/dropdown_menu/t_dropdown_theme_data.dart:180", + "tdesign-component/lib/src/components/dropdown_menu/t_dropdown_theme_data.dart:241" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "emptyActionMarginTop", + "component": "empty", + "previousDecision": "pending", + "frozenTarget": { + "light": "32dp", + "dark": "32dp", + "expressions": [ + "@spacer-4" + ], + "source": [ + "packages/components/empty/empty.less:9" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/empty/empty.less", + "selector": ".t-empty__description + .t-empty__actions:not(:empty)", + "property": "margin-top", + "kind": "render-property", + "value": "var(--td-empty-action-margin-top, var(--td-spacer-4, 64rpx))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "spacer4": [] + }, + "approvedGlobalException": null, + "stage": "runtime-difference-needs-resolution", + "runtimeDefaultVerified": false, + "testEntry": "tdesign-component/test/components/empty/t_empty_test.dart:107", + "observedScenariosPerSdk": 8, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Resolve recorded target/runtime differences through an implementation fix or documented design/contract adjudication.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "emptyDescriptionColor", + "component": "empty", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.4)", + "dark": "rgba(255, 255, 255, 35%)", + "expressions": [ + "@text-color-placeholder" + ], + "source": [ + "packages/components/empty/empty.less:5" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/empty/empty.less", + "selector": ".t-empty__description", + "property": "color", + "kind": "render-property", + "value": "var(--td-empty-description-color, var(--td-text-color-placeholder, var(--td-font-gray-3, rgba(0, 0, 0, 0.4))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorPlaceholder": [ + "tdesign-component/lib/src/components/empty/t_empty.dart:50", + "tdesign-component/lib/src/components/empty/t_empty.dart:58" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/empty/t_empty_test.dart:107", + "observedScenariosPerSdk": 8, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "emptyDescriptionFont", + "component": "empty", + "previousDecision": "pending", + "frozenTarget": { + "light": "14dp / 22dp PingFang SC, Microsoft YaHei, Arial Regular", + "dark": "14dp / 22dp PingFang SC, Microsoft YaHei, Arial Regular", + "expressions": [ + "@font-body-medium" + ], + "source": [ + "packages/components/empty/empty.less:7" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/empty/empty.less", + "selector": ".t-empty__description", + "property": "font", + "kind": "render-property", + "value": "var(--td-empty-description-font, var(--td-font-body-medium, 28rpx / 44rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "fontBodyMedium": [ + "tdesign-component/lib/src/components/empty/t_empty.dart:55" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/empty/t_empty_test.dart:107", + "observedScenariosPerSdk": 8, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "emptyDescriptionMarginTop", + "component": "empty", + "previousDecision": "pending", + "frozenTarget": { + "light": "16dp", + "dark": "16dp", + "expressions": [ + "@spacer-2" + ], + "source": [ + "packages/components/empty/empty.less:8" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/empty/empty.less", + "selector": ".t-empty__thumb + .t-empty__description:not(:empty)", + "property": "margin-top", + "kind": "render-property", + "value": "var(--td-empty-description-margin-top, var(--td-spacer-2, 32rpx))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "spacer2": [] + }, + "approvedGlobalException": null, + "stage": "runtime-difference-needs-resolution", + "runtimeDefaultVerified": false, + "testEntry": "tdesign-component/test/components/empty/t_empty_test.dart:107", + "observedScenariosPerSdk": 8, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Resolve recorded target/runtime differences through an implementation fix or documented design/contract adjudication.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "emptyIconColor", + "component": "empty", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.4)", + "dark": "rgba(255, 255, 255, 35%)", + "expressions": [ + "@text-color-placeholder" + ], + "source": [ + "packages/components/empty/empty.less:6" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/empty/empty.less", + "selector": ".t-empty__icon", + "property": "color", + "kind": "render-property", + "value": "var(--td-empty-icon-color, var(--td-text-color-placeholder, var(--td-font-gray-3, rgba(0, 0, 0, 0.4))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorPlaceholder": [ + "tdesign-component/lib/src/components/empty/t_empty.dart:50", + "tdesign-component/lib/src/components/empty/t_empty.dart:58" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/empty/t_empty_test.dart:107", + "observedScenariosPerSdk": 4, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "footerLinkColor", + "component": "footer", + "previousDecision": "pending", + "frozenTarget": { + "light": "#0052d9", + "dark": "#4582e6", + "expressions": [ + "@brand-color" + ], + "source": [ + "packages/components/footer/footer.less:6" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/footer/footer.less", + "selector": ".t-footer__link-item", + "property": "color", + "kind": "render-property", + "value": "var(--td-footer-link-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "brandColor": [] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "footerLinkDividingLineColor", + "component": "footer", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.4)", + "dark": "rgba(255, 255, 255, 35%)", + "expressions": [ + "@text-color-placeholder" + ], + "source": [ + "packages/components/footer/footer.less:10" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/footer/footer.less", + "selector": ".t-footer__link-line", + "property": "color", + "kind": "render-property", + "value": "var(--td-footer-link-dividing-line-color, var(--td-text-color-placeholder, var(--td-font-gray-3, rgba(0, 0, 0, 0.4))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorPlaceholder": [ + "tdesign-component/lib/src/components/footer/t_footer.dart:108" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "footerLinkDividingLinePadding", + "component": "footer", + "previousDecision": "pending", + "frozenTarget": { + "light": "12dp", + "dark": "12dp", + "expressions": [ + "@spacer-1" + ], + "source": [ + "packages/components/footer/footer.less:9" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/footer/footer.less", + "selector": ".t-footer__link-line", + "property": "padding", + "kind": "render-property", + "value": "0 var(--td-footer-link-dividing-line-padding, var(--td-spacer-1, 24rpx))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "spacer1": [ + "tdesign-component/lib/src/components/footer/t_footer.dart:73" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "footerLinkFont", + "component": "footer", + "previousDecision": "pending", + "frozenTarget": { + "light": "14dp / 22dp PingFang SC, Microsoft YaHei, Arial Regular", + "dark": "14dp / 22dp PingFang SC, Microsoft YaHei, Arial Regular", + "expressions": [ + "@font-body-medium" + ], + "source": [ + "packages/components/footer/footer.less:7" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/footer/footer.less", + "selector": ".t-footer__link-item", + "property": "font", + "kind": "render-property", + "value": "var(--td-footer-link-font, var(--td-font-body-medium, 28rpx / 44rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "fontBodyMedium": [] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "footerLogoIconHeight", + "component": "footer", + "previousDecision": "pending", + "frozenTarget": { + "light": "24dp", + "dark": "24dp", + "expressions": [ + "48rpx" + ], + "source": [ + "packages/components/footer/footer.less:12" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/footer/footer.less", + "selector": ".t-footer__icon", + "property": "height", + "kind": "render-property", + "value": "var(--td-footer-logo-icon-height, 48rpx)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "footerLogoIconMarginRight", + "component": "footer", + "previousDecision": "pending", + "frozenTarget": { + "light": "8dp", + "dark": "8dp", + "expressions": [ + "@spacer" + ], + "source": [ + "packages/components/footer/footer.less:13" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/footer/footer.less", + "selector": ".t-footer__icon", + "property": "margin-right", + "kind": "render-property", + "value": "var(--td-footer-logo-icon-margin-right, var(--td-spacer, 16rpx))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "spacer": [ + "tdesign-component/lib/src/components/footer/t_footer.dart:29" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "footerLogoIconWidth", + "component": "footer", + "previousDecision": "pending", + "frozenTarget": { + "light": "24dp", + "dark": "24dp", + "expressions": [ + "48rpx" + ], + "source": [ + "packages/components/footer/footer.less:11" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/footer/footer.less", + "selector": ".t-footer__icon", + "property": "width", + "kind": "render-property", + "value": "var(--td-footer-logo-icon-width, 48rpx)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "footerLogoTitleFont", + "component": "footer", + "previousDecision": "pending", + "frozenTarget": { + "light": "600 16dp / 24dp\n PingFang SC, Microsoft YaHei, Arial Regular", + "dark": "600 16dp / 24dp\n PingFang SC, Microsoft YaHei, Arial Regular", + "expressions": [ + "@font-title-medium" + ], + "source": [ + "packages/components/footer/footer.less:14" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/footer/footer.less", + "selector": ".t-footer__title", + "property": "font", + "kind": "render-property", + "value": "var(--td-footer-logo-title-font, var(--td-font-title-medium, 600 32rpx / 48rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "fontTitleMedium": [] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "footerLogoTitleUrlWidth", + "component": "footer", + "previousDecision": "pending", + "frozenTarget": { + "light": "128dp", + "dark": "128dp", + "expressions": [ + "256rpx" + ], + "source": [ + "packages/components/footer/footer.less:15" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/footer/footer.less", + "selector": ".t-footer__title-url", + "property": "width", + "kind": "render-property", + "value": "var(--td-footer-logo-title-url-width, 256rpx)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "footerTextColor", + "component": "footer", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.4)", + "dark": "rgba(255, 255, 255, 35%)", + "expressions": [ + "@text-color-placeholder" + ], + "source": [ + "packages/components/footer/footer.less:3" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/footer/footer.less", + "selector": ".t-footer__text", + "property": "color", + "kind": "render-property", + "value": "var(--td-footer-text-color, var(--td-text-color-placeholder, var(--td-font-gray-3, rgba(0, 0, 0, 0.4))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorPlaceholder": [ + "tdesign-component/lib/src/components/footer/t_footer.dart:108" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "footerTextFont", + "component": "footer", + "previousDecision": "pending", + "frozenTarget": { + "light": "12dp / 20dp PingFang SC, Microsoft YaHei, Arial Regular", + "dark": "12dp / 20dp PingFang SC, Microsoft YaHei, Arial Regular", + "expressions": [ + "@font-body-small" + ], + "source": [ + "packages/components/footer/footer.less:4" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/footer/footer.less", + "selector": ".t-footer__text", + "property": "font", + "kind": "render-property", + "value": "var(--td-footer-text-font, var(--td-font-body-small, 24rpx / 40rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "fontBodySmall": [ + "tdesign-component/lib/src/components/footer/t_footer.dart:106", + "tdesign-component/lib/src/components/footer/t_footer.dart:107" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "footerTextMarginTop", + "component": "footer", + "previousDecision": "pending", + "frozenTarget": { + "light": "calc(8dp / 2)", + "dark": "calc(8dp / 2)", + "expressions": [ + "calc(@spacer / 2)" + ], + "source": [ + "packages/components/footer/footer.less:5" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/footer/footer.less", + "selector": ".t-footer__link-list + .t-footer__text:not(:empty)", + "property": "margin-top", + "kind": "render-property", + "value": "var(--td-footer-text-margin-top, calc(var(--td-spacer, 16rpx) / 2))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "formItemBorderColor", + "component": "form-item", + "previousDecision": "pending", + "frozenTarget": { + "light": "#e7e7e7", + "dark": "#383838", + "expressions": [ + "@component-stroke" + ], + "source": [ + "packages/components/form-item/form-item.less:8" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/form-item/form-item.less", + "selector": ".t-form__item--bordered::after", + "property": "border-bottom", + "kind": "render-property", + "value": "1px solid var(--td-form-item-border-color, var(--td-component-stroke, var(--td-gray-color-3, #e7e7e7)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "componentStroke": [ + "tdesign-component/lib/src/components/form/t_form_item.dart:227" + ] + }, + "approvedGlobalException": "引用已批准修正的浅色 grayColor3", + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "formItemBorderLeftSpace", + "component": "form-item", + "previousDecision": "pending", + "frozenTarget": { + "light": "16dp", + "dark": "16dp", + "expressions": [ + "@form-item-vertical-padding" + ], + "source": [ + "packages/components/form-item/form-item.less:9" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/form-item/form-item.less", + "selector": ".t-form__item--bordered::after", + "property": "left", + "kind": "render-property", + "value": "var(--td-form-item-border-left-space, var(--td-form-item-vertical-padding, var(--td-spacer-2, 32rpx)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "formItemBorderRightSpace", + "component": "form-item", + "previousDecision": "pending", + "frozenTarget": { + "light": "0", + "dark": "0", + "expressions": [ + "0" + ], + "source": [ + "packages/components/form-item/form-item.less:10" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/form-item/form-item.less", + "selector": ".t-form__item--bordered::after", + "property": "right", + "kind": "render-property", + "value": "var(--td-form-item-border-right-space, 0)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "formItemHorizontalPadding", + "component": "form-item", + "previousDecision": "pending", + "frozenTarget": { + "light": "16dp", + "dark": "16dp", + "expressions": [ + "@spacer-2" + ], + "source": [ + "packages/components/form-item/form-item.less:6" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/form-item/form-item.less", + "selector": "/* Less 支持测试 - 监听功能验证 */\n.t-form__item", + "property": "padding", + "kind": "render-property", + "value": "var(--td-form-item-vertical-padding, var(--td-spacer-2, 32rpx)) var(--td-form-item-horizontal-padding, var(--td-spacer-2, 32rpx))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "spacer2": [ + "tdesign-component/lib/src/components/form/t_form_item.dart:251" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "formItemVerticalPadding", + "component": "form-item", + "previousDecision": "pending", + "frozenTarget": { + "light": "16dp", + "dark": "16dp", + "expressions": [ + "@spacer-2" + ], + "source": [ + "packages/components/form-item/form-item.less:7" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/form-item/form-item.less", + "selector": "/* Less 支持测试 - 监听功能验证 */\n.t-form__item", + "property": "padding", + "kind": "render-property", + "value": "var(--td-form-item-vertical-padding, var(--td-spacer-2, 32rpx)) var(--td-form-item-horizontal-padding, var(--td-spacer-2, 32rpx))" + }, + { + "file": "packages/components/form-item/form-item.less", + "selector": ".t-form__item--bordered::after", + "property": "left", + "kind": "render-property", + "value": "var(--td-form-item-border-left-space, var(--td-form-item-vertical-padding, var(--td-spacer-2, 32rpx)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "spacer2": [ + "tdesign-component/lib/src/components/form/t_form_item.dart:251" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "imageColor", + "component": "image", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.4)", + "dark": "rgba(255, 255, 255, 35%)", + "expressions": [ + "@text-color-placeholder" + ], + "source": [ + "packages/components/image/image.less:3" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/image/image.less", + "selector": ".t-image__mask,\n.t-image__img", + "property": "color", + "kind": "render-property", + "value": "var(--td-image-color, var(--td-text-color-placeholder, var(--td-font-gray-3, rgba(0, 0, 0, 0.4))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorPlaceholder": [ + "tdesign-component/lib/src/components/image/t_image.dart:205", + "tdesign-component/lib/src/components/image/t_image.dart:240", + "tdesign-component/lib/src/components/image/t_image.dart:298", + "tdesign-component/lib/src/components/image/t_image.dart:387" + ], + "color": [ + "tdesign-component/lib/src/components/image/t_image_theme_data.dart:9", + "tdesign-component/lib/src/components/image/t_image_theme_data.dart:18", + "tdesign-component/lib/src/components/image/t_image_theme_data.dart:44", + "tdesign-component/lib/src/components/image/t_image_theme_data.dart:52", + "tdesign-component/lib/src/components/image/t_image_theme_data.dart:78", + "tdesign-component/lib/src/components/image/t_image.dart:167", + "tdesign-component/lib/src/components/image/t_image.dart:183", + "tdesign-component/lib/src/components/image/t_image.dart:205", + "tdesign-component/lib/src/components/image/t_image.dart:240", + "tdesign-component/lib/src/components/image/t_image.dart:248", + "tdesign-component/lib/src/components/image/t_image.dart:271", + "tdesign-component/lib/src/components/image/t_image.dart:295", + "tdesign-component/lib/src/components/image/t_image.dart:298", + "tdesign-component/lib/src/components/image/t_image.dart:387" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "imageLoadingBgColor", + "component": "image", + "previousDecision": "pending", + "frozenTarget": { + "light": "#f3f3f3", + "dark": "#2c2c2c", + "expressions": [ + "@bg-color-secondarycontainer" + ], + "source": [ + "packages/components/image/image.less:4" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/image/image.less", + "selector": ".t-image__mask", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-image-loading-bg-color, var(--td-bg-color-secondarycontainer, var(--td-gray-color-1, #f3f3f3)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "bgColorSecondaryContainer": [] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "imageLoadingColor", + "component": "image", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.4)", + "dark": "rgba(255, 255, 255, 35%)", + "expressions": [ + "@text-color-placeholder" + ], + "source": [ + "packages/components/image/image.less:5" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/image/image.less", + "selector": ".t-image__mask", + "property": "color", + "kind": "render-property", + "value": "var(--td-image-loading-color, var(--td-text-color-placeholder, var(--td-font-gray-3, rgba(0, 0, 0, 0.4))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorPlaceholder": [ + "tdesign-component/lib/src/components/image/t_image.dart:205", + "tdesign-component/lib/src/components/image/t_image.dart:240", + "tdesign-component/lib/src/components/image/t_image.dart:298", + "tdesign-component/lib/src/components/image/t_image.dart:387" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "imageRoundRadius", + "component": "image", + "previousDecision": "pending", + "frozenTarget": { + "light": "6dp", + "dark": "6dp", + "expressions": [ + "@radius-default" + ], + "source": [ + "packages/components/image/image.less:6" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/image/image.less", + "selector": ".t-image--shape-round", + "property": "border-radius", + "kind": "render-property", + "value": "var(--td-image-round-radius, var(--td-radius-default, 12rpx))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "radiusDefault": [ + "tdesign-component/lib/src/components/image/t_image.dart:312" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "imageViewerCloseMarginLeft", + "component": "image-viewer", + "previousDecision": "pending", + "frozenTarget": { + "light": "12dp", + "dark": "12dp", + "expressions": [ + "@spacer-1" + ], + "source": [ + "packages/components/image-viewer/image-viewer.less:12" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/image-viewer/image-viewer.less", + "selector": ".t-image-viewer__nav-close", + "property": "margin-left", + "kind": "render-property", + "value": "var(--td-image-viewer-close-margin-left, var(--td-spacer-1, 24rpx))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "spacer1": [] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "imageViewerDeleteMarginRight", + "component": "image-viewer", + "previousDecision": "pending", + "frozenTarget": { + "light": "12dp", + "dark": "12dp", + "expressions": [ + "@spacer-1" + ], + "source": [ + "packages/components/image-viewer/image-viewer.less:13" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/image-viewer/image-viewer.less", + "selector": ".t-image-viewer__nav-delete", + "property": "margin-right", + "kind": "render-property", + "value": "var(--td-image-viewer-delete-margin-right, var(--td-spacer-1, 24rpx))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "spacer1": [] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "imageViewerMaskBgColor", + "component": "image-viewer", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 60%)", + "dark": "rgba(0, 0, 0, 40%)", + "expressions": [ + "@mask-active" + ], + "source": [ + "packages/components/image-viewer/image-viewer.less:10" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/image-viewer/image-viewer.less", + "selector": ".t-image-viewer__mask", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-image-viewer-mask-bg-color, var(--td-mask-active, rgba(0, 0, 0, 0.6)))" + } + ], + "nonLessReferences": [ + { + "file": "packages/components/image-viewer/image-viewer.wxml", + "line": 19, + "text": "style=\"{{_._style([backgroundColor && '--td-image-viewer-mask-bg-color: ' + backgroundColor])}}\"" + } + ] + }, + "flutterNameLocators": { + "maskActive": [] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "imageViewerNavBgColor", + "component": "image-viewer", + "previousDecision": "pending", + "frozenTarget": { + "light": "#000", + "dark": "#000", + "expressions": [ + "#000" + ], + "source": [ + "packages/components/image-viewer/image-viewer.less:8" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/image-viewer/image-viewer.less", + "selector": ".t-image-viewer__nav", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-image-viewer-nav-bg-color, #000)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "imageViewerNavColor", + "component": "image-viewer", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(255, 255, 255, 1)", + "dark": "rgba(255, 255, 255, 90%)", + "expressions": [ + "@text-color-anti" + ], + "source": [ + "packages/components/image-viewer/image-viewer.less:9" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/image-viewer/image-viewer.less", + "selector": ".t-image-viewer__nav", + "property": "color", + "kind": "render-property", + "value": "var(--td-image-viewer-nav-color, var(--td-text-color-anti, var(--td-font-white-1, #ffffff)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorAnti": [ + "tdesign-component/lib/src/components/image_viewer/t_image_viewer.dart:274", + "tdesign-component/lib/src/components/image_viewer/t_image_viewer.dart:286", + "tdesign-component/lib/src/components/image_viewer/t_image_viewer.dart:441", + "tdesign-component/lib/src/components/image_viewer/t_image_viewer.dart:450", + "tdesign-component/lib/src/components/image_viewer/t_image_viewer.dart:491", + "tdesign-component/lib/src/components/image_viewer/t_image_viewer.dart:603" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/image_viewer/t_image_viewer_test.dart:86", + "text": "expect(index.style?.color, token.textColorAnti);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/image_viewer/t_image_viewer_test.dart:109", + "text": "expect(placeholder.color, token.textColorAnti);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/image_viewer/t_image_viewer_test.dart:615", + "text": "token.textColorAnti,", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "imageViewerNavHeight", + "component": "image-viewer", + "previousDecision": "pending", + "frozenTarget": { + "light": "48dp", + "dark": "48dp", + "expressions": [ + "96rpx" + ], + "source": [ + "packages/components/image-viewer/image-viewer.less:7" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/image-viewer/image-viewer.less", + "selector": ".t-image-viewer__nav", + "property": "height", + "kind": "render-property", + "value": "var(--td-image-viewer-nav-height, 96rpx)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "imageViewerNavIndexFontSize", + "component": "image-viewer", + "previousDecision": "pending", + "frozenTarget": { + "light": "14dp", + "dark": "14dp", + "expressions": [ + "@font-size-base" + ], + "source": [ + "packages/components/image-viewer/image-viewer.less:11" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/image-viewer/image-viewer.less", + "selector": ".t-image-viewer__nav-index", + "property": "font-size", + "kind": "render-property", + "value": "var(--td-image-viewer-nav-index-font-size, var(--td-font-size-base, 28rpx))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "fontSizeBase": [] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "imageViewerTop", + "component": "image-viewer", + "previousDecision": "pending", + "frozenTarget": { + "light": "0", + "dark": "0", + "expressions": [ + "@position-fixed-top" + ], + "source": [ + "packages/components/image-viewer/image-viewer.less:14" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/image-viewer/image-viewer.less", + "selector": ".t-image-viewer", + "property": "top", + "kind": "render-property", + "value": "var(--td-image-viewer-top, var(--td-position-fixed-top, 0))" + } + ], + "nonLessReferences": [ + { + "file": "packages/components/image-viewer/image-viewer.wxml", + "line": 9, + "text": "style=\"{{_._style([style, customStyle, '--td-image-viewer-top: ' + maskTop + 'px'])}}\"" + } + ] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "indexesAnchorActiveBgColor", + "component": "indexes-anchor", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(255, 255, 255, 1)", + "dark": "#242424", + "expressions": [ + "@bg-color-container" + ], + "source": [ + "packages/components/indexes-anchor/indexes-anchor.less:6" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/indexes-anchor/indexes-anchor.less", + "selector": ".t-indexes-anchor__header--active", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-indexes-anchor-active-bg-color, var(--td-bg-color-container, var(--td-font-white-1, #ffffff)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "bgColorContainer": [ + "tdesign-component/lib/src/components/indexes/t_indexes_anchor.dart:54", + "tdesign-component/lib/src/components/indexes/t_indexes.dart:227" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/indexes/t_indexes_test.dart:298", + "text": "expect(decoration.color, token.bgColorContainer);", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "indexesAnchorActiveColor", + "component": "indexes-anchor", + "previousDecision": "pending", + "frozenTarget": { + "light": "#0052d9", + "dark": "#4582e6", + "expressions": [ + "@brand-color" + ], + "source": [ + "packages/components/indexes-anchor/indexes-anchor.less:4" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/indexes-anchor/indexes-anchor.less", + "selector": ".t-indexes-anchor__wrapper--active", + "property": "color", + "kind": "render-property", + "value": "var(--td-indexes-anchor-active-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "brandColor": [ + "tdesign-component/lib/src/components/indexes/t_indexes_anchor.dart:101", + "tdesign-component/lib/src/components/indexes/t_indexes_list.dart:240", + "tdesign-component/lib/src/components/indexes/t_indexes_list.dart:266" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/indexes/t_indexes_test.dart:249", + "text": "color: token.brandColor,", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/indexes/t_indexes_test.dart:308", + "text": "expect(anchorText.style?.color, token.brandColor);", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "indexesAnchorActiveFontWeight", + "component": "indexes-anchor", + "previousDecision": "pending", + "frozenTarget": { + "light": "600", + "dark": "600", + "expressions": [ + "600" + ], + "source": [ + "packages/components/indexes-anchor/indexes-anchor.less:8" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/indexes-anchor/indexes-anchor.less", + "selector": ".t-indexes-anchor__wrapper--active", + "property": "font-weight", + "kind": "render-property", + "value": "var(--td-indexes-anchor-active-font-weight, 600)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "indexesAnchorBgColor", + "component": "indexes-anchor", + "previousDecision": "pending", + "frozenTarget": { + "light": "#f3f3f3", + "dark": "#2c2c2c", + "expressions": [ + "@bg-color-secondarycontainer" + ], + "source": [ + "packages/components/indexes-anchor/indexes-anchor.less:5" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/indexes-anchor/indexes-anchor.less", + "selector": ".t-indexes-anchor__header", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-indexes-anchor-bg-color, var(--td-bg-color-secondarycontainer, var(--td-gray-color-1, #f3f3f3)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "bgColorSecondaryContainer": [ + "tdesign-component/lib/src/components/indexes/t_indexes_anchor.dart:56" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "indexesAnchorBorderColor", + "component": "indexes-anchor", + "previousDecision": "pending", + "frozenTarget": { + "light": "#dcdcdc", + "dark": "#5e5e5e", + "expressions": [ + "@component-border" + ], + "source": [ + "packages/components/indexes-anchor/indexes-anchor.less:11" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/indexes-anchor/indexes-anchor.less", + "selector": ".t-indexes-anchor__header--active::after", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-indexes-anchor-border-color, var(--td-component-border, var(--td-gray-color-4, #dcdcdc)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "componentBorder": [] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "indexesAnchorColor", + "component": "indexes-anchor", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.9)", + "dark": "rgba(255, 255, 255, 90%)", + "expressions": [ + "@text-color-primary" + ], + "source": [ + "packages/components/indexes-anchor/indexes-anchor.less:3" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/indexes-anchor/indexes-anchor.less", + "selector": ".t-indexes-anchor", + "property": "color", + "kind": "render-property", + "value": "var(--td-indexes-anchor-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorPrimary": [ + "tdesign-component/lib/src/components/indexes/t_indexes_anchor.dart:102", + "tdesign-component/lib/src/components/indexes/t_indexes_list.dart:285" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/indexes/t_indexes_test.dart:261", + "text": "expect(inactiveText.style?.color, token.textColorPrimary);", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "indexesAnchorFont", + "component": "indexes-anchor", + "previousDecision": "pending", + "frozenTarget": { + "light": "14dp / 22dp PingFang SC, Microsoft YaHei, Arial Regular", + "dark": "14dp / 22dp PingFang SC, Microsoft YaHei, Arial Regular", + "expressions": [ + "@font-body-medium" + ], + "source": [ + "packages/components/indexes-anchor/indexes-anchor.less:7" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/indexes-anchor/indexes-anchor.less", + "selector": ".t-indexes-anchor", + "property": "font", + "kind": "render-property", + "value": "var(--td-indexes-anchor-font, var(--td-font-body-medium, 28rpx / 44rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "fontBodyMedium": [ + "tdesign-component/lib/src/components/indexes/t_indexes_anchor.dart:98" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "indexesAnchorPadding", + "component": "indexes-anchor", + "previousDecision": "pending", + "frozenTarget": { + "light": "calc(8dp / 2) 16dp", + "dark": "calc(8dp / 2) 16dp", + "expressions": [ + "calc(@spacer / 2) @spacer-2" + ], + "source": [ + "packages/components/indexes-anchor/indexes-anchor.less:10" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/indexes-anchor/indexes-anchor.less", + "selector": ".t-indexes-anchor__header", + "property": "padding", + "kind": "render-property", + "value": "var(--td-indexes-anchor-padding, calc(var(--td-spacer, 16rpx) / 2) var(--td-spacer-2, 32rpx))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "indexesAnchorTop", + "component": "indexes-anchor", + "previousDecision": "pending", + "frozenTarget": { + "light": "0", + "dark": "0", + "expressions": [ + "0" + ], + "source": [ + "packages/components/indexes-anchor/indexes-anchor.less:9" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/indexes-anchor/indexes-anchor.less", + "selector": ".t-indexes-anchor__wrapper--sticky", + "property": "top", + "kind": "render-property", + "value": "var(--td-indexes-anchor-top, 0)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "indexesSidebarActiveBgColor", + "component": "indexes", + "previousDecision": "pending", + "frozenTarget": { + "light": "#0052d9", + "dark": "#4582e6", + "expressions": [ + "@brand-color" + ], + "source": [ + "packages/components/indexes/indexes.less:7" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/indexes/indexes.less", + "selector": ".t-indexes__sidebar-item--active", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-indexes-sidebar-active-bg-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "brandColor": [ + "tdesign-component/lib/src/components/indexes/t_indexes_anchor.dart:101", + "tdesign-component/lib/src/components/indexes/t_indexes_list.dart:240", + "tdesign-component/lib/src/components/indexes/t_indexes_list.dart:266" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/indexes/t_indexes_test.dart:249", + "text": "color: token.brandColor,", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/indexes/t_indexes_test.dart:308", + "text": "expect(anchorText.style?.color, token.brandColor);", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "indexesSidebarActiveColor", + "component": "indexes", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(255, 255, 255, 1)", + "dark": "rgba(255, 255, 255, 90%)", + "expressions": [ + "@text-color-anti" + ], + "source": [ + "packages/components/indexes/indexes.less:6" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/indexes/indexes.less", + "selector": ".t-indexes__sidebar-item--active", + "property": "color", + "kind": "render-property", + "value": "var(--td-indexes-sidebar-active-color, var(--td-text-color-anti, var(--td-font-white-1, #ffffff)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorAnti": [ + "tdesign-component/lib/src/components/indexes/t_indexes_list.dart:281" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/indexes/t_indexes_test.dart:253", + "text": "expect(activeText.style?.color, token.textColorAnti);", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "indexesSidebarColor", + "component": "indexes", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.9)", + "dark": "rgba(255, 255, 255, 90%)", + "expressions": [ + "@text-color-primary" + ], + "source": [ + "packages/components/indexes/indexes.less:3" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/indexes/indexes.less", + "selector": ".t-indexes__sidebar", + "property": "color", + "kind": "render-property", + "value": "var(--td-indexes-sidebar-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorPrimary": [ + "tdesign-component/lib/src/components/indexes/t_indexes_anchor.dart:102", + "tdesign-component/lib/src/components/indexes/t_indexes_list.dart:285" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/indexes/t_indexes_test.dart:261", + "text": "expect(inactiveText.style?.color, token.textColorPrimary);", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "indexesSidebarFont", + "component": "indexes", + "previousDecision": "pending", + "frozenTarget": { + "light": "12dp / 20dp PingFang SC, Microsoft YaHei, Arial Regular", + "dark": "12dp / 20dp PingFang SC, Microsoft YaHei, Arial Regular", + "expressions": [ + "@font-body-small" + ], + "source": [ + "packages/components/indexes/indexes.less:5" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/indexes/indexes.less", + "selector": ".t-indexes__sidebar", + "property": "font", + "kind": "render-property", + "value": "var(--td-indexes-sidebar-font, var(--td-font-body-small, 24rpx / 40rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "fontBodySmall": [ + "tdesign-component/lib/src/components/indexes/t_indexes_list.dart:116", + "tdesign-component/lib/src/components/indexes/t_indexes_list.dart:118", + "tdesign-component/lib/src/components/indexes/t_indexes_list.dart:275", + "tdesign-component/lib/src/components/indexes/t_indexes_list.dart:277" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/indexes/t_indexes_test.dart:254", + "text": "expect(activeText.font, token.fontBodySmall);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/indexes/t_indexes_test.dart:262", + "text": "expect(inactiveText.font, token.fontBodySmall);", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "indexesSidebarItemSize", + "component": "indexes", + "previousDecision": "pending", + "frozenTarget": { + "light": "20dp", + "dark": "20dp", + "expressions": [ + "40rpx" + ], + "source": [ + "packages/components/indexes/indexes.less:4" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/indexes/indexes.less", + "selector": ".t-indexes__sidebar-item", + "property": "min-width", + "kind": "render-property", + "value": "var(--td-indexes-sidebar-item-size, 40rpx)" + }, + { + "file": "packages/components/indexes/indexes.less", + "selector": ".t-indexes__sidebar-item", + "property": "height", + "kind": "render-property", + "value": "var(--td-indexes-sidebar-item-size, 40rpx)" + }, + { + "file": "packages/components/indexes/indexes.less", + "selector": ".t-indexes__sidebar-item", + "property": "border-radius", + "kind": "render-property", + "value": "var(--td-indexes-sidebar-item-size, 40rpx)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "indexesSidebarRight", + "component": "indexes", + "previousDecision": "pending", + "frozenTarget": { + "light": "8dp", + "dark": "8dp", + "expressions": [ + "16rpx" + ], + "source": [ + "packages/components/indexes/indexes.less:8" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/indexes/indexes.less", + "selector": ".t-indexes__sidebar", + "property": "right", + "kind": "render-property", + "value": "var(--td-indexes-sidebar-right, 16rpx)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "sidebarRight": [ + "tdesign-component/lib/src/components/indexes/t_indexes_list.dart:132", + "tdesign-component/lib/src/components/indexes/t_indexes_theme_data.dart:15", + "tdesign-component/lib/src/components/indexes/t_indexes_theme_data.dart:52", + "tdesign-component/lib/src/components/indexes/t_indexes_theme_data.dart:130", + "tdesign-component/lib/src/components/indexes/t_indexes_theme_data.dart:157", + "tdesign-component/lib/src/components/indexes/t_indexes_theme_data.dart:212" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "indexesSidebarTipsBgColor", + "component": "indexes", + "previousDecision": "pending", + "frozenTarget": { + "light": "#f2f3ff", + "dark": "#1b2f51", + "expressions": [ + "@brand-color-light" + ], + "source": [ + "packages/components/indexes/indexes.less:13" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/indexes/indexes.less", + "selector": ".t-indexes__sidebar-tips", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-indexes-sidebar-tips-bg-color, var(--td-brand-color-light, var(--td-primary-color-1, #f2f3ff)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "brandColorLight": [ + "tdesign-component/lib/src/components/indexes/t_indexes_list.dart:226" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "indexesSidebarTipsColor", + "component": "indexes", + "previousDecision": "pending", + "frozenTarget": { + "light": "#0052d9", + "dark": "#4582e6", + "expressions": [ + "@brand-color" + ], + "source": [ + "packages/components/indexes/indexes.less:12" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/indexes/indexes.less", + "selector": ".t-indexes__sidebar-tips", + "property": "color", + "kind": "render-property", + "value": "var(--td-indexes-sidebar-tips-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "brandColor": [ + "tdesign-component/lib/src/components/indexes/t_indexes_anchor.dart:101", + "tdesign-component/lib/src/components/indexes/t_indexes_list.dart:240", + "tdesign-component/lib/src/components/indexes/t_indexes_list.dart:266" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/indexes/t_indexes_test.dart:249", + "text": "color: token.brandColor,", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/indexes/t_indexes_test.dart:308", + "text": "expect(anchorText.style?.color, token.brandColor);", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "indexesSidebarTipsFont", + "component": "indexes", + "previousDecision": "pending", + "frozenTarget": { + "light": "600 20dp / 28dp\n PingFang SC, Microsoft YaHei, Arial Regular", + "dark": "600 20dp / 28dp\n PingFang SC, Microsoft YaHei, Arial Regular", + "expressions": [ + "@font-title-extraLarge" + ], + "source": [ + "packages/components/indexes/indexes.less:11" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/indexes/indexes.less", + "selector": ".t-indexes__sidebar-tips", + "property": "font", + "kind": "render-property", + "value": "var(--td-indexes-sidebar-tips-font, var(--td-font-title-extraLarge, 600 40rpx / 56rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "fontTitleExtraLarge": [ + "tdesign-component/lib/src/components/indexes/t_indexes_list.dart:127", + "tdesign-component/lib/src/components/indexes/t_indexes_list.dart:234" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "indexesSidebarTipsRight", + "component": "indexes", + "previousDecision": "pending", + "frozenTarget": { + "light": "calc(100% + 16dp)", + "dark": "calc(100% + 16dp)", + "expressions": [ + "calc(100% + 32rpx)" + ], + "source": [ + "packages/components/indexes/indexes.less:14" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/indexes/indexes.less", + "selector": ".t-indexes__sidebar-tips", + "property": "right", + "kind": "render-property", + "value": "var(--td-indexes-sidebar-tips-right, calc(100% + 32rpx))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "indexesSidebarTipsSize", + "component": "indexes", + "previousDecision": "pending", + "frozenTarget": { + "light": "48dp", + "dark": "48dp", + "expressions": [ + "96rpx" + ], + "source": [ + "packages/components/indexes/indexes.less:10" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/indexes/indexes.less", + "selector": ".t-indexes__sidebar-tips", + "property": "min-width", + "kind": "render-property", + "value": "var(--td-indexes-sidebar-tips-size, 96rpx)" + }, + { + "file": "packages/components/indexes/indexes.less", + "selector": ".t-indexes__sidebar-tips", + "property": "height", + "kind": "render-property", + "value": "var(--td-indexes-sidebar-tips-size, 96rpx)" + }, + { + "file": "packages/components/indexes/indexes.less", + "selector": ".t-indexes__sidebar-tips", + "property": "border-radius", + "kind": "render-property", + "value": "var(--td-indexes-sidebar-tips-size, 96rpx)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "inputAlignItems", + "component": "input", + "previousDecision": "pending", + "frozenTarget": { + "light": "center", + "dark": "center", + "expressions": [ + "center" + ], + "source": [ + "packages/components/input/input.less:30" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/input/input.less", + "selector": ".t-input", + "property": "align-items", + "kind": "render-property", + "value": "var(--td-input-align-items, center)" + } + ], + "nonLessReferences": [ + { + "file": "packages/components/input/_example/maxlength/index.wxss", + "line": 2, + "text": "--td-input-align-items: start;" + }, + { + "file": "packages/components/input/_example/status/index.wxss", + "line": 2, + "text": "--td-input-align-items: start;" + }, + { + "file": "packages/components/input/_example/suffix/index.wxss", + "line": 2, + "text": "--td-input-align-items: start;" + } + ] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "inputBgColor", + "component": "input", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(255, 255, 255, 1)", + "dark": "#242424", + "expressions": [ + "@bg-color-container" + ], + "source": [ + "packages/components/input/input.less:15" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/input/input.less", + "selector": ".t-input", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-input-bg-color, var(--td-bg-color-container, var(--td-font-white-1, #ffffff)))" + } + ], + "nonLessReferences": [ + { + "file": "packages/components/input/_example/custom/index.wxss", + "line": 6, + "text": "--td-input-bg-color: rgba(44, 44, 44, 1);" + } + ] + }, + "flutterNameLocators": { + "bgColorContainer": [ + "tdesign-component/lib/src/components/input/t_input.dart:376" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/input/t_input_test.dart:1019", + "observedScenariosPerSdk": 4, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "inputBorderColor", + "component": "input", + "previousDecision": "pending", + "frozenTarget": { + "light": "#e7e7e7", + "dark": "#383838", + "expressions": [ + "@component-stroke" + ], + "source": [ + "packages/components/input/input.less:16" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/input/input.less", + "selector": ".t-input--border::after", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-input-border-color, var(--td-component-stroke, var(--td-gray-color-3, #e7e7e7)))" + } + ], + "nonLessReferences": [ + { + "file": "packages/components/input/_example/custom/index.wxss", + "line": 7, + "text": "--td-input-border-color: rgba(75, 75, 75, 1);" + } + ] + }, + "flutterNameLocators": { + "componentStroke": [ + "tdesign-component/lib/src/components/input/t_input.dart:331" + ], + "borderColor": [ + "tdesign-component/lib/src/components/input/t_input.dart:331", + "tdesign-component/lib/src/components/input/t_input.dart:332", + "tdesign-component/lib/src/components/input/t_input.dart:380", + "tdesign-component/lib/src/components/input/t_input_theme_data.dart:20", + "tdesign-component/lib/src/components/input/t_input_theme_data.dart:53", + "tdesign-component/lib/src/components/input/t_input_theme_data.dart:71", + "tdesign-component/lib/src/components/input/t_input_theme_data.dart:81", + "tdesign-component/lib/src/components/input/t_input_theme_data.dart:113" + ] + }, + "approvedGlobalException": "引用已批准修正的浅色 grayColor3", + "stage": "runtime-difference-needs-resolution", + "runtimeDefaultVerified": false, + "testEntry": "tdesign-component/test/components/input/t_input_test.dart:1019", + "observedScenariosPerSdk": 4, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Resolve recorded target/runtime differences through an implementation fix or documented design/contract adjudication.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "inputBorderLeftSpace", + "component": "input", + "previousDecision": "pending", + "frozenTarget": { + "light": "16dp", + "dark": "16dp", + "expressions": [ + "@spacer-2" + ], + "source": [ + "packages/components/input/input.less:17" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/input/input.less", + "selector": ".t-input--border:after", + "property": "left", + "kind": "render-property", + "value": "var(--td-input-border-left-space, var(--td-spacer-2, 32rpx))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "spacer2": [ + "tdesign-component/lib/src/components/input/t_input.dart:645" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/input/t_input_test.dart:596", + "text": "expect(editorLeft - prefixRight, token.spacer2);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/input/t_input_test.dart:1120", + "text": "expected: token.spacer2,", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "inputBorderRightSpace", + "component": "input", + "previousDecision": "pending", + "frozenTarget": { + "light": "0", + "dark": "0", + "expressions": [ + "0" + ], + "source": [ + "packages/components/input/input.less:18" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/input/input.less", + "selector": ".t-input--border:after", + "property": "right", + "kind": "render-property", + "value": "var(--td-input-border-right-space, 0)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "inputDefaultTextColor", + "component": "input", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.9)", + "dark": "rgba(255, 255, 255, 90%)", + "expressions": [ + "@text-color-primary" + ], + "source": [ + "packages/components/input/input.less:5" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/input/input.less", + "selector": ".t-input__control", + "property": "color", + "kind": "render-property", + "value": "var(--td-input-default-text-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + } + ], + "nonLessReferences": [ + { + "file": "packages/components/input/_example/custom/index.wxss", + "line": 8, + "text": "--td-input-default-text-color: rgba(255, 255, 255, 1);" + } + ] + }, + "flutterNameLocators": { + "textColorPrimary": [ + "tdesign-component/lib/src/components/input/t_input.dart:440", + "tdesign-component/lib/src/components/input/t_input.dart:641" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/input/t_input_test.dart:1019", + "observedScenariosPerSdk": 4, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "inputDefaultTipsColor", + "component": "input", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.4)", + "dark": "rgba(255, 255, 255, 35%)", + "expressions": [ + "@text-color-placeholder" + ], + "source": [ + "packages/components/input/input.less:10" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/input/input.less", + "selector": ".t-input--default + .t-input__tips", + "property": "color", + "kind": "render-property", + "value": "var(--td-input-default-tips-color, var(--td-text-color-placeholder, var(--td-font-gray-3, rgba(0, 0, 0, 0.4))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorPlaceholder": [ + "tdesign-component/lib/src/components/input/t_input.dart:257", + "tdesign-component/lib/src/components/input/t_input.dart:266", + "tdesign-component/lib/src/components/input/t_input.dart:355", + "tdesign-component/lib/src/components/input/t_input.dart:366", + "tdesign-component/lib/src/components/input/t_input.dart:607", + "tdesign-component/lib/src/components/input/t_input.dart:659" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/input/t_input_test.dart:297", + "text": "TThemeData.defaultData().textColorPlaceholder,", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/input/t_input_test.dart:306", + "text": "expect(hint(tester).style?.color, token.textColorPlaceholder);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/input/t_input_test.dart:384", + "text": "TThemeData.defaultData().textColorPlaceholder,", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/input/t_input_test.dart:631", + "text": "token.textColorPlaceholder,", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/input/t_input_test.dart:746", + "text": ": token.textColorPlaceholder,", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/input/t_input_test.dart:1057", + "text": "? token.textColorPlaceholder", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Review TFormItem + TInput composition and the standalone Input contract before deciding which owner supplies this slot.", + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "inputDisabledTextColor", + "component": "input", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.26)", + "dark": "rgba(255, 255, 255, 22%)", + "expressions": [ + "@text-color-disabled" + ], + "source": [ + "packages/components/input/input.less:28" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/input/input.less", + "selector": ".t-input__control--disabled", + "property": "color", + "kind": "render-property", + "value": "var(--td-input-disabled-text-color, var(--td-text-color-disabled, var(--td-font-gray-4, rgba(0, 0, 0, 0.26))))" + }, + { + "file": "packages/components/input/input.less", + "selector": ".t-input__placeholder--disabled", + "property": "color", + "kind": "render-property", + "value": "var(--td-input-disabled-text-color, var(--td-text-color-disabled, var(--td-font-gray-4, rgba(0, 0, 0, 0.26))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorDisabled": [ + "tdesign-component/lib/src/components/input/t_input.dart:245", + "tdesign-component/lib/src/components/input/t_input.dart:258", + "tdesign-component/lib/src/components/input/t_input.dart:267", + "tdesign-component/lib/src/components/input/t_input.dart:440", + "tdesign-component/lib/src/components/input/t_input.dart:608", + "tdesign-component/lib/src/components/input/t_input.dart:642", + "tdesign-component/lib/src/components/input/t_input.dart:660" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/input/t_input_test.dart:1019", + "observedScenariosPerSdk": 8, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "inputErrorTextColor", + "component": "input", + "previousDecision": "pending", + "frozenTarget": { + "light": "#d54941", + "dark": "#c64751", + "expressions": [ + "@error-color" + ], + "source": [ + "packages/components/input/input.less:8" + ] + }, + "compiledSource": { + "conclusion": "no-consumer-in-compiled-css-or-other-source", + "selectors": [], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "errorColor": [ + "tdesign-component/lib/src/components/input/t_input.dart:354", + "tdesign-component/lib/src/components/input/t_input.dart:364", + "tdesign-component/lib/src/components/input/t_input.dart:396", + "tdesign-component/lib/src/components/input/t_input.dart:446", + "tdesign-component/lib/src/components/input/t_input.dart:453" + ] + }, + "approvedGlobalException": null, + "stage": "no-frozen-source-consumer-found", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/input/t_input_test.dart:745", + "text": "? token.errorColor", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/input/t_input_test.dart:871", + "text": "expect(error.style?.color, TThemeData.defaultData().errorColor);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/input/t_input_test.dart:899", + "text": "expect((border as Border).bottom.color, token.errorColor);", + "candidateOnly": true + } + ], + "requiredEvidence": [], + "finalPaintVerified": false + }, + { + "name": "inputErrorTipsColor", + "component": "input", + "previousDecision": "pending", + "frozenTarget": { + "light": "#d54941", + "dark": "#c64751", + "expressions": [ + "@error-color" + ], + "source": [ + "packages/components/input/input.less:13" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/input/input.less", + "selector": ".t-input--error + .t-input__tips", + "property": "color", + "kind": "render-property", + "value": "var(--td-input-error-tips-color, var(--td-error-color, var(--td-error-color-6, #d54941)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "errorColor": [ + "tdesign-component/lib/src/components/input/t_input.dart:354", + "tdesign-component/lib/src/components/input/t_input.dart:364", + "tdesign-component/lib/src/components/input/t_input.dart:396", + "tdesign-component/lib/src/components/input/t_input.dart:446", + "tdesign-component/lib/src/components/input/t_input.dart:453" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/input/t_input_test.dart:745", + "text": "? token.errorColor", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/input/t_input_test.dart:871", + "text": "expect(error.style?.color, TThemeData.defaultData().errorColor);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/input/t_input_test.dart:899", + "text": "expect((border as Border).bottom.color, token.errorColor);", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Review TFormItem + TInput composition and the standalone Input contract before deciding which owner supplies this slot.", + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "inputLabelMaxWidth", + "component": "input", + "previousDecision": "pending", + "frozenTarget": { + "light": "5em", + "dark": "5em", + "expressions": [ + "5em" + ], + "source": [ + "packages/components/input/input.less:26" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/input/input.less", + "selector": ".t-input__label:not(:empty)", + "property": "max-width", + "kind": "render-property", + "value": "var(--td-input-label-max-width, 5em)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Review TFormItem + TInput composition and the standalone Input contract before deciding which owner supplies this slot.", + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "inputLabelMinWidth", + "component": "input", + "previousDecision": "pending", + "frozenTarget": { + "light": "2em", + "dark": "2em", + "expressions": [ + "2em" + ], + "source": [ + "packages/components/input/input.less:25" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/input/input.less", + "selector": ".t-input__label:not(:empty)", + "property": "min-width", + "kind": "render-property", + "value": "var(--td-input-label-min-width, 2em)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Review TFormItem + TInput composition and the standalone Input contract before deciding which owner supplies this slot.", + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "inputLabelTextColor", + "component": "input", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.9)", + "dark": "rgba(255, 255, 255, 90%)", + "expressions": [ + "@text-color-primary" + ], + "source": [ + "packages/components/input/input.less:23" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/input/input.less", + "selector": ".t-input__label:not(:empty)", + "property": "color", + "kind": "render-property", + "value": "var(--td-input-label-text-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + } + ], + "nonLessReferences": [ + { + "file": "packages/components/input/_example/custom/index.wxss", + "line": 10, + "text": "--td-input-label-text-color: rgba(255, 255, 255, 1);" + } + ] + }, + "flutterNameLocators": { + "textColorPrimary": [ + "tdesign-component/lib/src/components/input/t_input.dart:440", + "tdesign-component/lib/src/components/input/t_input.dart:641" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/input/t_input_test.dart:305", + "text": "expect(field(tester).style?.color, token.textColorPrimary);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/input/t_input_test.dart:338", + "text": "expect(field(tester).style?.color, token.textColorPrimary);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/input/t_input_test.dart:344", + "text": "expect(field(tester).style?.color, token.textColorPrimary);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/input/t_input_test.dart:617", + "text": "token.textColorPrimary,", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/input/t_input_test.dart:890", + "text": "expect(field(tester).style?.color, token.textColorPrimary);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/input/t_input_test.dart:1049", + "text": "? token.textColorPrimary", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Review TFormItem + TInput composition and the standalone Input contract before deciding which owner supplies this slot.", + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "inputLabelTextFont", + "component": "input", + "previousDecision": "pending", + "frozenTarget": { + "light": "16dp / 24dp PingFang SC, Microsoft YaHei, Arial Regular", + "dark": "16dp / 24dp PingFang SC, Microsoft YaHei, Arial Regular", + "expressions": [ + "@font-body-large" + ], + "source": [ + "packages/components/input/input.less:24" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/input/input.less", + "selector": ".t-input__label:not(:empty)", + "property": "font", + "kind": "render-property", + "value": "var(--td-input-label-text-font, var(--td-font-body-large, 32rpx / 48rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "fontBodyLarge": [ + "tdesign-component/lib/src/components/input/t_input.dart:234", + "tdesign-component/lib/src/components/input/t_input.dart:252" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/input/t_input_test.dart:368", + "text": "TThemeData.defaultData().fontBodyLarge?.size,", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/input/t_input_test.dart:372", + "text": "TThemeData.defaultData().fontBodyLarge?.height,", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/input/t_input_test.dart:376", + "text": "TThemeData.defaultData().fontBodyLarge?.size,", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/input/t_input_test.dart:380", + "text": "TThemeData.defaultData().fontBodyLarge?.height,", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/input/t_input_test.dart:409", + "text": "expect(inputStyle?.fontSize, token.fontBodyLarge?.size);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/input/t_input_test.dart:410", + "text": "expect(inputStyle?.height, token.fontBodyLarge?.height);", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Review TFormItem + TInput composition and the standalone Input contract before deciding which owner supplies this slot.", + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "inputPlaceholderTextColor", + "component": "input", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.4)", + "dark": "rgba(255, 255, 255, 35%)", + "expressions": [ + "@text-color-placeholder" + ], + "source": [ + "packages/components/input/input.less:19" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/input/input.less", + "selector": ".t-input__placeholder", + "property": "color", + "kind": "render-property", + "value": "var(--td-input-placeholder-text-color, var(--td-text-color-placeholder, var(--td-font-gray-3, rgba(0, 0, 0, 0.4))))" + } + ], + "nonLessReferences": [ + { + "file": "packages/components/input/_example/custom/index.wxss", + "line": 9, + "text": "--td-input-placeholder-text-color: rgba(255, 255, 255, 0.35);" + } + ] + }, + "flutterNameLocators": { + "textColorPlaceholder": [ + "tdesign-component/lib/src/components/input/t_input.dart:257", + "tdesign-component/lib/src/components/input/t_input.dart:266", + "tdesign-component/lib/src/components/input/t_input.dart:355", + "tdesign-component/lib/src/components/input/t_input.dart:366", + "tdesign-component/lib/src/components/input/t_input.dart:607", + "tdesign-component/lib/src/components/input/t_input.dart:659" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/input/t_input_test.dart:1019", + "observedScenariosPerSdk": 4, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "inputPlaceholderTextFont", + "component": "input", + "previousDecision": "pending", + "frozenTarget": { + "light": "16dp / 24dp PingFang SC, Microsoft YaHei, Arial Regular", + "dark": "16dp / 24dp PingFang SC, Microsoft YaHei, Arial Regular", + "expressions": [ + "@font-body-large" + ], + "source": [ + "packages/components/input/input.less:20" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/input/input.less", + "selector": ".t-input__placeholder", + "property": "font", + "kind": "render-property", + "value": "var(--td-input-placeholder-text-font, var(--td-font-body-large, 32rpx / 48rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "fontBodyLarge": [ + "tdesign-component/lib/src/components/input/t_input.dart:234", + "tdesign-component/lib/src/components/input/t_input.dart:252" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/input/t_input_test.dart:1019", + "observedScenariosPerSdk": 4, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "inputPrefixIconColor", + "component": "input", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.9)", + "dark": "rgba(255, 255, 255, 90%)", + "expressions": [ + "@text-color-primary" + ], + "source": [ + "packages/components/input/input.less:21" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/input/input.less", + "selector": ".t-input__icon--prefix", + "property": "color", + "kind": "render-property", + "value": "var(--td-input-prefix-icon-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorPrimary": [ + "tdesign-component/lib/src/components/input/t_input.dart:440", + "tdesign-component/lib/src/components/input/t_input.dart:641" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/input/t_input_test.dart:1019", + "observedScenariosPerSdk": 4, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "inputSuccessTextColor", + "component": "input", + "previousDecision": "pending", + "frozenTarget": { + "light": "#2ba471", + "dark": "#059465", + "expressions": [ + "@success-color" + ], + "source": [ + "packages/components/input/input.less:6" + ] + }, + "compiledSource": { + "conclusion": "no-consumer-in-compiled-css-or-other-source", + "selectors": [], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "successColor": [ + "tdesign-component/lib/src/components/input/t_input.dart:444", + "tdesign-component/lib/src/components/input/t_input.dart:451" + ] + }, + "approvedGlobalException": null, + "stage": "no-frozen-source-consumer-found", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [], + "finalPaintVerified": false + }, + { + "name": "inputSuccessTipsColor", + "component": "input", + "previousDecision": "pending", + "frozenTarget": { + "light": "#2ba471", + "dark": "#059465", + "expressions": [ + "@success-color" + ], + "source": [ + "packages/components/input/input.less:11" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/input/input.less", + "selector": ".t-input--success + .t-input__tips", + "property": "color", + "kind": "render-property", + "value": "var(--td-input-success-tips-color, var(--td-success-color, var(--td-success-color-5, #2ba471)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "successColor": [ + "tdesign-component/lib/src/components/input/t_input.dart:444", + "tdesign-component/lib/src/components/input/t_input.dart:451" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Review TFormItem + TInput composition and the standalone Input contract before deciding which owner supplies this slot.", + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "inputSuffixIconColor", + "component": "input", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.4)", + "dark": "rgba(255, 255, 255, 35%)", + "expressions": [ + "@text-color-placeholder" + ], + "source": [ + "packages/components/input/input.less:22" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/input/input.less", + "selector": ".t-input__wrap--clearable-icon,\n.t-input__wrap--suffix-icon", + "property": "color", + "kind": "render-property", + "value": "var(--td-input-suffix-icon-color, var(--td-text-color-placeholder, var(--td-font-gray-3, rgba(0, 0, 0, 0.4))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorPlaceholder": [ + "tdesign-component/lib/src/components/input/t_input.dart:257", + "tdesign-component/lib/src/components/input/t_input.dart:266", + "tdesign-component/lib/src/components/input/t_input.dart:355", + "tdesign-component/lib/src/components/input/t_input.dart:366", + "tdesign-component/lib/src/components/input/t_input.dart:607", + "tdesign-component/lib/src/components/input/t_input.dart:659" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/input/t_input_test.dart:1019", + "observedScenariosPerSdk": 4, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "inputSuffixTextColor", + "component": "input", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.9)", + "dark": "rgba(255, 255, 255, 90%)", + "expressions": [ + "@text-color-primary" + ], + "source": [ + "packages/components/input/input.less:27" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/input/input.less", + "selector": ".t-input__wrap--suffix", + "property": "color", + "kind": "render-property", + "value": "var(--td-input-suffix-text-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorPrimary": [ + "tdesign-component/lib/src/components/input/t_input.dart:440", + "tdesign-component/lib/src/components/input/t_input.dart:641" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/input/t_input_test.dart:305", + "text": "expect(field(tester).style?.color, token.textColorPrimary);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/input/t_input_test.dart:338", + "text": "expect(field(tester).style?.color, token.textColorPrimary);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/input/t_input_test.dart:344", + "text": "expect(field(tester).style?.color, token.textColorPrimary);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/input/t_input_test.dart:617", + "text": "token.textColorPrimary,", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/input/t_input_test.dart:890", + "text": "expect(field(tester).style?.color, token.textColorPrimary);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/input/t_input_test.dart:1049", + "text": "? token.textColorPrimary", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "inputVerticalPadding", + "component": "input", + "previousDecision": "pending", + "frozenTarget": { + "light": "16dp", + "dark": "16dp", + "expressions": [ + "@spacer-2" + ], + "source": [ + "packages/components/input/input.less:3" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/input/input.less", + "selector": ".t-input", + "property": "padding", + "kind": "render-property", + "value": "var(--td-input-vertical-padding, var(--td-spacer-2, 32rpx))" + } + ], + "nonLessReferences": [ + { + "file": "packages/components/input/_example/bordered/index.wxss", + "line": 2, + "text": "--td-input-vertical-padding: 24rpx;" + } + ] + }, + "flutterNameLocators": { + "spacer2": [ + "tdesign-component/lib/src/components/input/t_input.dart:645" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-difference-needs-resolution", + "runtimeDefaultVerified": false, + "testEntry": "tdesign-component/test/components/input/t_input_test.dart:1019", + "observedScenariosPerSdk": 4, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": "Standalone Flutter padding is documented as a fixed 16dp; frozen Less falls back to spacer2. Default matches, custom spacing does not. Decide the supported fallback contract before changing behavior.", + "candidateExistingTests": [], + "requiredEvidence": [ + "Resolve recorded target/runtime differences through an implementation fix or documented design/contract adjudication.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "inputWarningTextColor", + "component": "input", + "previousDecision": "pending", + "frozenTarget": { + "light": "#e37318", + "dark": "#cf6e2d", + "expressions": [ + "@warning-color" + ], + "source": [ + "packages/components/input/input.less:7" + ] + }, + "compiledSource": { + "conclusion": "no-consumer-in-compiled-css-or-other-source", + "selectors": [], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "warningColor": [ + "tdesign-component/lib/src/components/input/t_input.dart:445", + "tdesign-component/lib/src/components/input/t_input.dart:452" + ] + }, + "approvedGlobalException": null, + "stage": "no-frozen-source-consumer-found", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [], + "finalPaintVerified": false + }, + { + "name": "inputWarningTipsColor", + "component": "input", + "previousDecision": "pending", + "frozenTarget": { + "light": "#e37318", + "dark": "#cf6e2d", + "expressions": [ + "@warning-color" + ], + "source": [ + "packages/components/input/input.less:12" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/input/input.less", + "selector": ".t-input--warning + .t-input__tips", + "property": "color", + "kind": "render-property", + "value": "var(--td-input-warning-tips-color, var(--td-warning-color, var(--td-warning-color-5, #e37318)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "warningColor": [ + "tdesign-component/lib/src/components/input/t_input.dart:445", + "tdesign-component/lib/src/components/input/t_input.dart:452" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Review TFormItem + TInput composition and the standalone Input contract before deciding which owner supplies this slot.", + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "linkDangerActiveColor", + "component": "link", + "previousDecision": "pending", + "frozenTarget": { + "light": "#ad352f", + "dark": "#a03f46", + "expressions": [ + "@error-color-active" + ], + "source": [ + "packages/components/link/link.less:26" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/link/link.less", + "selector": ".t-link--danger.t-link--hover", + "property": "color", + "kind": "render-property", + "value": "var(--td-link-danger-active-color, var(--td-error-color-active, var(--td-error-color-7, #ad352f)))" + }, + { + "file": "packages/components/link/link.less", + "selector": ".t-link--danger.t-link--hover.t-link--underline::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-link-danger-active-color, var(--td-error-color-active, var(--td-error-color-7, #ad352f)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "errorColorActive": [ + "tdesign-component/lib/src/components/link/t_link_resolve.dart:38" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/link/t_link_test.dart:258", + "observedScenariosPerSdk": 8, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "linkDangerColor", + "component": "link", + "previousDecision": "pending", + "frozenTarget": { + "light": "#d54941", + "dark": "#c64751", + "expressions": [ + "@error-color" + ], + "source": [ + "packages/components/link/link.less:25" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/link/link.less", + "selector": ".t-link--danger", + "property": "color", + "kind": "render-property", + "value": "var(--td-link-danger-color, var(--td-error-color, var(--td-error-color-6, #d54941)))" + }, + { + "file": "packages/components/link/link.less", + "selector": ".t-link--danger.t-link--underline::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-link-danger-color, var(--td-error-color, var(--td-error-color-6, #d54941)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "errorColor": [ + "tdesign-component/lib/src/components/link/t_link_resolve.dart:51" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/link/t_link_test.dart:258", + "observedScenariosPerSdk": 8, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "linkDangerDisabledColor", + "component": "link", + "previousDecision": "pending", + "frozenTarget": { + "light": "#ffb9b0", + "dark": "#703439", + "expressions": [ + "@error-color-disabled" + ], + "source": [ + "packages/components/link/link.less:27" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/link/link.less", + "selector": ".t-link--danger.t-link--disabled", + "property": "color", + "kind": "render-property", + "value": "var(--td-link-danger-disabled-color, var(--td-error-color-disabled, var(--td-error-color-3, #ffb9b0)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "errorColorDisabled": [ + "tdesign-component/lib/src/components/link/t_link_resolve.dart:28" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/link/t_link_test.dart:258", + "observedScenariosPerSdk": 8, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "linkDefaultActiveColor", + "component": "link", + "previousDecision": "pending", + "frozenTarget": { + "light": "#003cab", + "dark": "#699ef5", + "expressions": [ + "@brand-color-active" + ], + "source": [ + "packages/components/link/link.less:6" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/link/link.less", + "selector": ".t-link--default.t-link--hover", + "property": "color", + "kind": "render-property", + "value": "var(--td-link-default-active-color, var(--td-brand-color-active, var(--td-primary-color-8, #003cab)))" + }, + { + "file": "packages/components/link/link.less", + "selector": ".t-link--default.t-link--hover.t-link--underline::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-link-default-active-color, var(--td-brand-color-active, var(--td-primary-color-8, #003cab)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "brandColorActive": [ + "tdesign-component/lib/src/components/link/t_link_resolve.dart:37" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/link/t_link_test.dart:258", + "observedScenariosPerSdk": 8, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "linkDefaultColor", + "component": "link", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.9)", + "dark": "rgba(255, 255, 255, 90%)", + "expressions": [ + "@text-color-primary" + ], + "source": [ + "packages/components/link/link.less:5" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/link/link.less", + "selector": ".t-link--default", + "property": "color", + "kind": "render-property", + "value": "var(--td-link-default-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + }, + { + "file": "packages/components/link/link.less", + "selector": ".t-link--default.t-link--underline::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-link-default-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorPrimary": [ + "tdesign-component/lib/src/components/link/t_link_resolve.dart:50" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/link/t_link_test.dart:258", + "observedScenariosPerSdk": 8, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "linkDefaultDisabledColor", + "component": "link", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.26)", + "dark": "rgba(255, 255, 255, 22%)", + "expressions": [ + "@text-color-disabled" + ], + "source": [ + "packages/components/link/link.less:7" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/link/link.less", + "selector": ".t-link--default.t-link--disabled", + "property": "color", + "kind": "render-property", + "value": "var(--td-link-default-disabled-color, var(--td-text-color-disabled, var(--td-font-gray-4, rgba(0, 0, 0, 0.26))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorDisabled": [ + "tdesign-component/lib/src/components/link/t_link_resolve.dart:27" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/link/t_link_test.dart:258", + "observedScenariosPerSdk": 8, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "linkPrimaryActiveColor", + "component": "link", + "previousDecision": "pending", + "frozenTarget": { + "light": "#003cab", + "dark": "#699ef5", + "expressions": [ + "@brand-color-active" + ], + "source": [ + "packages/components/link/link.less:11" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/link/link.less", + "selector": ".t-link--primary.t-link--hover", + "property": "color", + "kind": "render-property", + "value": "var(--td-link-primary-active-color, var(--td-brand-color-active, var(--td-primary-color-8, #003cab)))" + }, + { + "file": "packages/components/link/link.less", + "selector": ".t-link--primary.t-link--hover.t-link--underline::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-link-primary-active-color, var(--td-brand-color-active, var(--td-primary-color-8, #003cab)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "brandColorActive": [ + "tdesign-component/lib/src/components/link/t_link_resolve.dart:37" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/link/t_link_test.dart:258", + "observedScenariosPerSdk": 8, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "linkPrimaryColor", + "component": "link", + "previousDecision": "pending", + "frozenTarget": { + "light": "#0052d9", + "dark": "#4582e6", + "expressions": [ + "@brand-color" + ], + "source": [ + "packages/components/link/link.less:10" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/link/link.less", + "selector": ".t-link--primary", + "property": "color", + "kind": "render-property", + "value": "var(--td-link-primary-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + }, + { + "file": "packages/components/link/link.less", + "selector": ".t-link--primary.t-link--underline::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-link-primary-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "brandColor": [ + "tdesign-component/lib/src/components/link/t_link_resolve.dart:49" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/link/t_link_test.dart:258", + "observedScenariosPerSdk": 8, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "linkPrimaryDisabledColor", + "component": "link", + "previousDecision": "pending", + "frozenTarget": { + "light": "#b5c7ff", + "dark": "#143975", + "expressions": [ + "@brand-color-disabled" + ], + "source": [ + "packages/components/link/link.less:12" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/link/link.less", + "selector": ".t-link--primary.t-link--disabled", + "property": "color", + "kind": "render-property", + "value": "var(--td-link-primary-disabled-color, var(--td-brand-color-disabled, var(--td-primary-color-3, #b5c7ff)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "brandColorDisabled": [ + "tdesign-component/lib/src/components/link/t_link_resolve.dart:26" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/link/t_link_test.dart:258", + "observedScenariosPerSdk": 8, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "linkSuccessActiveColor", + "component": "link", + "previousDecision": "pending", + "frozenTarget": { + "light": "#008858", + "dark": "#0d7a55", + "expressions": [ + "@success-color-active" + ], + "source": [ + "packages/components/link/link.less:16" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/link/link.less", + "selector": ".t-link--success.t-link--hover", + "property": "color", + "kind": "render-property", + "value": "var(--td-link-success-active-color, var(--td-success-color-active, var(--td-success-color-6, #008858)))" + }, + { + "file": "packages/components/link/link.less", + "selector": ".t-link--success.t-link--hover.t-link--underline::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-link-success-active-color, var(--td-success-color-active, var(--td-success-color-6, #008858)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "successColorActive": [ + "tdesign-component/lib/src/components/link/t_link_resolve.dart:40" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/link/t_link_test.dart:258", + "observedScenariosPerSdk": 8, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "linkSuccessColor", + "component": "link", + "previousDecision": "pending", + "frozenTarget": { + "light": "#2ba471", + "dark": "#059465", + "expressions": [ + "@success-color" + ], + "source": [ + "packages/components/link/link.less:15" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/link/link.less", + "selector": ".t-link--success", + "property": "color", + "kind": "render-property", + "value": "var(--td-link-success-color, var(--td-success-color, var(--td-success-color-5, #2ba471)))" + }, + { + "file": "packages/components/link/link.less", + "selector": ".t-link--success.t-link--underline::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-link-success-color, var(--td-success-color, var(--td-success-color-5, #2ba471)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "successColor": [ + "tdesign-component/lib/src/components/link/t_link_resolve.dart:53" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/link/t_link_test.dart:258", + "observedScenariosPerSdk": 8, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "linkSuccessDisabledColor", + "component": "link", + "previousDecision": "pending", + "frozenTarget": { + "light": "#92dab2", + "dark": "#17533d", + "expressions": [ + "@success-color-disabled" + ], + "source": [ + "packages/components/link/link.less:17" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/link/link.less", + "selector": ".t-link--success.t-link--disabled", + "property": "color", + "kind": "render-property", + "value": "var(--td-link-success-disabled-color, var(--td-success-color-disabled, var(--td-success-color-3, #92dab2)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "successColorDisabled": [ + "tdesign-component/lib/src/components/link/t_link_resolve.dart:30" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/link/t_link_test.dart:258", + "observedScenariosPerSdk": 8, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "linkWarningActiveColor", + "component": "link", + "previousDecision": "pending", + "frozenTarget": { + "light": "#be5a00", + "dark": "#a75d2b", + "expressions": [ + "@warning-color-active" + ], + "source": [ + "packages/components/link/link.less:21" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/link/link.less", + "selector": ".t-link--warning.t-link--hover", + "property": "color", + "kind": "render-property", + "value": "var(--td-link-warning-active-color, var(--td-warning-color-active, var(--td-warning-color-6, #be5a00)))" + }, + { + "file": "packages/components/link/link.less", + "selector": ".t-link--warning.t-link--hover.t-link--underline::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-link-warning-active-color, var(--td-warning-color-active, var(--td-warning-color-6, #be5a00)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "warningColorActive": [ + "tdesign-component/lib/src/components/link/t_link_resolve.dart:39" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/link/t_link_test.dart:258", + "observedScenariosPerSdk": 8, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "linkWarningColor", + "component": "link", + "previousDecision": "pending", + "frozenTarget": { + "light": "#e37318", + "dark": "#cf6e2d", + "expressions": [ + "@warning-color" + ], + "source": [ + "packages/components/link/link.less:20" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/link/link.less", + "selector": ".t-link--warning", + "property": "color", + "kind": "render-property", + "value": "var(--td-link-warning-color, var(--td-warning-color, var(--td-warning-color-5, #e37318)))" + }, + { + "file": "packages/components/link/link.less", + "selector": ".t-link--warning.t-link--underline::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-link-warning-color, var(--td-warning-color, var(--td-warning-color-5, #e37318)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "warningColor": [ + "tdesign-component/lib/src/components/link/t_link_resolve.dart:52" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/link/t_link_test.dart:258", + "observedScenariosPerSdk": 8, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "linkWarningDisabledColor", + "component": "link", + "previousDecision": "pending", + "frozenTarget": { + "light": "#ffb98c", + "dark": "#733c23", + "expressions": [ + "@warning-color-disabled" + ], + "source": [ + "packages/components/link/link.less:22" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/link/link.less", + "selector": ".t-link--warning.t-link--disabled", + "property": "color", + "kind": "render-property", + "value": "var(--td-link-warning-disabled-color, var(--td-warning-color-disabled, var(--td-warning-color-3, #ffb98c)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "warningColorDisabled": [ + "tdesign-component/lib/src/components/link/t_link_resolve.dart:29" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/link/t_link_test.dart:258", + "observedScenariosPerSdk": 8, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "loadingColor", + "component": "loading", + "previousDecision": "pending", + "frozenTarget": { + "light": "#0052d9", + "dark": "#4582e6", + "expressions": [ + "@brand-color" + ], + "source": [ + "packages/components/loading/loading.less:5" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/loading/loading.less", + "selector": ".t-loading__spinner", + "property": "color", + "kind": "render-property", + "value": "var(--td-loading-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + }, + { + "file": "packages/components/loading/loading.less", + "selector": ".t-loading__spinner--spinner .t-loading__dot::before", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-loading-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + }, + { + "file": "packages/components/loading/loading.less", + "selector": ".t-loading__spinner--dots .t-loading__dot", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-loading-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "brandColor": [ + "tdesign-component/lib/src/components/loading/t_loading.dart:78", + "tdesign-component/lib/src/components/loading/t_circle_indicator.dart:75" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/loading/t_loading_test.dart:67", + "text": "TThemeData.defaultData().brandColor,", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/loading/t_loading_test.dart:80", + "text": "TThemeData.defaultData().brandColor,", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "loadingFullBgColor", + "component": "loading", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(255, 255, 255, 0.6)", + "dark": "rgba(255, 255, 255, 0.6)", + "expressions": [ + "rgba(255, 255, 255, 0.6)" + ], + "source": [ + "packages/components/loading/loading.less:9" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/loading/loading.less", + "selector": ".t-loading--fullscreen", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-loading-full-bg-color, rgba(255, 255, 255, 0.6))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "loadingTextColor", + "component": "loading", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.9)", + "dark": "rgba(255, 255, 255, 90%)", + "expressions": [ + "@text-color-primary" + ], + "source": [ + "packages/components/loading/loading.less:6" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/loading/loading.less", + "selector": ".t-loading__text", + "property": "color", + "kind": "render-property", + "value": "var(--td-loading-text-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorPrimary": [ + "tdesign-component/lib/src/components/loading/t_loading.dart:77", + "tdesign-component/lib/src/components/loading/t_loading.dart:153" + ], + "textColor": [ + "tdesign-component/lib/src/components/loading/t_loading_theme_data.dart:17", + "tdesign-component/lib/src/components/loading/t_loading_theme_data.dart:30", + "tdesign-component/lib/src/components/loading/t_loading_theme_data.dart:48", + "tdesign-component/lib/src/components/loading/t_loading_theme_data.dart:61", + "tdesign-component/lib/src/components/loading/t_loading_theme_data.dart:67", + "tdesign-component/lib/src/components/loading/t_loading_theme_data.dart:91", + "tdesign-component/lib/src/components/loading/t_loading.dart:153" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/loading/t_loading_test.dart:95", + "text": "TThemeData.defaultData().textColorPrimary,", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/loading/t_loading_test.dart:290", + "text": "expect(text.style?.color, token.textColorPrimary);", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "loadingTextFont", + "component": "loading", + "previousDecision": "pending", + "frozenTarget": { + "light": "12dp / 20dp PingFang SC, Microsoft YaHei, Arial Regular", + "dark": "12dp / 20dp PingFang SC, Microsoft YaHei, Arial Regular", + "expressions": [ + "@font-body-small" + ], + "source": [ + "packages/components/loading/loading.less:7" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/loading/loading.less", + "selector": ".t-loading__text", + "property": "font", + "kind": "render-property", + "value": "var(--td-loading-text-font, var(--td-font-body-small, 24rpx / 40rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + } + ], + "nonLessReferences": [ + { + "file": "packages/components/loading/_example/size/index.wxss", + "line": 2, + "text": "--td-loading-text-font: var(--td-font-body-large);" + }, + { + "file": "packages/components/loading/_example/size/index.wxss", + "line": 6, + "text": "--td-loading-text-font: var(--td-font-body-medium);" + } + ] + }, + "flutterNameLocators": { + "fontBodySmall": [] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "loadingZIndex", + "component": "loading", + "previousDecision": "pending", + "frozenTarget": { + "light": "3500", + "dark": "3500", + "expressions": [ + "3500" + ], + "source": [ + "packages/components/loading/loading.less:8" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/loading/loading.less", + "selector": ".t-loading--fullscreen", + "property": "z-index", + "kind": "render-property", + "value": "var(--td-loading-z-index, 3500)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "messageBgColor", + "component": "message-item", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(255, 255, 255, 1)", + "dark": "#242424", + "expressions": [ + "@bg-color-container" + ], + "source": [ + "packages/components/message-item/message-item.less:11" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/message-item/message-item.less", + "selector": ".t-message", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-message-bg-color, var(--td-bg-color-container, var(--td-font-white-1, #ffffff)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "bgColorContainer": [ + "tdesign-component/lib/src/components/message/t_message.dart:579" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "messageBorderRadius", + "component": "message-item", + "previousDecision": "pending", + "frozenTarget": { + "light": "6dp", + "dark": "6dp", + "expressions": [ + "@radius-default" + ], + "source": [ + "packages/components/message-item/message-item.less:13" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/message-item/message-item.less", + "selector": ".t-message", + "property": "border-radius", + "kind": "render-property", + "value": "var(--td-message-border-radius, var(--td-radius-default, 12rpx))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "radiusDefault": [ + "tdesign-component/lib/src/components/message/t_message.dart:583" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "messageBoxShadow", + "component": "message-item", + "previousDecision": "pending", + "frozenTarget": { + "light": "0 1px 10px rgba(0, 0, 0, 5%), 0 4px 5px rgba(0, 0, 0, 8%), 0 2px 4px -1px rgba(0, 0, 0, 12%)", + "dark": "0 4px 6px rgba(0, 0, 0, 6%), 0 1px 10px rgba(0, 0, 0, 8%), 0 2px 4px rgba(0, 0, 0, 12%)", + "expressions": [ + "@shadow-1" + ], + "source": [ + "packages/components/message-item/message-item.less:12" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/message-item/message-item.less", + "selector": ".t-message", + "property": "box-shadow", + "kind": "render-property", + "value": "var(--td-message-box-shadow, var(--td-shadow-1, 0 1px 10px rgba(0, 0, 0, 0.05), 0 4px 5px rgba(0, 0, 0, 0.08), 0 2px 4px -1px rgba(0, 0, 0, 0.12)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "shadow1": [ + "tdesign-component/lib/src/components/message/t_message.dart:621" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "messageCloseIconColor", + "component": "message-item", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.4)", + "dark": "rgba(255, 255, 255, 35%)", + "expressions": [ + "@text-color-placeholder" + ], + "source": [ + "packages/components/message-item/message-item.less:19" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/message-item/message-item.less", + "selector": ".t-message__icon--right", + "property": "color", + "kind": "render-property", + "value": "var(--td-message-close-icon-color, var(--td-text-color-placeholder, var(--td-font-gray-3, rgba(0, 0, 0, 0.4))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorPlaceholder": [ + "tdesign-component/lib/src/components/message/t_message.dart:569" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "messageContentColor", + "component": "message-item", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.9)", + "dark": "rgba(255, 255, 255, 90%)", + "expressions": [ + "@text-color-primary" + ], + "source": [ + "packages/components/message-item/message-item.less:14" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/message-item/message-item.less", + "selector": ".t-message__text", + "property": "color", + "kind": "render-property", + "value": "var(--td-message-content-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorPrimary": [ + "tdesign-component/lib/src/components/message/t_message.dart:457" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "messageErrorColor", + "component": "message-item", + "previousDecision": "pending", + "frozenTarget": { + "light": "#d54941", + "dark": "#c64751", + "expressions": [ + "@error-color" + ], + "source": [ + "packages/components/message-item/message-item.less:18" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/message-item/message-item.less", + "selector": ".t-message--error", + "property": "color", + "kind": "render-property", + "value": "var(--td-message-error-color, var(--td-error-color, var(--td-error-color-6, #d54941)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "errorColor": [ + "tdesign-component/lib/src/components/message/t_message.dart:553" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "messageInfoColor", + "component": "message-item", + "previousDecision": "pending", + "frozenTarget": { + "light": "#0052d9", + "dark": "#4582e6", + "expressions": [ + "@brand-color" + ], + "source": [ + "packages/components/message-item/message-item.less:15" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/message-item/message-item.less", + "selector": ".t-message--info", + "property": "color", + "kind": "render-property", + "value": "var(--td-message-info-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "brandColor": [ + "tdesign-component/lib/src/components/message/t_message.dart:541" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "messageSuccessColor", + "component": "message-item", + "previousDecision": "pending", + "frozenTarget": { + "light": "#2ba471", + "dark": "#059465", + "expressions": [ + "@success-color" + ], + "source": [ + "packages/components/message-item/message-item.less:16" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/message-item/message-item.less", + "selector": ".t-message--success", + "property": "color", + "kind": "render-property", + "value": "var(--td-message-success-color, var(--td-success-color, var(--td-success-color-5, #2ba471)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "successColor": [ + "tdesign-component/lib/src/components/message/t_message.dart:545" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "messageWarningColor", + "component": "message-item", + "previousDecision": "pending", + "frozenTarget": { + "light": "#e37318", + "dark": "#cf6e2d", + "expressions": [ + "@warning-color" + ], + "source": [ + "packages/components/message-item/message-item.less:17" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/message-item/message-item.less", + "selector": ".t-message--warning", + "property": "color", + "kind": "render-property", + "value": "var(--td-message-warning-color, var(--td-warning-color, var(--td-warning-color-5, #e37318)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "warningColor": [ + "tdesign-component/lib/src/components/message/t_message.dart:549" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "navbarBackground", + "component": "navbar", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(255, 255, 255, 1)", + "dark": "#242424", + "expressions": [ + "@navbar-bg-color" + ], + "source": [ + "packages/components/navbar/navbar.less:6" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/navbar/navbar.less", + "selector": ".t-navbar__content", + "property": "background", + "kind": "render-property", + "value": "var(--td-navbar-background, var(--td-navbar-bg-color, var(--td-bg-color-container, var(--td-font-white-1, #ffffff))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "navbarBgColor", + "component": "navbar", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(255, 255, 255, 1)", + "dark": "#242424", + "expressions": [ + "@bg-color-container" + ], + "source": [ + "packages/components/navbar/navbar.less:5" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/navbar/navbar.less", + "selector": ".t-navbar__content", + "property": "background", + "kind": "render-property", + "value": "var(--td-navbar-background, var(--td-navbar-bg-color, var(--td-bg-color-container, var(--td-font-white-1, #ffffff))))" + } + ], + "nonLessReferences": [ + { + "file": "packages/components/navbar/_example/custom-color/index.wxss", + "line": 3, + "text": "--td-navbar-bg-color: #0052d9;" + } + ] + }, + "flutterNameLocators": { + "bgColorContainer": [ + "tdesign-component/lib/src/components/navbar/t_nav_bar.dart:95" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/navbar/t_nav_bar_safe_area_golden_test.dart:57", + "text": "backgroundColor: context.tTheme.bgColorContainer,", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "navbarCapsuleBorderColor", + "component": "navbar", + "previousDecision": "pending", + "frozenTarget": { + "light": "#e7e7e7", + "dark": "#383838", + "expressions": [ + "@border-level-1-color" + ], + "source": [ + "packages/components/navbar/navbar.less:20" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/navbar/navbar.less", + "selector": ".t-navbar__capsule::before", + "property": "border", + "kind": "render-property", + "value": "2rpx solid var(--td-navbar-capsule-border-color, var(--td-border-level-1-color, var(--td-gray-color-3, #e7e7e7)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "borderLevel1Color": [] + }, + "approvedGlobalException": "引用已批准修正的浅色 grayColor3", + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "navbarCapsuleBorderRadius", + "component": "navbar", + "previousDecision": "pending", + "frozenTarget": { + "light": "16px", + "dark": "16px", + "expressions": [ + "16px" + ], + "source": [ + "packages/components/navbar/navbar.less:21" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/navbar/navbar.less", + "selector": ".t-navbar__capsule::before", + "property": "border-radius", + "kind": "render-property", + "value": "calc(var(--td-navbar-capsule-border-radius, 16px) * 2)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "navbarCapsuleHeight", + "component": "navbar", + "previousDecision": "pending", + "frozenTarget": { + "light": "32px", + "dark": "32px", + "expressions": [ + "32px" + ], + "source": [ + "packages/components/navbar/navbar.less:23" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/navbar/navbar.less", + "selector": ".t-navbar__capsule", + "property": "height", + "kind": "render-property", + "value": "var(--td-navbar-capsule-height, 32px)" + } + ], + "nonLessReferences": [ + { + "file": "packages/components/navbar/navbar.ts", + "line": 113, + "text": "'--td-navbar-capsule-height': `${_menuRect.height}px`, // 胶囊高度" + } + ] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "navbarCapsuleWidth", + "component": "navbar", + "previousDecision": "pending", + "frozenTarget": { + "light": "88px", + "dark": "88px", + "expressions": [ + "88px" + ], + "source": [ + "packages/components/navbar/navbar.less:22" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/navbar/navbar.less", + "selector": ".t-navbar__capsule", + "property": "width", + "kind": "render-property", + "value": "var(--td-navbar-capsule-width, 88px)" + } + ], + "nonLessReferences": [ + { + "file": "packages/components/navbar/navbar.ts", + "line": 114, + "text": "'--td-navbar-capsule-width': `${_menuRect.width}px`, // 胶囊宽度" + } + ] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "navbarCenterLeft", + "component": "navbar", + "previousDecision": "pending", + "frozenTarget": { + "light": "var(\n --td-navbar-right,\n 95px\n)", + "dark": "var(\n --td-navbar-right,\n 95px\n)", + "expressions": [ + "@navbar-right" + ], + "source": [ + "packages/components/navbar/navbar.less:126" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/navbar/navbar.less", + "selector": ".t-navbar__center", + "property": "left", + "kind": "render-property", + "value": "var(--td-navbar-center-left, var(--td-navbar-right, 95px))" + } + ], + "nonLessReferences": [ + { + "file": "packages/components/navbar/navbar.ts", + "line": 130, + "text": "'--td-navbar-center-left': `${maxSpacing}px`, // 标题左侧距离" + } + ] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "navbarCenterWidth", + "component": "navbar", + "previousDecision": "pending", + "frozenTarget": { + "light": "187px", + "dark": "187px", + "expressions": [ + "187px" + ], + "source": [ + "packages/components/navbar/navbar.less:127" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/navbar/navbar.less", + "selector": ".t-navbar__center", + "property": "width", + "kind": "render-property", + "value": "var(--td-navbar-center-width, 187px)" + } + ], + "nonLessReferences": [ + { + "file": "packages/components/navbar/navbar.ts", + "line": 131, + "text": "'--td-navbar-center-width': `${Math.max(menuRect.left - maxSpacing, 0)}px`, // 标题宽度" + } + ] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "navbarColor", + "component": "navbar", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.9)", + "dark": "rgba(255, 255, 255, 90%)", + "expressions": [ + "@text-color-primary" + ], + "source": [ + "packages/components/navbar/navbar.less:4" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/navbar/navbar.less", + "selector": ".t-navbar__content", + "property": "color", + "kind": "render-property", + "value": "var(--td-navbar-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + } + ], + "nonLessReferences": [ + { + "file": "packages/components/navbar/_example/custom-color/index.wxss", + "line": 2, + "text": "--td-navbar-color: #fff;" + } + ] + }, + "flutterNameLocators": { + "textColorPrimary": [ + "tdesign-component/lib/src/components/navbar/t_nav_bar.dart:89", + "tdesign-component/lib/src/components/navbar/t_nav_bar.dart:92" + ], + "color": [ + "tdesign-component/lib/src/components/navbar/t_nav_bar.dart:117", + "tdesign-component/lib/src/components/navbar/t_nav_bar.dart:123", + "tdesign-component/lib/src/components/navbar/t_nav_bar.dart:131", + "tdesign-component/lib/src/components/navbar/t_nav_bar.dart:175", + "tdesign-component/lib/src/components/navbar/t_nav_bar.dart:214", + "tdesign-component/lib/src/components/navbar/t_nav_bar.dart:268", + "tdesign-component/lib/src/components/navbar/t_nav_bar_theme_data.dart:14", + "tdesign-component/lib/src/components/navbar/t_nav_bar_theme_data.dart:22", + "tdesign-component/lib/src/components/navbar/t_nav_bar_theme_data.dart:192" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/navbar/t_nav_bar_test.dart:106", + "text": "expect(backIcon.color, token.textColorPrimary);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/navbar/t_nav_bar_test.dart:532", + "text": "expect(style.color, token.textColorPrimary);", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "navbarHeight", + "component": "navbar", + "previousDecision": "pending", + "frozenTarget": { + "light": "48px", + "dark": "48px", + "expressions": [ + "48px" + ], + "source": [ + "packages/components/navbar/navbar.less:7" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/navbar/navbar.less", + "selector": ".t-navbar__placeholder", + "property": "height", + "kind": "render-property", + "value": "var(--td-navbar-height, 48px)" + }, + { + "file": "packages/components/navbar/navbar.less", + "selector": ".t-navbar__content", + "property": "height", + "kind": "render-property", + "value": "var(--td-navbar-height, 48px)" + }, + { + "file": "packages/components/navbar/navbar.less", + "selector": ".t-navbar__center", + "property": "height", + "kind": "render-property", + "value": "var(--td-navbar-height, 48px)" + } + ], + "nonLessReferences": [ + { + "file": "packages/components/navbar/navbar.ts", + "line": 115, + "text": "'--td-navbar-height': `${(_menuRect.top - systemInfo.statusBarHeight) * 2 + _menuRect.height}px`," + } + ] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "navbarLeftArrowSize", + "component": "navbar", + "previousDecision": "pending", + "frozenTarget": { + "light": "24px", + "dark": "24px", + "expressions": [ + "24px" + ], + "source": [ + "packages/components/navbar/navbar.less:17" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/navbar/navbar.less", + "selector": ".t-navbar__left-arrow", + "property": "font-size", + "kind": "render-property", + "value": "var(--td-navbar-left-arrow-size, 24px)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "navbarLeftMaxWidth", + "component": "navbar", + "previousDecision": "pending", + "frozenTarget": { + "light": "", + "dark": "", + "expressions": [], + "source": [ + "packages/components/navbar/navbar.less:80" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/navbar/navbar.less", + "selector": ".t-navbar__left", + "property": "max-width", + "kind": "render-property", + "value": "var(--td-navbar-left-max-width)" + } + ], + "nonLessReferences": [ + { + "file": "packages/components/navbar/navbar.ts", + "line": 112, + "text": "'--td-navbar-left-max-width': `${_menuRect.left}px`, // 左侧内容最大宽度" + } + ] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "navbarTitleFont", + "component": "navbar", + "previousDecision": "pending", + "frozenTarget": { + "light": "600 18dp / 26dp PingFang SC, Microsoft YaHei, Arial Regular", + "dark": "600 18dp / 26dp PingFang SC, Microsoft YaHei, Arial Regular", + "expressions": [ + "@font-title-large" + ], + "source": [ + "packages/components/navbar/navbar.less:16" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/navbar/navbar.less", + "selector": ".t-navbar__center-title", + "property": "font", + "kind": "render-property", + "value": "var(--td-navbar-title-font, var(--td-font-title-large, 600 36rpx / 52rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "fontTitleLarge": [ + "tdesign-component/lib/src/components/navbar/t_nav_bar.dart:209" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/navbar/t_nav_bar_test.dart:282", + "text": "expect(style.fontSize, token.fontTitleLarge?.size);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/navbar/t_nav_bar_test.dart:283", + "text": "expect(style.height, token.fontTitleLarge?.height);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/navbar/t_nav_bar_test.dart:284", + "text": "expect(style.fontWeight, token.fontTitleLarge?.fontWeight);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/navbar/t_nav_bar_test.dart:345", + "text": "expect(style.fontSize, token.fontTitleLarge?.size);", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "noticeBarErrorBgColor", + "component": "notice-bar", + "previousDecision": "pending", + "frozenTarget": { + "light": "#fff0ed", + "dark": "#472324", + "expressions": [ + "@error-color-1" + ], + "source": [ + "packages/components/notice-bar/notice-bar.less:17" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/notice-bar/notice-bar.less", + "selector": ".t-notice-bar--error", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-notice-bar-error-bg-color, var(--td-error-color-1, #fff0ed))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "errorColor1": [] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "noticeBarErrorColor", + "component": "notice-bar", + "previousDecision": "pending", + "frozenTarget": { + "light": "#d54941", + "dark": "#c64751", + "expressions": [ + "@error-color" + ], + "source": [ + "packages/components/notice-bar/notice-bar.less:16" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/notice-bar/notice-bar.less", + "selector": ".t-notice-bar--error", + "property": "color", + "kind": "render-property", + "value": "var(--td-notice-bar-error-color, var(--td-error-color, var(--td-error-color-6, #d54941)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "errorColor": [ + "tdesign-component/lib/src/components/notice_bar/t_notice_bar_theme_data.dart:95" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "noticeBarFontColor", + "component": "notice-bar", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.9)", + "dark": "rgba(255, 255, 255, 90%)", + "expressions": [ + "@text-color-primary" + ], + "source": [ + "packages/components/notice-bar/notice-bar.less:9" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/notice-bar/notice-bar.less", + "selector": ".t-notice-bar__content-wrap", + "property": "color", + "kind": "render-property", + "value": "var(--td-notice-bar-font-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorPrimary": [ + "tdesign-component/lib/src/components/notice_bar/t_notice_bar_theme_data.dart:115" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "noticeBarInfoBgColor", + "component": "notice-bar", + "previousDecision": "pending", + "frozenTarget": { + "light": "#f2f3ff", + "dark": "#1b2f51", + "expressions": [ + "@brand-color-light" + ], + "source": [ + "packages/components/notice-bar/notice-bar.less:11" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/notice-bar/notice-bar.less", + "selector": ".t-notice-bar--info", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-notice-bar-info-bg-color, var(--td-brand-color-light, var(--td-primary-color-1, #f2f3ff)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "brandColorLight": [ + "tdesign-component/lib/src/components/notice_bar/t_notice_bar_theme_data.dart:104" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/notice_bar/t_notice_bar_test.dart:551", + "text": "capturedContext.tTheme.brandColorLight,", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "noticeBarInfoColor", + "component": "notice-bar", + "previousDecision": "pending", + "frozenTarget": { + "light": "#0052d9", + "dark": "#4582e6", + "expressions": [ + "@brand-color" + ], + "source": [ + "packages/components/notice-bar/notice-bar.less:10" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/notice-bar/notice-bar.less", + "selector": ".t-notice-bar--info", + "property": "color", + "kind": "render-property", + "value": "var(--td-notice-bar-info-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "brandColor": [ + "tdesign-component/lib/src/components/notice_bar/t_notice_bar_theme_data.dart:103" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "noticeBarOperationFontColor", + "component": "notice-bar", + "previousDecision": "pending", + "frozenTarget": { + "light": "#0052d9", + "dark": "#4582e6", + "expressions": [ + "@brand-color" + ], + "source": [ + "packages/components/notice-bar/notice-bar.less:19" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/notice-bar/notice-bar.less", + "selector": ".t-notice-bar__operation", + "property": "color", + "kind": "render-property", + "value": "var(--td-notice-bar-operation-font-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "brandColor": [ + "tdesign-component/lib/src/components/notice_bar/t_notice_bar_theme_data.dart:103" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "noticeBarSuccessBgColor", + "component": "notice-bar", + "previousDecision": "pending", + "frozenTarget": { + "light": "#e3f9e9", + "dark": "#193a2a", + "expressions": [ + "@success-color-1" + ], + "source": [ + "packages/components/notice-bar/notice-bar.less:13" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/notice-bar/notice-bar.less", + "selector": ".t-notice-bar--success", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-notice-bar-success-bg-color, var(--td-success-color-1, #e3f9e9))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "successColor1": [] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "noticeBarSuccessColor", + "component": "notice-bar", + "previousDecision": "pending", + "frozenTarget": { + "light": "#2ba471", + "dark": "#059465", + "expressions": [ + "@success-color" + ], + "source": [ + "packages/components/notice-bar/notice-bar.less:12" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/notice-bar/notice-bar.less", + "selector": ".t-notice-bar--success", + "property": "color", + "kind": "render-property", + "value": "var(--td-notice-bar-success-color, var(--td-success-color, var(--td-success-color-5, #2ba471)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "successColor": [ + "tdesign-component/lib/src/components/notice_bar/t_notice_bar_theme_data.dart:99" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "noticeBarSuffixIconColor", + "component": "notice-bar", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.4)", + "dark": "rgba(255, 255, 255, 35%)", + "expressions": [ + "@text-color-placeholder" + ], + "source": [ + "packages/components/notice-bar/notice-bar.less:18" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/notice-bar/notice-bar.less", + "selector": ".t-notice-bar__suffix-icon", + "property": "color", + "kind": "render-property", + "value": "var(--td-notice-bar-suffix-icon-color, var(--td-text-color-placeholder, var(--td-font-gray-3, rgba(0, 0, 0, 0.4))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorPlaceholder": [] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "noticeBarWarningBgColor", + "component": "notice-bar", + "previousDecision": "pending", + "frozenTarget": { + "light": "#fff1e9", + "dark": "#4f2a1d", + "expressions": [ + "@warning-color-1" + ], + "source": [ + "packages/components/notice-bar/notice-bar.less:15" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/notice-bar/notice-bar.less", + "selector": ".t-notice-bar--warning", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-notice-bar-warning-bg-color, var(--td-warning-color-1, #fff1e9))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "warningColor1": [] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "noticeBarWarningColor", + "component": "notice-bar", + "previousDecision": "pending", + "frozenTarget": { + "light": "#e37318", + "dark": "#cf6e2d", + "expressions": [ + "@warning-color" + ], + "source": [ + "packages/components/notice-bar/notice-bar.less:14" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/notice-bar/notice-bar.less", + "selector": ".t-notice-bar--warning", + "property": "color", + "kind": "render-property", + "value": "var(--td-notice-bar-warning-color, var(--td-warning-color, var(--td-warning-color-5, #e37318)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "warningColor": [ + "tdesign-component/lib/src/components/notice_bar/t_notice_bar_theme_data.dart:91" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/notice_bar/t_notice_bar_test.dart:126", + "text": "expect(iconTheme.color, iconContext.tTheme.warningColor);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/notice_bar/t_notice_bar_test.dart:537", + "text": "expect(resolved.leftIconColor, capturedContext.tTheme.warningColor);", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "pickerBgColor", + "component": "picker", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(255, 255, 255, 1)", + "dark": "#242424", + "expressions": [ + "@bg-color-container" + ], + "source": [ + "packages/components/picker/picker.less:15" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/picker/picker.less", + "selector": ".t-picker", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-picker-bg-color, var(--td-bg-color-container, var(--td-font-white-1, #ffffff)))" + }, + { + "file": "packages/components/picker/picker.less", + "selector": ".t-picker__mask--top", + "property": "background", + "kind": "render-property", + "value": "linear-gradient(180deg, var(--td-picker-bg-color, var(--td-bg-color-container, var(--td-font-white-1, #ffffff))) 0%, var(--td-picker-transparent-color) 100%)" + }, + { + "file": "packages/components/picker/picker.less", + "selector": ".t-picker__mask--bottom", + "property": "background", + "kind": "render-property", + "value": "linear-gradient(180deg, var(--td-picker-bg-color, var(--td-bg-color-container, var(--td-font-white-1, #ffffff))) 0%, var(--td-picker-transparent-color) 100%)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "bgColorContainer": [ + "tdesign-component/lib/src/components/picker/multi_wheel_layout.dart:36", + "tdesign-component/lib/src/components/picker/multi_wheel_layout.dart:79", + "tdesign-component/lib/src/components/picker/multi_wheel_layout.dart:80" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/picker/picker_consumers_theme_test.dart:308", + "text": "tokens.bgColorContainer,", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/picker/picker_consumers_theme_test.dart:328", + "text": "tokens.bgColorContainer,", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/picker/picker_consumers_theme_test.dart:329", + "text": "tokens.bgColorContainer.withValues(alpha: 0),", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "pickerBorderRadius", + "component": "picker", + "previousDecision": "pending", + "frozenTarget": { + "light": "12dp", + "dark": "12dp", + "expressions": [ + "@radius-extraLarge" + ], + "source": [ + "packages/components/picker/picker.less:5" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/picker/picker.less", + "selector": ".t-picker", + "property": "border-top-left-radius", + "kind": "render-property", + "value": "var(--td-picker-border-radius, var(--td-radius-extraLarge, 24rpx))" + }, + { + "file": "packages/components/picker/picker.less", + "selector": ".t-picker", + "property": "border-top-right-radius", + "kind": "render-property", + "value": "var(--td-picker-border-radius, var(--td-radius-extraLarge, 24rpx))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "radiusExtraLarge": [] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "pickerButtonFont", + "component": "picker", + "previousDecision": "pending", + "frozenTarget": { + "light": "16dp / 24dp PingFang SC, Microsoft YaHei, Arial Regular", + "dark": "16dp / 24dp PingFang SC, Microsoft YaHei, Arial Regular", + "expressions": [ + "@font-body-large" + ], + "source": [ + "packages/components/picker/picker.less:10" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/picker/picker.less", + "selector": ".t-picker__cancel,\n.t-picker__confirm", + "property": "font", + "kind": "render-property", + "value": "var(--td-picker-button-font, var(--td-font-body-large, 32rpx / 48rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "fontBodyLarge": [ + "tdesign-component/lib/src/components/picker/picker_item.dart:59", + "tdesign-component/lib/src/components/picker/picker_defaults.dart:26" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/picker/picker_consumers_theme_test.dart:82", + "text": "TThemeData.defaultData().fontBodyLarge?.fontWeight,", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "pickerCancelColor", + "component": "picker", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.6)", + "dark": "rgba(255, 255, 255, 55%)", + "expressions": [ + "@text-color-secondary" + ], + "source": [ + "packages/components/picker/picker.less:8" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/picker/picker.less", + "selector": ".t-picker__cancel", + "property": "color", + "kind": "render-property", + "value": "var(--td-picker-cancel-color, var(--td-text-color-secondary, var(--td-font-gray-2, rgba(0, 0, 0, 0.6))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorSecondary": [ + "tdesign-component/lib/src/components/picker/picker_item.dart:71" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/picker/picker_consumers_theme_test.dart:90", + "text": "TThemeData.defaultData().textColorSecondary,", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/picker/t_picker_widget_test.dart:160", + "text": "expect(labels[1].style!.color, TThemeData.defaultData().textColorSecondary);", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "pickerConfirmColor", + "component": "picker", + "previousDecision": "pending", + "frozenTarget": { + "light": "#0052d9", + "dark": "#4582e6", + "expressions": [ + "@brand-color" + ], + "source": [ + "packages/components/picker/picker.less:9" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/picker/picker.less", + "selector": ".t-picker__confirm", + "property": "color", + "kind": "render-property", + "value": "var(--td-picker-confirm-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "brandColor": [] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "pickerIndicatorBgColor", + "component": "picker", + "previousDecision": "pending", + "frozenTarget": { + "light": "#f3f3f3", + "dark": "#2c2c2c", + "expressions": [ + "@bg-color-secondarycontainer" + ], + "source": [ + "packages/components/picker/picker.less:18" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/picker/picker.less", + "selector": ".t-picker__indicator", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-picker-indicator-bg-color, var(--td-bg-color-secondarycontainer, var(--td-gray-color-1, #f3f3f3)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "bgColorSecondaryContainer": [ + "tdesign-component/lib/src/components/picker/multi_wheel_layout.dart:50" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/picker/picker_consumers_theme_test.dart:353", + "text": "tokens.bgColorSecondaryContainer,", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "pickerIndicatorBorderRadius", + "component": "picker", + "previousDecision": "pending", + "frozenTarget": { + "light": "6dp", + "dark": "6dp", + "expressions": [ + "@radius-default" + ], + "source": [ + "packages/components/picker/picker.less:19" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/picker/picker.less", + "selector": ".t-picker__indicator", + "property": "border-radius", + "kind": "render-property", + "value": "var(--td-picker-indicator-border-radius, var(--td-radius-default, 12rpx))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "radiusDefault": [ + "tdesign-component/lib/src/components/picker/multi_wheel_layout.dart:51" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "pickerItemActiveColor", + "component": "picker-item", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.9)", + "dark": "rgba(255, 255, 255, 90%)", + "expressions": [ + "@text-color-primary" + ], + "source": [ + "packages/components/picker-item/picker-item.less:6" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/picker-item/picker-item.less", + "selector": ".t-picker-item__item--active", + "property": "color", + "kind": "render-property", + "value": "var(--td-picker-item-active-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorPrimary": [ + "tdesign-component/lib/src/components/picker/picker_item.dart:70" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/picker/picker_consumers_theme_test.dart:89", + "text": "TThemeData.defaultData().textColorPrimary,", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "pickerItemColor", + "component": "picker-item", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.6)", + "dark": "rgba(255, 255, 255, 55%)", + "expressions": [ + "@text-color-secondary" + ], + "source": [ + "packages/components/picker-item/picker-item.less:5" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/picker-item/picker-item.less", + "selector": ".t-picker-item__item", + "property": "color", + "kind": "render-property", + "value": "var(--td-picker-item-color, var(--td-text-color-secondary, var(--td-font-gray-2, rgba(0, 0, 0, 0.6))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorSecondary": [ + "tdesign-component/lib/src/components/picker/picker_item.dart:71" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/picker/picker_consumers_theme_test.dart:90", + "text": "TThemeData.defaultData().textColorSecondary,", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/picker/t_picker_widget_test.dart:160", + "text": "expect(labels[1].style!.color, TThemeData.defaultData().textColorSecondary);", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "pickerItemFontSize", + "component": "picker-item", + "previousDecision": "pending", + "frozenTarget": { + "light": "16dp", + "dark": "16dp", + "expressions": [ + "@font-size-m" + ], + "source": [ + "packages/components/picker-item/picker-item.less:7" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/picker-item/picker-item.less", + "selector": ".t-picker-item__item", + "property": "font-size", + "kind": "render-property", + "value": "var(--td-picker-item-font-size, var(--td-font-size-m, 32rpx))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "fontSizeM": [] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "pickerTitleColor", + "component": "picker", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.9)", + "dark": "rgba(255, 255, 255, 90%)", + "expressions": [ + "@text-color-primary" + ], + "source": [ + "packages/components/picker/picker.less:13" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/picker/picker.less", + "selector": ".t-picker__title", + "property": "color", + "kind": "render-property", + "value": "var(--td-picker-title-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorPrimary": [ + "tdesign-component/lib/src/components/picker/picker_item.dart:70" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/picker/picker_consumers_theme_test.dart:89", + "text": "TThemeData.defaultData().textColorPrimary,", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "pickerTitleFont", + "component": "picker", + "previousDecision": "pending", + "frozenTarget": { + "light": "600 18dp / 26dp PingFang SC, Microsoft YaHei, Arial Regular", + "dark": "600 18dp / 26dp PingFang SC, Microsoft YaHei, Arial Regular", + "expressions": [ + "@font-title-large" + ], + "source": [ + "packages/components/picker/picker.less:12" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/picker/picker.less", + "selector": ".t-picker__title", + "property": "font", + "kind": "render-property", + "value": "var(--td-picker-title-font, var(--td-font-title-large, 600 36rpx / 52rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "fontTitleLarge": [] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "pickerToolbarHeight", + "component": "picker", + "previousDecision": "pending", + "frozenTarget": { + "light": "58dp", + "dark": "58dp", + "expressions": [ + "116rpx" + ], + "source": [ + "packages/components/picker/picker.less:6" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/picker/picker.less", + "selector": ".t-picker__toolbar", + "property": "height", + "kind": "render-property", + "value": "var(--td-picker-toolbar-height, 116rpx)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "pickerTransparentColor", + "component": "picker", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(255, 255, 255, 0)", + "dark": "transparent", + "expressions": [], + "source": [ + "packages/components/picker/picker.less:16" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/picker/picker.less", + "selector": ".t-picker__mask--top", + "property": "background", + "kind": "render-property", + "value": "linear-gradient(180deg, var(--td-picker-bg-color, var(--td-bg-color-container, var(--td-font-white-1, #ffffff))) 0%, var(--td-picker-transparent-color) 100%)" + }, + { + "file": "packages/components/picker/picker.less", + "selector": ".t-picker__mask--bottom", + "property": "background", + "kind": "render-property", + "value": "linear-gradient(180deg, var(--td-picker-bg-color, var(--td-bg-color-container, var(--td-font-white-1, #ffffff))) 0%, var(--td-picker-transparent-color) 100%)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "popoverBrandBgColor", + "component": "popover", + "previousDecision": "pending", + "frozenTarget": { + "light": "#f2f3ff", + "dark": "#1b2f51", + "expressions": [ + "@primary-color-1" + ], + "source": [ + "packages/components/popover/popover.less:19" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/popover/popover.less", + "selector": ".t-popover .t-popover--brand", + "property": "background", + "kind": "render-property", + "value": "var(--td-popover-brand-bg-color, var(--td-primary-color-1, #f2f3ff))" + }, + { + "file": "packages/components/popover/popover.less", + "selector": ".t-popover .t-popover--brand .t-popover__arrow", + "property": "color", + "kind": "render-property", + "value": "var(--td-popover-brand-bg-color, var(--td-primary-color-1, #f2f3ff))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "primaryColor1": [] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "popoverBrandColor", + "component": "popover", + "previousDecision": "pending", + "frozenTarget": { + "light": "#0052d9", + "dark": "#2667d4", + "expressions": [ + "@primary-color-7" + ], + "source": [ + "packages/components/popover/popover.less:18" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/popover/popover.less", + "selector": ".t-popover .t-popover--brand", + "property": "color", + "kind": "render-property", + "value": "var(--td-popover-brand-color, var(--td-primary-color-7, #0052d9))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "primaryColor7": [] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "popoverDarkBgColor", + "component": "popover", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.9)", + "dark": "rgba(0, 0, 0, 90%)", + "expressions": [ + "@font-gray-1" + ], + "source": [ + "packages/components/popover/popover.less:15" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/popover/popover.less", + "selector": ".t-popover .t-popover--dark", + "property": "background", + "kind": "render-property", + "value": "var(--td-popover-dark-bg-color, var(--td-font-gray-1, rgba(0, 0, 0, 0.9)))" + }, + { + "file": "packages/components/popover/popover.less", + "selector": ".t-popover .t-popover--dark .t-popover__arrow", + "property": "color", + "kind": "render-property", + "value": "var(--td-popover-dark-bg-color, var(--td-font-gray-1, rgba(0, 0, 0, 0.9)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "fontGray1": [] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "popoverDarkColor", + "component": "popover", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(255, 255, 255, 1)", + "dark": "rgba(255, 255, 255, 90%)", + "expressions": [ + "@text-color-anti" + ], + "source": [ + "packages/components/popover/popover.less:14" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/popover/popover.less", + "selector": ".t-popover .t-popover--dark", + "property": "color", + "kind": "render-property", + "value": "var(--td-popover-dark-color, var(--td-text-color-anti, var(--td-font-white-1, #ffffff)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorAnti": [ + "tdesign-component/lib/src/components/popover/t_popover_widget.dart:265" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/popover/t_popover_test.dart:114", + "text": "expect(textStyle.color, token.textColorAnti);", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "popoverErrorBgColor", + "component": "popover", + "previousDecision": "pending", + "frozenTarget": { + "light": "#fff0ed", + "dark": "#472324", + "expressions": [ + "@error-color-1" + ], + "source": [ + "packages/components/popover/popover.less:25" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/popover/popover.less", + "selector": ".t-popover .t-popover--error", + "property": "background", + "kind": "render-property", + "value": "var(--td-popover-error-bg-color, var(--td-error-color-1, #fff0ed))" + }, + { + "file": "packages/components/popover/popover.less", + "selector": ".t-popover .t-popover--error .t-popover__arrow", + "property": "color", + "kind": "render-property", + "value": "var(--td-popover-error-bg-color, var(--td-error-color-1, #fff0ed))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "errorColor1": [] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "popoverErrorColor", + "component": "popover", + "previousDecision": "pending", + "frozenTarget": { + "light": "#d54941", + "dark": "#c64751", + "expressions": [ + "@error-color-6" + ], + "source": [ + "packages/components/popover/popover.less:24" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/popover/popover.less", + "selector": ".t-popover .t-popover--error", + "property": "color", + "kind": "render-property", + "value": "var(--td-popover-error-color, var(--td-error-color-6, #d54941))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "errorColor6": [] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "popoverLightBgColor", + "component": "popover", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(255, 255, 255, 1)", + "dark": "#242424", + "expressions": [ + "@bg-color-container" + ], + "source": [ + "packages/components/popover/popover.less:17" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/popover/popover.less", + "selector": ".t-popover .t-popover--light", + "property": "background", + "kind": "render-property", + "value": "var(--td-popover-light-bg-color, var(--td-bg-color-container, var(--td-font-white-1, #ffffff)))" + }, + { + "file": "packages/components/popover/popover.less", + "selector": ".t-popover .t-popover--light .t-popover__arrow", + "property": "color", + "kind": "render-property", + "value": "var(--td-popover-light-bg-color, var(--td-bg-color-container, var(--td-font-white-1, #ffffff)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "bgColorContainer": [] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "popoverLightColor", + "component": "popover", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.9)", + "dark": "rgba(255, 255, 255, 90%)", + "expressions": [ + "@text-color-primary" + ], + "source": [ + "packages/components/popover/popover.less:16" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/popover/popover.less", + "selector": ".t-popover .t-popover--light", + "property": "color", + "kind": "render-property", + "value": "var(--td-popover-light-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorPrimary": [] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "popoverPadding", + "component": "popover", + "previousDecision": "pending", + "frozenTarget": { + "light": "12dp", + "dark": "12dp", + "expressions": [ + "@spacer-1" + ], + "source": [ + "packages/components/popover/popover.less:6" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/popover/popover.less", + "selector": ".t-popover__content", + "property": "padding", + "kind": "render-property", + "value": "var(--td-popover-padding, var(--td-spacer-1, 24rpx))" + }, + { + "file": "packages/components/popover/popover.less", + "selector": ".t-popover.t-popover--placement-top-start .t-popover__arrow", + "property": "left", + "kind": "render-property", + "value": "var(--td-popover-padding, var(--td-spacer-1, 24rpx))" + }, + { + "file": "packages/components/popover/popover.less", + "selector": ".t-popover.t-popover--placement-top-end .t-popover__arrow", + "property": "right", + "kind": "render-property", + "value": "var(--td-popover-padding, var(--td-spacer-1, 24rpx))" + }, + { + "file": "packages/components/popover/popover.less", + "selector": ".t-popover.t-popover--placement-bottom-start .t-popover__arrow", + "property": "left", + "kind": "render-property", + "value": "var(--td-popover-padding, var(--td-spacer-1, 24rpx))" + }, + { + "file": "packages/components/popover/popover.less", + "selector": ".t-popover.t-popover--placement-bottom-end .t-popover__arrow", + "property": "right", + "kind": "render-property", + "value": "var(--td-popover-padding, var(--td-spacer-1, 24rpx))" + }, + { + "file": "packages/components/popover/popover.less", + "selector": ".t-popover.t-popover--placement-left-start .t-popover__arrow", + "property": "top", + "kind": "render-property", + "value": "var(--td-popover-padding, var(--td-spacer-1, 24rpx))" + }, + { + "file": "packages/components/popover/popover.less", + "selector": ".t-popover.t-popover--placement-left-end .t-popover__arrow", + "property": "bottom", + "kind": "render-property", + "value": "var(--td-popover-padding, var(--td-spacer-1, 24rpx))" + }, + { + "file": "packages/components/popover/popover.less", + "selector": ".t-popover.t-popover--placement-right-start .t-popover__arrow", + "property": "top", + "kind": "render-property", + "value": "var(--td-popover-padding, var(--td-spacer-1, 24rpx))" + }, + { + "file": "packages/components/popover/popover.less", + "selector": ".t-popover.t-popover--placement-right-end .t-popover__arrow", + "property": "bottom", + "kind": "render-property", + "value": "var(--td-popover-padding, var(--td-spacer-1, 24rpx))" + } + ], + "nonLessReferences": [ + { + "file": "packages/components/popover/_example/base/index.wxss", + "line": 23, + "text": "--td-popover-padding: 0;" + } + ] + }, + "flutterNameLocators": { + "spacer1": [], + "padding": [ + "tdesign-component/lib/src/components/popover/t_popover_theme_data.dart:13", + "tdesign-component/lib/src/components/popover/t_popover_theme_data.dart:41", + "tdesign-component/lib/src/components/popover/t_popover_theme_data.dart:65", + "tdesign-component/lib/src/components/popover/t_popover_theme_data.dart:84", + "tdesign-component/lib/src/components/popover/t_popover_theme_data.dart:96", + "tdesign-component/lib/src/components/popover/t_popover_theme_data.dart:131", + "tdesign-component/lib/src/components/popover/t_popover_theme_data.dart:132", + "tdesign-component/lib/src/components/popover/t_popover_theme_data.dart:133", + "tdesign-component/lib/src/components/popover/t_popover.dart:515", + "tdesign-component/lib/src/components/popover/t_popover_widget.dart:30", + "tdesign-component/lib/src/components/popover/t_popover_widget.dart:61", + "tdesign-component/lib/src/components/popover/t_popover_widget.dart:134", + "tdesign-component/lib/src/components/popover/t_popover_widget.dart:399", + "tdesign-component/lib/src/components/popover/t_popover_widget.dart:716", + "tdesign-component/lib/src/components/popover/t_popover_widget.dart:717", + "tdesign-component/lib/src/components/popover/t_popover_widget.dart:719", + "tdesign-component/lib/src/components/popover/t_popover_widget.dart:725", + "tdesign-component/lib/src/components/popover/t_popover_widget.dart:748" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "popoverSuccessBgColor", + "component": "popover", + "previousDecision": "pending", + "frozenTarget": { + "light": "#e3f9e9", + "dark": "#193a2a", + "expressions": [ + "@success-color-1" + ], + "source": [ + "packages/components/popover/popover.less:21" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/popover/popover.less", + "selector": ".t-popover .t-popover--success", + "property": "background", + "kind": "render-property", + "value": "var(--td-popover-success-bg-color, var(--td-success-color-1, #e3f9e9))" + }, + { + "file": "packages/components/popover/popover.less", + "selector": ".t-popover .t-popover--success .t-popover__arrow", + "property": "color", + "kind": "render-property", + "value": "var(--td-popover-success-bg-color, var(--td-success-color-1, #e3f9e9))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "successColor1": [] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "popoverSuccessColor", + "component": "popover", + "previousDecision": "pending", + "frozenTarget": { + "light": "#2ba471", + "dark": "#059465", + "expressions": [ + "@success-color-5" + ], + "source": [ + "packages/components/popover/popover.less:20" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/popover/popover.less", + "selector": ".t-popover .t-popover--success", + "property": "color", + "kind": "render-property", + "value": "var(--td-popover-success-color, var(--td-success-color-5, #2ba471))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "successColor5": [] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "popoverWarningBgColor", + "component": "popover", + "previousDecision": "pending", + "frozenTarget": { + "light": "#fff1e9", + "dark": "#4f2a1d", + "expressions": [ + "@warning-color-1" + ], + "source": [ + "packages/components/popover/popover.less:23" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/popover/popover.less", + "selector": ".t-popover .t-popover--warning", + "property": "background", + "kind": "render-property", + "value": "var(--td-popover-warning-bg-color, var(--td-warning-color-1, #fff1e9))" + }, + { + "file": "packages/components/popover/popover.less", + "selector": ".t-popover .t-popover--warning .t-popover__arrow", + "property": "color", + "kind": "render-property", + "value": "var(--td-popover-warning-bg-color, var(--td-warning-color-1, #fff1e9))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "warningColor1": [] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "popoverWarningColor", + "component": "popover", + "previousDecision": "pending", + "frozenTarget": { + "light": "#e37318", + "dark": "#cf6e2d", + "expressions": [ + "@warning-color-5" + ], + "source": [ + "packages/components/popover/popover.less:22" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/popover/popover.less", + "selector": ".t-popover .t-popover--warning", + "property": "color", + "kind": "render-property", + "value": "var(--td-popover-warning-color, var(--td-warning-color-5, #e37318))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "warningColor5": [] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "popupBgColor", + "component": "popup", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(255, 255, 255, 1)", + "dark": "#242424", + "expressions": [ + "@bg-color-container" + ], + "source": [ + "packages/components/popup/popup.less:7" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/popup/popup.less", + "selector": ".t-popup", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-popup-bg-color, var(--td-bg-color-container, var(--td-font-white-1, #ffffff)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "bgColorContainer": [ + "tdesign-component/lib/src/components/popup/_popup_shell.dart:27" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "popupBorderRadius", + "component": "popup", + "previousDecision": "pending", + "frozenTarget": { + "light": "12dp", + "dark": "12dp", + "expressions": [ + "@radius-extraLarge" + ], + "source": [ + "packages/components/popup/popup.less:8" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/popup/popup.less", + "selector": ".t-popup--top", + "property": "border-bottom-left-radius", + "kind": "render-property", + "value": "var(--td-popup-border-radius, var(--td-radius-extraLarge, 24rpx))" + }, + { + "file": "packages/components/popup/popup.less", + "selector": ".t-popup--top", + "property": "border-bottom-right-radius", + "kind": "render-property", + "value": "var(--td-popup-border-radius, var(--td-radius-extraLarge, 24rpx))" + }, + { + "file": "packages/components/popup/popup.less", + "selector": ".t-popup--bottom", + "property": "border-top-left-radius", + "kind": "render-property", + "value": "var(--td-popup-border-radius, var(--td-radius-extraLarge, 24rpx))" + }, + { + "file": "packages/components/popup/popup.less", + "selector": ".t-popup--bottom", + "property": "border-top-right-radius", + "kind": "render-property", + "value": "var(--td-popup-border-radius, var(--td-radius-extraLarge, 24rpx))" + }, + { + "file": "packages/components/popup/popup.less", + "selector": ".t-popup--center", + "property": "border-radius", + "kind": "render-property", + "value": "var(--td-popup-border-radius, var(--td-radius-extraLarge, 24rpx))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "radiusExtraLarge": [ + "tdesign-component/lib/src/components/popup/_popup_shell.dart:26" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "popupCloseBtnColor", + "component": "popup", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.9)", + "dark": "rgba(255, 255, 255, 90%)", + "expressions": [ + "@text-color-primary" + ], + "source": [ + "packages/components/popup/popup.less:10" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/popup/popup.less", + "selector": ".t-popup__close", + "property": "color", + "kind": "render-property", + "value": "var(--td-popup-close-btn-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorPrimary": [ + "tdesign-component/lib/src/components/popup/_popup_header.dart:64" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/popup/t_popup_options_contract_test.dart:124", + "text": "expect(title.style?.color, token.textColorPrimary);", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "popupDistanceTop", + "component": "popup", + "previousDecision": "pending", + "frozenTarget": { + "light": "0", + "dark": "0", + "expressions": [ + "0" + ], + "source": [ + "packages/components/popup/popup.less:15" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/popup/popup.less", + "selector": ".t-popup", + "property": "max-height", + "kind": "render-property", + "value": "calc(100vh - var(--td-popup-distance-top, 0))" + } + ], + "nonLessReferences": [ + { + "file": "packages/components/popup/popup.wxs", + "line": 4, + "text": "zIndexStyle = zIndexStyle + 'top:' + distanceTop + 'px;' + '--td-popup-distance-top:' + distanceTop + 'px;';" + } + ] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "popupTransition", + "component": "popup", + "previousDecision": "pending", + "frozenTarget": { + "light": "all 300ms ease", + "dark": "all 300ms ease", + "expressions": [ + "all 300ms ease" + ], + "source": [ + "packages/components/popup/popup.less:16" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/popup/popup.less", + "selector": ".t-popup", + "property": "transition", + "kind": "render-property", + "value": "var(--td-popup-transition, all 300ms ease)" + } + ], + "nonLessReferences": [ + { + "file": "packages/components/popup/popup.wxs", + "line": 7, + "text": "zIndexStyle = zIndexStyle + '--td-popup-transition:all ' + duration + 'ms ease;';" + } + ] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "progressCircleIconSize", + "component": "progress", + "previousDecision": "pending", + "frozenTarget": { + "light": "48dp", + "dark": "48dp", + "expressions": [ + "96rpx" + ], + "source": [ + "packages/components/progress/progress.less:7" + ] + }, + "compiledSource": { + "conclusion": "no-consumer-in-compiled-css-or-other-source", + "selectors": [], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "no-frozen-source-consumer-found", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [], + "finalPaintVerified": false + }, + { + "name": "progressCircleInnerBgColor", + "component": "progress", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(255, 255, 255, 1)", + "dark": "var(--bg-color-page)", + "expressions": [ + "@bg-color-container" + ], + "source": [ + "packages/components/progress/progress.less:41" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/progress/progress.less", + "selector": ".t-progress__canvas--circle .t-progress__canvas--inner", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-progress-circle-inner-bg-color, var(--td-bg-color-container, var(--td-font-white-1, #ffffff)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "bgColorContainer": [ + "tdesign-component/lib/src/components/progress/t_progress.dart:272" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/progress/t_progress_test.dart:1193", + "observedScenariosPerSdk": 4, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": "Dark frozen CSS forwards undefined --bg-color-page; transparent without host definition is the existing documented adjudication. Host CSS overrides are outside this Flutter default test.", + "candidateExistingTests": [], + "requiredEvidence": [ + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "progressCircleLabelFont", + "component": "progress", + "previousDecision": "pending", + "frozenTarget": { + "light": "600 20dp / 28dp\n PingFang SC, Microsoft YaHei, Arial Regular", + "dark": "600 20dp / 28dp\n PingFang SC, Microsoft YaHei, Arial Regular", + "expressions": [ + "@font-title-extraLarge" + ], + "source": [ + "packages/components/progress/progress.less:11" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/progress/progress.less", + "selector": ".t-progress__canvas--circle .t-progress__info", + "property": "font", + "kind": "render-property", + "value": "var(--td-progress-circle-label-font, var(--td-font-title-extraLarge, 600 40rpx / 56rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "fontTitleExtraLarge": [ + "tdesign-component/lib/src/components/progress/t_progress.dart:283", + "tdesign-component/lib/src/components/progress/t_progress.dart:900" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/progress/t_progress_test.dart:1193", + "observedScenariosPerSdk": 4, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "progressCircleWidth", + "component": "progress", + "previousDecision": "pending", + "frozenTarget": { + "light": "112dp", + "dark": "112dp", + "expressions": [ + "224rpx" + ], + "source": [ + "packages/components/progress/progress.less:9" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/progress/progress.less", + "selector": ".t-progress__canvas--circle", + "property": "width", + "kind": "render-property", + "value": "var(--td-progress-circle-width, 224rpx)" + }, + { + "file": "packages/components/progress/progress.less", + "selector": ".t-progress__canvas--circle", + "property": "height", + "kind": "render-property", + "value": "var(--td-progress-circle-width, 224rpx)" + } + ], + "nonLessReferences": [ + { + "file": "packages/components/progress/progress.wxs", + "line": 64, + "text": "styles['--td-progress-circle-width'] = utils.addUnit(size);" + } + ] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/progress/t_progress_test.dart:1193", + "observedScenariosPerSdk": 4, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "progressInnerBgColor", + "component": "progress", + "previousDecision": "pending", + "frozenTarget": { + "light": "#0052d9", + "dark": "#4582e6", + "expressions": [ + "@brand-color" + ], + "source": [ + "packages/components/progress/progress.less:16" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/progress/progress.less", + "selector": ".t-progress__inner", + "property": "background", + "kind": "render-property", + "value": "var(--td-progress-inner-bg-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + } + ], + "nonLessReferences": [ + { + "file": "packages/components/progress/progress.wxml", + "line": 79, + "text": "style=\"{{_this.getCircleStyle(size, heightBar)}}; background-image: conic-gradient(from var(--td-progress-circle-from), {{colorCircle || _this.STATUS_COLOR[status] || 'var(--td-progress-inner-bg-color)'}} {{computedProgress}}%, {{bgColorBar || 'var(--td-progress-track-bg-color)'}} 0%);\"" + } + ] + }, + "flutterNameLocators": { + "brandColor": [ + "tdesign-component/lib/src/components/progress/t_progress.dart:406", + "tdesign-component/lib/src/components/progress/t_progress.dart:417", + "tdesign-component/lib/src/components/progress/t_progress.dart:571" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/progress/t_progress_test.dart:1193", + "observedScenariosPerSdk": 12, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "progressLineStrokeWidth", + "component": "progress", + "previousDecision": "pending", + "frozenTarget": { + "light": "6dp", + "dark": "6dp", + "expressions": [ + "12rpx" + ], + "source": [ + "packages/components/progress/progress.less:3" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/progress/progress.less", + "selector": ".t-progress__bar", + "property": "height", + "kind": "render-property", + "value": "var(--td-progress-line-stroke-width, 12rpx)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/progress/t_progress_test.dart:1193", + "observedScenariosPerSdk": 4, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "progressStrokeCircleWidth", + "component": "progress", + "previousDecision": "pending", + "frozenTarget": { + "light": "6dp", + "dark": "6dp", + "expressions": [ + "12rpx" + ], + "source": [ + "packages/components/progress/progress.less:5" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/progress/progress.less", + "selector": ".t-progress__canvas--circle .t-progress__canvas--inner", + "property": "width", + "kind": "render-property", + "value": "calc(100% - var(--td-progress-stroke-circle-width, 12rpx)*2)" + }, + { + "file": "packages/components/progress/progress.less", + "selector": ".t-progress__canvas--circle .t-progress__canvas--inner", + "property": "height", + "kind": "render-property", + "value": "calc(100% - var(--td-progress-stroke-circle-width, 12rpx)*2)" + } + ], + "nonLessReferences": [ + { + "file": "packages/components/progress/progress.wxs", + "line": 60, + "text": "'--td-progress-stroke-circle-width': utils.addUnit(strokeWidth)," + } + ] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/progress/t_progress_test.dart:1193", + "observedScenariosPerSdk": 4, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "progressStrokePlumpWidth", + "component": "progress", + "previousDecision": "pending", + "frozenTarget": { + "light": "20dp", + "dark": "20dp", + "expressions": [ + "40rpx" + ], + "source": [ + "packages/components/progress/progress.less:4" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/progress/progress.less", + "selector": ".t-progress--plump", + "property": "height", + "kind": "render-property", + "value": "var(--td-progress-stroke-plump-width, 40rpx)" + }, + { + "file": "packages/components/progress/progress.less", + "selector": ".t-progress--plump", + "property": "border-radius", + "kind": "render-property", + "value": "calc(var(--td-progress-stroke-plump-width, 40rpx) / 2)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/progress/t_progress_test.dart:1193", + "observedScenariosPerSdk": 4, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "progressTrackBgColor", + "component": "progress", + "previousDecision": "pending", + "frozenTarget": { + "light": "#e7e7e7", + "dark": "#383838", + "expressions": [ + "@bg-color-component" + ], + "source": [ + "packages/components/progress/progress.less:15" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/progress/progress.less", + "selector": ".t-progress__bar", + "property": "background", + "kind": "render-property", + "value": "var(--td-progress-track-bg-color, var(--td-bg-color-component, var(--td-gray-color-3, #e7e7e7)))" + } + ], + "nonLessReferences": [ + { + "file": "packages/components/progress/progress.wxml", + "line": 79, + "text": "style=\"{{_this.getCircleStyle(size, heightBar)}}; background-image: conic-gradient(from var(--td-progress-circle-from), {{colorCircle || _this.STATUS_COLOR[status] || 'var(--td-progress-inner-bg-color)'}} {{computedProgress}}%, {{bgColorBar || 'var(--td-progress-track-bg-color)'}} 0%);\"" + } + ] + }, + "flutterNameLocators": { + "bgColorComponent": [ + "tdesign-component/lib/src/components/progress/t_progress.dart:377", + "tdesign-component/lib/src/components/progress/t_progress.dart:384", + "tdesign-component/lib/src/components/progress/t_progress.dart:391", + "tdesign-component/lib/src/components/progress/t_progress.dart:399" + ] + }, + "approvedGlobalException": "引用已批准修正的浅色 grayColor3", + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/progress/t_progress_test.dart:1193", + "observedScenariosPerSdk": 12, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "radioBgColor", + "component": "radio", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(255, 255, 255, 1)", + "dark": "#242424", + "expressions": [ + "@bg-color-container" + ], + "source": [ + "packages/components/radio/radio.less:7" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/radio/radio.less", + "selector": ".t-radio", + "property": "background", + "kind": "render-property", + "value": "var(--td-radio-bg-color, var(--td-bg-color-container, var(--td-font-white-1, #ffffff)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "bgColorContainer": [ + "tdesign-component/lib/src/components/radio/t_radio.dart:219", + "tdesign-component/lib/src/components/radio/t_radio.dart:249", + "tdesign-component/lib/src/components/radio/t_radio.dart:706" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/radio/t_radio_test.dart:238", + "text": "widget.color == TThemeData.defaultData().bgColorContainer,", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "radioBorderColor", + "component": "radio", + "previousDecision": "pending", + "frozenTarget": { + "light": "#e7e7e7", + "dark": "#383838", + "expressions": [ + "@component-stroke" + ], + "source": [ + "packages/components/radio/radio.less:8" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/radio/radio.less", + "selector": ".t-radio__border", + "property": "background", + "kind": "render-property", + "value": "var(--td-radio-border-color, var(--td-component-stroke, var(--td-gray-color-3, #e7e7e7)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "componentStroke": [] + }, + "approvedGlobalException": "引用已批准修正的浅色 grayColor3", + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "radioContentCheckedColor", + "component": "radio", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.6)", + "dark": "rgba(255, 255, 255, 55%)", + "expressions": [ + "@text-color-secondary" + ], + "source": [ + "packages/components/radio/radio.less:14" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/radio/radio.less", + "selector": ".t-radio__description--checked", + "property": "color", + "kind": "render-property", + "value": "var(--td-radio-content-checked-color, var(--td-text-color-secondary, var(--td-font-gray-2, rgba(0, 0, 0, 0.6))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorSecondary": [ + "tdesign-component/lib/src/components/radio/t_radio.dart:410" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/radio/t_radio_test.dart:573", + "text": "expect(subTitle.style?.color, token.textColorSecondary);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/radio/t_radio_test.dart:698", + "text": "expect(subTitle.style?.color, token.textColorSecondary);", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "radioContentColor", + "component": "radio", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.6)", + "dark": "rgba(255, 255, 255, 55%)", + "expressions": [ + "@text-color-secondary" + ], + "source": [ + "packages/components/radio/radio.less:12" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/radio/radio.less", + "selector": ".t-radio__description", + "property": "color", + "kind": "render-property", + "value": "var(--td-radio-content-color, var(--td-text-color-secondary, var(--td-font-gray-2, rgba(0, 0, 0, 0.6))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorSecondary": [ + "tdesign-component/lib/src/components/radio/t_radio.dart:410" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/radio/t_radio_test.dart:573", + "text": "expect(subTitle.style?.color, token.textColorSecondary);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/radio/t_radio_test.dart:698", + "text": "expect(subTitle.style?.color, token.textColorSecondary);", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "radioContentDisabledColor", + "component": "radio", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.26)", + "dark": "rgba(255, 255, 255, 22%)", + "expressions": [ + "@text-color-disabled" + ], + "source": [ + "packages/components/radio/radio.less:13" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/radio/radio.less", + "selector": ".t-radio__description--disabled", + "property": "color", + "kind": "render-property", + "value": "var(--td-radio-content-disabled-color, var(--td-text-color-disabled, var(--td-font-gray-4, rgba(0, 0, 0, 0.26))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorDisabled": [ + "tdesign-component/lib/src/components/radio/t_radio.dart:397", + "tdesign-component/lib/src/components/radio/t_radio.dart:409" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/radio/t_radio_test.dart:699", + "text": "expect(disabledTitle.style?.color, token.textColorDisabled);", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "radioContentFont", + "component": "radio", + "previousDecision": "pending", + "frozenTarget": { + "light": "14dp / 22dp PingFang SC, Microsoft YaHei, Arial Regular", + "dark": "14dp / 22dp PingFang SC, Microsoft YaHei, Arial Regular", + "expressions": [ + "@font-body-medium" + ], + "source": [ + "packages/components/radio/radio.less:20" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/radio/radio.less", + "selector": ".t-radio__description", + "property": "font", + "kind": "render-property", + "value": "var(--td-radio-content-font, var(--td-font-body-medium, 28rpx / 44rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "fontBodyMedium": [ + "tdesign-component/lib/src/components/radio/t_radio.dart:368" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "radioFont", + "component": "radio", + "previousDecision": "pending", + "frozenTarget": { + "light": "16dp / 24dp PingFang SC, Microsoft YaHei, Arial Regular", + "dark": "16dp / 24dp PingFang SC, Microsoft YaHei, Arial Regular", + "expressions": [ + "@font-body-large" + ], + "source": [ + "packages/components/radio/radio.less:4" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/radio/radio.less", + "selector": ".t-radio__title", + "property": "font", + "kind": "render-property", + "value": "var(--td-radio-font, var(--td-font-body-large, 32rpx / 48rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "fontBodyLarge": [ + "tdesign-component/lib/src/components/radio/t_radio.dart:359" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/radio/t_radio_test.dart:534", + "text": "TThemeData.defaultData().fontBodyLarge?.size,", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/radio/t_radio_test.dart:538", + "text": "TThemeData.defaultData().fontBodyLarge?.height,", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/radio/t_radio_test.dart:542", + "text": "TThemeData.defaultData().fontBodyLarge?.fontWeight,", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "radioIconCheckedColor", + "component": "radio", + "previousDecision": "pending", + "frozenTarget": { + "light": "#0052d9", + "dark": "#4582e6", + "expressions": [ + "@brand-color" + ], + "source": [ + "packages/components/radio/radio.less:18" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/radio/radio.less", + "selector": ".t-radio__icon--checked", + "property": "color", + "kind": "render-property", + "value": "var(--td-radio-icon-checked-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + }, + { + "file": "packages/components/radio/radio.less", + "selector": ".t-radio__icon-line::before,\n.t-radio__icon-line::after", + "property": "background", + "kind": "render-property", + "value": "var(--td-radio-icon-checked-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + }, + { + "file": "packages/components/radio/radio.less", + "selector": ".t-radio__icon-dot", + "property": "border", + "kind": "render-property", + "value": "6rpx solid var(--td-radio-icon-checked-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + }, + { + "file": "packages/components/radio/radio.less", + "selector": ".t-radio__icon-dot::after", + "property": "background", + "kind": "render-property", + "value": "var(--td-radio-icon-checked-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "brandColor": [ + "tdesign-component/lib/src/components/radio/t_radio.dart:245", + "tdesign-component/lib/src/components/radio/t_radio.dart:328" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/radio/t_radio_test.dart:599", + "text": "expect(selectedIcon.color, token.brandColor);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/radio/t_radio_test.dart:643", + "text": "expect(checkIcon.color, token.brandColor);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/radio/t_radio_test.dart:645", + "text": "expect(fillIcon.color, token.brandColor);", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "radioIconColor", + "component": "radio", + "previousDecision": "pending", + "frozenTarget": { + "light": "#dcdcdc", + "dark": "#5e5e5e", + "expressions": [ + "@component-border" + ], + "source": [ + "packages/components/radio/radio.less:15" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/radio/radio.less", + "selector": ".t-radio__icon", + "property": "color", + "kind": "render-property", + "value": "var(--td-radio-icon-color, var(--td-component-border, var(--td-gray-color-4, #dcdcdc)))" + }, + { + "file": "packages/components/radio/radio.less", + "selector": ".t-radio__icon-circle::after", + "property": "border", + "kind": "render-property", + "value": "3px solid var(--td-radio-icon-color, var(--td-component-border, var(--td-gray-color-4, #dcdcdc)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "componentBorder": [ + "tdesign-component/lib/src/components/radio/t_radio.dart:326", + "tdesign-component/lib/src/components/radio/t_radio.dart:329" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/radio/t_radio_test.dart:690", + "text": "expect(painters.first.color, token.componentBorder);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/radio/t_radio_test.dart:693", + "text": "expect(painters.last.color, token.componentBorder);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/radio/t_radio_test.dart:695", + "text": "expect(token.componentBorder, const Color(0xFFDCDCDC));", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "radioIconDisabledBgColor", + "component": "radio", + "previousDecision": "pending", + "frozenTarget": { + "light": "#eeeeee", + "dark": "#2c2c2c", + "expressions": [ + "@bg-color-component-disabled" + ], + "source": [ + "packages/components/radio/radio.less:17" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/radio/radio.less", + "selector": ".t-radio__icon-circle--disabled::after", + "property": "background", + "kind": "render-property", + "value": "var(--td-radio-icon-disabled-bg-color, var(--td-bg-color-component-disabled, var(--td-gray-color-2, #eeeeee)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "bgColorComponentDisabled": [ + "tdesign-component/lib/src/components/radio/t_radio.dart:351" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/radio/t_radio_test.dart:694", + "text": "expect(painters.last.backgroundColor, token.bgColorComponentDisabled);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/radio/t_radio_test.dart:696", + "text": "expect(token.bgColorComponentDisabled, const Color(0xFFEEEEEE));", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "radioIconDisabledColor", + "component": "radio", + "previousDecision": "pending", + "frozenTarget": { + "light": "#b5c7ff", + "dark": "#143975", + "expressions": [ + "@brand-color-disabled" + ], + "source": [ + "packages/components/radio/radio.less:16" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/radio/radio.less", + "selector": ".t-radio__icon--disabled", + "property": "color", + "kind": "render-property", + "value": "var(--td-radio-icon-disabled-color, var(--td-brand-color-disabled, var(--td-primary-color-3, #b5c7ff)))" + }, + { + "file": "packages/components/radio/radio.less", + "selector": ".t-radio__icon-line--disabled::before,\n.t-radio__icon-line--disabled::after", + "property": "background", + "kind": "render-property", + "value": "var(--td-radio-icon-disabled-color, var(--td-brand-color-disabled, var(--td-primary-color-3, #b5c7ff)))" + }, + { + "file": "packages/components/radio/radio.less", + "selector": ".t-radio__icon-dot--disabled", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-radio-icon-disabled-color, var(--td-brand-color-disabled, var(--td-primary-color-3, #b5c7ff)))" + }, + { + "file": "packages/components/radio/radio.less", + "selector": ".t-radio__icon-dot--disabled::after", + "property": "background", + "kind": "render-property", + "value": "var(--td-radio-icon-disabled-color, var(--td-brand-color-disabled, var(--td-primary-color-3, #b5c7ff)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "brandColorDisabled": [ + "tdesign-component/lib/src/components/radio/t_radio.dart:247", + "tdesign-component/lib/src/components/radio/t_radio.dart:325" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/radio/t_radio_test.dart:697", + "text": "expect(disabledIcon.color, token.brandColorDisabled);", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "radioIconSize", + "component": "radio", + "previousDecision": "pending", + "frozenTarget": { + "light": "24dp", + "dark": "24dp", + "expressions": [ + "48rpx" + ], + "source": [ + "packages/components/radio/radio.less:3" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/radio/radio.less", + "selector": ".t-radio__icon", + "property": "margin-top", + "kind": "render-property", + "value": "calc((var(--td-radio-label-line-height, var(--td-line-height-title-medium, 48rpx)) - var(--td-radio-icon-size, 48rpx)) / 2)" + }, + { + "file": "packages/components/radio/radio.less", + "selector": ".t-radio__icon", + "property": "width", + "kind": "render-property", + "value": "var(--td-radio-icon-size, 48rpx)" + }, + { + "file": "packages/components/radio/radio.less", + "selector": ".t-radio__icon", + "property": "height", + "kind": "render-property", + "value": "var(--td-radio-icon-size, 48rpx)" + }, + { + "file": "packages/components/radio/radio.less", + "selector": ".t-radio__icon", + "property": "font-size", + "kind": "render-property", + "value": "var(--td-radio-icon-size, 48rpx)" + }, + { + "file": "packages/components/radio/radio.less", + "selector": ".t-radio__icon-circle", + "property": "width", + "kind": "render-property", + "value": "var(--td-radio-icon-size, 48rpx)" + }, + { + "file": "packages/components/radio/radio.less", + "selector": ".t-radio__icon-circle", + "property": "height", + "kind": "render-property", + "value": "var(--td-radio-icon-size, 48rpx)" + }, + { + "file": "packages/components/radio/radio.less", + "selector": ".t-radio__icon-dot", + "property": "width", + "kind": "render-property", + "value": "calc((var(--td-radio-icon-size, 48rpx) - 6rpx) * 2)" + }, + { + "file": "packages/components/radio/radio.less", + "selector": ".t-radio__icon-dot", + "property": "height", + "kind": "render-property", + "value": "calc((var(--td-radio-icon-size, 48rpx) - 6rpx) * 2)" + }, + { + "file": "packages/components/radio/radio.less", + "selector": ".t-radio__icon-dot::after", + "property": "width", + "kind": "render-property", + "value": "var(--td-radio-icon-size, 48rpx)" + }, + { + "file": "packages/components/radio/radio.less", + "selector": ".t-radio__icon-dot::after", + "property": "height", + "kind": "render-property", + "value": "var(--td-radio-icon-size, 48rpx)" + }, + { + "file": "packages/components/radio/radio.less", + "selector": ".t-radio__image", + "property": "line-height", + "kind": "render-property", + "value": "var(--td-radio-icon-size, 48rpx)" + }, + { + "file": "packages/components/radio/radio.less", + "selector": ".t-radio-icon__image", + "property": "height", + "kind": "render-property", + "value": "var(--td-radio-icon-size, 48rpx)" + }, + { + "file": "packages/components/radio/radio.less", + "selector": ".t-radio-icon__image", + "property": "width", + "kind": "render-property", + "value": "var(--td-radio-icon-size, 48rpx)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "radioLabelCheckedColor", + "component": "radio", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.9)", + "dark": "rgba(255, 255, 255, 90%)", + "expressions": [ + "@text-color-primary" + ], + "source": [ + "packages/components/radio/radio.less:11" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/radio/radio.less", + "selector": ".t-radio__title--checked", + "property": "color", + "kind": "render-property", + "value": "var(--td-radio-label-checked-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorPrimary": [ + "tdesign-component/lib/src/components/radio/t_radio.dart:398" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/radio/t_radio_test.dart:572", + "text": "expect(title.style?.color, token.textColorPrimary);", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "radioLabelColor", + "component": "radio", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.9)", + "dark": "rgba(255, 255, 255, 90%)", + "expressions": [ + "@text-color-primary" + ], + "source": [ + "packages/components/radio/radio.less:9" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/radio/radio.less", + "selector": ".t-radio__title", + "property": "color", + "kind": "render-property", + "value": "var(--td-radio-label-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorPrimary": [ + "tdesign-component/lib/src/components/radio/t_radio.dart:398" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/radio/t_radio_test.dart:572", + "text": "expect(title.style?.color, token.textColorPrimary);", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "radioLabelDisabledColor", + "component": "radio", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.26)", + "dark": "rgba(255, 255, 255, 22%)", + "expressions": [ + "@text-color-disabled" + ], + "source": [ + "packages/components/radio/radio.less:10" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/radio/radio.less", + "selector": ".t-radio__title--disabled", + "property": "color", + "kind": "render-property", + "value": "var(--td-radio-label-disabled-color, var(--td-text-color-disabled, var(--td-font-gray-4, rgba(0, 0, 0, 0.26))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorDisabled": [ + "tdesign-component/lib/src/components/radio/t_radio.dart:397", + "tdesign-component/lib/src/components/radio/t_radio.dart:409" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/radio/t_radio_test.dart:699", + "text": "expect(disabledTitle.style?.color, token.textColorDisabled);", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "radioLabelLineHeight", + "component": "radio", + "previousDecision": "pending", + "frozenTarget": { + "light": "24dp", + "dark": "24dp", + "expressions": [ + "@text-line-height-m" + ], + "source": [ + "packages/components/radio/radio.less:5" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/radio/radio.less", + "selector": ".t-radio__icon", + "property": "margin-top", + "kind": "render-property", + "value": "calc((var(--td-radio-label-line-height, var(--td-line-height-title-medium, 48rpx)) - var(--td-radio-icon-size, 48rpx)) / 2)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "radioVerticalPadding", + "component": "radio", + "previousDecision": "pending", + "frozenTarget": { + "light": "16dp", + "dark": "16dp", + "expressions": [ + "@spacer-2" + ], + "source": [ + "packages/components/radio/radio.less:6" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/radio/radio.less", + "selector": ".t-radio--block", + "property": "padding", + "kind": "render-property", + "value": "var(--td-radio-vertical-padding, var(--td-spacer-2, 32rpx))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "spacer2": [ + "tdesign-component/lib/src/components/radio/t_radio.dart:207", + "tdesign-component/lib/src/components/radio/t_radio.dart:284", + "tdesign-component/lib/src/components/radio/t_radio.dart:290", + "tdesign-component/lib/src/components/radio/t_radio.dart:312", + "tdesign-component/lib/src/components/radio/t_radio.dart:609", + "tdesign-component/lib/src/components/radio/t_radio.dart:695", + "tdesign-component/lib/src/components/radio/t_radio.dart:698" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "rateIconScale", + "component": "rate", + "previousDecision": "pending", + "frozenTarget": { + "light": "1.33", + "dark": "1.33", + "expressions": [ + "1.33" + ], + "source": [ + "packages/components/rate/rate.less:9" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/rate/rate.less", + "selector": ".t-rate__icon--current", + "property": "transform", + "kind": "render-property", + "value": "scale(var(--td-rate-icon-scale, 1.33))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "rateSelectedColor", + "component": "rate", + "previousDecision": "pending", + "frozenTarget": { + "light": "#e37318", + "dark": "#cf6e2d", + "expressions": [ + "@warning-color" + ], + "source": [ + "packages/components/rate/rate.less:6" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/rate/rate.less", + "selector": ".t-rate__icon--selected", + "property": "color", + "kind": "render-property", + "value": "var(--td-rate-selected-color, var(--td-warning-color, var(--td-warning-color-5, #e37318)))" + }, + { + "file": "packages/components/rate/rate.less", + "selector": ".t-rate__icon--selected-half", + "property": "background", + "kind": "render-property", + "value": "linear-gradient(to right, var(--td-rate-selected-color, var(--td-warning-color, var(--td-warning-color-5, #e37318))) 0%, var(--td-rate-selected-color, var(--td-warning-color, var(--td-warning-color-5, #e37318))) 50%, var(--td-rate-unselected-color, var(--td-component-border, var(--td-gray-color-4, #dcdcdc))) 51%, var(--td-rate-unselected-color, var(--td-component-border, var(--td-gray-color-4, #dcdcdc))) 100%)" + } + ], + "nonLessReferences": [ + { + "file": "packages/components/rate/_example/color/index.wxss", + "line": 2, + "text": "--td-rate-selected-color: #f96102;" + }, + { + "file": "packages/components/rate/rate.wxs", + "line": 52, + "text": "return ';--td-rate-selected-color: ' + color[0] + '; --td-rate-unselected-color: ' + color[1];" + }, + { + "file": "packages/components/rate/rate.wxs", + "line": 56, + "text": "return ';--td-rate-selected-color: ' + color;" + } + ] + }, + "flutterNameLocators": { + "warningColor": [] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "rateTextActiveColor", + "component": "rate", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.9)", + "dark": "rgba(255, 255, 255, 90%)", + "expressions": [ + "@text-color-primary" + ], + "source": [ + "packages/components/rate/rate.less:5" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/rate/rate.less", + "selector": ".t-rate__text--active", + "property": "color", + "kind": "render-property", + "value": "var(--td-rate-text-active-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorPrimary": [ + "tdesign-component/lib/src/components/rate/t_rate.dart:317" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "rateTextActiveFontWeight", + "component": "rate", + "previousDecision": "pending", + "frozenTarget": { + "light": "600", + "dark": "600", + "expressions": [ + "600" + ], + "source": [ + "packages/components/rate/rate.less:8" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/rate/rate.less", + "selector": ".t-rate__text--active", + "property": "font-weight", + "kind": "render-property", + "value": "var(--td-rate-text-active-font-weight, 600)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "rateTextColor", + "component": "rate", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.26)", + "dark": "rgba(255, 255, 255, 22%)", + "expressions": [ + "@text-color-disabled" + ], + "source": [ + "packages/components/rate/rate.less:4" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/rate/rate.less", + "selector": ".t-rate__text", + "property": "color", + "kind": "render-property", + "value": "var(--td-rate-text-color, var(--td-text-color-disabled, var(--td-font-gray-4, rgba(0, 0, 0, 0.26))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorDisabled": [ + "tdesign-component/lib/src/components/rate/t_rate.dart:312", + "tdesign-component/lib/src/components/rate/t_rate.dart:318", + "tdesign-component/lib/src/components/rate/t_rate.dart:335" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/rate/t_rate_test.dart:770", + "text": "expect(token.textColorDisabled, const Color(0x42000000));", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/rate/t_rate_test.dart:773", + "text": "token.textColorDisabled,", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/rate/t_rate_test.dart:799", + "text": "token.textColorDisabled,", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/rate/t_rate_test.dart:836", + "text": "TThemeData.defaultData().textColorDisabled,", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "rateTextFontSize", + "component": "rate", + "previousDecision": "pending", + "frozenTarget": { + "light": "16dp", + "dark": "16dp", + "expressions": [ + "@font-size-m" + ], + "source": [ + "packages/components/rate/rate.less:3" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/rate/rate.less", + "selector": ".t-rate__text", + "property": "font-size", + "kind": "render-property", + "value": "var(--td-rate-text-font-size, var(--td-font-size-m, 32rpx))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "fontSizeM": [] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "rateUnselectedColor", + "component": "rate", + "previousDecision": "pending", + "frozenTarget": { + "light": "#dcdcdc", + "dark": "#5e5e5e", + "expressions": [ + "@component-border" + ], + "source": [ + "packages/components/rate/rate.less:7" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/rate/rate.less", + "selector": ".t-rate__icon--selected-half", + "property": "background", + "kind": "render-property", + "value": "linear-gradient(to right, var(--td-rate-selected-color, var(--td-warning-color, var(--td-warning-color-5, #e37318))) 0%, var(--td-rate-selected-color, var(--td-warning-color, var(--td-warning-color-5, #e37318))) 50%, var(--td-rate-unselected-color, var(--td-component-border, var(--td-gray-color-4, #dcdcdc))) 51%, var(--td-rate-unselected-color, var(--td-component-border, var(--td-gray-color-4, #dcdcdc))) 100%)" + }, + { + "file": "packages/components/rate/rate.less", + "selector": ".t-rate__icon--unselected", + "property": "color", + "kind": "render-property", + "value": "var(--td-rate-unselected-color, var(--td-component-border, var(--td-gray-color-4, #dcdcdc)))" + } + ], + "nonLessReferences": [ + { + "file": "packages/components/rate/_example/color/index.wxss", + "line": 3, + "text": "--td-rate-unselected-color: #bbbbbb;" + }, + { + "file": "packages/components/rate/rate.wxs", + "line": 52, + "text": "return ';--td-rate-selected-color: ' + color[0] + '; --td-rate-unselected-color: ' + color[1];" + } + ] + }, + "flutterNameLocators": { + "componentBorder": [] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "resultDescriptionColor", + "component": "result", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.6)", + "dark": "rgba(255, 255, 255, 55%)", + "expressions": [ + "@text-color-secondary" + ], + "source": [ + "packages/components/result/result.less:9" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/result/result.less", + "selector": ".t-result__description", + "property": "color", + "kind": "render-property", + "value": "var(--td-result-description-color, var(--td-text-color-secondary, var(--td-font-gray-2, rgba(0, 0, 0, 0.6))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorSecondary": [ + "tdesign-component/lib/src/components/result/t_result.dart:72" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/result/t_result_test.dart:68", + "text": "token.textColorSecondary,", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "resultDescriptionFont", + "component": "result", + "previousDecision": "pending", + "frozenTarget": { + "light": "14dp / 22dp PingFang SC, Microsoft YaHei, Arial Regular", + "dark": "14dp / 22dp PingFang SC, Microsoft YaHei, Arial Regular", + "expressions": [ + "@font-body-medium" + ], + "source": [ + "packages/components/result/result.less:8" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/result/result.less", + "selector": ".t-result__description", + "property": "font", + "kind": "render-property", + "value": "var(--td-result-description-font, var(--td-font-body-medium, 28rpx / 44rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "fontBodyMedium": [ + "tdesign-component/lib/src/components/result/t_result.dart:73" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/result/t_result_test.dart:70", + "text": "expect(description.font, token.fontBodyMedium);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/result/t_result_test.dart:185", + "text": "expect(description.font, TThemeData.defaultData().fontBodyMedium);", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "resultDescriptionMarginTop", + "component": "result", + "previousDecision": "pending", + "frozenTarget": { + "light": "8dp", + "dark": "8dp", + "expressions": [ + "@spacer" + ], + "source": [ + "packages/components/result/result.less:17" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/result/result.less", + "selector": ".t-result__title + .t-result__description:not(:empty)", + "property": "margin-top", + "kind": "render-property", + "value": "var(--td-result-description-margin-top, var(--td-spacer, 16rpx))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "spacer": [] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "resultIconDefaultColor", + "component": "result", + "previousDecision": "pending", + "frozenTarget": { + "light": "#0052d9", + "dark": "#4582e6", + "expressions": [ + "@brand-color" + ], + "source": [ + "packages/components/result/result.less:11" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/result/result.less", + "selector": ".t-result--theme-default", + "property": "color", + "kind": "render-property", + "value": "var(--td-result-icon-default-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "brandColor": [ + "tdesign-component/lib/src/components/result/t_result.dart:131" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/result/t_result_test.dart:35", + "text": "expect(icon.color, token.brandColor);", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "resultIconErrorColor", + "component": "result", + "previousDecision": "pending", + "frozenTarget": { + "light": "#d54941", + "dark": "#c64751", + "expressions": [ + "@error-color" + ], + "source": [ + "packages/components/result/result.less:14" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/result/result.less", + "selector": ".t-result--theme-error", + "property": "color", + "kind": "render-property", + "value": "var(--td-result-icon-error-color, var(--td-error-color, var(--td-error-color-6, #d54941)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "errorColor": [ + "tdesign-component/lib/src/components/result/t_result.dart:125" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/result/t_result_test.dart:122", + "text": "expect(icon.color, token.errorColor);", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "resultIconSuccessColor", + "component": "result", + "previousDecision": "pending", + "frozenTarget": { + "light": "#2ba471", + "dark": "#059465", + "expressions": [ + "@success-color" + ], + "source": [ + "packages/components/result/result.less:12" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/result/result.less", + "selector": ".t-result--theme-success", + "property": "color", + "kind": "render-property", + "value": "var(--td-result-icon-success-color, var(--td-success-color, var(--td-success-color-5, #2ba471)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "successColor": [ + "tdesign-component/lib/src/components/result/t_result.dart:113" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/result/t_result_test.dart:99", + "text": "expect(icon.color, token.successColor);", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "resultIconWarningColor", + "component": "result", + "previousDecision": "pending", + "frozenTarget": { + "light": "#e37318", + "dark": "#cf6e2d", + "expressions": [ + "@warning-color" + ], + "source": [ + "packages/components/result/result.less:13" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/result/result.less", + "selector": ".t-result--theme-warning", + "property": "color", + "kind": "render-property", + "value": "var(--td-result-icon-warning-color, var(--td-warning-color, var(--td-warning-color-5, #e37318)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "warningColor": [ + "tdesign-component/lib/src/components/result/t_result.dart:119" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/result/t_result_test.dart:112", + "text": "expect(icon.color, token.warningColor);", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "resultTitleColor", + "component": "result", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.9)", + "dark": "rgba(255, 255, 255, 90%)", + "expressions": [ + "@text-color-primary" + ], + "source": [ + "packages/components/result/result.less:6" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/result/result.less", + "selector": ".t-result__title", + "property": "color", + "kind": "render-property", + "value": "var(--td-result-title-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorPrimary": [ + "tdesign-component/lib/src/components/result/t_result.dart:63" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/result/t_result_test.dart:49", + "text": "token.textColorPrimary,", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "resultTitleFont", + "component": "result", + "previousDecision": "pending", + "frozenTarget": { + "light": "600 20dp / 28dp\n PingFang SC, Microsoft YaHei, Arial Regular", + "dark": "600 20dp / 28dp\n PingFang SC, Microsoft YaHei, Arial Regular", + "expressions": [ + "@font-title-extraLarge" + ], + "source": [ + "packages/components/result/result.less:5" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/result/result.less", + "selector": ".t-result__title", + "property": "font", + "kind": "render-property", + "value": "var(--td-result-title-font, var(--td-font-title-extraLarge, 600 40rpx / 56rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "fontTitleExtraLarge": [] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "resultTitleMarginTop", + "component": "result", + "previousDecision": "pending", + "frozenTarget": { + "light": "12dp", + "dark": "12dp", + "expressions": [ + "@spacer-1" + ], + "source": [ + "packages/components/result/result.less:16" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/result/result.less", + "selector": ".t-result__thumb:not(:empty) + .t-result__title:not(:empty)", + "property": "margin-top", + "kind": "render-property", + "value": "var(--td-result-title-margin-top, var(--td-spacer-1, 24rpx))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "spacer1": [ + "tdesign-component/lib/src/components/result/t_result.dart:88" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "searchActionColor", + "component": "search", + "previousDecision": "pending", + "frozenTarget": { + "light": "#0052d9", + "dark": "#4582e6", + "expressions": [ + "@brand-color" + ], + "source": [ + "packages/components/search/search.less:15" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/search/search.less", + "selector": ".t-search__search-action", + "property": "color", + "kind": "render-property", + "value": "var(--td-search-action-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "brandColor": [ + "tdesign-component/lib/src/components/search/t_search_bar.dart:205", + "tdesign-component/lib/src/components/search/t_search_bar.dart:209", + "tdesign-component/lib/src/components/search/t_search_bar.dart:320" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "searchBgColor", + "component": "search", + "previousDecision": "pending", + "frozenTarget": { + "light": "#f3f3f3", + "dark": "#2c2c2c", + "expressions": [ + "@bg-color-secondarycontainer" + ], + "source": [ + "packages/components/search/search.less:3" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/search/search.less", + "selector": ".t-search__input-box", + "property": "border", + "kind": "render-property", + "value": "2rpx solid var(--td-search-bg-color, var(--td-bg-color-secondarycontainer, var(--td-gray-color-1, #f3f3f3)))" + }, + { + "file": "packages/components/search/search.less", + "selector": ".t-search__input-box", + "property": "background", + "kind": "render-property", + "value": "var(--td-search-bg-color, var(--td-bg-color-secondarycontainer, var(--td-gray-color-1, #f3f3f3)))" + }, + { + "file": "packages/components/search/search.less", + "selector": ".t-search__input-box.t-is-focused", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-search-bg-color, var(--td-bg-color-secondarycontainer, var(--td-gray-color-1, #f3f3f3)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "bgColorSecondaryContainer": [ + "tdesign-component/lib/src/components/search/t_search_bar.dart:175" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/search/t_search_test.dart:240", + "text": "expect(decoration.color, token.bgColorSecondaryContainer);", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "searchClearIconColor", + "component": "search", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.4)", + "dark": "rgba(255, 255, 255, 35%)", + "expressions": [ + "@text-color-placeholder" + ], + "source": [ + "packages/components/search/search.less:16" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/search/search.less", + "selector": ".t-search__clear", + "property": "color", + "kind": "render-property", + "value": "var(--td-search-clear-icon-color, var(--td-text-color-placeholder, var(--td-font-gray-3, rgba(0, 0, 0, 0.4))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorPlaceholder": [ + "tdesign-component/lib/src/components/search/t_search_bar.dart:188", + "tdesign-component/lib/src/components/search/t_search_bar.dart:201", + "tdesign-component/lib/src/components/search/t_search_bar.dart:214", + "tdesign-component/lib/src/components/search/t_search_bar.dart:218" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/search/t_search_test.dart:247", + "text": "token.textColorPlaceholder,", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "searchClearIconSize", + "component": "search", + "previousDecision": "pending", + "frozenTarget": { + "light": "24dp", + "dark": "24dp", + "expressions": [ + "48rpx" + ], + "source": [ + "packages/components/search/search.less:17" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/search/search.less", + "selector": ".t-search__clear", + "property": "font-size", + "kind": "render-property", + "value": "var(--td-search-clear-icon-size, 48rpx)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "searchDisabledTextColor", + "component": "search", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.26)", + "dark": "rgba(255, 255, 255, 22%)", + "expressions": [ + "@text-color-disabled" + ], + "source": [ + "packages/components/search/search.less:11" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/search/search.less", + "selector": ".t-search__input-box .t-input--disabled", + "property": "color", + "kind": "render-property", + "value": "var(--td-search-disabled-text-color, var(--td-text-color-disabled, var(--td-font-gray-4, rgba(0, 0, 0, 0.26))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorDisabled": [ + "tdesign-component/lib/src/components/search/t_search_bar.dart:195", + "tdesign-component/lib/src/components/search/t_search_bar.dart:202", + "tdesign-component/lib/src/components/search/t_search_bar.dart:210", + "tdesign-component/lib/src/components/search/t_search_bar.dart:222", + "tdesign-component/lib/src/components/search/t_search_bar.dart:224" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/search/t_search_test.dart:211", + "text": "TThemeData.defaultData().textColorDisabled,", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "searchFont", + "component": "search", + "previousDecision": "pending", + "frozenTarget": { + "light": "16dp / 24dp PingFang SC, Microsoft YaHei, Arial Regular", + "dark": "16dp / 24dp PingFang SC, Microsoft YaHei, Arial Regular", + "expressions": [ + "@font-body-large" + ], + "source": [ + "packages/components/search/search.less:6" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/search/search.less", + "selector": ".t-search__input-box .t-input__keyword", + "property": "font", + "kind": "render-property", + "value": "var(--td-search-font, var(--td-font-body-large, 32rpx / 48rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + }, + { + "file": "packages/components/search/search.less", + "selector": ".t-search__search-action", + "property": "font", + "kind": "render-property", + "value": "var(--td-search-font, var(--td-font-body-large, 32rpx / 48rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + } + ], + "nonLessReferences": [ + { + "file": "packages/components/navbar/_example/search/index.wxss", + "line": 3, + "text": "--td-search-font: var(--td-font-body-medium);" + } + ] + }, + "flutterNameLocators": { + "fontBodyLarge": [ + "tdesign-component/lib/src/components/search/t_search_bar.dart:180" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/search/t_search_test.dart:243", + "text": "expect(field(tester).style?.fontSize, token.fontBodyLarge?.size);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/search/t_search_test.dart:244", + "text": "expect(field(tester).style?.height, token.fontBodyLarge?.height);", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "searchHeight", + "component": "search", + "previousDecision": "pending", + "frozenTarget": { + "light": "40dp", + "dark": "40dp", + "expressions": [ + "80rpx" + ], + "source": [ + "packages/components/search/search.less:7" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/search/search.less", + "selector": ".t-search__input-box", + "property": "height", + "kind": "render-property", + "value": "var(--td-search-height, 80rpx)" + }, + { + "file": "packages/components/search/search.less", + "selector": ".t-search__input-box--round", + "property": "border-radius", + "kind": "render-property", + "value": "calc(var(--td-search-height, 80rpx) / 2)" + } + ], + "nonLessReferences": [ + { + "file": "packages/components/navbar/_example/search/index.wxss", + "line": 2, + "text": "--td-search-height: 32px;" + } + ] + }, + "flutterNameLocators": { + "height": [ + "tdesign-component/lib/src/components/search/t_search_bar_theme_data.dart:10", + "tdesign-component/lib/src/components/search/t_search_bar_theme_data.dart:24", + "tdesign-component/lib/src/components/search/t_search_bar_theme_data.dart:59", + "tdesign-component/lib/src/components/search/t_search_bar_theme_data.dart:71", + "tdesign-component/lib/src/components/search/t_search_bar_theme_data.dart:101", + "tdesign-component/lib/src/components/search/t_search_bar.dart:173", + "tdesign-component/lib/src/components/search/t_search_bar.dart:183", + "tdesign-component/lib/src/components/search/t_search_bar.dart:227", + "tdesign-component/lib/src/components/search/t_search_bar.dart:229", + "tdesign-component/lib/src/components/search/t_search_bar.dart:230", + "tdesign-component/lib/src/components/search/t_search_bar.dart:235", + "tdesign-component/lib/src/components/search/t_search_bar.dart:240", + "tdesign-component/lib/src/components/search/t_search_bar.dart:241", + "tdesign-component/lib/src/components/search/t_search_bar.dart:245", + "tdesign-component/lib/src/components/search/t_search_bar.dart:248", + "tdesign-component/lib/src/components/search/t_search_bar.dart:249", + "tdesign-component/lib/src/components/search/t_search_bar.dart:258", + "tdesign-component/lib/src/components/search/t_search_bar.dart:268", + "tdesign-component/lib/src/components/search/t_search_bar.dart:359", + "tdesign-component/lib/src/components/search/t_search_bar.dart:382" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "searchIconColor", + "component": "search", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.4)", + "dark": "rgba(255, 255, 255, 35%)", + "expressions": [ + "@text-color-placeholder" + ], + "source": [ + "packages/components/search/search.less:10" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/search/search.less", + "selector": ".t-search__input-box .t-icon", + "property": "color", + "kind": "render-property", + "value": "var(--td-search-icon-color, var(--td-text-color-placeholder, var(--td-font-gray-3, rgba(0, 0, 0, 0.4))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorPlaceholder": [ + "tdesign-component/lib/src/components/search/t_search_bar.dart:188", + "tdesign-component/lib/src/components/search/t_search_bar.dart:201", + "tdesign-component/lib/src/components/search/t_search_bar.dart:214", + "tdesign-component/lib/src/components/search/t_search_bar.dart:218" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/search/t_search_test.dart:247", + "text": "token.textColorPlaceholder,", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "searchIconSize", + "component": "search", + "previousDecision": "pending", + "frozenTarget": { + "light": "24dp", + "dark": "24dp", + "expressions": [ + "48rpx" + ], + "source": [ + "packages/components/search/search.less:12" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/search/search.less", + "selector": ".t-search__input-box .t-icon", + "property": "font-size", + "kind": "render-property", + "value": "var(--td-search-icon-size, 48rpx)" + } + ], + "nonLessReferences": [ + { + "file": "packages/components/navbar/_example/search/index.wxss", + "line": 4, + "text": "--td-search-icon-size: 40rpx;" + } + ] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "searchLabelColor", + "component": "search", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.9)", + "dark": "rgba(255, 255, 255, 90%)", + "expressions": [ + "@text-color-primary" + ], + "source": [ + "packages/components/search/search.less:5" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/search/search.less", + "selector": ".t-search__label", + "property": "color", + "kind": "render-property", + "value": "var(--td-search-label-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorPrimary": [ + "tdesign-component/lib/src/components/search/t_search_bar.dart:185", + "tdesign-component/lib/src/components/search/t_search_bar.dart:194" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "searchPadding", + "component": "search", + "previousDecision": "pending", + "frozenTarget": { + "light": "8dp 12dp", + "dark": "8dp 12dp", + "expressions": [ + "@spacer @spacer-1" + ], + "source": [ + "packages/components/search/search.less:8" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/search/search.less", + "selector": ".t-search__input-box", + "property": "padding", + "kind": "render-property", + "value": "var(--td-search-padding, var(--td-spacer, 16rpx) var(--td-spacer-1, 24rpx))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "searchPlaceholderColor", + "component": "search", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.4)", + "dark": "rgba(255, 255, 255, 35%)", + "expressions": [ + "@text-color-placeholder" + ], + "source": [ + "packages/components/search/search.less:9" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/search/search.less", + "selector": ".t-search__placeholder", + "property": "color", + "kind": "render-property", + "value": "var(--td-search-placeholder-color, var(--td-text-color-placeholder, var(--td-font-gray-3, rgba(0, 0, 0, 0.4))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorPlaceholder": [ + "tdesign-component/lib/src/components/search/t_search_bar.dart:188", + "tdesign-component/lib/src/components/search/t_search_bar.dart:201", + "tdesign-component/lib/src/components/search/t_search_bar.dart:214", + "tdesign-component/lib/src/components/search/t_search_bar.dart:218" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/search/t_search_test.dart:247", + "text": "token.textColorPlaceholder,", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "searchResultHighLightColor", + "component": "search", + "previousDecision": "pending", + "frozenTarget": { + "light": "#0052d9", + "dark": "#4582e6", + "expressions": [ + "@brand-color" + ], + "source": [ + "packages/components/search/search.less:18" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/search/search.less", + "selector": ".t-search__result-item--highLight", + "property": "color", + "kind": "render-property", + "value": "var(--td-search-result-high-light-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "brandColor": [ + "tdesign-component/lib/src/components/search/t_search_bar.dart:205", + "tdesign-component/lib/src/components/search/t_search_bar.dart:209", + "tdesign-component/lib/src/components/search/t_search_bar.dart:320" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "searchSquareRadius", + "component": "search", + "previousDecision": "pending", + "frozenTarget": { + "light": "6dp", + "dark": "6dp", + "expressions": [ + "@radius-default" + ], + "source": [ + "packages/components/search/search.less:13" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/search/search.less", + "selector": ".t-search__input-box--square", + "property": "border-radius", + "kind": "render-property", + "value": "var(--td-search-square-radius, var(--td-radius-default, 12rpx))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "radiusDefault": [ + "tdesign-component/lib/src/components/search/t_search_bar.dart:269" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "searchTextColor", + "component": "search", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.9)", + "dark": "rgba(255, 255, 255, 90%)", + "expressions": [ + "@text-color-primary" + ], + "source": [ + "packages/components/search/search.less:4" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/search/search.less", + "selector": ".t-search__input-box .t-input__keyword", + "property": "color", + "kind": "render-property", + "value": "var(--td-search-text-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorPrimary": [ + "tdesign-component/lib/src/components/search/t_search_bar.dart:185", + "tdesign-component/lib/src/components/search/t_search_bar.dart:194" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "sideBarActiveColor", + "component": "side-bar-item", + "previousDecision": "pending", + "frozenTarget": { + "light": "#0052d9", + "dark": "#4582e6", + "expressions": [ + "@brand-color" + ], + "source": [ + "packages/components/side-bar-item/side-bar-item.less:8" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/side-bar-item/side-bar-item.less", + "selector": ".t-side-bar-item--active", + "property": "color", + "kind": "render-property", + "value": "var(--td-side-bar-active-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + }, + { + "file": "packages/components/side-bar-item/side-bar-item.less", + "selector": ".t-side-bar-item--active", + "property": "--td-badge-content-text-color", + "kind": "custom-property-forward", + "value": "var(--td-side-bar-active-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + }, + { + "file": "packages/components/side-bar-item/side-bar-item.less", + "selector": ".t-side-bar-item__line", + "property": "background", + "kind": "render-property", + "value": "var(--td-side-bar-active-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + } + ], + "nonLessReferences": [ + { + "file": "packages/components/side-bar/_example/custom/index.wxss", + "line": 53, + "text": "--td-side-bar-active-color: green;" + } + ] + }, + "flutterNameLocators": { + "brandColor": [ + "tdesign-component/lib/src/components/sidebar/t_wrap_sidebar_item.dart:181" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/sidebar/t_sidebar_test.dart:230", + "text": "tester.element(find.byType(TSideBar)).tTheme.brandColor;", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/sidebar/t_sidebar_widget_test.dart:77", + "text": "theme.brandColor,", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/sidebar/t_sidebar_widget_test.dart:87", + "text": "theme.brandColor,", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "sideBarBgColor", + "component": "side-bar", + "previousDecision": "pending", + "frozenTarget": { + "light": "#f3f3f3", + "dark": "#2c2c2c", + "expressions": [ + "@bg-color-secondarycontainer" + ], + "source": [ + "packages/components/side-bar-item/side-bar-item.less:6", + "packages/components/side-bar/side-bar.less:5" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/side-bar/side-bar.less", + "selector": ".t-side-bar__padding", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-side-bar-bg-color, var(--td-bg-color-secondarycontainer, var(--td-gray-color-1, #f3f3f3)))" + }, + { + "file": "packages/components/side-bar-item/side-bar-item.less", + "selector": ".t-side-bar-item", + "property": "background", + "kind": "render-property", + "value": "var(--td-side-bar-bg-color, var(--td-bg-color-secondarycontainer, var(--td-gray-color-1, #f3f3f3)))" + }, + { + "file": "packages/components/side-bar-item/side-bar-item.less", + "selector": ".t-side-bar-item__prefix::after,\n.t-side-bar-item__suffix::after", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-side-bar-bg-color, var(--td-bg-color-secondarycontainer, var(--td-gray-color-1, #f3f3f3)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "bgColorSecondaryContainer": [ + "tdesign-component/lib/src/components/sidebar/t_wrap_sidebar_item.dart:82", + "tdesign-component/lib/src/components/sidebar/t_wrap_sidebar_item.dart:108", + "tdesign-component/lib/src/components/sidebar/t_sidebar.dart:267" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "sideBarBorderRadius", + "component": "side-bar-item", + "previousDecision": "pending", + "frozenTarget": { + "light": "9dp", + "dark": "9dp", + "expressions": [ + "@radius-large" + ], + "source": [ + "packages/components/side-bar-item/side-bar-item.less:9" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/side-bar-item/side-bar-item.less", + "selector": ".t-side-bar-item__prefix,\n.t-side-bar-item__suffix", + "property": "height", + "kind": "render-property", + "value": "calc(var(--td-side-bar-border-radius, var(--td-radius-large, 18rpx)) * 2)" + }, + { + "file": "packages/components/side-bar-item/side-bar-item.less", + "selector": ".t-side-bar-item__prefix", + "property": "top", + "kind": "render-property", + "value": "calc(var(--td-side-bar-border-radius, var(--td-radius-large, 18rpx)) * -2)" + }, + { + "file": "packages/components/side-bar-item/side-bar-item.less", + "selector": ".t-side-bar-item__prefix::after", + "property": "border-bottom-right-radius", + "kind": "render-property", + "value": "var(--td-side-bar-border-radius, var(--td-radius-large, 18rpx))" + }, + { + "file": "packages/components/side-bar-item/side-bar-item.less", + "selector": ".t-side-bar-item__suffix", + "property": "bottom", + "kind": "render-property", + "value": "calc(var(--td-side-bar-border-radius, var(--td-radius-large, 18rpx)) * -2)" + }, + { + "file": "packages/components/side-bar-item/side-bar-item.less", + "selector": ".t-side-bar-item__suffix::after", + "property": "border-top-right-radius", + "kind": "render-property", + "value": "var(--td-side-bar-border-radius, var(--td-radius-large, 18rpx))" + } + ], + "nonLessReferences": [ + { + "file": "packages/components/side-bar/_example/custom/index.wxss", + "line": 52, + "text": "--td-side-bar-border-radius: 6px;" + } + ] + }, + "flutterNameLocators": { + "radiusLarge": [] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "sideBarColor", + "component": "side-bar-item", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.9)", + "dark": "rgba(255, 255, 255, 90%)", + "expressions": [ + "@text-color-primary" + ], + "source": [ + "packages/components/side-bar-item/side-bar-item.less:3" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/side-bar-item/side-bar-item.less", + "selector": ".t-side-bar-item", + "property": "color", + "kind": "render-property", + "value": "var(--td-side-bar-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorPrimary": [ + "tdesign-component/lib/src/components/sidebar/t_wrap_sidebar_item.dart:183" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "sideBarDisabledColor", + "component": "side-bar-item", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.26)", + "dark": "rgba(255, 255, 255, 22%)", + "expressions": [ + "@text-color-disabled" + ], + "source": [ + "packages/components/side-bar-item/side-bar-item.less:7" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/side-bar-item/side-bar-item.less", + "selector": ".t-side-bar-item--disabled", + "property": "color", + "kind": "render-property", + "value": "var(--td-side-bar-disabled-color, var(--td-text-color-disabled, var(--td-font-gray-4, rgba(0, 0, 0, 0.26))))" + }, + { + "file": "packages/components/side-bar-item/side-bar-item.less", + "selector": ".t-side-bar-item--disabled", + "property": "--td-badge-content-text-color", + "kind": "custom-property-forward", + "value": "var(--td-side-bar-disabled-color, var(--td-text-color-disabled, var(--td-font-gray-4, rgba(0, 0, 0, 0.26))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorDisabled": [ + "tdesign-component/lib/src/components/sidebar/t_wrap_sidebar_item.dart:178" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/sidebar/t_sidebar_widget_test.dart:81", + "text": "theme.textColorDisabled,", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/sidebar/t_sidebar_widget_test.dart:91", + "text": "theme.textColorDisabled,", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "sideBarFont", + "component": "side-bar-item", + "previousDecision": "pending", + "frozenTarget": { + "light": "16dp / 24dp PingFang SC, Microsoft YaHei, Arial Regular", + "dark": "16dp / 24dp PingFang SC, Microsoft YaHei, Arial Regular", + "expressions": [ + "@font-body-large" + ], + "source": [ + "packages/components/side-bar-item/side-bar-item.less:4" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/side-bar-item/side-bar-item.less", + "selector": ".t-side-bar-item", + "property": "font", + "kind": "render-property", + "value": "var(--td-side-bar-font, var(--td-font-body-large, 32rpx / 48rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "fontBodyLarge": [ + "tdesign-component/lib/src/components/sidebar/t_wrap_sidebar_item.dart:192" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/sidebar/t_sidebar_test.dart:513", + "text": "expect(text.style?.fontSize, token.fontBodyLarge?.size);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/sidebar/t_sidebar_test.dart:514", + "text": "expect(text.style?.height, token.fontBodyLarge?.height);", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "sideBarHeight", + "component": "side-bar", + "previousDecision": "pending", + "frozenTarget": { + "light": "100%", + "dark": "100%", + "expressions": [ + "100%" + ], + "source": [ + "packages/components/side-bar/side-bar.less:4" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/side-bar/side-bar.less", + "selector": ".t-side-bar", + "property": "height", + "kind": "render-property", + "value": "var(--td-side-bar-height, 100%)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "sideBarIconSize", + "component": "side-bar-item", + "previousDecision": "pending", + "frozenTarget": { + "light": "20dp", + "dark": "20dp", + "expressions": [ + "40rpx" + ], + "source": [ + "packages/components/side-bar-item/side-bar-item.less:10" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/side-bar-item/side-bar-item.less", + "selector": ".t-side-bar-item__icon", + "property": "font-size", + "kind": "render-property", + "value": "var(--td-side-bar-icon-size, 40rpx)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "sideBarItemHeight", + "component": "side-bar-item", + "previousDecision": "pending", + "frozenTarget": { + "light": "auto", + "dark": "auto", + "expressions": [ + "auto" + ], + "source": [ + "packages/components/side-bar-item/side-bar-item.less:5" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/side-bar-item/side-bar-item.less", + "selector": ".t-side-bar-item", + "property": "min-height", + "kind": "render-property", + "value": "var(--td-side-bar-item-height, auto)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "sideBarWidth", + "component": "side-bar", + "previousDecision": "pending", + "frozenTarget": { + "light": "103dp", + "dark": "103dp", + "expressions": [ + "206rpx" + ], + "source": [ + "packages/components/side-bar/side-bar.less:3" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/side-bar/side-bar.less", + "selector": ".t-side-bar", + "property": "width", + "kind": "render-property", + "value": "var(--td-side-bar-width, 206rpx)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "skeletonAnimationFlashed", + "component": "skeleton", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(90%, 90%, 90%, 0.3)", + "dark": "rgba(90%, 90%, 90%, 0.3)", + "expressions": [ + "rgba(90%, 90%, 90%, 0.3)" + ], + "source": [ + "packages/components/skeleton/skeleton.less:4" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/skeleton/skeleton.less", + "selector": "50%", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-skeleton-animation-flashed, rgba(230, 230, 230, 0.3))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "skeletonAnimationGradient", + "component": "skeleton", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 4%)", + "dark": "rgba(255, 255, 255, 6%)", + "expressions": [ + "rgba(0, 0, 0, 4%)" + ], + "source": [ + "packages/components/skeleton/skeleton.less:3" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/skeleton/skeleton.less", + "selector": ".t-skeleton--animation-gradient::after", + "property": "background", + "kind": "render-property", + "value": "linear-gradient(90deg, rgba(255, 255, 255, 0), var(--td-skeleton-animation-gradient, rgba(0, 0, 0, 0.04)), rgba(255, 255, 255, 0))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "skeletonBgColor", + "component": "skeleton", + "previousDecision": "pending", + "frozenTarget": { + "light": "#f3f3f3", + "dark": "#2c2c2c", + "expressions": [ + "@bg-color-secondarycontainer" + ], + "source": [ + "packages/components/skeleton/skeleton.less:5" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/skeleton/skeleton.less", + "selector": ".t-skeleton__col", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-skeleton-bg-color, var(--td-bg-color-secondarycontainer, var(--td-gray-color-1, #f3f3f3)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "bgColorSecondaryContainer": [ + "tdesign-component/lib/src/components/skeleton/t_skeleton.dart:251" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/skeleton/t_skeleton_test.dart:283", + "text": "expect(decorations(tester).first.color, token.bgColorSecondaryContainer);", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "skeletonCircleBorderRadius", + "component": "skeleton", + "previousDecision": "pending", + "frozenTarget": { + "light": "50%", + "dark": "50%", + "expressions": [ + "@radius-circle" + ], + "source": [ + "packages/components/skeleton/skeleton.less:12" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/skeleton/skeleton.less", + "selector": ".t-skeleton--type-circle", + "property": "border-radius", + "kind": "render-property", + "value": "var(--td-skeleton-circle-border-radius, var(--td-skeleton-circle-border-radius, var(--td-radius-circle, 50%)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "radiusCircle": [ + "tdesign-component/lib/src/components/skeleton/t_skeleton.dart:244" + ] + }, + "approvedGlobalException": "小程序 CSS 50%;Flutter 固定 9999dp 圆角", + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "skeletonCircleHeight", + "component": "skeleton", + "previousDecision": "pending", + "frozenTarget": { + "light": "48dp", + "dark": "48dp", + "expressions": [ + "96rpx" + ], + "source": [ + "packages/components/skeleton/skeleton.less:9" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/skeleton/skeleton.less", + "selector": ".t-skeleton--type-circle", + "property": "width", + "kind": "render-property", + "value": "var(--td-skeleton-circle-height, 96rpx)" + }, + { + "file": "packages/components/skeleton/skeleton.less", + "selector": ".t-skeleton--type-circle", + "property": "height", + "kind": "render-property", + "value": "var(--td-skeleton-circle-height, 96rpx)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "skeletonRectBorderRadius", + "component": "skeleton", + "previousDecision": "pending", + "frozenTarget": { + "light": "6dp", + "dark": "6dp", + "expressions": [ + "@radius-default" + ], + "source": [ + "packages/components/skeleton/skeleton.less:11" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/skeleton/skeleton.less", + "selector": ".t-skeleton--type-rect", + "property": "border-radius", + "kind": "render-property", + "value": "var(--td-skeleton-rect-border-radius, var(--td-radius-default, 12rpx))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "radiusDefault": [ + "tdesign-component/lib/src/components/skeleton/t_skeleton.dart:169" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "skeletonRectHeight", + "component": "skeleton", + "previousDecision": "pending", + "frozenTarget": { + "light": "16dp", + "dark": "16dp", + "expressions": [ + "32rpx" + ], + "source": [ + "packages/components/skeleton/skeleton.less:8" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/skeleton/skeleton.less", + "selector": ".t-skeleton--type-rect", + "property": "height", + "kind": "render-property", + "value": "var(--td-skeleton-rect-height, 32rpx)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "skeletonRowSpacing", + "component": "skeleton", + "previousDecision": "pending", + "frozenTarget": { + "light": "16dp", + "dark": "16dp", + "expressions": [ + "@spacer-2" + ], + "source": [ + "packages/components/skeleton/skeleton.less:6" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/skeleton/skeleton.less", + "selector": ".t-skeleton__row", + "property": "margin-bottom", + "kind": "render-property", + "value": "var(--td-skeleton-row-spacing, var(--td-spacer-2, 32rpx))" + } + ], + "nonLessReferences": [ + { + "file": "packages/components/skeleton/_example/grid/index.wxss", + "line": 2, + "text": "--td-skeleton-row-spacing: 20rpx;" + } + ] + }, + "flutterNameLocators": { + "spacer2": [ + "tdesign-component/lib/src/components/skeleton/t_skeleton.dart:205" + ], + "rowSpacing": [ + "tdesign-component/lib/src/components/skeleton/t_skeleton_layout.dart:19", + "tdesign-component/lib/src/components/skeleton/t_skeleton_layout.dart:26", + "tdesign-component/lib/src/components/skeleton/t_skeleton_theme_data.dart:13", + "tdesign-component/lib/src/components/skeleton/t_skeleton_theme_data.dart:15", + "tdesign-component/lib/src/components/skeleton/t_skeleton_theme_data.dart:31", + "tdesign-component/lib/src/components/skeleton/t_skeleton_theme_data.dart:42", + "tdesign-component/lib/src/components/skeleton/t_skeleton_theme_data.dart:48", + "tdesign-component/lib/src/components/skeleton/t_skeleton_theme_data.dart:72", + "tdesign-component/lib/src/components/skeleton/t_skeleton.dart:204", + "tdesign-component/lib/src/components/skeleton/t_skeleton.dart:205", + "tdesign-component/lib/src/components/skeleton/t_skeleton.dart:225", + "tdesign-component/lib/src/components/skeleton/t_skeleton.dart:226" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "skeletonTextBorderRadius", + "component": "skeleton", + "previousDecision": "pending", + "frozenTarget": { + "light": "3dp", + "dark": "3dp", + "expressions": [ + "@radius-small" + ], + "source": [ + "packages/components/skeleton/skeleton.less:10" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/skeleton/skeleton.less", + "selector": ".t-skeleton--type-text", + "property": "border-radius", + "kind": "render-property", + "value": "var(--td-skeleton-text-border-radius, var(--td-radius-small, 6rpx))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "radiusSmall": [ + "tdesign-component/lib/src/components/skeleton/t_skeleton.dart:243" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "skeletonTextHeight", + "component": "skeleton", + "previousDecision": "pending", + "frozenTarget": { + "light": "16dp", + "dark": "16dp", + "expressions": [ + "32rpx" + ], + "source": [ + "packages/components/skeleton/skeleton.less:7" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/skeleton/skeleton.less", + "selector": ".t-skeleton--type-text", + "property": "height", + "kind": "render-property", + "value": "var(--td-skeleton-text-height, 32rpx)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "sliderActiveColor", + "component": "slider", + "previousDecision": "pending", + "frozenTarget": { + "light": "#0052d9", + "dark": "#4582e6", + "expressions": [ + "@brand-color" + ], + "source": [ + "packages/components/slider/slider.less:14" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/slider/slider.less", + "selector": ".t-slider__line", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-slider-active-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + }, + { + "file": "packages/components/slider/slider.less", + "selector": ".t-slider__scale-item--active", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-slider-active-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "brandColor": [ + "tdesign-component/lib/src/components/slider/t_slider.dart:37" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/slider/t_slider_test.dart:104", + "text": "expect(theme.activeTrackColor, TThemeData.defaultData().brandColor);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/slider/t_slider_test.dart:330", + "text": "expect(theme.activeTrackColor, darkToken.brandColor);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/slider/t_slider_test.dart:396", + "text": "expect(theme.activeTrackColor, TThemeData.defaultData().brandColor);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/slider/t_slider_test.dart:480", + "text": "expect(theme.activeTickMarkColor, TThemeData.defaultData().brandColor);", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "sliderBarHeight", + "component": "slider", + "previousDecision": "pending", + "frozenTarget": { + "light": "4dp", + "dark": "4dp", + "expressions": [ + "8rpx" + ], + "source": [ + "packages/components/slider/slider.less:6" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/slider/slider.less", + "selector": ".t-slider__line", + "property": "height", + "kind": "render-property", + "value": "var(--td-slider-bar-height, 8rpx)" + }, + { + "file": "packages/components/slider/slider.less", + "selector": ".t-slider__line", + "property": "border-radius", + "kind": "render-property", + "value": "calc(var(--td-slider-bar-height, 8rpx) / 2)" + }, + { + "file": "packages/components/slider/slider.less", + "selector": ".t-slider__bar", + "property": "height", + "kind": "render-property", + "value": "var(--td-slider-bar-height, 8rpx)" + }, + { + "file": "packages/components/slider/slider.less", + "selector": ".t-slider__bar", + "property": "border-radius", + "kind": "render-property", + "value": "calc(var(--td-slider-bar-height, 8rpx) / 2)" + }, + { + "file": "packages/components/slider/slider.less", + "selector": ".t-slider__scale-item", + "property": "width", + "kind": "render-property", + "value": "var(--td-slider-bar-height, 8rpx)" + }, + { + "file": "packages/components/slider/slider.less", + "selector": ".t-slider--vertical", + "property": "height", + "kind": "render-property", + "value": "var(--td-slider-bar-height, 8rpx)" + } + ], + "nonLessReferences": [ + { + "file": "packages/components/slider/props.ts", + "line": 64, + "text": "/** 是否是垂直的滑块(渲染垂直滑块时,默认高度为400rpx,可通过修改`--td-slider-bar-height`来自定义高度) */" + }, + { + "file": "packages/components/slider/type.ts", + "line": 96, + "text": "* 是否是垂直的滑块(渲染垂直滑块时,默认高度为400rpx,可通过修改`--td-slider-bar-height`来自定义高度)" + } + ] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "sliderBarWidth", + "component": "slider", + "previousDecision": "pending", + "frozenTarget": { + "light": "4dp", + "dark": "4dp", + "expressions": [ + "8rpx" + ], + "source": [ + "packages/components/slider/slider.less:5" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/slider/slider.less", + "selector": ".t-slider--vertical .t-slider__bar", + "property": "width", + "kind": "render-property", + "value": "var(--td-slider-bar-width, 8rpx)" + }, + { + "file": "packages/components/slider/slider.less", + "selector": ".t-slider--vertical .t-slider__line", + "property": "border-radius", + "kind": "render-property", + "value": "calc(var(--td-slider-bar-width, 8rpx) / 2)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "sliderCapsuleBarColor", + "component": "slider", + "previousDecision": "pending", + "frozenTarget": { + "light": "#e7e7e7", + "dark": "#383838", + "expressions": [ + "@bg-color-component" + ], + "source": [ + "packages/components/slider/slider.less:21" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/slider/slider.less", + "selector": ".t-slider__bar--capsule", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-slider-capsule-bar-color, var(--td-bg-color-component, var(--td-gray-color-3, #e7e7e7)))" + }, + { + "file": "packages/components/slider/slider.less", + "selector": ".t-slider__bar--capsule", + "property": "border", + "kind": "render-property", + "value": "6rpx solid var(--td-slider-capsule-bar-color, var(--td-bg-color-component, var(--td-gray-color-3, #e7e7e7)))" + }, + { + "file": "packages/components/slider/slider.less", + "selector": ".t-slider__scale-item--capsule", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-slider-capsule-bar-color, var(--td-bg-color-component, var(--td-gray-color-3, #e7e7e7)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "bgColorComponent": [ + "tdesign-component/lib/src/components/slider/t_slider.dart:119", + "tdesign-component/lib/src/components/slider/t_slider.dart:125" + ] + }, + "approvedGlobalException": "引用已批准修正的浅色 grayColor3", + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "sliderCapsuleBarHeihgt", + "component": "slider", + "previousDecision": "pending", + "frozenTarget": { + "light": "24dp", + "dark": "24dp", + "expressions": [ + "48rpx" + ], + "source": [ + "packages/components/slider/slider.less:19" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/slider/slider.less", + "selector": ".t-slider__bar--capsule", + "property": "height", + "kind": "render-property", + "value": "var(--td-slider-capsule-bar-heihgt, 48rpx)" + }, + { + "file": "packages/components/slider/slider.less", + "selector": ".t-slider__bar--capsule", + "property": "border-radius", + "kind": "render-property", + "value": "calc(var(--td-slider-capsule-bar-heihgt, 48rpx) / 2)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "sliderCapsuleBarWidth", + "component": "slider", + "previousDecision": "pending", + "frozenTarget": { + "light": "24dp", + "dark": "24dp", + "expressions": [ + "48rpx" + ], + "source": [ + "packages/components/slider/slider.less:20" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/slider/slider.less", + "selector": ".t-slider--vertical .t-slider__bar--capsule", + "property": "width", + "kind": "render-property", + "value": "var(--td-slider-capsule-bar-width, 48rpx)" + }, + { + "file": "packages/components/slider/slider.less", + "selector": ".t-slider--vertical .t-slider__bar--capsule", + "property": "border-radius", + "kind": "render-property", + "value": "calc(var(--td-slider-capsule-bar-width, 48rpx) / 2)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "sliderCapsuleLineHeihgt", + "component": "slider", + "previousDecision": "pending", + "frozenTarget": { + "light": "18dp", + "dark": "18dp", + "expressions": [ + "36rpx" + ], + "source": [ + "packages/components/slider/slider.less:22" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/slider/slider.less", + "selector": ".t-slider__line--capsule", + "property": "height", + "kind": "render-property", + "value": "var(--td-slider-capsule-line-heihgt, 36rpx)" + }, + { + "file": "packages/components/slider/slider.less", + "selector": ".t-slider__line--capsule.t-slider__line--single", + "property": "border-top-left-radius", + "kind": "render-property", + "value": "calc(var(--td-slider-capsule-line-heihgt, 36rpx) / 2)" + }, + { + "file": "packages/components/slider/slider.less", + "selector": ".t-slider__line--capsule.t-slider__line--single", + "property": "border-bottom-left-radius", + "kind": "render-property", + "value": "calc(var(--td-slider-capsule-line-heihgt, 36rpx) / 2)" + }, + { + "file": "packages/components/slider/slider.less", + "selector": ".t-slider__scale-item--capsule", + "property": "height", + "kind": "render-property", + "value": "var(--td-slider-capsule-line-heihgt, 36rpx)" + }, + { + "file": "packages/components/slider/slider.less", + "selector": ".t-slider__scale-item--capsule", + "property": "margin-top", + "kind": "render-property", + "value": "calc(-0.5 * var(--td-slider-capsule-line-heihgt, 36rpx))" + }, + { + "file": "packages/components/slider/slider.less", + "selector": ".t-slider--vertical .t-slider__line--capsule.t-slider__line--single", + "property": "border-top-left-radius", + "kind": "render-property", + "value": "calc(var(--td-slider-capsule-line-heihgt, 36rpx) / 2)" + }, + { + "file": "packages/components/slider/slider.less", + "selector": ".t-slider--vertical .t-slider__line--capsule.t-slider__line--single", + "property": "border-top-right-radius", + "kind": "render-property", + "value": "calc(var(--td-slider-capsule-line-heihgt, 36rpx) / 2)" + }, + { + "file": "packages/components/slider/slider.less", + "selector": ".t-slider--vertical .t-slider__scale-item--capsule", + "property": "width", + "kind": "render-property", + "value": "var(--td-slider-capsule-line-heihgt, 36rpx)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "sliderDefaultColor", + "component": "slider", + "previousDecision": "pending", + "frozenTarget": { + "light": "", + "dark": "", + "expressions": [ + "@bg-color-component", + "@bg-color-component-disabled" + ], + "source": [ + "packages/components/slider/slider.less:12", + "packages/components/slider/slider.less:13" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/slider/slider.less", + "selector": ".t-slider__bar", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-slider-default-color, var(--td-bg-color-component, var(--td-gray-color-3, #e7e7e7)))" + }, + { + "file": "packages/components/slider/slider.less", + "selector": ".t-slider__bar--marks", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-slider-default-color, var(--td-bg-color-component, var(--td-gray-color-3, #e7e7e7)))" + }, + { + "file": "packages/components/slider/slider.less", + "selector": ".t-slider__bar--disabled", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-slider-default-color, var(--td-bg-color-component-disabled, var(--td-gray-color-2, #eeeeee)))" + }, + { + "file": "packages/components/slider/slider.less", + "selector": ".t-slider__scale-item", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-slider-default-color, var(--td-bg-color-component, var(--td-gray-color-3, #e7e7e7)))" + }, + { + "file": "packages/components/slider/slider.less", + "selector": ".t-slider__scale-item--disabled", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-slider-default-color, var(--td-bg-color-component-disabled, var(--td-gray-color-2, #eeeeee)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "sliderDisabledColor", + "component": "slider", + "previousDecision": "pending", + "frozenTarget": { + "light": "#b5c7ff", + "dark": "#143975", + "expressions": [ + "@brand-color-disabled" + ], + "source": [ + "packages/components/slider/slider.less:15" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/slider/slider.less", + "selector": ".t-slider__line--disabled", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-slider-disabled-color, var(--td-brand-color-disabled, var(--td-primary-color-3, #b5c7ff)))" + }, + { + "file": "packages/components/slider/slider.less", + "selector": ".t-slider__scale-item--active.t-slider__scale-item--disabled", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-slider-disabled-color, var(--td-brand-color-disabled, var(--td-primary-color-3, #b5c7ff)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "brandColorDisabled": [ + "tdesign-component/lib/src/components/slider/t_slider.dart:41" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/slider/t_slider_test.dart:116", + "text": "TThemeData.defaultData().brandColorDisabled,", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "sliderDisabledTextColor", + "component": "slider", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.26)", + "dark": "rgba(255, 255, 255, 22%)", + "expressions": [ + "@text-color-disabled" + ], + "source": [ + "packages/components/slider/slider.less:16" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/slider/slider.less", + "selector": ".t-slider--disabled .t-slider__value,\n.t-slider--disabled .t-slider__range-extreme,\n.t-slider--disabled .t-slider__dot-value,\n.t-slider--disabled .t-slider__scale-desc", + "property": "color", + "kind": "render-property", + "value": "var(--td-slider-disabled-text-color, var(--td-text-color-disabled, var(--td-font-gray-4, rgba(0, 0, 0, 0.26))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorDisabled": [ + "tdesign-component/lib/src/components/slider/t_slider.dart:136" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "sliderDotBgColor", + "component": "slider", + "previousDecision": "pending", + "frozenTarget": { + "light": "#fff", + "dark": "#ddd", + "expressions": [ + "#fff" + ], + "source": [ + "packages/components/slider/slider.less:7" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/slider/slider.less", + "selector": ".t-slider__dot", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-slider-dot-bg-color, #fff)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "sliderDotColor", + "component": "slider", + "previousDecision": "pending", + "frozenTarget": { + "light": "#dcdcdc", + "dark": "#5e5e5e", + "expressions": [ + "@component-border" + ], + "source": [ + "packages/components/slider/slider.less:10" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/slider/slider.less", + "selector": ".t-slider__dot", + "property": "border", + "kind": "render-property", + "value": "2rpx solid var(--td-slider-dot-color, var(--td-component-border, var(--td-gray-color-4, #dcdcdc)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "componentBorder": [ + "tdesign-component/lib/src/components/slider/t_slider.dart:39", + "tdesign-component/lib/src/components/slider/t_slider.dart:46", + "tdesign-component/lib/src/components/slider/t_slider.dart:118", + "tdesign-component/lib/src/components/slider/t_slider.dart:124" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/slider/t_slider_test.dart:107", + "text": "TThemeData.defaultData().componentBorder,", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/slider/t_slider_test.dart:111", + "text": "TThemeData.defaultData().componentBorder,", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/slider/t_slider_test.dart:125", + "text": "disabledBorderColor: TThemeData.defaultData().componentBorder,", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/slider/t_slider_test.dart:331", + "text": "expect(theme.inactiveTrackColor, darkToken.componentBorder);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/slider/t_slider_test.dart:332", + "text": "expect(theme.inactiveTickMarkColor, darkToken.componentBorder);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/slider/t_slider_test.dart:399", + "text": "TThemeData.defaultData().componentBorder,", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "sliderDotDisabledBgColor", + "component": "slider", + "previousDecision": "pending", + "frozenTarget": { + "light": "#fff", + "dark": "#383838", + "expressions": [ + "#fff" + ], + "source": [ + "packages/components/slider/slider.less:8" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/slider/slider.less", + "selector": ".t-slider--disabled .t-slider__dot", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-slider-dot-disabled-bg-color, #fff)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "sliderDotDisabledBorderColor", + "component": "slider", + "previousDecision": "pending", + "frozenTarget": { + "light": "#f3f3f3", + "dark": "#2c2c2c", + "expressions": [ + "#f3f3f3" + ], + "source": [ + "packages/components/slider/slider.less:11" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/slider/slider.less", + "selector": ".t-slider--disabled .t-slider__dot", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-slider-dot-disabled-border-color, #f3f3f3)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "sliderDotSize", + "component": "slider", + "previousDecision": "pending", + "frozenTarget": { + "light": "20dp", + "dark": "20dp", + "expressions": [ + "40rpx" + ], + "source": [ + "packages/components/slider/slider.less:9" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/slider/slider.less", + "selector": ".t-slider__dot", + "property": "width", + "kind": "render-property", + "value": "var(--td-slider-dot-size, 40rpx)" + }, + { + "file": "packages/components/slider/slider.less", + "selector": ".t-slider__dot", + "property": "height", + "kind": "render-property", + "value": "var(--td-slider-dot-size, 40rpx)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "sliderTextColor", + "component": "slider", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.9)", + "dark": "rgba(255, 255, 255, 90%)", + "expressions": [ + "@text-color-primary" + ], + "source": [ + "packages/components/slider/slider.less:4" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/slider/slider.less", + "selector": ".t-slider__value,\n.t-slider__range-extreme,\n.t-slider__dot-value", + "property": "color", + "kind": "render-property", + "value": "var(--td-slider-text-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + }, + { + "file": "packages/components/slider/slider.less", + "selector": ".t-slider__scale-desc", + "property": "color", + "kind": "render-property", + "value": "var(--td-slider-text-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorPrimary": [ + "tdesign-component/lib/src/components/slider/t_slider.dart:88" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "stepItemCircleSize", + "component": "step-item", + "previousDecision": "pending", + "frozenTarget": { + "light": "22dp", + "dark": "22dp", + "expressions": [ + "44rpx" + ], + "source": [ + "packages/components/step-item/step-item.less:4" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/step-item/step-item.less", + "selector": ".t-steps-item__anchor--vertical", + "property": "width", + "kind": "render-property", + "value": "var(--td-step-item-circle-size, 44rpx)" + }, + { + "file": "packages/components/step-item/step-item.less", + "selector": ".t-steps-item__anchor--vertical", + "property": "height", + "kind": "render-property", + "value": "var(--td-step-item-circle-size, 44rpx)" + }, + { + "file": "packages/components/step-item/step-item.less", + "selector": ".t-steps-item__circle", + "property": "width", + "kind": "render-property", + "value": "var(--td-step-item-circle-size, 44rpx)" + }, + { + "file": "packages/components/step-item/step-item.less", + "selector": ".t-steps-item__circle", + "property": "height", + "kind": "render-property", + "value": "var(--td-step-item-circle-size, 44rpx)" + }, + { + "file": "packages/components/step-item/step-item.less", + "selector": ".t-steps-item__line--horizontal", + "property": "width", + "kind": "render-property", + "value": "calc(100% - 32rpx - var(--td-step-item-circle-size, 44rpx))" + }, + { + "file": "packages/components/step-item/step-item.less", + "selector": ".t-steps-item__line--horizontal", + "property": "top", + "kind": "render-property", + "value": "calc(var(--td-step-item-circle-size, 44rpx) / 2 + 1px)" + }, + { + "file": "packages/components/step-item/step-item.less", + "selector": ".t-steps-item__line--horizontal", + "property": "left", + "kind": "render-property", + "value": "calc(50% + var(--td-step-item-circle-size, 44rpx) / 2 + 16rpx)" + }, + { + "file": "packages/components/step-item/step-item.less", + "selector": ".t-steps-item__line--vertical", + "property": "height", + "kind": "render-property", + "value": "calc(100% - 32rpx - var(--td-step-item-circle-size, 44rpx))" + }, + { + "file": "packages/components/step-item/step-item.less", + "selector": ".t-steps-item__line--vertical", + "property": "left", + "kind": "render-property", + "value": "calc(var(--td-step-item-circle-size, 44rpx) / 2)" + }, + { + "file": "packages/components/step-item/step-item.less", + "selector": ".t-steps-item__line--vertical", + "property": "top", + "kind": "render-property", + "value": "calc(var(--td-step-item-circle-size, 44rpx) + 16rpx)" + }, + { + "file": "packages/components/step-item/step-item.less", + "selector": ".t-steps-item__line--vertical.t-steps-item__line--dot", + "property": "top", + "kind": "render-property", + "value": "var(--td-step-item-circle-size, 44rpx)" + }, + { + "file": "packages/components/step-item/step-item.less", + "selector": ".t-steps-item__line--vertical.t-steps-item__line--dot", + "property": "height", + "kind": "render-property", + "value": "calc(100% - var(--td-step-item-circle-size, 44rpx))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "stepItemCircleTextFont", + "component": "step-item", + "previousDecision": "pending", + "frozenTarget": { + "light": "14dp / 22dp PingFang SC, Microsoft YaHei, Arial Regular", + "dark": "14dp / 22dp PingFang SC, Microsoft YaHei, Arial Regular", + "expressions": [ + "@font-body-medium" + ], + "source": [ + "packages/components/step-item/step-item.less:5" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/step-item/step-item.less", + "selector": ".t-steps-item__circle", + "property": "font", + "kind": "render-property", + "value": "var(--td-step-item-circle-text-font, var(--td-font-body-medium, 28rpx / 44rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "fontBodyMedium": [ + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:108", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:265", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:108", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:275", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:276" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "stepItemDefaultCircleBg", + "component": "step-item", + "previousDecision": "pending", + "frozenTarget": { + "light": "#f3f3f3", + "dark": "#2c2c2c", + "expressions": [ + "@bg-color-secondarycontainer" + ], + "source": [ + "packages/components/step-item/step-item.less:8" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/step-item/step-item.less", + "selector": ".t-steps-item__circle--default", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-step-item-default-circle-bg, var(--td-bg-color-secondarycontainer, var(--td-gray-color-1, #f3f3f3)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "bgColorSecondaryContainer": [] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "stepItemDefaultCircleColor", + "component": "step-item", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.4)", + "dark": "rgba(255, 255, 255, 35%)", + "expressions": [ + "@text-color-placeholder" + ], + "source": [ + "packages/components/step-item/step-item.less:9" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/step-item/step-item.less", + "selector": ".t-steps-item__circle--default", + "property": "color", + "kind": "render-property", + "value": "var(--td-step-item-default-circle-color, var(--td-text-color-placeholder, var(--td-font-gray-3, rgba(0, 0, 0, 0.4))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorPlaceholder": [ + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:91", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:92", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:93", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:331", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:91", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:92", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:93", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:298" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/steps/t_steps_test.dart:54", + "text": "token.textColorPlaceholder,", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "stepItemDefaultDotBorderColor", + "component": "step-item", + "previousDecision": "pending", + "frozenTarget": { + "light": "#dcdcdc", + "dark": "#5e5e5e", + "expressions": [ + "@component-border" + ], + "source": [ + "packages/components/step-item/step-item.less:12" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/step-item/step-item.less", + "selector": ".t-steps-item__dot--default", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-step-item-default-dot-border-color, var(--td-component-border, var(--td-gray-color-4, #dcdcdc)))" + }, + { + "file": "packages/components/step-item/step-item.less", + "selector": ".t-steps-item__dot--default", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-step-item-default-dot-border-color, var(--td-component-border, var(--td-gray-color-4, #dcdcdc)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "componentBorder": [ + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:94", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:311", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:94", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:194", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:197" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "stepItemDefaultIconColor", + "component": "step-item", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.4)", + "dark": "rgba(255, 255, 255, 35%)", + "expressions": [ + "@text-color-placeholder" + ], + "source": [ + "packages/components/step-item/step-item.less:11" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/step-item/step-item.less", + "selector": ".t-steps-item__icon--default", + "property": "color", + "kind": "render-property", + "value": "var(--td-step-item-default-icon-color, var(--td-text-color-placeholder, var(--td-font-gray-3, rgba(0, 0, 0, 0.4))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorPlaceholder": [ + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:91", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:92", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:93", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:331", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:91", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:92", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:93", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:298" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/steps/t_steps_test.dart:54", + "text": "token.textColorPlaceholder,", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "stepItemDefaultTitleColor", + "component": "step-item", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.4)", + "dark": "rgba(255, 255, 255, 35%)", + "expressions": [ + "@text-color-placeholder" + ], + "source": [ + "packages/components/step-item/step-item.less:10" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/step-item/step-item.less", + "selector": ".t-steps-item__title--default", + "property": "color", + "kind": "render-property", + "value": "var(--td-step-item-default-title-color, var(--td-text-color-placeholder, var(--td-font-gray-3, rgba(0, 0, 0, 0.4))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorPlaceholder": [ + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:91", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:92", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:93", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:331", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:91", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:92", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:93", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:298" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/steps/t_steps_test.dart:54", + "text": "token.textColorPlaceholder,", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "stepItemDescriptionColor", + "component": "step-item", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.4)", + "dark": "rgba(255, 255, 255, 35%)", + "expressions": [ + "@text-color-placeholder" + ], + "source": [ + "packages/components/step-item/step-item.less:6" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/step-item/step-item.less", + "selector": ".t-steps-item__description", + "property": "color", + "kind": "render-property", + "value": "var(--td-step-item-description-color, var(--td-text-color-placeholder, var(--td-font-gray-3, rgba(0, 0, 0, 0.4))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorPlaceholder": [ + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:91", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:92", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:93", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:331", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:91", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:92", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:93", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:298" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/steps/t_steps_test.dart:54", + "text": "token.textColorPlaceholder,", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "stepItemDotSize", + "component": "step-item", + "previousDecision": "pending", + "frozenTarget": { + "light": "8dp", + "dark": "8dp", + "expressions": [ + "16rpx" + ], + "source": [ + "packages/components/step-item/step-item.less:3" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/step-item/step-item.less", + "selector": ".t-steps-item__dot", + "property": "width", + "kind": "render-property", + "value": "var(--td-step-item-dot-size, 16rpx)" + }, + { + "file": "packages/components/step-item/step-item.less", + "selector": ".t-steps-item__dot", + "property": "height", + "kind": "render-property", + "value": "var(--td-step-item-dot-size, 16rpx)" + }, + { + "file": "packages/components/step-item/step-item.less", + "selector": ".t-steps-item__line--horizontal.t-steps-item__line--dot", + "property": "top", + "kind": "render-property", + "value": "calc(var(--td-step-item-dot-size, 16rpx) / 2)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "stepItemErrorCircleBg", + "component": "step-item", + "previousDecision": "pending", + "frozenTarget": { + "light": "#fff0ed", + "dark": "#472324", + "expressions": [ + "@error-color-1" + ], + "source": [ + "packages/components/step-item/step-item.less:27" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/step-item/step-item.less", + "selector": ".t-steps-item__circle--error", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-step-item-error-circle-bg, var(--td-error-color-1, #fff0ed))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "errorColor1": [] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "stepItemErrorCircleColor", + "component": "step-item", + "previousDecision": "pending", + "frozenTarget": { + "light": "#d54941", + "dark": "#c64751", + "expressions": [ + "@error-color" + ], + "source": [ + "packages/components/step-item/step-item.less:26" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/step-item/step-item.less", + "selector": ".t-steps-item__circle--error", + "property": "color", + "kind": "render-property", + "value": "var(--td-step-item-error-circle-color, var(--td-error-color, var(--td-error-color-6, #d54941)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "errorColor": [ + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:136", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:139", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:144", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:136", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:139", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:144" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/steps/t_steps_test.dart:50", + "text": "token.errorColor,", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "stepItemErrorDotBorderColor", + "component": "step-item", + "previousDecision": "pending", + "frozenTarget": { + "light": "#d54941", + "dark": "#c64751", + "expressions": [ + "@error-color" + ], + "source": [ + "packages/components/step-item/step-item.less:30" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/step-item/step-item.less", + "selector": ".t-steps-item__dot--error", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-step-item-error-dot-border-color, var(--td-error-color, var(--td-error-color-6, #d54941)))" + }, + { + "file": "packages/components/step-item/step-item.less", + "selector": ".t-steps-item__dot--error", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-step-item-error-dot-border-color, var(--td-error-color, var(--td-error-color-6, #d54941)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "errorColor": [ + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:136", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:139", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:144", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:136", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:139", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:144" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/steps/t_steps_test.dart:50", + "text": "token.errorColor,", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "stepItemErrorIconColor", + "component": "step-item", + "previousDecision": "pending", + "frozenTarget": { + "light": "#d54941", + "dark": "#c64751", + "expressions": [ + "@error-color" + ], + "source": [ + "packages/components/step-item/step-item.less:29" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/step-item/step-item.less", + "selector": ".t-steps-item__icon--error", + "property": "color", + "kind": "render-property", + "value": "var(--td-step-item-error-icon-color, var(--td-error-color, var(--td-error-color-6, #d54941)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "errorColor": [ + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:136", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:139", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:144", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:136", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:139", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:144" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/steps/t_steps_test.dart:50", + "text": "token.errorColor,", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "stepItemErrorTitleColor", + "component": "step-item", + "previousDecision": "pending", + "frozenTarget": { + "light": "#d54941", + "dark": "#c64751", + "expressions": [ + "@error-color" + ], + "source": [ + "packages/components/step-item/step-item.less:28" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/step-item/step-item.less", + "selector": ".t-steps-item__title--error", + "property": "color", + "kind": "render-property", + "value": "var(--td-step-item-error-title-color, var(--td-error-color, var(--td-error-color-6, #d54941)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "errorColor": [ + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:136", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:139", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:144", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:136", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:139", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:144" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/steps/t_steps_test.dart:50", + "text": "token.errorColor,", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "stepItemFinishCircleBg", + "component": "step-item", + "previousDecision": "pending", + "frozenTarget": { + "light": "#f2f3ff", + "dark": "#1b2f51", + "expressions": [ + "@brand-color-light" + ], + "source": [ + "packages/components/step-item/step-item.less:21" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/step-item/step-item.less", + "selector": ".t-steps-item__circle--finish", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-step-item-finish-circle-bg, var(--td-brand-color-light, var(--td-primary-color-1, #f2f3ff)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "brandColorLight": [ + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:79", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:79" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "stepItemFinishCircleColor", + "component": "step-item", + "previousDecision": "pending", + "frozenTarget": { + "light": "#0052d9", + "dark": "#4582e6", + "expressions": [ + "@brand-color" + ], + "source": [ + "packages/components/step-item/step-item.less:20" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/step-item/step-item.less", + "selector": ".t-steps-item__circle--finish", + "property": "color", + "kind": "render-property", + "value": "var(--td-step-item-finish-circle-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "brandColor": [ + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:58", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:64", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:67", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:70", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:80", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:85", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:101", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:174", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:310", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:58", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:64", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:67", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:70", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:80", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:85", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:101", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:171", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:193", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:196" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/steps/t_steps_test.dart:122", + "text": "expect(decoration.color, TThemeData.defaultData().brandColor);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/steps/t_steps_test.dart:367", + "text": "expect(dotDecorations[1].color, TThemeData.defaultData().brandColor);", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "stepItemFinishDotBorderColor", + "component": "step-item", + "previousDecision": "pending", + "frozenTarget": { + "light": "#0052d9", + "dark": "#4582e6", + "expressions": [ + "@brand-color" + ], + "source": [ + "packages/components/step-item/step-item.less:24" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/step-item/step-item.less", + "selector": ".t-steps-item__dot--finish", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-step-item-finish-dot-border-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + }, + { + "file": "packages/components/step-item/step-item.less", + "selector": ".t-steps-item__dot--finish", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-step-item-finish-dot-border-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "brandColor": [ + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:58", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:64", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:67", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:70", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:80", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:85", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:101", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:174", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:310", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:58", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:64", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:67", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:70", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:80", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:85", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:101", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:171", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:193", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:196" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/steps/t_steps_test.dart:122", + "text": "expect(decoration.color, TThemeData.defaultData().brandColor);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/steps/t_steps_test.dart:367", + "text": "expect(dotDecorations[1].color, TThemeData.defaultData().brandColor);", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "stepItemFinishIconColor", + "component": "step-item", + "previousDecision": "pending", + "frozenTarget": { + "light": "#0052d9", + "dark": "#4582e6", + "expressions": [ + "@brand-color" + ], + "source": [ + "packages/components/step-item/step-item.less:23" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/step-item/step-item.less", + "selector": ".t-steps-item__icon--finish", + "property": "color", + "kind": "render-property", + "value": "var(--td-step-item-finish-icon-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "brandColor": [ + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:58", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:64", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:67", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:70", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:80", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:85", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:101", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:174", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:310", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:58", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:64", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:67", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:70", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:80", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:85", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:101", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:171", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:193", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:196" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/steps/t_steps_test.dart:122", + "text": "expect(decoration.color, TThemeData.defaultData().brandColor);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/steps/t_steps_test.dart:367", + "text": "expect(dotDecorations[1].color, TThemeData.defaultData().brandColor);", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "stepItemFinishLineColor", + "component": "step-item", + "previousDecision": "pending", + "frozenTarget": { + "light": "#0052d9", + "dark": "#4582e6", + "expressions": [ + "@brand-color" + ], + "source": [ + "packages/components/step-item/step-item.less:33" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/step-item/step-item.less", + "selector": ".t-steps-item__line--finish,\n.t-steps-item__line--reverse.t-steps-item__line--process", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-step-item-finish-line-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "brandColor": [ + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:58", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:64", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:67", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:70", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:80", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:85", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:101", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:174", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:310", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:58", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:64", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:67", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:70", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:80", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:85", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:101", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:171", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:193", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:196" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/steps/t_steps_test.dart:122", + "text": "expect(decoration.color, TThemeData.defaultData().brandColor);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/steps/t_steps_test.dart:367", + "text": "expect(dotDecorations[1].color, TThemeData.defaultData().brandColor);", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "stepItemFinishTitleColor", + "component": "step-item", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.9)", + "dark": "rgba(255, 255, 255, 90%)", + "expressions": [ + "@text-color-primary" + ], + "source": [ + "packages/components/step-item/step-item.less:22" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/step-item/step-item.less", + "selector": ".t-steps-item__title--finish", + "property": "color", + "kind": "render-property", + "value": "var(--td-step-item-finish-title-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorPrimary": [ + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:81", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:175", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:278", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:81", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:172" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/steps/t_steps_test.dart:46", + "text": "token.textColorPrimary,", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "stepItemLineColor", + "component": "step-item", + "previousDecision": "pending", + "frozenTarget": { + "light": "#dcdcdc", + "dark": "#5e5e5e", + "expressions": [ + "@component-border" + ], + "source": [ + "packages/components/step-item/step-item.less:32" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/step-item/step-item.less", + "selector": ".t-steps-item__line", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-step-item-line-color, var(--td-component-border, var(--td-gray-color-4, #dcdcdc)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "componentBorder": [ + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:94", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:311", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:94", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:194", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:197" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "stepItemProcessCircleBg", + "component": "step-item", + "previousDecision": "pending", + "frozenTarget": { + "light": "#0052d9", + "dark": "#4582e6", + "expressions": [ + "@brand-color" + ], + "source": [ + "packages/components/step-item/step-item.less:15" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/step-item/step-item.less", + "selector": ".t-steps-item__circle--process", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-step-item-process-circle-bg, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "brandColor": [ + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:58", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:64", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:67", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:70", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:80", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:85", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:101", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:174", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:310", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:58", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:64", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:67", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:70", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:80", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:85", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:101", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:171", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:193", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:196" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/steps/t_steps_test.dart:122", + "text": "expect(decoration.color, TThemeData.defaultData().brandColor);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/steps/t_steps_test.dart:367", + "text": "expect(dotDecorations[1].color, TThemeData.defaultData().brandColor);", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "stepItemProcessCircleColor", + "component": "step-item", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(255, 255, 255, 1)", + "dark": "rgba(255, 255, 255, 90%)", + "expressions": [ + "@text-color-anti" + ], + "source": [ + "packages/components/step-item/step-item.less:14" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/step-item/step-item.less", + "selector": ".t-steps-item__circle--process", + "property": "color", + "kind": "render-property", + "value": "var(--td-step-item-process-circle-color, var(--td-text-color-anti, var(--td-font-white-1, #ffffff)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorAnti": [ + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:61", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:61" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "stepItemProcessDotBorderColor", + "component": "step-item", + "previousDecision": "pending", + "frozenTarget": { + "light": "#0052d9", + "dark": "#4582e6", + "expressions": [ + "@brand-color" + ], + "source": [ + "packages/components/step-item/step-item.less:18" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/step-item/step-item.less", + "selector": ".t-steps-item__dot--process", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-step-item-process-dot-border-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + }, + { + "file": "packages/components/step-item/step-item.less", + "selector": ".t-steps-item__dot--process", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-step-item-process-dot-border-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "brandColor": [ + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:58", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:64", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:67", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:70", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:80", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:85", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:101", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:174", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:310", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:58", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:64", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:67", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:70", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:80", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:85", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:101", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:171", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:193", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:196" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/steps/t_steps_test.dart:122", + "text": "expect(decoration.color, TThemeData.defaultData().brandColor);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/steps/t_steps_test.dart:367", + "text": "expect(dotDecorations[1].color, TThemeData.defaultData().brandColor);", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "stepItemProcessIconColor", + "component": "step-item", + "previousDecision": "pending", + "frozenTarget": { + "light": "#0052d9", + "dark": "#4582e6", + "expressions": [ + "@brand-color" + ], + "source": [ + "packages/components/step-item/step-item.less:17" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/step-item/step-item.less", + "selector": ".t-steps-item__icon--process", + "property": "color", + "kind": "render-property", + "value": "var(--td-step-item-process-icon-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "brandColor": [ + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:58", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:64", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:67", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:70", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:80", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:85", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:101", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:174", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:310", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:58", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:64", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:67", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:70", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:80", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:85", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:101", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:171", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:193", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:196" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/steps/t_steps_test.dart:122", + "text": "expect(decoration.color, TThemeData.defaultData().brandColor);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/steps/t_steps_test.dart:367", + "text": "expect(dotDecorations[1].color, TThemeData.defaultData().brandColor);", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "stepItemProcessTitleColor", + "component": "step-item", + "previousDecision": "pending", + "frozenTarget": { + "light": "#0052d9", + "dark": "#4582e6", + "expressions": [ + "@brand-color" + ], + "source": [ + "packages/components/step-item/step-item.less:16" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/step-item/step-item.less", + "selector": ".t-steps-item__title--process", + "property": "color", + "kind": "render-property", + "value": "var(--td-step-item-process-title-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "brandColor": [ + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:58", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:64", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:67", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:70", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:80", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:85", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:101", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:174", + "tdesign-component/lib/src/components/steps/t_steps_vertical_item.dart:310", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:58", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:64", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:67", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:70", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:80", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:85", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:101", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:171", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:193", + "tdesign-component/lib/src/components/steps/t_steps_horizontal_item.dart:196" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/steps/t_steps_test.dart:122", + "text": "expect(decoration.color, TThemeData.defaultData().brandColor);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/steps/t_steps_test.dart:367", + "text": "expect(dotDecorations[1].color, TThemeData.defaultData().brandColor);", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "stepperBorderColor", + "component": "stepper", + "previousDecision": "pending", + "frozenTarget": { + "light": "#dcdcdc", + "dark": "#5e5e5e", + "expressions": [ + "@component-border" + ], + "source": [ + "packages/components/stepper/stepper.less:18" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/stepper/stepper.less", + "selector": ".t-stepper__minus--outline,\n.t-stepper__plus--outline", + "property": "border", + "kind": "render-property", + "value": "2rpx solid var(--td-stepper-border-color, var(--td-component-border, var(--td-gray-color-4, #dcdcdc)))" + }, + { + "file": "packages/components/stepper/stepper.less", + "selector": ".t-stepper__input--outline", + "property": "border-top", + "kind": "render-property", + "value": "2rpx solid var(--td-stepper-border-color, var(--td-component-border, var(--td-gray-color-4, #dcdcdc)))" + }, + { + "file": "packages/components/stepper/stepper.less", + "selector": ".t-stepper__input--outline", + "property": "border-bottom", + "kind": "render-property", + "value": "2rpx solid var(--td-stepper-border-color, var(--td-component-border, var(--td-gray-color-4, #dcdcdc)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "componentBorder": [ + "tdesign-component/lib/src/components/stepper/t_stepper.dart:596" + ], + "borderColor": [ + "tdesign-component/lib/src/components/stepper/t_stepper_theme_data.dart:27", + "tdesign-component/lib/src/components/stepper/t_stepper_theme_data.dart:80", + "tdesign-component/lib/src/components/stepper/t_stepper_theme_data.dart:106", + "tdesign-component/lib/src/components/stepper/t_stepper_theme_data.dart:122", + "tdesign-component/lib/src/components/stepper/t_stepper_theme_interpolation.dart:80", + "tdesign-component/lib/src/components/stepper/t_stepper_theme_interpolation.dart:81", + "tdesign-component/lib/src/components/stepper/t_stepper_theme_interpolation.dart:82", + "tdesign-component/lib/src/components/stepper/t_stepper_theme_interpolation.dart:110", + "tdesign-component/lib/src/components/stepper/t_stepper_theme_interpolation.dart:124", + "tdesign-component/lib/src/components/stepper/t_stepper.dart:169", + "tdesign-component/lib/src/components/stepper/t_stepper.dart:171", + "tdesign-component/lib/src/components/stepper/t_stepper.dart:350", + "tdesign-component/lib/src/components/stepper/t_stepper.dart:423", + "tdesign-component/lib/src/components/stepper/t_stepper.dart:446", + "tdesign-component/lib/src/components/stepper/t_stepper.dart:463", + "tdesign-component/lib/src/components/stepper/t_stepper.dart:596", + "tdesign-component/lib/src/components/stepper/t_stepper.dart:617" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "stepperBorderRadius", + "component": "stepper", + "previousDecision": "pending", + "frozenTarget": { + "light": "3dp", + "dark": "3dp", + "expressions": [ + "@radius-small" + ], + "source": [ + "packages/components/stepper/stepper.less:17" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/stepper/stepper.less", + "selector": ".t-stepper__minus--outline,\n.t-stepper__minus--filled", + "property": "border-top-left-radius", + "kind": "render-property", + "value": "var(--td-stepper-border-radius, var(--td-radius-small, 6rpx))" + }, + { + "file": "packages/components/stepper/stepper.less", + "selector": ".t-stepper__minus--outline,\n.t-stepper__minus--filled", + "property": "border-bottom-left-radius", + "kind": "render-property", + "value": "var(--td-stepper-border-radius, var(--td-radius-small, 6rpx))" + }, + { + "file": "packages/components/stepper/stepper.less", + "selector": ".t-stepper__plus--outline,\n.t-stepper__plus--filled", + "property": "border-top-right-radius", + "kind": "render-property", + "value": "var(--td-stepper-border-radius, var(--td-radius-small, 6rpx))" + }, + { + "file": "packages/components/stepper/stepper.less", + "selector": ".t-stepper__plus--outline,\n.t-stepper__plus--filled", + "property": "border-bottom-right-radius", + "kind": "render-property", + "value": "var(--td-stepper-border-radius, var(--td-radius-small, 6rpx))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "radiusSmall": [ + "tdesign-component/lib/src/components/stepper/t_stepper.dart:607" + ], + "borderRadius": [ + "tdesign-component/lib/src/components/stepper/t_stepper_theme_data.dart:21", + "tdesign-component/lib/src/components/stepper/t_stepper_theme_data.dart:59", + "tdesign-component/lib/src/components/stepper/t_stepper_theme_data.dart:100", + "tdesign-component/lib/src/components/stepper/t_stepper_theme_data.dart:114", + "tdesign-component/lib/src/components/stepper/t_stepper_theme_interpolation.dart:43", + "tdesign-component/lib/src/components/stepper/t_stepper_theme_interpolation.dart:44", + "tdesign-component/lib/src/components/stepper/t_stepper_theme_interpolation.dart:45", + "tdesign-component/lib/src/components/stepper/t_stepper_theme_interpolation.dart:104", + "tdesign-component/lib/src/components/stepper/t_stepper_theme_interpolation.dart:118", + "tdesign-component/lib/src/components/stepper/t_stepper.dart:184", + "tdesign-component/lib/src/components/stepper/t_stepper.dart:186", + "tdesign-component/lib/src/components/stepper/t_stepper.dart:352", + "tdesign-component/lib/src/components/stepper/t_stepper.dart:355", + "tdesign-component/lib/src/components/stepper/t_stepper.dart:358", + "tdesign-component/lib/src/components/stepper/t_stepper.dart:361", + "tdesign-component/lib/src/components/stepper/t_stepper.dart:364", + "tdesign-component/lib/src/components/stepper/t_stepper.dart:367", + "tdesign-component/lib/src/components/stepper/t_stepper.dart:382", + "tdesign-component/lib/src/components/stepper/t_stepper.dart:409", + "tdesign-component/lib/src/components/stepper/t_stepper.dart:439", + "tdesign-component/lib/src/components/stepper/t_stepper.dart:456", + "tdesign-component/lib/src/components/stepper/t_stepper.dart:605", + "tdesign-component/lib/src/components/stepper/t_stepper.dart:606" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/stepper/t_stepper_contract_test.dart:238", + "text": "BorderRadius.circular((token.radiusSmall + 10) / 2),", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/stepper/t_stepper_test.dart:320", + "text": "final expected = BorderRadius.circular(token.radiusSmall);", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "stepperInputColor", + "component": "stepper", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.9)", + "dark": "rgba(255, 255, 255, 90%)", + "expressions": [ + "@text-color-primary" + ], + "source": [ + "packages/components/stepper/stepper.less:19" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/stepper/stepper.less", + "selector": ".t-stepper", + "property": "color", + "kind": "render-property", + "value": "var(--td-stepper-input-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorPrimary": [ + "tdesign-component/lib/src/components/stepper/t_stepper.dart:551" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/stepper/t_stepper_contract_test.dart:293", + "text": "TThemeData.defaultData().textColorPrimary,", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/stepper/t_stepper_contract_test.dart:305", + "text": "TThemeData.defaultData().textColorPrimary,", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/stepper/t_stepper_test.dart:561", + "text": "TThemeData.defaultData().textColorPrimary,", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/stepper/t_stepper_test.dart:569", + "text": "TThemeData.defaultData().textColorPrimary,", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "strokeColor", + "component": "paragraph", + "previousDecision": "pending", + "frozenTarget": { + "light": "#e7e7e7", + "dark": "#e7e7e7", + "expressions": [ + "#e7e7e7" + ], + "source": [ + "packages/components/paragraph/_example/paragraph.less:23" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/paragraph/_example/paragraph.less", + "selector": ".typography-example--border::after", + "property": "border-bottom", + "kind": "render-property", + "value": "1px solid var(--td-stroke-color, #e7e7e7)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "swiperItemPadding", + "component": "swiper", + "previousDecision": "pending", + "frozenTarget": { + "light": "0", + "dark": "0", + "expressions": [ + "0" + ], + "source": [ + "packages/components/swiper/swiper.less:4" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/swiper/swiper.less", + "selector": ".t-swiper__item", + "property": "padding", + "kind": "render-property", + "value": "var(--td-swiper-item-padding, 0)" + } + ], + "nonLessReferences": [ + { + "file": "packages/components/swiper/_example/cards/index.wxss", + "line": 3, + "text": "--td-swiper-item-padding: 0 12rpx;" + } + ] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "swiperNavBtnBgColor", + "component": "swiper-nav", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.4)", + "dark": "rgba(0, 0, 0, 40%)", + "expressions": [ + "@font-gray-3" + ], + "source": [ + "packages/components/swiper-nav/swiper-nav.less:17" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/swiper-nav/swiper-nav.less", + "selector": ".t-swiper-nav__btn--prev,\n.t-swiper-nav__btn--next", + "property": "background", + "kind": "render-property", + "value": "var(--td-swiper-nav-btn-bg-color, var(--td-font-gray-3, rgba(0, 0, 0, 0.4)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "fontGray3": [ + "tdesign-component/lib/src/components/swiper/t_swiper.dart:873", + "tdesign-component/lib/src/components/swiper/t_swiper.dart:875" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/swiper/t_swiper_test.dart:831", + "text": "expect(button.style?.backgroundColor?.resolve(state), token.fontGray3);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/swiper/t_swiper_test.dart:1276", + "text": "? td.fontGray3.withValues(alpha: 0.35)", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/swiper/t_swiper_test.dart:1277", + "text": ": td.fontGray3,", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "swiperNavBtnColor", + "component": "swiper-nav", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(255, 255, 255, 1)", + "dark": "rgba(255, 255, 255, 90%)", + "expressions": [ + "@text-color-anti" + ], + "source": [ + "packages/components/swiper-nav/swiper-nav.less:16" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/swiper-nav/swiper-nav.less", + "selector": ".t-swiper-nav__btn--prev::after,\n.t-swiper-nav__btn--next::after", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-swiper-nav-btn-color, var(--td-text-color-anti, var(--td-font-white-1, #ffffff)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorAnti": [ + "tdesign-component/lib/src/components/swiper/t_swiper.dart:800", + "tdesign-component/lib/src/components/swiper/t_swiper.dart:802", + "tdesign-component/lib/src/components/swiper/t_swiper.dart:823", + "tdesign-component/lib/src/components/swiper/t_swiper.dart:874", + "tdesign-component/lib/src/components/swiper/t_swiper.dart:876" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/swiper/t_swiper_test.dart:826", + "text": "token.textColorAnti,", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/swiper/t_swiper_test.dart:834", + "text": "token.textColorAnti,", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/swiper/t_swiper_test.dart:1284", + "text": "? td.textColorAnti.withValues(alpha: 0.55)", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/swiper/t_swiper_test.dart:1285", + "text": ": td.textColorAnti,", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "swiperNavBtnSize", + "component": "swiper-nav", + "previousDecision": "pending", + "frozenTarget": { + "light": "24dp", + "dark": "24dp", + "expressions": [ + "48rpx" + ], + "source": [ + "packages/components/swiper-nav/swiper-nav.less:18" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/swiper-nav/swiper-nav.less", + "selector": ".t-swiper-nav__btn--prev,\n.t-swiper-nav__btn--next", + "property": "width", + "kind": "render-property", + "value": "var(--td-swiper-nav-btn-size, 48rpx)" + }, + { + "file": "packages/components/swiper-nav/swiper-nav.less", + "selector": ".t-swiper-nav__btn--prev,\n.t-swiper-nav__btn--next", + "property": "height", + "kind": "render-property", + "value": "var(--td-swiper-nav-btn-size, 48rpx)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "swiperNavDotActiveColor", + "component": "swiper-nav", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(255, 255, 255, 1)", + "dark": "rgba(255, 255, 255, 90%)", + "expressions": [ + "@text-color-anti" + ], + "source": [ + "packages/components/swiper-nav/swiper-nav.less:5" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/swiper-nav/swiper-nav.less", + "selector": ".t-swiper-nav__dots-item--active,\n.t-swiper-nav__dots-bar-item--active", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-swiper-nav-dot-active-color, var(--td-text-color-anti, var(--td-font-white-1, #ffffff)))" + }, + { + "file": "packages/components/swiper-nav/swiper-nav.less", + "selector": ".t-swiper-nav__dots-bar-item--active", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-swiper-nav-dot-active-color, var(--td-text-color-anti, var(--td-font-white-1, #ffffff)))" + } + ], + "nonLessReferences": [ + { + "file": "packages/components/swiper/_example/cards/index.wxss", + "line": 5, + "text": "--td-swiper-nav-dot-active-color: var(--td-brand-color, #0052d9);" + } + ] + }, + "flutterNameLocators": { + "textColorAnti": [ + "tdesign-component/lib/src/components/swiper/t_swiper.dart:800", + "tdesign-component/lib/src/components/swiper/t_swiper.dart:802", + "tdesign-component/lib/src/components/swiper/t_swiper.dart:823", + "tdesign-component/lib/src/components/swiper/t_swiper.dart:874", + "tdesign-component/lib/src/components/swiper/t_swiper.dart:876" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/swiper/t_swiper_test.dart:826", + "text": "token.textColorAnti,", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/swiper/t_swiper_test.dart:834", + "text": "token.textColorAnti,", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/swiper/t_swiper_test.dart:1284", + "text": "? td.textColorAnti.withValues(alpha: 0.55)", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/swiper/t_swiper_test.dart:1285", + "text": ": td.textColorAnti,", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "swiperNavDotColor", + "component": "swiper-nav", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(255, 255, 255, 0.55)", + "dark": "rgba(255, 255, 255, 55%)", + "expressions": [ + "@font-white-2" + ], + "source": [ + "packages/components/swiper-nav/swiper-nav.less:4" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/swiper-nav/swiper-nav.less", + "selector": ".t-swiper-nav__dots-item,\n.t-swiper-nav__dots-bar-item", + "property": "background", + "kind": "render-property", + "value": "var(--td-swiper-nav-dot-color, var(--td-font-white-2, rgba(255, 255, 255, 0.55)))" + } + ], + "nonLessReferences": [ + { + "file": "packages/components/swiper/_example/cards/index.wxss", + "line": 4, + "text": "--td-swiper-nav-dot-color: var(--td-bg-color-component, #e7e7e7);" + } + ] + }, + "flutterNameLocators": { + "fontWhite2": [] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "swiperNavDotsBarActiveWidth", + "component": "swiper-nav", + "previousDecision": "pending", + "frozenTarget": { + "light": "20dp", + "dark": "20dp", + "expressions": [ + "40rpx" + ], + "source": [ + "packages/components/swiper-nav/swiper-nav.less:7" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/swiper-nav/swiper-nav.less", + "selector": ".t-swiper-nav__dots-bar-item--vertical.t-swiper-nav__dots-bar-item--active", + "property": "height", + "kind": "render-property", + "value": "var(--td-swiper-nav-dots-bar-active-width, 40rpx)" + }, + { + "file": "packages/components/swiper-nav/swiper-nav.less", + "selector": ".t-swiper-nav__dots-bar-item--active", + "property": "width", + "kind": "render-property", + "value": "var(--td-swiper-nav-dots-bar-active-width, 40rpx)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "swiperNavDotSize", + "component": "swiper-nav", + "previousDecision": "pending", + "frozenTarget": { + "light": "6dp", + "dark": "6dp", + "expressions": [ + "12rpx" + ], + "source": [ + "packages/components/swiper-nav/swiper-nav.less:6" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/swiper-nav/swiper-nav.less", + "selector": ".t-swiper-nav__dots-item,\n.t-swiper-nav__dots-bar-item", + "property": "width", + "kind": "render-property", + "value": "var(--td-swiper-nav-dot-size, 12rpx)" + }, + { + "file": "packages/components/swiper-nav/swiper-nav.less", + "selector": ".t-swiper-nav__dots-item,\n.t-swiper-nav__dots-bar-item", + "property": "height", + "kind": "render-property", + "value": "var(--td-swiper-nav-dot-size, 12rpx)" + }, + { + "file": "packages/components/swiper-nav/swiper-nav.less", + "selector": ".t-swiper-nav__dots-bar-item--vertical.t-swiper-nav__dots-bar-item--active", + "property": "width", + "kind": "render-property", + "value": "var(--td-swiper-nav-dot-size, 12rpx)" + }, + { + "file": "packages/components/swiper-nav/swiper-nav.less", + "selector": ".t-swiper-nav__dots-bar-item--active", + "property": "border-radius", + "kind": "render-property", + "value": "calc(var(--td-swiper-nav-dot-size, 12rpx) / 2)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "swiperNavFractionBgColor", + "component": "swiper-nav", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.4)", + "dark": "rgba(0, 0, 0, 40%)", + "expressions": [ + "@font-gray-3" + ], + "source": [ + "packages/components/swiper-nav/swiper-nav.less:11" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/swiper-nav/swiper-nav.less", + "selector": ".t-swiper-nav__fraction", + "property": "background", + "kind": "render-property", + "value": "var(--td-swiper-nav-fraction-bg-color, var(--td-font-gray-3, rgba(0, 0, 0, 0.4)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "fontGray3": [ + "tdesign-component/lib/src/components/swiper/t_swiper.dart:873", + "tdesign-component/lib/src/components/swiper/t_swiper.dart:875" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/swiper/t_swiper_test.dart:831", + "text": "expect(button.style?.backgroundColor?.resolve(state), token.fontGray3);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/swiper/t_swiper_test.dart:1276", + "text": "? td.fontGray3.withValues(alpha: 0.35)", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/swiper/t_swiper_test.dart:1277", + "text": ": td.fontGray3,", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "swiperNavFractionColor", + "component": "swiper-nav", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(255, 255, 255, 1)", + "dark": "rgba(255, 255, 255, 90%)", + "expressions": [ + "@text-color-anti" + ], + "source": [ + "packages/components/swiper-nav/swiper-nav.less:10" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/swiper-nav/swiper-nav.less", + "selector": ".t-swiper-nav__fraction", + "property": "color", + "kind": "render-property", + "value": "var(--td-swiper-nav-fraction-color, var(--td-text-color-anti, var(--td-font-white-1, #ffffff)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorAnti": [ + "tdesign-component/lib/src/components/swiper/t_swiper.dart:800", + "tdesign-component/lib/src/components/swiper/t_swiper.dart:802", + "tdesign-component/lib/src/components/swiper/t_swiper.dart:823", + "tdesign-component/lib/src/components/swiper/t_swiper.dart:874", + "tdesign-component/lib/src/components/swiper/t_swiper.dart:876" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/swiper/t_swiper_test.dart:826", + "text": "token.textColorAnti,", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/swiper/t_swiper_test.dart:834", + "text": "token.textColorAnti,", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/swiper/t_swiper_test.dart:1284", + "text": "? td.textColorAnti.withValues(alpha: 0.55)", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/swiper/t_swiper_test.dart:1285", + "text": ": td.textColorAnti,", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "swiperNavFractionFont", + "component": "swiper-nav", + "previousDecision": "pending", + "frozenTarget": { + "light": "12dp / 20dp PingFang SC, Microsoft YaHei, Arial Regular", + "dark": "12dp / 20dp PingFang SC, Microsoft YaHei, Arial Regular", + "expressions": [ + "@font-body-small" + ], + "source": [ + "packages/components/swiper-nav/swiper-nav.less:13" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/swiper-nav/swiper-nav.less", + "selector": ".t-swiper-nav__fraction", + "property": "font", + "kind": "render-property", + "value": "var(--td-swiper-nav-fraction-font, var(--td-font-body-small, 24rpx / 40rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "fontBodySmall": [ + "tdesign-component/lib/src/components/swiper/t_swiper.dart:821" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "swiperNavFractionHeight", + "component": "swiper-nav", + "previousDecision": "pending", + "frozenTarget": { + "light": "24dp", + "dark": "24dp", + "expressions": [ + "48rpx" + ], + "source": [ + "packages/components/swiper-nav/swiper-nav.less:12" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/swiper-nav/swiper-nav.less", + "selector": ".t-swiper-nav__fraction", + "property": "height", + "kind": "render-property", + "value": "var(--td-swiper-nav-fraction-height, 48rpx)" + }, + { + "file": "packages/components/swiper-nav/swiper-nav.less", + "selector": ".t-swiper-nav__fraction", + "property": "border-radius", + "kind": "render-property", + "value": "calc(var(--td-swiper-nav-fraction-height, 48rpx) / 2)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "swiperRadius", + "component": "swiper", + "previousDecision": "pending", + "frozenTarget": { + "light": "9dp", + "dark": "9dp", + "expressions": [ + "@radius-large" + ], + "source": [ + "packages/components/swiper/swiper.less:3" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/swiper/swiper.less", + "selector": ".t-swiper-host", + "property": "border-radius", + "kind": "render-property", + "value": "var(--td-swiper-radius, var(--td-radius-large, 18rpx))" + } + ], + "nonLessReferences": [ + { + "file": "packages/components/swiper/_example/cards/index.wxss", + "line": 2, + "text": "--td-swiper-radius: 0;" + } + ] + }, + "flutterNameLocators": { + "radiusLarge": [ + "tdesign-component/lib/src/components/swiper/t_swiper.dart:582" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "switchCheckedColor", + "component": "switch", + "previousDecision": "pending", + "frozenTarget": { + "light": "#0052d9", + "dark": "#4582e6", + "expressions": [ + "@brand-color" + ], + "source": [ + "packages/components/switch/switch.less:3" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/switch/switch.less", + "selector": ".t-switch__label--checked", + "property": "color", + "kind": "render-property", + "value": "var(--td-switch-label-checked-color, var(--td-switch-checked-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9))))" + }, + { + "file": "packages/components/switch/switch.less", + "selector": ".t-switch__body--checked", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-switch-checked-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + } + ], + "nonLessReferences": [ + { + "file": "packages/components/switch/_example/color/index.wxss", + "line": 2, + "text": "--td-switch-checked-color: #00a870;" + } + ] + }, + "flutterNameLocators": { + "brandColor": [ + "tdesign-component/lib/src/components/switch/t_switch_resolve.dart:60", + "tdesign-component/lib/src/components/switch/t_switch_resolve.dart:72", + "tdesign-component/lib/src/components/switch/t_switch_resolve.dart:73" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/switch/t_switch_test.dart:665", + "observedScenariosPerSdk": 8, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "switchCheckedDisabledColor", + "component": "switch", + "previousDecision": "pending", + "frozenTarget": { + "light": "#b5c7ff", + "dark": "#143975", + "expressions": [ + "@brand-color-disabled" + ], + "source": [ + "packages/components/switch/switch.less:4" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/switch/switch.less", + "selector": ".t-switch__label--checked.t-switch__label--disabled", + "property": "color", + "kind": "render-property", + "value": "var(--td-switch-checked-disabled-color, var(--td-brand-color-disabled, var(--td-primary-color-3, #b5c7ff)))" + }, + { + "file": "packages/components/switch/switch.less", + "selector": ".t-switch__body--checked.t-switch__body--disabled", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-switch-checked-disabled-color, var(--td-brand-color-disabled, var(--td-primary-color-3, #b5c7ff)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "brandColorDisabled": [ + "tdesign-component/lib/src/components/switch/t_switch_resolve.dart:64" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/switch/t_switch_test.dart:665", + "observedScenariosPerSdk": 8, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "switchDotDisabledColor", + "component": "switch", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(255, 255, 255, 1)", + "dark": "rgba(255, 255, 255, 55%)", + "expressions": [ + "@font-white-1" + ], + "source": [ + "packages/components/switch/switch.less:7" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/switch/switch.less", + "selector": ".t-switch__dot--disabled", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-switch-dot-disabled-color, var(--td-font-white-1, #ffffff))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "fontWhite1": [ + "tdesign-component/lib/src/components/switch/t_switch_resolve.dart:70", + "tdesign-component/lib/src/components/switch/t_switch_resolve.dart:72" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/switch/t_switch_test.dart:665", + "observedScenariosPerSdk": 8, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "switchDotHorizontalMargin", + "component": "switch", + "previousDecision": "pending", + "frozenTarget": { + "light": "3dp", + "dark": "3dp", + "expressions": [ + "6rpx" + ], + "source": [ + "packages/components/switch/switch.less:25" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/switch/switch.less", + "selector": ".t-switch__dot", + "property": "left", + "kind": "render-property", + "value": "var(--td-switch-dot-horizontal-margin, 6rpx)" + }, + { + "file": "packages/components/switch/switch.less", + "selector": ".t-switch__dot--checked", + "property": "left", + "kind": "render-property", + "value": "calc(var(--td-switch-width, 90rpx) - var(--td-switch-dot-size, 44rpx) - var(--td-switch-dot-horizontal-margin, 6rpx))" + }, + { + "file": "packages/components/switch/switch.less", + "selector": ".t-switch__dot--large.t-switch__dot--checked", + "property": "left", + "kind": "render-property", + "value": "calc(var(--td-switch-large-width, 104rpx) - var(--td-switch-dot-large-size, 52rpx) - var(--td-switch-dot-horizontal-margin, 6rpx))" + }, + { + "file": "packages/components/switch/switch.less", + "selector": ".t-switch__dot--small.t-switch__dot--checked", + "property": "left", + "kind": "render-property", + "value": "calc(var(--td-switch-small-width, 78rpx) - var(--td-switch-dot-small-size, 36rpx) - var(--td-switch-dot-horizontal-margin, 6rpx))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "switchDotLargeSize", + "component": "switch", + "previousDecision": "pending", + "frozenTarget": { + "light": "26dp", + "dark": "26dp", + "expressions": [ + "52rpx" + ], + "source": [ + "packages/components/switch/switch.less:30" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/switch/switch.less", + "selector": ".t-switch__dot--large", + "property": "width", + "kind": "render-property", + "value": "var(--td-switch-dot-large-size, 52rpx)" + }, + { + "file": "packages/components/switch/switch.less", + "selector": ".t-switch__dot--large", + "property": "height", + "kind": "render-property", + "value": "var(--td-switch-dot-large-size, 52rpx)" + }, + { + "file": "packages/components/switch/switch.less", + "selector": ".t-switch__dot--large.t-switch__dot--checked", + "property": "left", + "kind": "render-property", + "value": "calc(var(--td-switch-large-width, 104rpx) - var(--td-switch-dot-large-size, 52rpx) - var(--td-switch-dot-horizontal-margin, 6rpx))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-difference-needs-resolution", + "runtimeDefaultVerified": false, + "testEntry": "tdesign-component/test/components/switch/t_switch_test.dart:665", + "observedScenariosPerSdk": 10, + "hasCustomTokenObservation": false, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Resolve recorded target/runtime differences through an implementation fix or documented design/contract adjudication.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "switchDotPlainHorizontalMargin", + "component": "switch", + "previousDecision": "pending", + "frozenTarget": { + "light": "5dp", + "dark": "5dp", + "expressions": [ + "10rpx" + ], + "source": [ + "packages/components/switch/switch.less:26" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/switch/switch.less", + "selector": ".t-switch__dot--plain:not(.t-switch__dot--checked)", + "property": "left", + "kind": "render-property", + "value": "var(--td-switch-dot-plain-horizontal-margin, 10rpx)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "switchDotPlainLargeSize", + "component": "switch", + "previousDecision": "pending", + "frozenTarget": { + "light": "22dp", + "dark": "22dp", + "expressions": [ + "44rpx" + ], + "source": [ + "packages/components/switch/switch.less:31" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/switch/switch.less", + "selector": ".t-switch__dot--large.t-switch__dot--plain:not(.t-switch__dot--checked)", + "property": "width", + "kind": "render-property", + "value": "var(--td-switch-dot-plain-large-size, 44rpx)" + }, + { + "file": "packages/components/switch/switch.less", + "selector": ".t-switch__dot--large.t-switch__dot--plain:not(.t-switch__dot--checked)", + "property": "height", + "kind": "render-property", + "value": "var(--td-switch-dot-plain-large-size, 44rpx)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-difference-needs-resolution", + "runtimeDefaultVerified": false, + "testEntry": "tdesign-component/test/components/switch/t_switch_test.dart:665", + "observedScenariosPerSdk": 2, + "hasCustomTokenObservation": false, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Resolve recorded target/runtime differences through an implementation fix or documented design/contract adjudication.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "switchDotPlainSize", + "component": "switch", + "previousDecision": "pending", + "frozenTarget": { + "light": "18dp", + "dark": "18dp", + "expressions": [ + "36rpx" + ], + "source": [ + "packages/components/switch/switch.less:24" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/switch/switch.less", + "selector": ".t-switch__dot--plain:not(.t-switch__dot--checked)", + "property": "width", + "kind": "render-property", + "value": "var(--td-switch-dot-plain-size, 36rpx)" + }, + { + "file": "packages/components/switch/switch.less", + "selector": ".t-switch__dot--plain:not(.t-switch__dot--checked)", + "property": "height", + "kind": "render-property", + "value": "var(--td-switch-dot-plain-size, 36rpx)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-difference-needs-resolution", + "runtimeDefaultVerified": false, + "testEntry": "tdesign-component/test/components/switch/t_switch_test.dart:665", + "observedScenariosPerSdk": 2, + "hasCustomTokenObservation": false, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Resolve recorded target/runtime differences through an implementation fix or documented design/contract adjudication.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "switchDotPlainSmallSize", + "component": "switch", + "previousDecision": "pending", + "frozenTarget": { + "light": "14dp", + "dark": "14dp", + "expressions": [ + "28rpx" + ], + "source": [ + "packages/components/switch/switch.less:35" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/switch/switch.less", + "selector": ".t-switch__dot--small.t-switch__dot--plain:not(.t-switch__dot--checked)", + "property": "width", + "kind": "render-property", + "value": "var(--td-switch-dot-plain-small-size, 28rpx)" + }, + { + "file": "packages/components/switch/switch.less", + "selector": ".t-switch__dot--small.t-switch__dot--plain:not(.t-switch__dot--checked)", + "property": "height", + "kind": "render-property", + "value": "var(--td-switch-dot-plain-small-size, 28rpx)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-difference-needs-resolution", + "runtimeDefaultVerified": false, + "testEntry": "tdesign-component/test/components/switch/t_switch_test.dart:665", + "observedScenariosPerSdk": 2, + "hasCustomTokenObservation": false, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Resolve recorded target/runtime differences through an implementation fix or documented design/contract adjudication.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "switchDotShadow", + "component": "switch", + "previousDecision": "pending", + "frozenTarget": { + "light": "0 1px 10px rgba(0, 0, 0, 5%), 0 4px 5px rgba(0, 0, 0, 8%), 0 2px 4px -1px rgba(0, 0, 0, 12%)", + "dark": "0 4px 6px rgba(0, 0, 0, 6%), 0 1px 10px rgba(0, 0, 0, 8%), 0 2px 4px rgba(0, 0, 0, 12%)", + "expressions": [ + "@shadow-1" + ], + "source": [ + "packages/components/switch/switch.less:27" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/switch/switch.less", + "selector": ".t-switch__dot", + "property": "box-shadow", + "kind": "render-property", + "value": "var(--td-switch-dot-shadow, var(--td-shadow-1, 0 1px 10px rgba(0, 0, 0, 0.05), 0 4px 5px rgba(0, 0, 0, 0.08), 0 2px 4px -1px rgba(0, 0, 0, 0.12)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "shadow1": [] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "switchDotSize", + "component": "switch", + "previousDecision": "pending", + "frozenTarget": { + "light": "22dp", + "dark": "22dp", + "expressions": [ + "44rpx" + ], + "source": [ + "packages/components/switch/switch.less:23" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/switch/switch.less", + "selector": ".t-switch__dot", + "property": "width", + "kind": "render-property", + "value": "var(--td-switch-dot-size, 44rpx)" + }, + { + "file": "packages/components/switch/switch.less", + "selector": ".t-switch__dot", + "property": "height", + "kind": "render-property", + "value": "var(--td-switch-dot-size, 44rpx)" + }, + { + "file": "packages/components/switch/switch.less", + "selector": ".t-switch__dot--checked", + "property": "left", + "kind": "render-property", + "value": "calc(var(--td-switch-width, 90rpx) - var(--td-switch-dot-size, 44rpx) - var(--td-switch-dot-horizontal-margin, 6rpx))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/switch/t_switch_test.dart:665", + "observedScenariosPerSdk": 10, + "hasCustomTokenObservation": false, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "switchDotSmallSize", + "component": "switch", + "previousDecision": "pending", + "frozenTarget": { + "light": "18dp", + "dark": "18dp", + "expressions": [ + "36rpx" + ], + "source": [ + "packages/components/switch/switch.less:34" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/switch/switch.less", + "selector": ".t-switch__dot--small", + "property": "width", + "kind": "render-property", + "value": "var(--td-switch-dot-small-size, 36rpx)" + }, + { + "file": "packages/components/switch/switch.less", + "selector": ".t-switch__dot--small", + "property": "height", + "kind": "render-property", + "value": "var(--td-switch-dot-small-size, 36rpx)" + }, + { + "file": "packages/components/switch/switch.less", + "selector": ".t-switch__dot--small.t-switch__dot--checked", + "property": "left", + "kind": "render-property", + "value": "calc(var(--td-switch-small-width, 78rpx) - var(--td-switch-dot-small-size, 36rpx) - var(--td-switch-dot-horizontal-margin, 6rpx))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-difference-needs-resolution", + "runtimeDefaultVerified": false, + "testEntry": "tdesign-component/test/components/switch/t_switch_test.dart:665", + "observedScenariosPerSdk": 10, + "hasCustomTokenObservation": false, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Resolve recorded target/runtime differences through an implementation fix or documented design/contract adjudication.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "switchHeight", + "component": "switch", + "previousDecision": "pending", + "frozenTarget": { + "light": "28dp", + "dark": "28dp", + "expressions": [ + "56rpx" + ], + "source": [ + "packages/components/switch/switch.less:10" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/switch/switch.less", + "selector": ".t-switch__body", + "property": "height", + "kind": "render-property", + "value": "var(--td-switch-height, 56rpx)" + }, + { + "file": "packages/components/switch/switch.less", + "selector": ".t-switch__body", + "property": "border-radius", + "kind": "render-property", + "value": "var(--td-switch-radius, calc(var(--td-switch-height, 56rpx) / 2))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/switch/t_switch_test.dart:665", + "observedScenariosPerSdk": 12, + "hasCustomTokenObservation": false, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "switchIconLargeSize", + "component": "switch", + "previousDecision": "pending", + "frozenTarget": { + "light": "24dp", + "dark": "24dp", + "expressions": [ + "48rpx" + ], + "source": [ + "packages/components/switch/switch.less:46" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/switch/switch.less", + "selector": ".t-switch__icon--large", + "property": "font-size", + "kind": "render-property", + "value": "var(--td-switch-icon-large-size, 48rpx)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-difference-needs-resolution", + "runtimeDefaultVerified": false, + "testEntry": "tdesign-component/test/components/switch/t_switch_test.dart:665", + "observedScenariosPerSdk": 4, + "hasCustomTokenObservation": false, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Resolve recorded target/runtime differences through an implementation fix or documented design/contract adjudication.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "switchIconSize", + "component": "switch", + "previousDecision": "pending", + "frozenTarget": { + "light": "20dp", + "dark": "20dp", + "expressions": [ + "40rpx" + ], + "source": [ + "packages/components/switch/switch.less:45" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/switch/switch.less", + "selector": ".t-switch__icon", + "property": "font-size", + "kind": "render-property", + "value": "var(--td-switch-icon-size, 40rpx)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-difference-needs-resolution", + "runtimeDefaultVerified": false, + "testEntry": "tdesign-component/test/components/switch/t_switch_test.dart:665", + "observedScenariosPerSdk": 4, + "hasCustomTokenObservation": false, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Resolve recorded target/runtime differences through an implementation fix or documented design/contract adjudication.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "switchIconSmallSize", + "component": "switch", + "previousDecision": "pending", + "frozenTarget": { + "light": "16dp", + "dark": "16dp", + "expressions": [ + "32rpx" + ], + "source": [ + "packages/components/switch/switch.less:47" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/switch/switch.less", + "selector": ".t-switch__icon--small", + "property": "font-size", + "kind": "render-property", + "value": "var(--td-switch-icon-small-size, 32rpx)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-difference-needs-resolution", + "runtimeDefaultVerified": false, + "testEntry": "tdesign-component/test/components/switch/t_switch_test.dart:665", + "observedScenariosPerSdk": 4, + "hasCustomTokenObservation": false, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Resolve recorded target/runtime differences through an implementation fix or documented design/contract adjudication.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "switchLabelCheckedColor", + "component": "switch", + "previousDecision": "pending", + "frozenTarget": { + "light": "#0052d9", + "dark": "#4582e6", + "expressions": [ + "@switch-checked-color" + ], + "source": [ + "packages/components/switch/switch.less:42" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/switch/switch.less", + "selector": ".t-switch__label--checked", + "property": "color", + "kind": "render-property", + "value": "var(--td-switch-label-checked-color, var(--td-switch-checked-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/switch/t_switch_test.dart:665", + "observedScenariosPerSdk": 8, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "switchLabelColor", + "component": "switch", + "previousDecision": "pending", + "frozenTarget": { + "light": "#dcdcdc", + "dark": "#383838", + "expressions": [ + "@bg-color-secondarycontainer-active" + ], + "source": [ + "packages/components/switch/switch.less:41" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/switch/switch.less", + "selector": ".t-switch__label", + "property": "color", + "kind": "render-property", + "value": "var(--td-switch-label-color, var(--td-bg-color-secondarycontainer-active, var(--td-gray-color-4, #dcdcdc)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "bgColorSecondaryContainerActive": [ + "tdesign-component/lib/src/components/switch/t_switch_resolve.dart:62" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-difference-needs-resolution", + "runtimeDefaultVerified": false, + "testEntry": "tdesign-component/test/components/switch/t_switch_test.dart:665", + "observedScenariosPerSdk": 8, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Resolve recorded target/runtime differences through an implementation fix or documented design/contract adjudication.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "switchLabelFontSize", + "component": "switch", + "previousDecision": "pending", + "frozenTarget": { + "light": "14dp", + "dark": "14dp", + "expressions": [ + "@font-size-base" + ], + "source": [ + "packages/components/switch/switch.less:37" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/switch/switch.less", + "selector": ".t-switch__label", + "property": "font-size", + "kind": "render-property", + "value": "var(--td-switch-label-font-size, var(--td-font-size-base, 28rpx))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "fontSizeBase": [] + }, + "approvedGlobalException": null, + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/switch/t_switch_test.dart:665", + "observedScenariosPerSdk": 4, + "hasCustomTokenObservation": false, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "switchLabelLargeFontSize", + "component": "switch", + "previousDecision": "pending", + "frozenTarget": { + "light": "16dp", + "dark": "16dp", + "expressions": [ + "@font-size-m" + ], + "source": [ + "packages/components/switch/switch.less:38" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/switch/switch.less", + "selector": ".t-switch__label--large", + "property": "font-size", + "kind": "render-property", + "value": "var(--td-switch-label-large-font-size, var(--td-font-size-m, 32rpx))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "fontSizeM": [] + }, + "approvedGlobalException": null, + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/switch/t_switch_test.dart:665", + "observedScenariosPerSdk": 4, + "hasCustomTokenObservation": false, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "switchLabelSmallFontSize", + "component": "switch", + "previousDecision": "pending", + "frozenTarget": { + "light": "12dp", + "dark": "12dp", + "expressions": [ + "@font-size-s" + ], + "source": [ + "packages/components/switch/switch.less:39" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/switch/switch.less", + "selector": ".t-switch__label--small", + "property": "font-size", + "kind": "render-property", + "value": "var(--td-switch-label-small-font-size, var(--td-font-size-s, 24rpx))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "fontSizeS": [] + }, + "approvedGlobalException": null, + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/switch/t_switch_test.dart:665", + "observedScenariosPerSdk": 4, + "hasCustomTokenObservation": false, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "switchLargeHeight", + "component": "switch", + "previousDecision": "pending", + "frozenTarget": { + "light": "32dp", + "dark": "32dp", + "expressions": [ + "64rpx" + ], + "source": [ + "packages/components/switch/switch.less:15" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/switch/switch.less", + "selector": ".t-switch__body--large", + "property": "height", + "kind": "render-property", + "value": "var(--td-switch-large-height, 64rpx)" + }, + { + "file": "packages/components/switch/switch.less", + "selector": ".t-switch__body--large", + "property": "border-radius", + "kind": "render-property", + "value": "var(--td-switch-large-radius, calc(var(--td-switch-large-height, 64rpx) / 2))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/switch/t_switch_test.dart:665", + "observedScenariosPerSdk": 12, + "hasCustomTokenObservation": false, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "switchLargeRadius", + "component": "switch", + "previousDecision": "pending", + "frozenTarget": { + "light": "calc(32dp / 2)", + "dark": "calc(32dp / 2)", + "expressions": [ + "calc(@switch-large-height / 2)" + ], + "source": [ + "packages/components/switch/switch.less:16" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/switch/switch.less", + "selector": ".t-switch__body--large", + "property": "border-radius", + "kind": "render-property", + "value": "var(--td-switch-large-radius, calc(var(--td-switch-large-height, 64rpx) / 2))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/switch/t_switch_test.dart:665", + "observedScenariosPerSdk": 12, + "hasCustomTokenObservation": false, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "switchLargeWidth", + "component": "switch", + "previousDecision": "pending", + "frozenTarget": { + "light": "52dp", + "dark": "52dp", + "expressions": [ + "104rpx" + ], + "source": [ + "packages/components/switch/switch.less:14" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/switch/switch.less", + "selector": ".t-switch__body--large", + "property": "width", + "kind": "render-property", + "value": "var(--td-switch-large-width, 104rpx)" + }, + { + "file": "packages/components/switch/switch.less", + "selector": ".t-switch__dot--large.t-switch__dot--checked", + "property": "left", + "kind": "render-property", + "value": "calc(var(--td-switch-large-width, 104rpx) - var(--td-switch-dot-large-size, 52rpx) - var(--td-switch-dot-horizontal-margin, 6rpx))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-difference-needs-resolution", + "runtimeDefaultVerified": false, + "testEntry": "tdesign-component/test/components/switch/t_switch_test.dart:665", + "observedScenariosPerSdk": 12, + "hasCustomTokenObservation": false, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Resolve recorded target/runtime differences through an implementation fix or documented design/contract adjudication.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "switchLoadingColor", + "component": "switch", + "previousDecision": "pending", + "frozenTarget": { + "light": "#0052d9", + "dark": "rgba(255, 255, 255, 90%)", + "expressions": [ + "@brand-color" + ], + "source": [ + "packages/components/switch/switch.less:49" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/switch/switch.less", + "selector": ".t-switch__loading", + "property": "--td-loading-color", + "kind": "custom-property-forward", + "value": "var(--td-switch-loading-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "brandColor": [ + "tdesign-component/lib/src/components/switch/t_switch_resolve.dart:60", + "tdesign-component/lib/src/components/switch/t_switch_resolve.dart:72", + "tdesign-component/lib/src/components/switch/t_switch_resolve.dart:73" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/switch/t_switch_test.dart:665", + "observedScenariosPerSdk": 4, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "switchRadius", + "component": "switch", + "previousDecision": "pending", + "frozenTarget": { + "light": "calc(28dp / 2)", + "dark": "calc(28dp / 2)", + "expressions": [ + "calc(@switch-height / 2)" + ], + "source": [ + "packages/components/switch/switch.less:11" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/switch/switch.less", + "selector": ".t-switch__body", + "property": "border-radius", + "kind": "render-property", + "value": "var(--td-switch-radius, calc(var(--td-switch-height, 56rpx) / 2))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/switch/t_switch_test.dart:665", + "observedScenariosPerSdk": 12, + "hasCustomTokenObservation": false, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "switchSmallHeight", + "component": "switch", + "previousDecision": "pending", + "frozenTarget": { + "light": "24dp", + "dark": "24dp", + "expressions": [ + "48rpx" + ], + "source": [ + "packages/components/switch/switch.less:20" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/switch/switch.less", + "selector": ".t-switch__body--small", + "property": "height", + "kind": "render-property", + "value": "var(--td-switch-small-height, 48rpx)" + }, + { + "file": "packages/components/switch/switch.less", + "selector": ".t-switch__body--small", + "property": "border-radius", + "kind": "render-property", + "value": "var(--td-switch-small-radius, calc(var(--td-switch-small-height, 48rpx) / 2))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/switch/t_switch_test.dart:665", + "observedScenariosPerSdk": 12, + "hasCustomTokenObservation": false, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "switchSmallRadius", + "component": "switch", + "previousDecision": "pending", + "frozenTarget": { + "light": "calc(24dp / 2)", + "dark": "calc(24dp / 2)", + "expressions": [ + "calc(@switch-small-height / 2)" + ], + "source": [ + "packages/components/switch/switch.less:21" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/switch/switch.less", + "selector": ".t-switch__body--small", + "property": "border-radius", + "kind": "render-property", + "value": "var(--td-switch-small-radius, calc(var(--td-switch-small-height, 48rpx) / 2))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/switch/t_switch_test.dart:665", + "observedScenariosPerSdk": 12, + "hasCustomTokenObservation": false, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "switchSmallWidth", + "component": "switch", + "previousDecision": "pending", + "frozenTarget": { + "light": "39dp", + "dark": "39dp", + "expressions": [ + "78rpx" + ], + "source": [ + "packages/components/switch/switch.less:19" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/switch/switch.less", + "selector": ".t-switch__body--small", + "property": "width", + "kind": "render-property", + "value": "var(--td-switch-small-width, 78rpx)" + }, + { + "file": "packages/components/switch/switch.less", + "selector": ".t-switch__dot--small.t-switch__dot--checked", + "property": "left", + "kind": "render-property", + "value": "calc(var(--td-switch-small-width, 78rpx) - var(--td-switch-dot-small-size, 36rpx) - var(--td-switch-dot-horizontal-margin, 6rpx))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-difference-needs-resolution", + "runtimeDefaultVerified": false, + "testEntry": "tdesign-component/test/components/switch/t_switch_test.dart:665", + "observedScenariosPerSdk": 12, + "hasCustomTokenObservation": false, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Resolve recorded target/runtime differences through an implementation fix or documented design/contract adjudication.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "switchUncheckedDisabledColor", + "component": "switch", + "previousDecision": "pending", + "frozenTarget": { + "light": "#eeeeee", + "dark": "#2c2c2c", + "expressions": [ + "@bg-color-component-disabled" + ], + "source": [ + "packages/components/switch/switch.less:6" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/switch/switch.less", + "selector": ".t-switch__label--disabled", + "property": "color", + "kind": "render-property", + "value": "var(--td-switch-unchecked-disabled-color, var(--td-bg-color-component-disabled, var(--td-gray-color-2, #eeeeee)))" + }, + { + "file": "packages/components/switch/switch.less", + "selector": ".t-switch__body--disabled", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-switch-unchecked-disabled-color, var(--td-bg-color-component-disabled, var(--td-gray-color-2, #eeeeee)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "bgColorComponentDisabled": [ + "tdesign-component/lib/src/components/switch/t_switch_resolve.dart:66" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/switch/t_switch_test.dart:665", + "observedScenariosPerSdk": 8, + "hasCustomTokenObservation": true, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "switchWidth", + "component": "switch", + "previousDecision": "pending", + "frozenTarget": { + "light": "45dp", + "dark": "45dp", + "expressions": [ + "90rpx" + ], + "source": [ + "packages/components/switch/switch.less:9" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/switch/switch.less", + "selector": ".t-switch__body", + "property": "width", + "kind": "render-property", + "value": "var(--td-switch-width, 90rpx)" + }, + { + "file": "packages/components/switch/switch.less", + "selector": ".t-switch__dot--checked", + "property": "left", + "kind": "render-property", + "value": "calc(var(--td-switch-width, 90rpx) - var(--td-switch-dot-size, 44rpx) - var(--td-switch-dot-horizontal-margin, 6rpx))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-default-verified-visual-pending", + "runtimeDefaultVerified": true, + "testEntry": "tdesign-component/test/components/switch/t_switch_test.dart:665", + "observedScenariosPerSdk": 12, + "hasCustomTokenObservation": false, + "observationsFile": "runtime-observations.json", + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "tabBarActiveBg", + "component": "tab-bar-item", + "previousDecision": "pending", + "frozenTarget": { + "light": "#f2f3ff", + "dark": "#1b2f51", + "expressions": [ + "@brand-color-light" + ], + "source": [ + "packages/components/tab-bar-item/tab-bar-item.less:11" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/tab-bar-item/tab-bar-item.less", + "selector": ".t-tab-bar-item__content--tag.t-tab-bar-item__content--checked", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-tab-bar-active-bg, var(--td-brand-color-light, var(--td-primary-color-1, #f2f3ff)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "brandColorLight": [ + "tdesign-component/lib/src/components/tabbar/t_tab_bar.dart:387", + "tdesign-component/lib/src/components/tabbar/t_tab_bar.dart:866", + "tdesign-component/lib/src/components/tabbar/t_tab_bar.dart:1070", + "tdesign-component/lib/src/components/tabbar/t_tab_bar.dart:1071" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "tabBarActiveColor", + "component": "tab-bar-item", + "previousDecision": "pending", + "frozenTarget": { + "light": "#0052d9", + "dark": "#4582e6", + "expressions": [ + "@brand-color" + ], + "source": [ + "packages/components/tab-bar-item/tab-bar-item.less:10" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/tab-bar-item/tab-bar-item.less", + "selector": ".t-tab-bar-item__content--checked .t-tab-bar-item__text,\n.t-tab-bar-item__content--checked .t-tab-bar-item__icon", + "property": "color", + "kind": "render-property", + "value": "var(--td-tab-bar-active-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "brandColor": [ + "tdesign-component/lib/src/components/tabbar/t_tab_bar.dart:900", + "tdesign-component/lib/src/components/tabbar/t_tab_bar.dart:930", + "tdesign-component/lib/src/components/tabbar/t_tab_bar.dart:944", + "tdesign-component/lib/src/components/tabbar/t_tab_bar.dart:1032" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/tabbar/t_tab_bar_test.dart:253", + "text": "expect(selected.color, token.brandColor);", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "tabBarBgColor", + "component": "tab-bar", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(255, 255, 255, 1)", + "dark": "#242424", + "expressions": [ + "@bg-color-container" + ], + "source": [ + "packages/components/tab-bar-item/tab-bar-item.less:7", + "packages/components/tab-bar/tab-bar.less:5" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/tab-bar/tab-bar.less", + "selector": ".t-tab-bar", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-tab-bar-bg-color, var(--td-bg-color-container, var(--td-font-white-1, #ffffff)))" + }, + { + "file": "packages/components/tab-bar-item/tab-bar-item.less", + "selector": ".t-tab-bar-item__spread", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-tab-bar-bg-color, var(--td-bg-color-container, var(--td-font-white-1, #ffffff)))" + }, + { + "file": "packages/components/tab-bar-item/tab-bar-item.less", + "selector": ".t-tab-bar-item__spread::before", + "property": "border-top", + "kind": "render-property", + "value": "16rpx solid var(--td-tab-bar-bg-color, var(--td-bg-color-container, var(--td-font-white-1, #ffffff)))" + } + ], + "nonLessReferences": [ + { + "file": "packages/components/tab-bar/_example/custom/index.wxss", + "line": 3, + "text": "--td-tab-bar-bg-color: var(--td-bg-color-secondarycontainer, #f3f3f3);" + } + ] + }, + "flutterNameLocators": { + "bgColorContainer": [ + "tdesign-component/lib/src/components/tabbar/t_tab_bar.dart:390", + "tdesign-component/lib/src/components/tabbar/t_tab_bar.dart:1413" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/tabbar/t_tab_bar_test.dart:299", + "text": "expect(tester.element(menu).tTheme.bgColorContainer, Colors.purple);", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "tabBarBorderColor", + "component": "tab-bar", + "previousDecision": "pending", + "frozenTarget": { + "light": "", + "dark": "", + "expressions": [ + "@border-level-1-color", + "@border-color" + ], + "source": [ + "packages/components/tab-bar-item/tab-bar-item.less:8", + "packages/components/tab-bar/tab-bar.less:6" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/tab-bar/tab-bar.less", + "selector": ".t-tab-bar--normal.t-tab-bar--border::before", + "property": "border-top", + "kind": "render-property", + "value": "1px solid var(--td-tab-bar-border-color, var(--td-border-level-1-color, var(--td-gray-color-3, #e7e7e7)))" + }, + { + "file": "packages/components/tab-bar-item/tab-bar-item.less", + "selector": ".t-tab-bar-item--split + .t-tab-bar-item--split::before", + "property": "border-left", + "kind": "render-property", + "value": "1px solid var(--td-tab-bar-border-color, var(--td-border-color, var(--td-gray-color-3, #e7e7e7)))" + } + ], + "nonLessReferences": [ + { + "file": "packages/components/tab-bar/_example/custom/index.wxss", + "line": 2, + "text": "--td-tab-bar-border-color: var(--td-border-level-1-color, #e7e7e7);" + } + ] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "tabBarColor", + "component": "tab-bar-item", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.9)", + "dark": "rgba(255, 255, 255, 90%)", + "expressions": [ + "@text-color-primary" + ], + "source": [ + "packages/components/tab-bar-item/tab-bar-item.less:6" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/tab-bar-item/tab-bar-item.less", + "selector": ".t-tab-bar-item__content", + "property": "color", + "kind": "render-property", + "value": "var(--td-tab-bar-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + }, + { + "file": "packages/components/tab-bar-item/tab-bar-item.less", + "selector": ".t-tab-bar-item__spread", + "property": "color", + "kind": "render-property", + "value": "var(--td-tab-bar-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorPrimary": [ + "tdesign-component/lib/src/components/tabbar/t_tab_bar.dart:901", + "tdesign-component/lib/src/components/tabbar/t_tab_bar.dart:931", + "tdesign-component/lib/src/components/tabbar/t_tab_bar.dart:945", + "tdesign-component/lib/src/components/tabbar/t_tab_bar.dart:1033" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/tabbar/t_tab_bar_test.dart:255", + "text": "expect(unselected.color, token.textColorPrimary);", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "tabBarHeight", + "component": "tab-bar-item", + "previousDecision": "pending", + "frozenTarget": { + "light": "40dp", + "dark": "40dp", + "expressions": [ + "80rpx" + ], + "source": [ + "packages/components/tab-bar-item/tab-bar-item.less:5" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/tab-bar-item/tab-bar-item.less", + "selector": ".t-tab-bar-item", + "property": "height", + "kind": "render-property", + "value": "var(--td-tab-bar-height, 80rpx)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "tabBarHoverBgColor", + "component": "tab-bar-item", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.05)", + "dark": "rgba(0, 0, 0, 0.05)", + "expressions": [ + "rgba(0, 0, 0, 0.05)" + ], + "source": [ + "packages/components/tab-bar-item/tab-bar-item.less:9" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/tab-bar-item/tab-bar-item.less", + "selector": ".t-tab-bar-item__spread-item--active", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-tab-bar-hover-bg-color, rgba(0, 0, 0, 0.05))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "tabBarRoundShadow", + "component": "tab-bar", + "previousDecision": "pending", + "frozenTarget": { + "light": "0 6px 30px 5px rgba(0, 0, 0, 5%), 0 16px 24px 2px rgba(0, 0, 0, 4%),\n 0 8px 10px -5px rgba(0, 0, 0, 8%)", + "dark": "0 16px 24px rgba(0, 0, 0, 14%), 0 6px 30px rgba(0, 0, 0, 12%), 0 8px 10px rgba(0, 0, 0, 20%)", + "expressions": [ + "@shadow-3" + ], + "source": [ + "packages/components/tab-bar/tab-bar.less:7" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/tab-bar/tab-bar.less", + "selector": ".t-tab-bar--round", + "property": "box-shadow", + "kind": "render-property", + "value": "var(--td-tab-bar-round-shadow, var(--td-shadow-3, 0 6px 30px 5px rgba(0, 0, 0, 0.05), 0 16px 24px 2px rgba(0, 0, 0, 0.04), 0 8px 10px -5px rgba(0, 0, 0, 0.08)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "shadow3": [ + "tdesign-component/lib/src/components/tabbar/t_tab_bar.dart:512", + "tdesign-component/lib/src/components/tabbar/t_tab_bar.dart:1407" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/tabbar/t_tab_bar_test.dart:977", + "text": "TThemeData.defaultData().shadow3,", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "tabBarSpreadBorderColor", + "component": "tab-bar-item", + "previousDecision": "pending", + "frozenTarget": { + "light": "#e7e7e7", + "dark": "#e8e8e8", + "expressions": [ + "@border-color" + ], + "source": [ + "packages/components/tab-bar-item/tab-bar-item.less:13" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/tab-bar-item/tab-bar-item.less", + "selector": ".t-tab-bar-item__spread-item-split", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-tab-bar-spread-border-color, var(--td-border-color, var(--td-gray-color-3, #e7e7e7)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "tabBarSpreadShadow", + "component": "tab-bar-item", + "previousDecision": "pending", + "frozenTarget": { + "light": "0 6px 30px 5px rgba(0, 0, 0, 5%), 0 16px 24px 2px rgba(0, 0, 0, 4%),\n 0 8px 10px -5px rgba(0, 0, 0, 8%)", + "dark": "0 16px 24px rgba(0, 0, 0, 14%), 0 6px 30px rgba(0, 0, 0, 12%), 0 8px 10px rgba(0, 0, 0, 20%)", + "expressions": [ + "@shadow-3" + ], + "source": [ + "packages/components/tab-bar-item/tab-bar-item.less:12" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/tab-bar-item/tab-bar-item.less", + "selector": ".t-tab-bar-item__spread", + "property": "box-shadow", + "kind": "render-property", + "value": "var(--td-tab-bar-spread-shadow, var(--td-shadow-3, 0 6px 30px 5px rgba(0, 0, 0, 0.05), 0 16px 24px 2px rgba(0, 0, 0, 0.04), 0 8px 10px -5px rgba(0, 0, 0, 0.08)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "shadow3": [ + "tdesign-component/lib/src/components/tabbar/t_tab_bar.dart:512", + "tdesign-component/lib/src/components/tabbar/t_tab_bar.dart:1407" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/tabbar/t_tab_bar_test.dart:977", + "text": "TThemeData.defaultData().shadow3,", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "tabBorderColor", + "component": "tabs", + "previousDecision": "pending", + "frozenTarget": { + "light": "#e7e7e7", + "dark": "#383838", + "expressions": [ + "@component-stroke" + ], + "source": [ + "packages/components/tabs/tabs.less:16" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/tabs/tabs.less", + "selector": ".t-tabs__scroll--split::after", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-tab-border-color, var(--td-component-stroke, var(--td-gray-color-3, #e7e7e7)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "componentStroke": [ + "tdesign-component/lib/src/components/tabs/t_tab_bar.dart:77" + ] + }, + "approvedGlobalException": "引用已批准修正的浅色 grayColor3", + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/tabs/t_tab_bar_test.dart:200", + "text": "expect(decoration.border?.bottom.color, token.componentStroke);", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "tabFont", + "component": "tabs", + "previousDecision": "pending", + "frozenTarget": { + "light": "14dp / 22dp PingFang SC, Microsoft YaHei, Arial Regular", + "dark": "14dp / 22dp PingFang SC, Microsoft YaHei, Arial Regular", + "expressions": [ + "@font-body-medium" + ], + "source": [ + "packages/components/tabs/tabs.less:6" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/tabs/tabs.less", + "selector": ".t-tabs", + "property": "font", + "kind": "render-property", + "value": "var(--td-tab-font, var(--td-font-body-medium, 28rpx / 44rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + }, + { + "file": "packages/components/tabs/tabs.less", + "selector": ".t-tabs__badge", + "property": "--td-badge-content-text-font", + "kind": "custom-property-forward", + "value": "var(--td-tab-font, var(--td-font-body-medium, 28rpx / 44rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + } + ], + "nonLessReferences": [ + { + "file": "packages/components/tabs/_example/size/index.wxss", + "line": 2, + "text": "--td-tab-font: var(--td-font-body-large);" + } + ] + }, + "flutterNameLocators": { + "fontBodyMedium": [ + "tdesign-component/lib/src/components/tabs/t_tab_bar.dart:124", + "tdesign-component/lib/src/components/tabs/t_tab_bar.dart:141", + "tdesign-component/lib/src/components/tabs/t_horizontal_tab_bar.dart:58", + "tdesign-component/lib/src/components/tabs/t_horizontal_tab_bar.dart:59", + "tdesign-component/lib/src/components/tabs/t_horizontal_tab_bar.dart:66", + "tdesign-component/lib/src/components/tabs/t_horizontal_tab_bar.dart:67" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/tabs/t_tab_bar_test.dart:90", + "text": ": token.fontBodyMedium;", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/tabs/t_tab_bar_test.dart:177", + "text": "expect(tabBar.labelStyle?.fontSize, token.fontBodyMedium?.size);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/tabs/t_tab_bar_test.dart:178", + "text": "expect(tabBar.labelStyle?.height, token.fontBodyMedium?.height);", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "tabIconSize", + "component": "tabs", + "previousDecision": "pending", + "frozenTarget": { + "light": "18dp", + "dark": "18dp", + "expressions": [ + "36rpx" + ], + "source": [ + "packages/components/tabs/tabs.less:29" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/tabs/tabs.less", + "selector": ".t-tabs__icon", + "property": "font-size", + "kind": "render-property", + "value": "var(--td-tab-icon-size, 36rpx)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "tabItemActiveColor", + "component": "tabs", + "previousDecision": "pending", + "frozenTarget": { + "light": "#0052d9", + "dark": "#4582e6", + "expressions": [ + "@brand-color" + ], + "source": [ + "packages/components/tabs/tabs.less:14" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/tabs/tabs.less", + "selector": ".t-tabs__item--active", + "property": "color", + "kind": "render-property", + "value": "var(--td-tab-item-active-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + }, + { + "file": "packages/components/tabs/tabs.less", + "selector": ".t-tabs__badge--active", + "property": "--td-badge-content-text-color", + "kind": "custom-property-forward", + "value": "var(--td-tab-item-active-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "brandColor": [ + "tdesign-component/lib/src/components/tabs/t_tab_bar.dart:86", + "tdesign-component/lib/src/components/tabs/t_tab_bar.dart:118", + "tdesign-component/lib/src/components/tabs/t_tab_bar.dart:149", + "tdesign-component/lib/src/components/tabs/t_horizontal_tab_bar.dart:79", + "tdesign-component/lib/src/components/tabs/t_horizontal_tab_bar.dart:569", + "tdesign-component/lib/src/components/tabs/t_horizontal_tab_bar.dart:1665" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/tabs/t_tab_bar_test.dart:174", + "text": "expect(tabBar.labelColor, token.brandColor);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/tabs/t_tab_bar_test.dart:222", + "text": "TThemeData.defaultData().brandColor,", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "tabItemColor", + "component": "tabs", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.9)", + "dark": "rgba(255, 255, 255, 90%)", + "expressions": [ + "@text-color-primary" + ], + "source": [ + "packages/components/tabs/tabs.less:13" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/tabs/tabs.less", + "selector": ".t-tabs__item", + "property": "color", + "kind": "render-property", + "value": "var(--td-tab-item-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorPrimary": [ + "tdesign-component/lib/src/components/tabs/t_tab_bar.dart:96", + "tdesign-component/lib/src/components/tabs/t_tab_bar.dart:134", + "tdesign-component/lib/src/components/tabs/t_horizontal_tab_bar.dart:83" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/tabs/t_tab_bar_test.dart:175", + "text": "expect(tabBar.unselectedLabelColor, token.textColorPrimary);", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "tabItemDisabledColor", + "component": "tabs", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.26)", + "dark": "rgba(255, 255, 255, 22%)", + "expressions": [ + "@text-color-disabled" + ], + "source": [ + "packages/components/tabs/tabs.less:15" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/tabs/tabs.less", + "selector": ".t-tabs__item--disabled", + "property": "color", + "kind": "render-property", + "value": "var(--td-tab-item-disabled-color, var(--td-text-color-disabled, var(--td-font-gray-4, rgba(0, 0, 0, 0.26))))" + }, + { + "file": "packages/components/tabs/tabs.less", + "selector": ".t-tabs__badge--disabled", + "property": "--td-badge-content-text-color", + "kind": "custom-property-forward", + "value": "var(--td-tab-item-disabled-color, var(--td-text-color-disabled, var(--td-font-gray-4, rgba(0, 0, 0, 0.26))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorDisabled": [ + "tdesign-component/lib/src/components/tabs/t_tab.dart:70" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/tabs/t_horizontal_tab_bar_test.dart:112", + "text": "expect(disabled.color, TThemeData.defaultData().textColorDisabled);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/tabs/t_tab_bar_test.dart:188", + "text": "expect(disabledParagraph.text.style?.color, token.textColorDisabled);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/tabs/t_tab_bar_test.dart:191", + "text": "expect(iconTheme.color, token.textColorDisabled);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/tabs/t_tab_test.dart:98", + "text": "final disabledColor = TThemeData.defaultData().textColorDisabled;", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "tabItemHeight", + "component": "tabs", + "previousDecision": "pending", + "frozenTarget": { + "light": "48dp", + "dark": "48dp", + "expressions": [ + "96rpx" + ], + "source": [ + "packages/components/tabs/tabs.less:9" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/tabs/tabs.less", + "selector": ".t-tabs__item", + "property": "height", + "kind": "render-property", + "value": "var(--td-tab-item-height, 96rpx)" + }, + { + "file": "packages/components/tabs/tabs.less", + "selector": ".t-tabs__scroll", + "property": "height", + "kind": "render-property", + "value": "var(--td-tab-item-height, 96rpx)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "tabItemTagActiveBg", + "component": "tabs", + "previousDecision": "pending", + "frozenTarget": { + "light": "#f2f3ff", + "dark": "#1b2f51", + "expressions": [ + "@brand-color-light" + ], + "source": [ + "packages/components/tabs/tabs.less:27" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/tabs/tabs.less", + "selector": ".t-tabs__item-inner--active.t-tabs__item-inner--tag", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-tab-item-tag-active-bg, var(--td-brand-color-light, var(--td-primary-color-1, #f2f3ff)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "brandColorLight": [] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "tabItemTagBg", + "component": "tabs", + "previousDecision": "pending", + "frozenTarget": { + "light": "#f3f3f3", + "dark": "#2c2c2c", + "expressions": [ + "@bg-color-secondarycontainer" + ], + "source": [ + "packages/components/tabs/tabs.less:26" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/tabs/tabs.less", + "selector": ".t-tabs__wrapper--card", + "property": "background", + "kind": "render-property", + "value": "var(--td-tab-item-tag-bg, var(--td-bg-color-secondarycontainer, var(--td-gray-color-1, #f3f3f3)))" + }, + { + "file": "packages/components/tabs/tabs.less", + "selector": ".t-tabs__item-inner--tag", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-tab-item-tag-bg, var(--td-bg-color-secondarycontainer, var(--td-gray-color-1, #f3f3f3)))" + }, + { + "file": "packages/components/tabs/tabs.less", + "selector": ".t-tabs__item-prefix::after,\n.t-tabs__item-suffix::after", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-tab-item-tag-bg, var(--td-bg-color-secondarycontainer, var(--td-gray-color-1, #f3f3f3)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "bgColorSecondaryContainer": [ + "tdesign-component/lib/src/components/tabs/t_tab_bar.dart:106", + "tdesign-component/lib/src/components/tabs/t_horizontal_tab_bar.dart:826", + "tdesign-component/lib/src/components/tabs/t_horizontal_tab_bar.dart:844" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "tabItemTagHeight", + "component": "tabs", + "previousDecision": "pending", + "frozenTarget": { + "light": "32dp", + "dark": "32dp", + "expressions": [ + "64rpx" + ], + "source": [ + "packages/components/tabs/tabs.less:25" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/tabs/tabs.less", + "selector": ".t-tabs__item-inner--tag", + "property": "line-height", + "kind": "render-property", + "value": "var(--td-tab-item-tag-height, 64rpx)" + }, + { + "file": "packages/components/tabs/tabs.less", + "selector": ".t-tabs__item-inner--tag", + "property": "border-radius", + "kind": "render-property", + "value": "calc(var(--td-tab-item-tag-height, 64rpx) / 2)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "tableBodyTextColor", + "component": "table", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.9)", + "dark": "rgba(255, 255, 255, 90%)", + "expressions": [ + "@text-color-primary" + ], + "source": [ + "packages/components/table/table.less:9" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/table/table.less", + "selector": ".t-table", + "property": "color", + "kind": "render-property", + "value": "var(--td-table-body-text-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorPrimary": [ + "tdesign-component/lib/src/components/table/t_table.dart:851" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "tableBorderColor", + "component": "table", + "previousDecision": "pending", + "frozenTarget": { + "light": "#dcdcdc", + "dark": "#5e5e5e", + "expressions": [ + "@component-border" + ], + "source": [ + "packages/components/table/table.less:6" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/table/table.less", + "selector": ".t-table__th,\n.t-table__td", + "property": "border-bottom", + "kind": "render-property", + "value": "2rpx solid var(--td-table-border-color, var(--td-component-border, var(--td-gray-color-4, #dcdcdc)))" + }, + { + "file": "packages/components/table/table.less", + "selector": ".t-table__bottom-content", + "property": "border-top", + "kind": "render-property", + "value": "2rpx solid var(--td-table-border-color, var(--td-component-border, var(--td-gray-color-4, #dcdcdc)))" + }, + { + "file": "packages/components/table/table.less", + "selector": ".t-table--bordered", + "property": "border", + "kind": "render-property", + "value": "2rpx solid var(--td-table-border-color, var(--td-component-border, var(--td-gray-color-4, #dcdcdc)))" + }, + { + "file": "packages/components/table/table.less", + "selector": ".t-table--bordered .t-table__th,\n.t-table--bordered .t-table__td", + "property": "border-right", + "kind": "render-property", + "value": "2rpx solid var(--td-table-border-color, var(--td-component-border, var(--td-gray-color-4, #dcdcdc)))" + }, + { + "file": "packages/components/table/table.less", + "selector": ".t-table--bordered .t-table__th", + "property": "border-bottom", + "kind": "render-property", + "value": "2rpx solid var(--td-table-border-color, var(--td-component-border, var(--td-gray-color-4, #dcdcdc)))" + }, + { + "file": "packages/components/table/table.less", + "selector": ".t-table--rowspan-colspan.t-table--bordered .t-table__th", + "property": "border-right", + "kind": "render-property", + "value": "2rpx solid var(--td-table-border-color, var(--td-component-border, var(--td-gray-color-4, #dcdcdc)))" + }, + { + "file": "packages/components/table/table.less", + "selector": ".t-table--rowspan-colspan.t-table--bordered .t-table__th", + "property": "border-bottom", + "kind": "render-property", + "value": "2rpx solid var(--td-table-border-color, var(--td-component-border, var(--td-gray-color-4, #dcdcdc)))" + }, + { + "file": "packages/components/table/table.less", + "selector": ".t-table--rowspan-colspan.t-table--bordered .t-table__td", + "property": "border-right", + "kind": "render-property", + "value": "2rpx solid var(--td-table-border-color, var(--td-component-border, var(--td-gray-color-4, #dcdcdc)))" + }, + { + "file": "packages/components/table/table.less", + "selector": ".t-table--rowspan-colspan.t-table--bordered .t-table__td", + "property": "border-bottom", + "kind": "render-property", + "value": "2rpx solid var(--td-table-border-color, var(--td-component-border, var(--td-gray-color-4, #dcdcdc)))" + }, + { + "file": "packages/components/table/table.less", + "selector": ".t-table--rowspan-colspan.t-table--bordered .t-table__td:last-child", + "property": "border-right", + "kind": "render-property", + "value": "2rpx solid var(--td-table-border-color, var(--td-component-border, var(--td-gray-color-4, #dcdcdc)))" + }, + { + "file": "packages/components/table/table.less", + "selector": ".t-table__row--fixed-bottom-first > .t-table__td", + "property": "border-top", + "kind": "render-property", + "value": "2rpx solid var(--td-table-border-color, var(--td-component-border, var(--td-gray-color-4, #dcdcdc)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "componentBorder": [], + "borderColor": [ + "tdesign-component/lib/src/components/table/t_table_theme_data.dart:18", + "tdesign-component/lib/src/components/table/t_table_theme_data.dart:47", + "tdesign-component/lib/src/components/table/t_table_theme_data.dart:65", + "tdesign-component/lib/src/components/table/t_table_theme_data.dart:75", + "tdesign-component/lib/src/components/table/t_table_theme_data.dart:103", + "tdesign-component/lib/src/components/table/t_table.dart:867" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/table/t_table_test.dart:694", + "text": "TThemeData.defaultData().componentBorder,", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "tableFixedCellBorderColor", + "component": "table", + "previousDecision": "pending", + "frozenTarget": { + "light": "#dcdcdc", + "dark": "#5e5e5e", + "expressions": [ + "@component-border" + ], + "source": [ + "packages/components/table/table.less:21" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/table/table.less", + "selector": ".t-table--column-fixed .t-table__cell--fixed-right-first", + "property": "border-left", + "kind": "render-property", + "value": "4rpx solid var(--td-table-fixed-cell-border-color, var(--td-component-border, var(--td-gray-color-4, #dcdcdc)))" + }, + { + "file": "packages/components/table/table.less", + "selector": ".t-table__content--scrollable-to-left .t-table__cell--fixed-left-last::after", + "property": "border-right", + "kind": "render-property", + "value": "4rpx solid var(--td-table-fixed-cell-border-color, var(--td-component-border, var(--td-gray-color-4, #dcdcdc)))" + }, + { + "file": "packages/components/table/table.less", + "selector": ".t-table__content--scrollable-to-right .t-table__cell--fixed-right-first::after", + "property": "border-left", + "kind": "render-property", + "value": "4rpx solid var(--td-table-fixed-cell-border-color, var(--td-component-border, var(--td-gray-color-4, #dcdcdc)))" + }, + { + "file": "packages/components/table/table.less", + "selector": ".t-table--bordered .t-table__content--scrollable-to-left .t-table__cell--fixed-left-last::after", + "property": "border-right", + "kind": "render-property", + "value": "8rpx solid var(--td-table-fixed-cell-border-color, var(--td-component-border, var(--td-gray-color-4, #dcdcdc)))" + }, + { + "file": "packages/components/table/table.less", + "selector": ".t-table--bordered .t-table__content--scrollable-to-right .t-table__cell--fixed-right-first::after", + "property": "border-left", + "kind": "render-property", + "value": "8rpx solid var(--td-table-fixed-cell-border-color, var(--td-component-border, var(--td-gray-color-4, #dcdcdc)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "componentBorder": [] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/table/t_table_test.dart:694", + "text": "TThemeData.defaultData().componentBorder,", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "tableFontSize", + "component": "table", + "previousDecision": "pending", + "frozenTarget": { + "light": "14dp / 22dp PingFang SC, Microsoft YaHei, Arial Regular", + "dark": "14dp / 22dp PingFang SC, Microsoft YaHei, Arial Regular", + "expressions": [ + "@font-body-medium" + ], + "source": [ + "packages/components/table/table.less:13" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/table/table.less", + "selector": ".t-table", + "property": "font", + "kind": "render-property", + "value": "var(--td-table-font-size, var(--td-font-body-medium, 28rpx / 44rpx var(--td-font-family, PingFang SC, Microsoft YaHei, Arial Regular)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "fontBodyMedium": [ + "tdesign-component/lib/src/components/table/t_table.dart:847" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "tableHeaderBgColor", + "component": "table", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(255, 255, 255, 1)", + "dark": "#242424", + "expressions": [ + "@bg-color-container" + ], + "source": [ + "packages/components/table/table.less:7" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/table/table.less", + "selector": ".t-table__th", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-table-header-bg-color, var(--td-bg-color-container, var(--td-font-white-1, #ffffff)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "bgColorContainer": [ + "tdesign-component/lib/src/components/table/t_table.dart:459", + "tdesign-component/lib/src/components/table/t_table.dart:527", + "tdesign-component/lib/src/components/table/t_table.dart:782" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "tableHeaderTextColor", + "component": "table", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.4)", + "dark": "rgba(255, 255, 255, 35%)", + "expressions": [ + "@text-color-placeholder" + ], + "source": [ + "packages/components/table/table.less:8" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/table/table.less", + "selector": ".t-table__th", + "property": "color", + "kind": "render-property", + "value": "var(--td-table-header-text-color, var(--td-text-color-placeholder, var(--td-font-gray-3, rgba(0, 0, 0, 0.4))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorPlaceholder": [ + "tdesign-component/lib/src/components/table/t_table.dart:850", + "tdesign-component/lib/src/components/table/t_table.dart:938" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "tableLoadingBgColor", + "component": "table", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(255, 255, 255, 0.55)", + "dark": "rgba(255, 255, 255, 0.55)", + "expressions": [ + "rgba(255, 255, 255, 0.55)" + ], + "source": [ + "packages/components/table/table.less:14" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/table/table.less", + "selector": ".t-table__loading--full", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-table-loading-bg-color, rgba(255, 255, 255, 0.55))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "tableStripeBgColor", + "component": "table", + "previousDecision": "pending", + "frozenTarget": { + "light": "#f3f3f3", + "dark": "#2c2c2c", + "expressions": [ + "@bg-color-secondarycontainer" + ], + "source": [ + "packages/components/table/table.less:10" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/table/table.less", + "selector": ".t-table--striped .t-table__tr:nth-child(odd)", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-table-stripe-bg-color, var(--td-bg-color-secondarycontainer, var(--td-gray-color-1, #f3f3f3)))" + }, + { + "file": "packages/components/table/table.less", + "selector": ".t-table--striped .t-table__tr:nth-child(odd) .t-table__cell--fixed-left,\n.t-table--striped .t-table__tr:nth-child(odd) .t-table__cell--fixed-right", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-table-stripe-bg-color, var(--td-bg-color-secondarycontainer, var(--td-gray-color-1, #f3f3f3)))" + }, + { + "file": "packages/components/table/table.less", + "selector": ".t-table--striped .t-table__row--fixed-top:nth-child(odd) > .t-table__td,\n.t-table--striped .t-table__row--fixed-bottom:nth-child(odd) > .t-table__td", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-table-stripe-bg-color, var(--td-bg-color-secondarycontainer, var(--td-gray-color-1, #f3f3f3)))" + }, + { + "file": "packages/components/table/table.less", + "selector": ".t-table--striped .t-table__row--fixed-top:nth-child(odd) > .t-table__cell--fixed-left,\n.t-table--striped .t-table__row--fixed-bottom:nth-child(odd) > .t-table__cell--fixed-left,\n.t-table--striped .t-table__row--fixed-top:nth-child(odd) > .t-table__cell--fixed-right,\n.t-table--striped .t-table__row--fixed-bottom:nth-child(odd) > .t-table__cell--fixed-right", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-table-stripe-bg-color, var(--td-bg-color-secondarycontainer, var(--td-gray-color-1, #f3f3f3)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "bgColorSecondaryContainer": [ + "tdesign-component/lib/src/components/table/t_table.dart:781" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "tableTdPadding", + "component": "table", + "previousDecision": "pending", + "frozenTarget": { + "light": "8dp 12dp", + "dark": "8dp 12dp", + "expressions": [ + "@spacer @spacer-1" + ], + "source": [ + "packages/components/table/table.less:11" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/table/table.less", + "selector": ".t-table__td", + "property": "padding", + "kind": "render-property", + "value": "var(--td-table-td-padding, var(--td-spacer, 16rpx) var(--td-spacer-1, 24rpx))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "tableThPadding", + "component": "table", + "previousDecision": "pending", + "frozenTarget": { + "light": "8dp 12dp", + "dark": "8dp 12dp", + "expressions": [ + "@spacer @spacer-1" + ], + "source": [ + "packages/components/table/table.less:12" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/table/table.less", + "selector": ".t-table__th", + "property": "padding", + "kind": "render-property", + "value": "var(--td-table-th-padding, var(--td-spacer, 16rpx) var(--td-spacer-1, 24rpx))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "tabNavBgColor", + "component": "tabs", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(255, 255, 255, 1)", + "dark": "#242424", + "expressions": [ + "@bg-color-container" + ], + "source": [ + "packages/components/tabs/tabs.less:7" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/tabs/tabs.less", + "selector": ".t-tabs", + "property": "background", + "kind": "render-property", + "value": "var(--td-tab-nav-bg-color, var(--td-bg-color-container, var(--td-font-white-1, #ffffff)))" + }, + { + "file": "packages/components/tabs/tabs.less", + "selector": ".t-tabs__wrapper", + "property": "background", + "kind": "render-property", + "value": "var(--td-tab-nav-bg-color, var(--td-bg-color-container, var(--td-font-white-1, #ffffff)))" + }, + { + "file": "packages/components/tabs/tabs.less", + "selector": ".t-tabs__item--card.t-tabs__item--active", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-tab-nav-bg-color, var(--td-bg-color-container, var(--td-font-white-1, #ffffff)))" + }, + { + "file": "packages/components/tabs/tabs.less", + "selector": ".t-tabs__item-prefix,\n.t-tabs__item-suffix", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-tab-nav-bg-color, var(--td-bg-color-container, var(--td-font-white-1, #ffffff)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "bgColorContainer": [ + "tdesign-component/lib/src/components/tabs/t_tab_bar.dart:61", + "tdesign-component/lib/src/components/tabs/t_horizontal_tab_bar.dart:809", + "tdesign-component/lib/src/components/tabs/t_horizontal_tab_bar.dart:814" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "tabTrackColor", + "component": "tabs", + "previousDecision": "pending", + "frozenTarget": { + "light": "#0052d9", + "dark": "#4582e6", + "expressions": [ + "@brand-color" + ], + "source": [ + "packages/components/tabs/tabs.less:19" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/tabs/tabs.less", + "selector": ".t-tabs__track", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-tab-track-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "brandColor": [ + "tdesign-component/lib/src/components/tabs/t_tab_bar.dart:86", + "tdesign-component/lib/src/components/tabs/t_tab_bar.dart:118", + "tdesign-component/lib/src/components/tabs/t_tab_bar.dart:149", + "tdesign-component/lib/src/components/tabs/t_horizontal_tab_bar.dart:79", + "tdesign-component/lib/src/components/tabs/t_horizontal_tab_bar.dart:569", + "tdesign-component/lib/src/components/tabs/t_horizontal_tab_bar.dart:1665" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/tabs/t_tab_bar_test.dart:174", + "text": "expect(tabBar.labelColor, token.brandColor);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/tabs/t_tab_bar_test.dart:222", + "text": "TThemeData.defaultData().brandColor,", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "tabTrackRadius", + "component": "tabs", + "previousDecision": "pending", + "frozenTarget": { + "light": "4dp", + "dark": "4dp", + "expressions": [ + "8rpx" + ], + "source": [ + "packages/components/tabs/tabs.less:22" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/tabs/tabs.less", + "selector": ".t-tabs__track", + "property": "border-radius", + "kind": "render-property", + "value": "var(--td-tab-track-radius, 8rpx)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "tabTrackThickness", + "component": "tabs", + "previousDecision": "pending", + "frozenTarget": { + "light": "3dp", + "dark": "3dp", + "expressions": [ + "6rpx" + ], + "source": [ + "packages/components/tabs/tabs.less:20" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/tabs/tabs.less", + "selector": ".t-tabs__track", + "property": "height", + "kind": "render-property", + "value": "var(--td-tab-track-thickness, 6rpx)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "tabTrackWidth", + "component": "tabs", + "previousDecision": "pending", + "frozenTarget": { + "light": "16dp", + "dark": "16dp", + "expressions": [ + "32rpx" + ], + "source": [ + "packages/components/tabs/tabs.less:21" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/tabs/tabs.less", + "selector": ".t-tabs__track", + "property": "width", + "kind": "render-property", + "value": "var(--td-tab-track-width, 32rpx)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "tagDangerColor", + "component": "tag", + "previousDecision": "pending", + "frozenTarget": { + "light": "#d54941", + "dark": "#c64751", + "expressions": [ + "@error-color" + ], + "source": [ + "packages/components/check-tag/check-tag.less:12", + "packages/components/tag/tag.less:12" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--dark.t-tag--danger", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-tag-danger-color, var(--td-error-color, var(--td-error-color-6, #d54941)))" + }, + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--dark.t-tag--danger", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-tag-danger-color, var(--td-error-color, var(--td-error-color-6, #d54941)))" + }, + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--outline.t-tag--danger", + "property": "color", + "kind": "render-property", + "value": "var(--td-tag-danger-color, var(--td-error-color, var(--td-error-color-6, #d54941)))" + }, + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--outline.t-tag--danger", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-tag-danger-color, var(--td-error-color, var(--td-error-color-6, #d54941)))" + }, + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--light.t-tag--danger", + "property": "color", + "kind": "render-property", + "value": "var(--td-tag-danger-color, var(--td-error-color, var(--td-error-color-6, #d54941)))" + }, + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--light-outline.t-tag--danger", + "property": "color", + "kind": "render-property", + "value": "var(--td-tag-danger-color, var(--td-error-color, var(--td-error-color-6, #d54941)))" + }, + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--light-outline.t-tag--danger", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-tag-danger-color, var(--td-error-color, var(--td-error-color-6, #d54941)))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag--dark.t-tag--danger", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-tag-danger-color, var(--td-error-color, var(--td-error-color-6, #d54941)))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag--dark.t-tag--danger", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-tag-danger-color, var(--td-error-color, var(--td-error-color-6, #d54941)))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag--outline.t-tag--danger", + "property": "color", + "kind": "render-property", + "value": "var(--td-tag-danger-color, var(--td-error-color, var(--td-error-color-6, #d54941)))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag--outline.t-tag--danger", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-tag-danger-color, var(--td-error-color, var(--td-error-color-6, #d54941)))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag--light.t-tag--danger", + "property": "color", + "kind": "render-property", + "value": "var(--td-tag-danger-color, var(--td-error-color, var(--td-error-color-6, #d54941)))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag--light-outline.t-tag--danger", + "property": "color", + "kind": "render-property", + "value": "var(--td-tag-danger-color, var(--td-error-color, var(--td-error-color-6, #d54941)))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag--light-outline.t-tag--danger", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-tag-danger-color, var(--td-error-color, var(--td-error-color-6, #d54941)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "errorColor": [ + "tdesign-component/lib/src/components/tag/t_tag.dart:255" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "tagDefaultFontColor", + "component": "tag", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.9)", + "dark": "rgba(255, 255, 255, 90%)", + "expressions": [ + "@text-color-primary" + ], + "source": [ + "packages/components/check-tag/check-tag.less:17", + "packages/components/tag/tag.less:17" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--dark.t-tag--default", + "property": "color", + "kind": "render-property", + "value": "var(--td-tag-default-font-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + }, + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--outline.t-tag--default", + "property": "color", + "kind": "render-property", + "value": "var(--td-tag-default-font-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + }, + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--light.t-tag--default", + "property": "color", + "kind": "render-property", + "value": "var(--td-tag-default-font-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + }, + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--light-outline.t-tag--default", + "property": "color", + "kind": "render-property", + "value": "var(--td-tag-default-font-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag--dark.t-tag--default", + "property": "color", + "kind": "render-property", + "value": "var(--td-tag-default-font-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag--outline.t-tag--default", + "property": "color", + "kind": "render-property", + "value": "var(--td-tag-default-font-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag--light.t-tag--default", + "property": "color", + "kind": "render-property", + "value": "var(--td-tag-default-font-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag--light-outline.t-tag--default", + "property": "color", + "kind": "render-property", + "value": "var(--td-tag-default-font-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorPrimary": [ + "tdesign-component/lib/src/components/tag/t_tag.dart:294", + "tdesign-component/lib/src/components/tag/t_tag.dart:299" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "tagDefaultLightColor", + "component": "tag", + "previousDecision": "pending", + "frozenTarget": { + "light": "#f3f3f3", + "dark": "#2c2c2c", + "expressions": [ + "@bg-color-secondarycontainer" + ], + "source": [ + "packages/components/check-tag/check-tag.less:5", + "packages/components/tag/tag.less:5" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--outline.t-tag--default", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-tag-default-light-color, var(--td-bg-color-secondarycontainer, var(--td-gray-color-1, #f3f3f3)))" + }, + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--light.t-tag--default", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-tag-default-light-color, var(--td-bg-color-secondarycontainer, var(--td-gray-color-1, #f3f3f3)))" + }, + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--light.t-tag--default", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-tag-default-light-color, var(--td-bg-color-secondarycontainer, var(--td-gray-color-1, #f3f3f3)))" + }, + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--light-outline.t-tag--default", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-tag-default-light-color, var(--td-bg-color-secondarycontainer, var(--td-gray-color-1, #f3f3f3)))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag--outline.t-tag--default", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-tag-default-light-color, var(--td-bg-color-secondarycontainer, var(--td-gray-color-1, #f3f3f3)))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag--light.t-tag--default", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-tag-default-light-color, var(--td-bg-color-secondarycontainer, var(--td-gray-color-1, #f3f3f3)))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag--light.t-tag--default", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-tag-default-light-color, var(--td-bg-color-secondarycontainer, var(--td-gray-color-1, #f3f3f3)))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag--light-outline.t-tag--default", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-tag-default-light-color, var(--td-bg-color-secondarycontainer, var(--td-gray-color-1, #f3f3f3)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "bgColorSecondaryContainer": [ + "tdesign-component/lib/src/components/tag/t_tag.dart:296", + "tdesign-component/lib/src/components/tag/t_tag.dart:301" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/tag/t_tag_test.dart:262", + "text": "expect(fill('浅色'), token.bgColorSecondaryContainer);", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "tagDisabledBackgroundColor", + "component": "tag", + "previousDecision": "pending", + "frozenTarget": { + "light": "#eeeeee", + "dark": "#2c2c2c", + "expressions": [ + "@bg-color-component-disabled" + ], + "source": [ + "packages/components/check-tag/check-tag.less:21", + "packages/components/tag/tag.less:21" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag.t-tag--closable.t-tag--disabled", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-tag-disabled-background-color, var(--td-bg-color-component-disabled, var(--td-gray-color-2, #eeeeee)))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag.t-tag--closable.t-tag--disabled", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-tag-disabled-background-color, var(--td-bg-color-component-disabled, var(--td-gray-color-2, #eeeeee)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "bgColorComponentDisabled": [ + "tdesign-component/lib/src/components/tag/t_tag.dart:217" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/tag/t_select_tag_test.dart:37", + "text": "expect(decoration.color, token.bgColorComponentDisabled);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/tag/t_select_tag_test.dart:114", + "text": "expect(decoration.color, token.bgColorComponentDisabled);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/tag/t_tag_test.dart:865", + "text": "expect(decoration.color, token.bgColorComponentDisabled);", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "tagDisabledBorderColor", + "component": "tag", + "previousDecision": "pending", + "frozenTarget": { + "light": "#dcdcdc", + "dark": "#5e5e5e", + "expressions": [ + "@component-border" + ], + "source": [ + "packages/components/check-tag/check-tag.less:22", + "packages/components/tag/tag.less:22" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag.t-tag--closable.t-tag--disabled", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-tag-disabled-border-color, var(--td-component-border, var(--td-gray-color-4, #dcdcdc)))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag.t-tag--closable.t-tag--disabled", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-tag-disabled-border-color, var(--td-component-border, var(--td-gray-color-4, #dcdcdc)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "componentBorder": [ + "tdesign-component/lib/src/components/tag/t_tag.dart:218", + "tdesign-component/lib/src/components/tag/t_tag.dart:292" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "tagDisabledColor", + "component": "tag", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.26)", + "dark": "rgba(255, 255, 255, 22%)", + "expressions": [ + "@text-color-disabled" + ], + "source": [ + "packages/components/check-tag/check-tag.less:20", + "packages/components/tag/tag.less:20" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag.t-tag--closable.t-tag--disabled", + "property": "color", + "kind": "render-property", + "value": "var(--td-tag-disabled-color, var(--td-text-color-disabled, var(--td-font-gray-4, rgba(0, 0, 0, 0.26))))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag.t-tag--closable.t-tag--disabled", + "property": "color", + "kind": "render-property", + "value": "var(--td-tag-disabled-color, var(--td-text-color-disabled, var(--td-font-gray-4, rgba(0, 0, 0, 0.26))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorDisabled": [ + "tdesign-component/lib/src/components/tag/t_tag.dart:216" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/tag/t_select_tag_test.dart:38", + "text": "expect(text.style?.color, token.textColorDisabled);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/tag/t_select_tag_test.dart:115", + "text": "expect(text.style?.color, token.textColorDisabled);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/tag/t_select_tag_test.dart:116", + "text": "expect(icon.color, token.textColorDisabled);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/tag/t_tag_test.dart:111", + "text": "TThemeData.defaultData().textColorDisabled,", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/tag/t_tag_test.dart:866", + "text": "expect(text.style?.color, token.textColorDisabled);", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "tagMarkBorderRadius", + "component": "tag", + "previousDecision": "pending", + "frozenTarget": { + "light": "999px", + "dark": "999px", + "expressions": [ + "@tag-round-border-radius" + ], + "source": [ + "packages/components/check-tag/check-tag.less:42", + "packages/components/tag/tag.less:42" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag.t-tag--mark", + "property": "border-radius", + "kind": "render-property", + "value": "0 var(--td-tag-mark-border-radius, var(--td-tag-round-border-radius, var(--td-radius-round, 999px))) var(--td-tag-mark-border-radius, var(--td-tag-round-border-radius, var(--td-radius-round, 999px))) 0" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag.t-tag--mark", + "property": "border-top-right-radius", + "kind": "render-property", + "value": "var(--td-tag-mark-border-radius, var(--td-tag-round-border-radius, var(--td-radius-round, 999px)))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag.t-tag--mark", + "property": "border-bottom-right-radius", + "kind": "render-property", + "value": "var(--td-tag-mark-border-radius, var(--td-tag-round-border-radius, var(--td-radius-round, 999px)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "tagPrimaryColor", + "component": "tag", + "previousDecision": "pending", + "frozenTarget": { + "light": "#0052d9", + "dark": "#4582e6", + "expressions": [ + "@brand-color" + ], + "source": [ + "packages/components/check-tag/check-tag.less:6", + "packages/components/tag/tag.less:6" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--dark.t-tag--primary", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-tag-primary-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + }, + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--dark.t-tag--primary", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-tag-primary-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + }, + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--outline.t-tag--primary", + "property": "color", + "kind": "render-property", + "value": "var(--td-tag-primary-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + }, + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--outline.t-tag--primary", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-tag-primary-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + }, + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--light.t-tag--primary", + "property": "color", + "kind": "render-property", + "value": "var(--td-tag-primary-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + }, + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--light-outline.t-tag--primary", + "property": "color", + "kind": "render-property", + "value": "var(--td-tag-primary-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + }, + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--light-outline.t-tag--primary", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-tag-primary-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag--dark.t-tag--primary", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-tag-primary-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag--dark.t-tag--primary", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-tag-primary-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag--outline.t-tag--primary", + "property": "color", + "kind": "render-property", + "value": "var(--td-tag-primary-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag--outline.t-tag--primary", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-tag-primary-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag--light.t-tag--primary", + "property": "color", + "kind": "render-property", + "value": "var(--td-tag-primary-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag--light-outline.t-tag--primary", + "property": "color", + "kind": "render-property", + "value": "var(--td-tag-primary-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag--light-outline.t-tag--primary", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-tag-primary-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "brandColor": [ + "tdesign-component/lib/src/components/tag/t_tag.dart:230", + "tdesign-component/lib/src/components/tag/t_tag.dart:231", + "tdesign-component/lib/src/components/tag/t_tag.dart:236", + "tdesign-component/lib/src/components/tag/t_tag.dart:237" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/tag/t_tag_test.dart:158", + "text": "TThemeData.defaultData().brandColor,", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/tag/t_tag_test.dart:162", + "text": "TThemeData.defaultData().brandColor,", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "tagPrimaryLightColor", + "component": "tag", + "previousDecision": "pending", + "frozenTarget": { + "light": "#f2f3ff", + "dark": "#1b2f51", + "expressions": [ + "@brand-color-light" + ], + "source": [ + "packages/components/check-tag/check-tag.less:7", + "packages/components/tag/tag.less:7" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--outline.t-tag--primary", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-tag-primary-light-color, var(--td-brand-color-light, var(--td-primary-color-1, #f2f3ff)))" + }, + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--light.t-tag--primary", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-tag-primary-light-color, var(--td-brand-color-light, var(--td-primary-color-1, #f2f3ff)))" + }, + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--light.t-tag--primary", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-tag-primary-light-color, var(--td-brand-color-light, var(--td-primary-color-1, #f2f3ff)))" + }, + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--light-outline.t-tag--primary", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-tag-primary-light-color, var(--td-brand-color-light, var(--td-primary-color-1, #f2f3ff)))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag--outline.t-tag--primary", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-tag-primary-light-color, var(--td-brand-color-light, var(--td-primary-color-1, #f2f3ff)))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag--light.t-tag--primary", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-tag-primary-light-color, var(--td-brand-color-light, var(--td-primary-color-1, #f2f3ff)))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag--light.t-tag--primary", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-tag-primary-light-color, var(--td-brand-color-light, var(--td-primary-color-1, #f2f3ff)))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag--light-outline.t-tag--primary", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-tag-primary-light-color, var(--td-brand-color-light, var(--td-primary-color-1, #f2f3ff)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "brandColorLight": [ + "tdesign-component/lib/src/components/tag/t_tag.dart:233", + "tdesign-component/lib/src/components/tag/t_tag.dart:237" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/tag/t_tag_test.dart:821", + "text": "expect(decoration('浅色描边').color, token.brandColorLight);", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "tagRoundBorderRadius", + "component": "tag", + "previousDecision": "pending", + "frozenTarget": { + "light": "999px", + "dark": "999px", + "expressions": [ + "@radius-round" + ], + "source": [ + "packages/components/check-tag/check-tag.less:41", + "packages/components/tag/tag.less:41" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag.t-tag--round", + "property": "border-radius", + "kind": "render-property", + "value": "var(--td-tag-round-border-radius, var(--td-radius-round, 999px))" + }, + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag.t-tag--mark", + "property": "border-radius", + "kind": "render-property", + "value": "0 var(--td-tag-mark-border-radius, var(--td-tag-round-border-radius, var(--td-radius-round, 999px))) var(--td-tag-mark-border-radius, var(--td-tag-round-border-radius, var(--td-radius-round, 999px))) 0" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag.t-tag--round", + "property": "border-radius", + "kind": "render-property", + "value": "var(--td-tag-round-border-radius, var(--td-radius-round, 999px))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag.t-tag--mark", + "property": "border-top-right-radius", + "kind": "render-property", + "value": "var(--td-tag-mark-border-radius, var(--td-tag-round-border-radius, var(--td-radius-round, 999px)))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag.t-tag--mark", + "property": "border-bottom-right-radius", + "kind": "render-property", + "value": "var(--td-tag-mark-border-radius, var(--td-tag-round-border-radius, var(--td-radius-round, 999px)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "radiusRound": [ + "tdesign-component/lib/src/components/tag/t_tag.dart:327", + "tdesign-component/lib/src/components/tag/t_tag.dart:330", + "tdesign-component/lib/src/components/tag/t_tag.dart:331" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "tagSuccessColor", + "component": "tag", + "previousDecision": "pending", + "frozenTarget": { + "light": "#2ba471", + "dark": "#059465", + "expressions": [ + "@success-color" + ], + "source": [ + "packages/components/check-tag/check-tag.less:8", + "packages/components/tag/tag.less:8" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--dark.t-tag--success", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-tag-success-color, var(--td-success-color, var(--td-success-color-5, #2ba471)))" + }, + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--dark.t-tag--success", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-tag-success-color, var(--td-success-color, var(--td-success-color-5, #2ba471)))" + }, + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--outline.t-tag--success", + "property": "color", + "kind": "render-property", + "value": "var(--td-tag-success-color, var(--td-success-color, var(--td-success-color-5, #2ba471)))" + }, + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--outline.t-tag--success", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-tag-success-color, var(--td-success-color, var(--td-success-color-5, #2ba471)))" + }, + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--light.t-tag--success", + "property": "color", + "kind": "render-property", + "value": "var(--td-tag-success-color, var(--td-success-color, var(--td-success-color-5, #2ba471)))" + }, + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--light-outline.t-tag--success", + "property": "color", + "kind": "render-property", + "value": "var(--td-tag-success-color, var(--td-success-color, var(--td-success-color-5, #2ba471)))" + }, + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--light-outline.t-tag--success", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-tag-success-color, var(--td-success-color, var(--td-success-color-5, #2ba471)))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag--dark.t-tag--success", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-tag-success-color, var(--td-success-color, var(--td-success-color-5, #2ba471)))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag--dark.t-tag--success", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-tag-success-color, var(--td-success-color, var(--td-success-color-5, #2ba471)))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag--outline.t-tag--success", + "property": "color", + "kind": "render-property", + "value": "var(--td-tag-success-color, var(--td-success-color, var(--td-success-color-5, #2ba471)))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag--outline.t-tag--success", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-tag-success-color, var(--td-success-color, var(--td-success-color-5, #2ba471)))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag--light.t-tag--success", + "property": "color", + "kind": "render-property", + "value": "var(--td-tag-success-color, var(--td-success-color, var(--td-success-color-5, #2ba471)))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag--light-outline.t-tag--success", + "property": "color", + "kind": "render-property", + "value": "var(--td-tag-success-color, var(--td-success-color, var(--td-success-color-5, #2ba471)))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag--light-outline.t-tag--success", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-tag-success-color, var(--td-success-color, var(--td-success-color-5, #2ba471)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "successColor": [ + "tdesign-component/lib/src/components/tag/t_tag_theme_data.dart:26", + "tdesign-component/lib/src/components/tag/t_tag_theme_data.dart:56", + "tdesign-component/lib/src/components/tag/t_tag_theme_data.dart:92", + "tdesign-component/lib/src/components/tag/t_tag_theme_data.dart:113", + "tdesign-component/lib/src/components/tag/t_tag_theme_data.dart:126", + "tdesign-component/lib/src/components/tag/t_tag_theme_data.dart:135", + "tdesign-component/lib/src/components/tag/t_tag_theme_data.dart:195", + "tdesign-component/lib/src/components/tag/t_tag_theme_data.dart:197", + "tdesign-component/lib/src/components/tag/t_tag_theme_data.dart:199", + "tdesign-component/lib/src/components/tag/t_tag_theme_data.dart:253", + "tdesign-component/lib/src/components/tag/t_tag.dart:272", + "tdesign-component/lib/src/components/tag/t_tag.dart:273" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/tag/t_tag_test.dart:557", + "text": "Color.lerp(token.successColor, Colors.purple, 0.5),", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/tag/t_tag_test.dart:1431", + "text": "midpoint.successColor,", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "tagWarningColor", + "component": "tag", + "previousDecision": "pending", + "frozenTarget": { + "light": "#e37318", + "dark": "#cf6e2d", + "expressions": [ + "@warning-color" + ], + "source": [ + "packages/components/check-tag/check-tag.less:10", + "packages/components/tag/tag.less:10" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--dark.t-tag--warning", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-tag-warning-color, var(--td-warning-color, var(--td-warning-color-5, #e37318)))" + }, + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--dark.t-tag--warning", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-tag-warning-color, var(--td-warning-color, var(--td-warning-color-5, #e37318)))" + }, + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--outline.t-tag--warning", + "property": "color", + "kind": "render-property", + "value": "var(--td-tag-warning-color, var(--td-warning-color, var(--td-warning-color-5, #e37318)))" + }, + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--outline.t-tag--warning", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-tag-warning-color, var(--td-warning-color, var(--td-warning-color-5, #e37318)))" + }, + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--light.t-tag--warning", + "property": "color", + "kind": "render-property", + "value": "var(--td-tag-warning-color, var(--td-warning-color, var(--td-warning-color-5, #e37318)))" + }, + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--light-outline.t-tag--warning", + "property": "color", + "kind": "render-property", + "value": "var(--td-tag-warning-color, var(--td-warning-color, var(--td-warning-color-5, #e37318)))" + }, + { + "file": "packages/components/check-tag/check-tag.less", + "selector": ".t-tag--light-outline.t-tag--warning", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-tag-warning-color, var(--td-warning-color, var(--td-warning-color-5, #e37318)))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag--dark.t-tag--warning", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-tag-warning-color, var(--td-warning-color, var(--td-warning-color-5, #e37318)))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag--dark.t-tag--warning", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-tag-warning-color, var(--td-warning-color, var(--td-warning-color-5, #e37318)))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag--outline.t-tag--warning", + "property": "color", + "kind": "render-property", + "value": "var(--td-tag-warning-color, var(--td-warning-color, var(--td-warning-color-5, #e37318)))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag--outline.t-tag--warning", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-tag-warning-color, var(--td-warning-color, var(--td-warning-color-5, #e37318)))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag--light.t-tag--warning", + "property": "color", + "kind": "render-property", + "value": "var(--td-tag-warning-color, var(--td-warning-color, var(--td-warning-color-5, #e37318)))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag--light-outline.t-tag--warning", + "property": "color", + "kind": "render-property", + "value": "var(--td-tag-warning-color, var(--td-warning-color, var(--td-warning-color-5, #e37318)))" + }, + { + "file": "packages/components/tag/tag.less", + "selector": ".t-tag--light-outline.t-tag--warning", + "property": "border-color", + "kind": "render-property", + "value": "var(--td-tag-warning-color, var(--td-warning-color, var(--td-warning-color-5, #e37318)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "warningColor": [ + "tdesign-component/lib/src/components/tag/t_tag.dart:243", + "tdesign-component/lib/src/components/tag/t_tag.dart:244", + "tdesign-component/lib/src/components/tag/t_tag.dart:249", + "tdesign-component/lib/src/components/tag/t_tag.dart:250" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "textareaBackgroundColor", + "component": "textarea", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(255, 255, 255, 1)", + "dark": "#242424", + "expressions": [ + "@bg-color-container" + ], + "source": [ + "packages/components/textarea/textarea.less:14" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/textarea/textarea.less", + "selector": ".t-textarea", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-textarea-background-color, var(--td-bg-color-container, var(--td-font-white-1, #ffffff)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "bgColorContainer": [ + "tdesign-component/lib/src/components/textarea/t_textarea.dart:255" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "textareaBorderColor", + "component": "textarea", + "previousDecision": "pending", + "frozenTarget": { + "light": "#dcdcdc", + "dark": "#5e5e5e", + "expressions": [ + "@component-border" + ], + "source": [ + "packages/components/textarea/textarea.less:26" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/textarea/textarea.less", + "selector": ".t-textarea--border::after", + "property": "border", + "kind": "render-property", + "value": "2rpx solid var(--td-textarea-border-color, var(--td-component-border, var(--td-gray-color-4, #dcdcdc)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "componentBorder": [ + "tdesign-component/lib/src/components/textarea/t_textarea.dart:202" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "textareaBorderRadius", + "component": "textarea", + "previousDecision": "pending", + "frozenTarget": { + "light": "6dp", + "dark": "6dp", + "expressions": [ + "@radius-default" + ], + "source": [ + "packages/components/textarea/textarea.less:24" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/textarea/textarea.less", + "selector": ".t-textarea--border", + "property": "border-radius", + "kind": "render-property", + "value": "var(--td-textarea-border-radius, var(--td-radius-default, 12rpx))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "radiusDefault": [ + "tdesign-component/lib/src/components/textarea/t_textarea.dart:260" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/textarea/t_textarea_test.dart:124", + "text": "BorderRadius.circular(TThemeData.defaultData().radiusDefault),", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "textareaDisabledTextColor", + "component": "textarea", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.26)", + "dark": "rgba(255, 255, 255, 22%)", + "expressions": [ + "@text-color-disabled" + ], + "source": [ + "packages/components/textarea/textarea.less:28" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/textarea/textarea.less", + "selector": ".t-textarea .t-is-disabled", + "property": "color", + "kind": "render-property", + "value": "var(--td-textarea-disabled-text-color, var(--td-text-color-disabled, var(--td-font-gray-4, rgba(0, 0, 0, 0.26))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorDisabled": [ + "tdesign-component/lib/src/components/textarea/t_textarea.dart:220" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/textarea/t_textarea_test.dart:327", + "text": "token.textColorDisabled,", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "textareaIndicatorTextColor", + "component": "textarea", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.4)", + "dark": "rgba(255, 255, 255, 35%)", + "expressions": [ + "@text-color-placeholder" + ], + "source": [ + "packages/components/textarea/textarea.less:22" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/textarea/textarea.less", + "selector": ".t-textarea__indicator:not(:empty)", + "property": "color", + "kind": "render-property", + "value": "var(--td-textarea-indicator-text-color, var(--td-text-color-placeholder, var(--td-font-gray-3, rgba(0, 0, 0, 0.4))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorPlaceholder": [] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/textarea/t_textarea_test.dart:200", + "text": "token.textColorPlaceholder,", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/textarea/t_textarea_test.dart:206", + "text": "expect(indicator.style?.color, token.textColorPlaceholder);", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "textareaLabelColor", + "component": "textarea", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.9)", + "dark": "rgba(255, 255, 255, 90%)", + "expressions": [ + "@text-color-primary" + ], + "source": [ + "packages/components/textarea/textarea.less:20" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/textarea/textarea.less", + "selector": ".t-textarea__label:not(:empty)", + "property": "color", + "kind": "render-property", + "value": "var(--td-textarea-label-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorPrimary": [ + "tdesign-component/lib/src/components/textarea/t_textarea.dart:219" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/textarea/t_textarea_test.dart:161", + "text": "expect(label.style?.color, token.textColorPrimary);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/textarea/t_textarea_test.dart:310", + "text": "expect(enabled?.color, token.textColorPrimary);", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "textareaPadding", + "component": "textarea", + "previousDecision": "pending", + "frozenTarget": { + "light": "16dp", + "dark": "16dp", + "expressions": [ + "@spacer-2" + ], + "source": [ + "packages/components/textarea/textarea.less:3" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/textarea/textarea.less", + "selector": ".t-textarea", + "property": "padding", + "kind": "render-property", + "value": "var(--td-textarea-padding, var(--td-spacer-2, 32rpx))" + } + ], + "nonLessReferences": [ + { + "file": "packages/components/form/_example/horizontal/index.wxss", + "line": 16, + "text": "--td-textarea-padding: 0;" + }, + { + "file": "packages/components/form/_example/vertical/index.wxss", + "line": 10, + "text": "--td-textarea-padding: 0;" + } + ] + }, + "flutterNameLocators": { + "spacer2": [ + "tdesign-component/lib/src/components/textarea/t_textarea.dart:277" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/textarea/t_textarea_test.dart:215", + "text": "(widget) => widget is SizedBox && widget.width == token.spacer2,", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/textarea/t_textarea_test.dart:236", + "text": "expect(fieldRect.left - labelRect.right, token.spacer2);", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "textareaPlaceholderColor", + "component": "textarea", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.4)", + "dark": "rgba(255, 255, 255, 35%)", + "expressions": [ + "@text-color-placeholder" + ], + "source": [ + "packages/components/textarea/textarea.less:16" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/textarea/textarea.less", + "selector": ".t-textarea__placeholder", + "property": "color", + "kind": "render-property", + "value": "var(--td-textarea-placeholder-color, var(--td-text-color-placeholder, var(--td-font-gray-3, rgba(0, 0, 0, 0.4))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorPlaceholder": [] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/textarea/t_textarea_test.dart:200", + "text": "token.textColorPlaceholder,", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/textarea/t_textarea_test.dart:206", + "text": "expect(indicator.style?.color, token.textColorPlaceholder);", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "textareaTextColor", + "component": "textarea", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.9)", + "dark": "rgba(255, 255, 255, 90%)", + "expressions": [ + "@text-color-primary" + ], + "source": [ + "packages/components/textarea/textarea.less:18" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/textarea/textarea.less", + "selector": ".t-textarea__wrapper-inner", + "property": "color", + "kind": "render-property", + "value": "var(--td-textarea-text-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorPrimary": [ + "tdesign-component/lib/src/components/textarea/t_textarea.dart:219" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/textarea/t_textarea_test.dart:161", + "text": "expect(label.style?.color, token.textColorPrimary);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/textarea/t_textarea_test.dart:310", + "text": "expect(enabled?.color, token.textColorPrimary);", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "toastBgColor", + "component": "toast", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 60%)", + "dark": "rgba(0, 0, 0, 40%)", + "expressions": [ + "@mask-active" + ], + "source": [ + "packages/components/toast/toast.less:4" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/toast/toast.less", + "selector": ".t-toast", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-toast-bg-color, var(--td-mask-active, rgba(0, 0, 0, 0.6)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "maskActive": [] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "toastColor", + "component": "toast", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(255, 255, 255, 1)", + "dark": "rgba(255, 255, 255, 90%)", + "expressions": [ + "@text-color-anti" + ], + "source": [ + "packages/components/toast/toast.less:3" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/toast/toast.less", + "selector": ".t-toast", + "property": "color", + "kind": "render-property", + "value": "var(--td-toast-color, var(--td-text-color-anti, var(--td-font-white-1, #ffffff)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorAnti": [ + "tdesign-component/lib/src/components/toast/t_toast.dart:683", + "tdesign-component/lib/src/components/toast/t_toast.dart:695", + "tdesign-component/lib/src/components/toast/t_toast.dart:727", + "tdesign-component/lib/src/components/toast/t_toast.dart:736", + "tdesign-component/lib/src/components/toast/t_toast.dart:787", + "tdesign-component/lib/src/components/toast/t_toast.dart:801", + "tdesign-component/lib/src/components/toast/t_toast.dart:833", + "tdesign-component/lib/src/components/toast/t_toast.dart:884" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/toast/t_toast_test.dart:464", + "text": "expect(text.style?.color, token.textColorAnti);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/toast/t_toast_test.dart:492", + "text": "expect(icon.color, token.textColorAnti);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/toast/t_toast_test.dart:494", + "text": "expect(text.style?.color, token.textColorAnti);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/toast/t_toast_test.dart:513", + "text": "expect(indicator.color, token.textColorAnti);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/toast/t_toast_test.dart:515", + "text": "expect(text.style?.color, token.textColorAnti);", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "toastColumnIconSize", + "component": "toast", + "previousDecision": "pending", + "frozenTarget": { + "light": "32dp", + "dark": "32dp", + "expressions": [ + "64rpx" + ], + "source": [ + "packages/components/toast/toast.less:8" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/toast/toast.less", + "selector": ".t-toast__icon--column", + "property": "font-size", + "kind": "render-property", + "value": "var(--td-toast-column-icon-size, 64rpx)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "toastMaxWidth", + "component": "toast", + "previousDecision": "pending", + "frozenTarget": { + "light": "185dp", + "dark": "185dp", + "expressions": [ + "370rpx" + ], + "source": [ + "packages/components/toast/toast.less:5" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/toast/toast.less", + "selector": ".t-toast", + "property": "max-width", + "kind": "render-property", + "value": "var(--td-toast-max-width, 370rpx)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "maxWidth": [ + "tdesign-component/lib/src/components/toast/t_toast.dart:664", + "tdesign-component/lib/src/components/toast/t_toast.dart:711", + "tdesign-component/lib/src/components/toast/t_toast.dart:766", + "tdesign-component/lib/src/components/toast/t_toast.dart:771", + "tdesign-component/lib/src/components/toast/t_toast.dart:866", + "tdesign-component/lib/src/components/toast/t_toast_theme_data.dart:26", + "tdesign-component/lib/src/components/toast/t_toast_theme_data.dart:35", + "tdesign-component/lib/src/components/toast/t_toast_theme_data.dart:56", + "tdesign-component/lib/src/components/toast/t_toast_theme_data.dart:72", + "tdesign-component/lib/src/components/toast/t_toast_theme_data.dart:81", + "tdesign-component/lib/src/components/toast/t_toast_theme_data.dart:108" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "toastRadius", + "component": "toast", + "previousDecision": "pending", + "frozenTarget": { + "light": "6dp", + "dark": "6dp", + "expressions": [ + "@radius-default" + ], + "source": [ + "packages/components/toast/toast.less:6" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/toast/toast.less", + "selector": ".t-toast", + "property": "border-radius", + "kind": "render-property", + "value": "var(--td-toast-radius, var(--td-radius-default, 12rpx))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "radiusDefault": [ + "tdesign-component/lib/src/components/toast/t_toast.dart:673", + "tdesign-component/lib/src/components/toast/t_toast.dart:717", + "tdesign-component/lib/src/components/toast/t_toast.dart:779", + "tdesign-component/lib/src/components/toast/t_toast.dart:829", + "tdesign-component/lib/src/components/toast/t_toast.dart:873" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "toastRowIconSize", + "component": "toast", + "previousDecision": "pending", + "frozenTarget": { + "light": "24dp", + "dark": "24dp", + "expressions": [ + "48rpx" + ], + "source": [ + "packages/components/toast/toast.less:7" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/toast/toast.less", + "selector": ".t-toast__icon--row", + "property": "font-size", + "kind": "render-property", + "value": "var(--td-toast-row-icon-size, 48rpx)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "treeBgColor", + "component": "tree-select", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(255, 255, 255, 1)", + "dark": "#242424", + "expressions": [ + "@bg-color-container" + ], + "source": [ + "packages/components/tree-select/tree-select.less:3" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/tree-select/tree-select.less", + "selector": ".t-tree-select", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-tree-bg-color, var(--td-bg-color-container, var(--td-font-white-1, #ffffff)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "bgColorContainer": [ + "tdesign-component/lib/src/components/tree/t_tree_select.dart:199", + "tdesign-component/lib/src/components/tree/t_tree_select.dart:309", + "tdesign-component/lib/src/components/tree/t_tree_select.dart:385" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/tree/t_tree_select_test.dart:295", + "text": "widget.color == token.bgColorContainer,", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "treeColumTextColor", + "component": "tree-select", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.9)", + "dark": "rgba(255, 255, 255, 90%)", + "expressions": [ + "@text-color-primary" + ], + "source": [ + "packages/components/tree-select/tree-select.less:10" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/tree-select/tree-select.less", + "selector": ".t-tree-select__column", + "property": "color", + "kind": "render-property", + "value": "var(--td-tree-colum-text-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorPrimary": [ + "tdesign-component/lib/src/components/tree/t_tree_select.dart:388" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/tree/t_tree_select_test.dart:238", + "text": "TThemeData.defaultData().textColorPrimary,", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/tree/t_tree_select_test.dart:310", + "text": "expect(leafStyle?.color, token.textColorPrimary);", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "treeColumWidth", + "component": "tree-select", + "previousDecision": "pending", + "frozenTarget": { + "light": "103dp", + "dark": "103dp", + "expressions": [ + "206rpx" + ], + "source": [ + "packages/components/tree-select/tree-select.less:9" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/tree-select/tree-select.less", + "selector": ".t-tree-select__column", + "property": "width", + "kind": "render-property", + "value": "var(--td-tree-colum-width, 206rpx)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "treeItemActiveColor", + "component": "tree-select", + "previousDecision": "pending", + "frozenTarget": { + "light": "#0052d9", + "dark": "#4582e6", + "expressions": [ + "@brand-color" + ], + "source": [ + "packages/components/tree-select/tree-select.less:5" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/tree-select/tree-select.less", + "selector": ".t-tree-select__item--active", + "property": "color", + "kind": "render-property", + "value": "var(--td-tree-item-active-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "brandColor": [ + "tdesign-component/lib/src/components/tree/t_tree_select.dart:386", + "tdesign-component/lib/src/components/tree/t_tree_select.dart:393" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/tree/t_tree_select_test.dart:234", + "text": "TThemeData.defaultData().brandColor,", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/tree/t_tree_select_test.dart:300", + "text": "expect(rootStyle?.color, token.brandColor);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/tree/t_tree_select_test.dart:308", + "text": "expect((rootIndicator.child! as ColoredBox).color, token.brandColor);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/tree/t_tree_select_test.dart:325", + "text": "expect(checkIcon.color, token.brandColor);", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "treeItemDisabledColor", + "component": "tree-select", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.26)", + "dark": "rgba(255, 255, 255, 22%)", + "expressions": [ + "@text-color-disabled" + ], + "source": [ + "packages/components/tree-select/tree-select.less:6" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/tree-select/tree-select.less", + "selector": ".t-tree-select__item--disabled", + "property": "color", + "kind": "render-property", + "value": "var(--td-tree-item-disabled-color, var(--td-text-color-disabled, var(--td-font-gray-4, rgba(0, 0, 0, 0.26))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorDisabled": [ + "tdesign-component/lib/src/components/tree/t_tree_select.dart:398" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/tree/t_tree_select_test.dart:321", + "text": "isNot(token.textColorDisabled),", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "treeItemFontSize", + "component": "tree-select", + "previousDecision": "pending", + "frozenTarget": { + "light": "16dp", + "dark": "16dp", + "expressions": [ + "@font-size-m" + ], + "source": [ + "packages/components/tree-select/tree-select.less:8" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/tree-select/tree-select.less", + "selector": ".t-tree-select__item", + "property": "font-size", + "kind": "render-property", + "value": "var(--td-tree-item-font-size, var(--td-font-size-m, 32rpx))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "fontSizeM": [] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "treeItemHeight", + "component": "tree-select", + "previousDecision": "pending", + "frozenTarget": { + "light": "56dp", + "dark": "56dp", + "expressions": [ + "112rpx" + ], + "source": [ + "packages/components/tree-select/tree-select.less:7" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/tree-select/tree-select.less", + "selector": ".t-tree-select__item", + "property": "height", + "kind": "render-property", + "value": "var(--td-tree-item-height, 112rpx)" + }, + { + "file": "packages/components/tree-select/tree-select.less", + "selector": ".t-tree-select__item", + "property": "line-height", + "kind": "render-property", + "value": "var(--td-tree-item-height, 112rpx)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "treeRootBgColor", + "component": "tree-select", + "previousDecision": "pending", + "frozenTarget": { + "light": "#f3f3f3", + "dark": "#2c2c2c", + "expressions": [ + "@bg-color-secondarycontainer" + ], + "source": [ + "packages/components/tree-select/tree-select.less:4" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/tree-select/tree-select.less", + "selector": ".t-tree-select__column--left", + "property": "background", + "kind": "render-property", + "value": "var(--td-tree-root-bg-color, var(--td-bg-color-secondarycontainer, var(--td-gray-color-1, #f3f3f3)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "bgColorSecondaryContainer": [ + "tdesign-component/lib/src/components/tree/t_tree_select.dart:308" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/tree/t_tree_select_test.dart:285", + "text": "widget.color == token.bgColorSecondaryContainer,", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "uploadAddBgColor", + "component": "upload", + "previousDecision": "pending", + "frozenTarget": { + "light": "#f3f3f3", + "dark": "#2c2c2c", + "expressions": [ + "@bg-color-secondarycontainer" + ], + "source": [ + "packages/components/upload/upload.less:4" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/upload/upload.less", + "selector": ".t-upload__add-icon", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-upload-add-bg-color, var(--td-bg-color-secondarycontainer, var(--td-gray-color-1, #f3f3f3)))" + }, + { + "file": "packages/components/upload/upload.less", + "selector": ".t-upload__wrapper--file", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-upload-background, var(--td-upload-add-bg-color, var(--td-bg-color-secondarycontainer, var(--td-gray-color-1, #f3f3f3))))" + }, + { + "file": "packages/components/upload/upload.less", + "selector": ".t-upload__list-item", + "property": "background", + "kind": "render-property", + "value": "var(--td-upload-background, var(--td-upload-add-bg-color, var(--td-bg-color-secondarycontainer, var(--td-gray-color-1, #f3f3f3))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "bgColorSecondaryContainer": [ + "tdesign-component/lib/src/components/upload/t_upload.dart:280", + "tdesign-component/lib/src/components/upload/t_upload.dart:403", + "tdesign-component/lib/src/components/upload/t_upload.dart:444", + "tdesign-component/lib/src/components/upload/t_upload.dart:670" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/upload/t_upload_test.dart:645", + "text": "token.bgColorSecondaryContainer,", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/upload/t_upload_test.dart:944", + "text": "expect(decoration.color, token.bgColorSecondaryContainer);", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/upload/t_upload_test.dart:1167", + "text": "expect(placeholderBox.color, token.bgColorSecondaryContainer);", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "uploadAddColor", + "component": "upload", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(0, 0, 0, 0.4)", + "dark": "rgba(255, 255, 255, 35%)", + "expressions": [ + "@text-color-placeholder" + ], + "source": [ + "packages/components/upload/upload.less:3" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/upload/upload.less", + "selector": ".t-upload__add-icon", + "property": "color", + "kind": "render-property", + "value": "var(--td-upload-add-color, var(--td-text-color-placeholder, var(--td-font-gray-3, rgba(0, 0, 0, 0.4))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "textColorPlaceholder": [ + "tdesign-component/lib/src/components/upload/t_upload.dart:284", + "tdesign-component/lib/src/components/upload/t_upload.dart:447", + "tdesign-component/lib/src/components/upload/t_upload.dart:548", + "tdesign-component/lib/src/components/upload/t_upload.dart:663" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/upload/t_upload_test.dart:647", + "text": "expect(enabledIcon.color, token.textColorPlaceholder);", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "uploadAddIconSize", + "component": "upload", + "previousDecision": "pending", + "frozenTarget": { + "light": "28dp", + "dark": "28dp", + "expressions": [ + "56rpx" + ], + "source": [ + "packages/components/upload/upload.less:7" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/upload/upload.less", + "selector": ".t-upload__add-icon", + "property": "font-size", + "kind": "render-property", + "value": "var(--td-upload-add-icon-size, 56rpx)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "addIconSize": [ + "tdesign-component/lib/src/components/upload/t_upload_theme_data.dart:31", + "tdesign-component/lib/src/components/upload/t_upload_theme_data.dart:76", + "tdesign-component/lib/src/components/upload/t_upload_theme_data.dart:111", + "tdesign-component/lib/src/components/upload/t_upload_theme_data.dart:133", + "tdesign-component/lib/src/components/upload/t_upload_theme_data.dart:183", + "tdesign-component/lib/src/components/upload/t_upload.dart:300" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "uploadBackground", + "component": "upload", + "previousDecision": "pending", + "frozenTarget": { + "light": "#f3f3f3", + "dark": "#2c2c2c", + "expressions": [ + "@upload-add-bg-color" + ], + "source": [ + "packages/components/upload/upload.less:10" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/upload/upload.less", + "selector": ".t-upload__wrapper--file", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-upload-background, var(--td-upload-add-bg-color, var(--td-bg-color-secondarycontainer, var(--td-gray-color-1, #f3f3f3))))" + }, + { + "file": "packages/components/upload/upload.less", + "selector": ".t-upload__list-item", + "property": "background", + "kind": "render-property", + "value": "var(--td-upload-background, var(--td-upload-add-bg-color, var(--td-bg-color-secondarycontainer, var(--td-gray-color-1, #f3f3f3))))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "uploadDisabledMask", + "component": "upload", + "previousDecision": "pending", + "frozenTarget": { + "light": "rgba(255, 255, 255, 60%)", + "dark": "rgba(0, 0, 0, 60%)", + "expressions": [ + "@mask-disabled" + ], + "source": [ + "packages/components/upload/upload.less:9" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/upload/upload.less", + "selector": ".t-upload__disabled-mask", + "property": "background-color", + "kind": "render-property", + "value": "var(--td-upload-disabled-mask, var(--td-mask-disabled, rgba(255, 255, 255, 0.6)))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "maskDisabled": [] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "uploadDragTransitionDuration", + "component": "upload", + "previousDecision": "pending", + "frozenTarget": { + "light": "", + "dark": "", + "expressions": [], + "source": [ + "packages/components/upload/upload.less:213" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/upload/upload.less", + "selector": ".t-upload__drag--tran", + "property": "transition-duration", + "kind": "render-property", + "value": "var(--td-upload-drag-transition-duration)" + } + ], + "nonLessReferences": [ + { + "file": "packages/components/upload/upload.wxml", + "line": 216, + "text": "style=\"--td-upload-drag-transition-duration: {{transition.duration}}ms; --td-upload-drag-transition-timing-function: {{transition.timingFunction}}\"" + }, + { + "file": "packages/components/upload/upload.wxml", + "line": 294, + "text": "style=\"width: {{100 / column}}%; --td-upload-drag-transition-duration: {{transition.duration}}ms; --td-upload-drag-transition-timing-function: {{transition.timingFunction}}\"" + } + ] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "uploadDragTransitionTimingFunction", + "component": "upload", + "previousDecision": "pending", + "frozenTarget": { + "light": "", + "dark": "", + "expressions": [], + "source": [ + "packages/components/upload/upload.less:214" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/upload/upload.less", + "selector": ".t-upload__drag--tran", + "property": "transition-timing-function", + "kind": "render-property", + "value": "var(--td-upload-drag-transition-timing-function)" + } + ], + "nonLessReferences": [ + { + "file": "packages/components/upload/upload.wxml", + "line": 216, + "text": "style=\"--td-upload-drag-transition-duration: {{transition.duration}}ms; --td-upload-drag-transition-timing-function: {{transition.timingFunction}}\"" + }, + { + "file": "packages/components/upload/upload.wxml", + "line": 294, + "text": "style=\"width: {{100 / column}}%; --td-upload-drag-transition-duration: {{transition.duration}}ms; --td-upload-drag-transition-timing-function: {{transition.timingFunction}}\"" + } + ] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "uploadDragZIndex", + "component": "upload", + "previousDecision": "pending", + "frozenTarget": { + "light": "999", + "dark": "999", + "expressions": [ + "999" + ], + "source": [ + "packages/components/upload/upload.less:11" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/upload/upload.less", + "selector": ".t-upload__drag--cur", + "property": "z-index", + "kind": "render-property", + "value": "var(--td-upload-drag-z-index, 999)" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": {}, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + }, + { + "name": "uploadRadius", + "component": "upload", + "previousDecision": "pending", + "frozenTarget": { + "light": "6dp", + "dark": "6dp", + "expressions": [ + "@radius-default" + ], + "source": [ + "packages/components/upload/upload.less:6" + ] + }, + "compiledSource": { + "conclusion": "compiled-css-consumer-found", + "selectors": [ + { + "file": "packages/components/upload/upload.less", + "selector": ".t-upload__add-icon", + "property": "border-radius", + "kind": "render-property", + "value": "var(--td-upload-radius, var(--td-radius-default, 12rpx))" + }, + { + "file": "packages/components/upload/upload.less", + "selector": ".t-upload__wrapper", + "property": "border-radius", + "kind": "render-property", + "value": "var(--td-upload-radius, var(--td-radius-default, 12rpx))" + }, + { + "file": "packages/components/upload/upload.less", + "selector": ".t-upload__close-btn", + "property": "border-top-right-radius", + "kind": "render-property", + "value": "var(--td-upload-radius, var(--td-radius-default, 12rpx))" + }, + { + "file": "packages/components/upload/upload.less", + "selector": ".t-upload__close-btn", + "property": "border-bottom-left-radius", + "kind": "render-property", + "value": "var(--td-upload-radius, var(--td-radius-default, 12rpx))" + }, + { + "file": "packages/components/upload/upload.less", + "selector": ".t-upload__progress-mask", + "property": "border-radius", + "kind": "render-property", + "value": "var(--td-upload-radius, var(--td-radius-default, 12rpx))" + }, + { + "file": "packages/components/upload/upload.less", + "selector": ".t-upload__list-item", + "property": "border-radius", + "kind": "render-property", + "value": "var(--td-upload-radius, var(--td-radius-default, 12rpx))" + } + ], + "nonLessReferences": [] + }, + "flutterNameLocators": { + "radiusDefault": [ + "tdesign-component/lib/src/components/upload/t_upload.dart:671", + "tdesign-component/lib/src/components/upload/t_upload.dart:838" + ] + }, + "approvedGlobalException": null, + "stage": "runtime-evidence-pending", + "runtimeDefaultVerified": false, + "testEntry": null, + "observedScenariosPerSdk": 0, + "hasCustomTokenObservation": false, + "observationsFile": null, + "notes": null, + "candidateExistingTests": [ + { + "file": "tdesign-component/test/components/upload/t_upload_test.dart:892", + "text": "BorderRadius.circular(token.radiusDefault),", + "candidateOnly": true + }, + { + "file": "tdesign-component/test/components/upload/t_upload_test.dart:947", + "text": "BorderRadius.circular(token.radiusDefault),", + "candidateOnly": true + } + ], + "requiredEvidence": [ + "Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.", + "Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.", + "Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.", + "Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here." + ], + "finalPaintVerified": false + } + ] +} diff --git a/specs/059-component-token-runtime-evidence/runtime-review.md b/specs/059-component-token-runtime-evidence/runtime-review.md new file mode 100644 index 0000000000..a45229c778 --- /dev/null +++ b/specs/059-component-token-runtime-evidence/runtime-review.md @@ -0,0 +1,252 @@ +# 677项组件消费队列:当前阶段记录 + +这是阶段验收,不是正式1.0发布批准。原始静态盘点保留为基线,当前进展以本记录及runtime-review.json为准。 + +| 状态 | 项数 | +|---|---:| +| 待补运行证据 | 524 | +| 默认运行已验证,视觉待验收 | 116 | +| 运行差异待处理 | 31 | +| 平台几何待裁定 | 1 | +| 冻结源码未找到消费者 | 5 | + +两套SDK各46项新增检查,逐SDK采集1008条观察,涉及150个变量名(含1项既有已审变量);两套观察逐条相同。46项是各439项完整相关功能回归的子集,不重复相加。 + +## 证据解释 + +- 默认运行已验证只关闭该层证据;不表示每个公开覆盖路径、所有状态、设计像素或真机已通过。 +- enforce=false是差异诊断,不是通过断言;这些观察进入差异队列,不冒充绿色对齐用例。既有及新增已确认契约的assert仍由普通测试执行。 +- 31项是变量级差异,可能共用根因,不等于31个独立缺陷。固定规格、语义Token别名与设计例外需要契约裁定。 +- 已批准的grayColor3/radiusCircle等全局差异沿用Spec047,主色填充按钮深色禁用文字沿用Spec048;不反向覆盖已批准决策。 +- 5项只关闭冻结版本的消费者查找,不删除公开CSS变量,也不推定未来版本无消费者。 +- 未验证或发现差异的条目没有修改finalPaintVerified。当前未改生产行为、CI、测试清单、版本号或Golden。 + +## 实测差异 + +| 变量 | 代表场景 | 实际值 | 比较目标 | +|---|---|---|---| +| avatarBorderColor | dark/custom=false/large | #ff242424 | #ffffffff | +| avatarIconSmallFontSize | dark/custom=true/small | 20 | 31 | +| avatarTextLargeFontSize | dark/custom=true/large | 20 | 31 | +| avatarTextMediumFontSize | dark/custom=true/medium | 16 | 21 | +| avatarTextSmallFontSize | dark/custom=true/small | 14 | 18 | +| buttonDangerDisabledBg | dark/custom=true/fill/danger/disabled | #ff291838 | #ff2a1b3f | +| buttonDangerDisabledColor | dark/custom=false/fill/danger/disabled | #38ffffff | #e6ffffff | +| buttonDangerOutlineDisabledColor | dark/custom=true/outline/danger/disabled | #ff291838 | #ff2a1b3f | +| buttonDangerTextDisabledColor | dark/custom=false/text/danger/disabled | #38ffffff | #e6ffffff | +| buttonDefaultActiveBgColor | dark/custom=false/fill/defaultTheme/pressed | #ff383838 | #ff4b4b4b | +| buttonGhostBorderColor | dark/custom=true/ghost/defaultTheme/idle | #ff37429a | #ff363f93 | +| buttonGhostColor | dark/custom=true/ghost/defaultTheme/idle | #ff37429a | #ff363f93 | +| buttonGhostDangerHoverColor | dark/custom=false/ghost/danger/pressed | #ffc64751 | #ffa03f46 | +| buttonGhostHoverColor | dark/custom=false/ghost/defaultTheme/pressed | #e6ffffff | #8cffffff | +| buttonGhostPrimaryHoverColor | dark/custom=false/ghost/primary/pressed | #ff4582e6 | #ff699ef5 | +| buttonLightActiveBgColor | dark/custom=false/fill/light/pressed | #ff1b2f51 | #ff173463 | +| emptyActionMarginTop | dark/custom=true/image=false | 32 | 37 | +| emptyDescriptionMarginTop | dark/custom=false/image=false | 22 | 16 | +| inputBorderColor | dark/custom=false/enabled=true | #ff5e5e5e | #ff383838 | +| inputVerticalPadding | dark/custom=true/enabled=true | 16 | 19 | +| switchDotLargeSize | dark/large/value=false/icon | 25.14285714 | 26 | +| switchDotPlainLargeSize | dark/large/value=false/filled | 18.28571429 | 22 | +| switchDotPlainSize | dark/medium/value=false/filled | 16 | 18 | +| switchDotPlainSmallSize | dark/small/value=false/filled | 13.71428571 | 14 | +| switchDotSmallSize | dark/small/value=false/icon | 18.85714286 | 18 | +| switchIconLargeSize | dark/large/value=false/icon | 18.28571429 | 24 | +| switchIconSize | dark/medium/value=false/icon | 16 | 20 | +| switchIconSmallSize | dark/small/value=false/icon | 13.71428571 | 16 | +| switchLabelColor | dark/custom=false/TSwitchVariant.icon/value=false | #38ffffff | #ff383838 | +| switchLargeWidth | dark/large/value=false/filled | 51.42857143 | 52 | +| switchSmallWidth | dark/small/value=false/filled | 38.57142857 | 39 | + +完整浅/暗、正常/按压/禁用、默认/自定义观察见[runtime-observations.json](runtime-observations.json),目标源码、现有测试候选和每项缺口见[runtime-review.json](runtime-review.json)。 + +## 逐组件分布 + +| 组件 | 默认运行已验证 | 差异待处理 | 平台几何 | 无消费者 | 待补运行 | +|---|---:|---:|---:|---:|---:| +| action-sheet | 0 | 0 | 0 | 0 | 11 | +| avatar | 12 | 5 | 0 | 0 | 1 | +| avatar-group | 0 | 0 | 0 | 0 | 5 | +| back-top | 0 | 0 | 0 | 0 | 6 | +| badge | 0 | 0 | 0 | 0 | 14 | +| button | 54 | 11 | 1 | 1 | 19 | +| calendar | 0 | 0 | 0 | 0 | 13 | +| cascader | 0 | 0 | 0 | 0 | 19 | +| cell | 0 | 0 | 0 | 0 | 23 | +| cell-group | 0 | 0 | 0 | 0 | 6 | +| checkbox | 0 | 0 | 0 | 0 | 17 | +| collapse-panel | 0 | 0 | 0 | 0 | 13 | +| date-time-picker | 0 | 0 | 0 | 0 | 1 | +| dialog | 0 | 0 | 0 | 0 | 8 | +| divider | 0 | 0 | 0 | 0 | 8 | +| drawer | 0 | 0 | 0 | 0 | 11 | +| dropdown-menu | 0 | 0 | 0 | 0 | 8 | +| empty | 3 | 2 | 0 | 0 | 0 | +| footer | 0 | 0 | 0 | 0 | 12 | +| form-item | 0 | 0 | 0 | 0 | 5 | +| image | 0 | 0 | 0 | 0 | 4 | +| image-viewer | 0 | 0 | 0 | 0 | 8 | +| indexes | 0 | 0 | 0 | 0 | 11 | +| indexes-anchor | 0 | 0 | 0 | 0 | 9 | +| input | 7 | 2 | 0 | 3 | 12 | +| link | 15 | 0 | 0 | 0 | 0 | +| loading | 0 | 0 | 0 | 0 | 5 | +| message-item | 0 | 0 | 0 | 0 | 9 | +| navbar | 0 | 0 | 0 | 0 | 13 | +| notice-bar | 0 | 0 | 0 | 0 | 11 | +| paragraph | 0 | 0 | 0 | 0 | 1 | +| picker | 0 | 0 | 0 | 0 | 11 | +| picker-item | 0 | 0 | 0 | 0 | 3 | +| popover | 0 | 0 | 0 | 0 | 13 | +| popup | 0 | 0 | 0 | 0 | 5 | +| progress | 8 | 0 | 0 | 1 | 0 | +| radio | 0 | 0 | 0 | 0 | 17 | +| rate | 0 | 0 | 0 | 0 | 7 | +| result | 0 | 0 | 0 | 0 | 10 | +| search | 0 | 0 | 0 | 0 | 15 | +| side-bar | 0 | 0 | 0 | 0 | 3 | +| side-bar-item | 0 | 0 | 0 | 0 | 7 | +| skeleton | 0 | 0 | 0 | 0 | 10 | +| slider | 0 | 0 | 0 | 0 | 16 | +| step-item | 0 | 0 | 0 | 0 | 26 | +| stepper | 0 | 0 | 0 | 0 | 3 | +| swiper | 0 | 0 | 0 | 0 | 2 | +| swiper-nav | 0 | 0 | 0 | 0 | 11 | +| switch | 17 | 11 | 0 | 0 | 3 | +| tab-bar | 0 | 0 | 0 | 0 | 3 | +| tab-bar-item | 0 | 0 | 0 | 0 | 7 | +| table | 0 | 0 | 0 | 0 | 10 | +| tabs | 0 | 0 | 0 | 0 | 15 | +| tag | 0 | 0 | 0 | 0 | 12 | +| textarea | 0 | 0 | 0 | 0 | 9 | +| toast | 0 | 0 | 0 | 0 | 6 | +| tree-select | 0 | 0 | 0 | 0 | 8 | +| upload | 0 | 0 | 0 | 0 | 9 | + +## 本批默认运行通过清单 + +| 变量 | 测试入口 | 观察数/SDK | +|---|---|---:| +| avatarBgColor | [测试函数](../../tdesign-component/test/components/avatar/t_avatar_test.dart#L909) | 12 | +| avatarBorderWidthLarge | [测试函数](../../tdesign-component/test/components/avatar/t_avatar_test.dart#L909) | 8 | +| avatarBorderWidthMedium | [测试函数](../../tdesign-component/test/components/avatar/t_avatar_test.dart#L909) | 8 | +| avatarBorderWidthSmall | [测试函数](../../tdesign-component/test/components/avatar/t_avatar_test.dart#L909) | 8 | +| avatarCircleBorderRadius | [测试函数](../../tdesign-component/test/components/avatar/t_avatar_test.dart#L909) | 12 | +| avatarContentColor | [测试函数](../../tdesign-component/test/components/avatar/t_avatar_test.dart#L909) | 12 | +| avatarIconLargeFontSize | [测试函数](../../tdesign-component/test/components/avatar/t_avatar_test.dart#L909) | 4 | +| avatarIconMediumFontSize | [测试函数](../../tdesign-component/test/components/avatar/t_avatar_test.dart#L909) | 4 | +| avatarLargeWidth | [测试函数](../../tdesign-component/test/components/avatar/t_avatar_test.dart#L909) | 4 | +| avatarMediumWidth | [测试函数](../../tdesign-component/test/components/avatar/t_avatar_test.dart#L909) | 4 | +| avatarRoundBorderRadius | [测试函数](../../tdesign-component/test/components/avatar/t_avatar_test.dart#L909) | 12 | +| avatarSmallWidth | [测试函数](../../tdesign-component/test/components/avatar/t_avatar_test.dart#L909) | 4 | +| buttonBorderRadius | [测试函数](../../tdesign-component/test/components/button/t_button_test.dart#L3059) | 16 | +| buttonDangerActiveBgColor | [测试函数](../../tdesign-component/test/components/button/t_button_test.dart#L3059) | 4 | +| buttonDangerBgColor | [测试函数](../../tdesign-component/test/components/button/t_button_test.dart#L3059) | 4 | +| buttonDangerColor | [测试函数](../../tdesign-component/test/components/button/t_button_test.dart#L3059) | 8 | +| buttonDangerOutlineActiveBgColor | [测试函数](../../tdesign-component/test/components/button/t_button_test.dart#L3059) | 4 | +| buttonDangerOutlineActiveBorderColor | [测试函数](../../tdesign-component/test/components/button/t_button_test.dart#L3059) | 4 | +| buttonDangerOutlineBorderColor | [测试函数](../../tdesign-component/test/components/button/t_button_test.dart#L3059) | 4 | +| buttonDangerOutlineColor | [测试函数](../../tdesign-component/test/components/button/t_button_test.dart#L3059) | 8 | +| buttonDangerTextActiveBgColor | [测试函数](../../tdesign-component/test/components/button/t_button_test.dart#L3059) | 4 | +| buttonDangerTextColor | [测试函数](../../tdesign-component/test/components/button/t_button_test.dart#L3059) | 8 | +| buttonDefaultBgColor | [测试函数](../../tdesign-component/test/components/button/t_button_test.dart#L3059) | 4 | +| buttonDefaultColor | [测试函数](../../tdesign-component/test/components/button/t_button_test.dart#L3059) | 8 | +| buttonDefaultDisabledBg | [测试函数](../../tdesign-component/test/components/button/t_button_test.dart#L3059) | 4 | +| buttonDefaultDisabledColor | [测试函数](../../tdesign-component/test/components/button/t_button_test.dart#L3059) | 4 | +| buttonDefaultOutlineActiveBgColor | [测试函数](../../tdesign-component/test/components/button/t_button_test.dart#L3059) | 4 | +| buttonDefaultOutlineActiveBorderColor | [测试函数](../../tdesign-component/test/components/button/t_button_test.dart#L3059) | 4 | +| buttonDefaultOutlineBorderColor | [测试函数](../../tdesign-component/test/components/button/t_button_test.dart#L3059) | 4 | +| buttonDefaultOutlineColor | [测试函数](../../tdesign-component/test/components/button/t_button_test.dart#L3059) | 8 | +| buttonDefaultOutlineDisabledColor | [测试函数](../../tdesign-component/test/components/button/t_button_test.dart#L3059) | 8 | +| buttonDefaultTextActiveBgColor | [测试函数](../../tdesign-component/test/components/button/t_button_test.dart#L3059) | 4 | +| buttonExtraSmallFont | [测试函数](../../tdesign-component/test/components/button/t_button_test.dart#L3059) | 4 | +| buttonGhostDangerBorderColor | [测试函数](../../tdesign-component/test/components/button/t_button_test.dart#L3059) | 4 | +| buttonGhostDangerColor | [测试函数](../../tdesign-component/test/components/button/t_button_test.dart#L3059) | 4 | +| buttonGhostDisabledColor | [测试函数](../../tdesign-component/test/components/button/t_button_test.dart#L3059) | 12 | +| buttonGhostPrimaryBorderColor | [测试函数](../../tdesign-component/test/components/button/t_button_test.dart#L3059) | 4 | +| buttonGhostPrimaryColor | [测试函数](../../tdesign-component/test/components/button/t_button_test.dart#L3059) | 4 | +| buttonLargeFont | [测试函数](../../tdesign-component/test/components/button/t_button_test.dart#L3059) | 4 | +| buttonLightBgColor | [测试函数](../../tdesign-component/test/components/button/t_button_test.dart#L3059) | 4 | +| buttonLightColor | [测试函数](../../tdesign-component/test/components/button/t_button_test.dart#L3059) | 8 | +| buttonLightDisabledBg | [测试函数](../../tdesign-component/test/components/button/t_button_test.dart#L3059) | 4 | +| buttonLightDisabledColor | [测试函数](../../tdesign-component/test/components/button/t_button_test.dart#L3059) | 4 | +| buttonLightOutlineActiveBgColor | [测试函数](../../tdesign-component/test/components/button/t_button_test.dart#L3059) | 4 | +| buttonLightOutlineActiveBorderColor | [测试函数](../../tdesign-component/test/components/button/t_button_test.dart#L3059) | 4 | +| buttonLightOutlineBgColor | [测试函数](../../tdesign-component/test/components/button/t_button_test.dart#L3059) | 4 | +| buttonLightOutlineBorderColor | [测试函数](../../tdesign-component/test/components/button/t_button_test.dart#L3059) | 4 | +| buttonLightOutlineColor | [测试函数](../../tdesign-component/test/components/button/t_button_test.dart#L3059) | 8 | +| buttonLightOutlineDisabledColor | [测试函数](../../tdesign-component/test/components/button/t_button_test.dart#L3059) | 8 | +| buttonLightTextActiveBgColor | [测试函数](../../tdesign-component/test/components/button/t_button_test.dart#L3059) | 4 | +| buttonLightTextColor | [测试函数](../../tdesign-component/test/components/button/t_button_test.dart#L3059) | 8 | +| buttonMediumFont | [测试函数](../../tdesign-component/test/components/button/t_button_test.dart#L3059) | 4 | +| buttonPrimaryActiveBgColor | [测试函数](../../tdesign-component/test/components/button/t_button_test.dart#L3059) | 4 | +| buttonPrimaryBgColor | [测试函数](../../tdesign-component/test/components/button/t_button_test.dart#L3059) | 4 | +| buttonPrimaryColor | [测试函数](../../tdesign-component/test/components/button/t_button_test.dart#L3059) | 8 | +| buttonPrimaryDisabledBg | [测试函数](../../tdesign-component/test/components/button/t_button_test.dart#L3059) | 4 | +| buttonPrimaryDisabledColor | [测试函数](../../tdesign-component/test/components/button/t_button_test.dart#L3059) | 4 | +| buttonPrimaryOutlineActiveBgColor | [测试函数](../../tdesign-component/test/components/button/t_button_test.dart#L3059) | 4 | +| buttonPrimaryOutlineActiveBorderColor | [测试函数](../../tdesign-component/test/components/button/t_button_test.dart#L3059) | 4 | +| buttonPrimaryOutlineBorderColor | [测试函数](../../tdesign-component/test/components/button/t_button_test.dart#L3059) | 4 | +| buttonPrimaryOutlineColor | [测试函数](../../tdesign-component/test/components/button/t_button_test.dart#L3059) | 8 | +| buttonPrimaryOutlineDisabledColor | [测试函数](../../tdesign-component/test/components/button/t_button_test.dart#L3059) | 8 | +| buttonPrimaryTextActiveBgColor | [测试函数](../../tdesign-component/test/components/button/t_button_test.dart#L3059) | 4 | +| buttonPrimaryTextColor | [测试函数](../../tdesign-component/test/components/button/t_button_test.dart#L3059) | 8 | +| buttonPrimaryTextDisabledColor | [测试函数](../../tdesign-component/test/components/button/t_button_test.dart#L3059) | 4 | +| buttonSmallFont | [测试函数](../../tdesign-component/test/components/button/t_button_test.dart#L3059) | 4 | +| emptyDescriptionColor | [测试函数](../../tdesign-component/test/components/empty/t_empty_test.dart#L107) | 8 | +| emptyDescriptionFont | [测试函数](../../tdesign-component/test/components/empty/t_empty_test.dart#L107) | 8 | +| emptyIconColor | [测试函数](../../tdesign-component/test/components/empty/t_empty_test.dart#L107) | 4 | +| inputBgColor | [测试函数](../../tdesign-component/test/components/input/t_input_test.dart#L1019) | 4 | +| inputDefaultTextColor | [测试函数](../../tdesign-component/test/components/input/t_input_test.dart#L1019) | 4 | +| inputDisabledTextColor | [测试函数](../../tdesign-component/test/components/input/t_input_test.dart#L1019) | 8 | +| inputPlaceholderTextColor | [测试函数](../../tdesign-component/test/components/input/t_input_test.dart#L1019) | 4 | +| inputPlaceholderTextFont | [测试函数](../../tdesign-component/test/components/input/t_input_test.dart#L1019) | 4 | +| inputPrefixIconColor | [测试函数](../../tdesign-component/test/components/input/t_input_test.dart#L1019) | 4 | +| inputSuffixIconColor | [测试函数](../../tdesign-component/test/components/input/t_input_test.dart#L1019) | 4 | +| linkDangerActiveColor | [测试函数](../../tdesign-component/test/components/link/t_link_test.dart#L258) | 8 | +| linkDangerColor | [测试函数](../../tdesign-component/test/components/link/t_link_test.dart#L258) | 8 | +| linkDangerDisabledColor | [测试函数](../../tdesign-component/test/components/link/t_link_test.dart#L258) | 8 | +| linkDefaultActiveColor | [测试函数](../../tdesign-component/test/components/link/t_link_test.dart#L258) | 8 | +| linkDefaultColor | [测试函数](../../tdesign-component/test/components/link/t_link_test.dart#L258) | 8 | +| linkDefaultDisabledColor | [测试函数](../../tdesign-component/test/components/link/t_link_test.dart#L258) | 8 | +| linkPrimaryActiveColor | [测试函数](../../tdesign-component/test/components/link/t_link_test.dart#L258) | 8 | +| linkPrimaryColor | [测试函数](../../tdesign-component/test/components/link/t_link_test.dart#L258) | 8 | +| linkPrimaryDisabledColor | [测试函数](../../tdesign-component/test/components/link/t_link_test.dart#L258) | 8 | +| linkSuccessActiveColor | [测试函数](../../tdesign-component/test/components/link/t_link_test.dart#L258) | 8 | +| linkSuccessColor | [测试函数](../../tdesign-component/test/components/link/t_link_test.dart#L258) | 8 | +| linkSuccessDisabledColor | [测试函数](../../tdesign-component/test/components/link/t_link_test.dart#L258) | 8 | +| linkWarningActiveColor | [测试函数](../../tdesign-component/test/components/link/t_link_test.dart#L258) | 8 | +| linkWarningColor | [测试函数](../../tdesign-component/test/components/link/t_link_test.dart#L258) | 8 | +| linkWarningDisabledColor | [测试函数](../../tdesign-component/test/components/link/t_link_test.dart#L258) | 8 | +| progressCircleInnerBgColor | [测试函数](../../tdesign-component/test/components/progress/t_progress_test.dart#L1193) | 4 | +| progressCircleLabelFont | [测试函数](../../tdesign-component/test/components/progress/t_progress_test.dart#L1193) | 4 | +| progressCircleWidth | [测试函数](../../tdesign-component/test/components/progress/t_progress_test.dart#L1193) | 4 | +| progressInnerBgColor | [测试函数](../../tdesign-component/test/components/progress/t_progress_test.dart#L1193) | 12 | +| progressLineStrokeWidth | [测试函数](../../tdesign-component/test/components/progress/t_progress_test.dart#L1193) | 4 | +| progressStrokeCircleWidth | [测试函数](../../tdesign-component/test/components/progress/t_progress_test.dart#L1193) | 4 | +| progressStrokePlumpWidth | [测试函数](../../tdesign-component/test/components/progress/t_progress_test.dart#L1193) | 4 | +| progressTrackBgColor | [测试函数](../../tdesign-component/test/components/progress/t_progress_test.dart#L1193) | 12 | +| switchCheckedColor | [测试函数](../../tdesign-component/test/components/switch/t_switch_test.dart#L665) | 8 | +| switchCheckedDisabledColor | [测试函数](../../tdesign-component/test/components/switch/t_switch_test.dart#L665) | 8 | +| switchDotDisabledColor | [测试函数](../../tdesign-component/test/components/switch/t_switch_test.dart#L665) | 8 | +| switchDotSize | [测试函数](../../tdesign-component/test/components/switch/t_switch_test.dart#L665) | 10 | +| switchHeight | [测试函数](../../tdesign-component/test/components/switch/t_switch_test.dart#L665) | 12 | +| switchLabelCheckedColor | [测试函数](../../tdesign-component/test/components/switch/t_switch_test.dart#L665) | 8 | +| switchLabelFontSize | [测试函数](../../tdesign-component/test/components/switch/t_switch_test.dart#L665) | 4 | +| switchLabelLargeFontSize | [测试函数](../../tdesign-component/test/components/switch/t_switch_test.dart#L665) | 4 | +| switchLabelSmallFontSize | [测试函数](../../tdesign-component/test/components/switch/t_switch_test.dart#L665) | 4 | +| switchLargeHeight | [测试函数](../../tdesign-component/test/components/switch/t_switch_test.dart#L665) | 12 | +| switchLargeRadius | [测试函数](../../tdesign-component/test/components/switch/t_switch_test.dart#L665) | 12 | +| switchLoadingColor | [测试函数](../../tdesign-component/test/components/switch/t_switch_test.dart#L665) | 4 | +| switchRadius | [测试函数](../../tdesign-component/test/components/switch/t_switch_test.dart#L665) | 12 | +| switchSmallHeight | [测试函数](../../tdesign-component/test/components/switch/t_switch_test.dart#L665) | 12 | +| switchSmallRadius | [测试函数](../../tdesign-component/test/components/switch/t_switch_test.dart#L665) | 12 | +| switchUncheckedDisabledColor | [测试函数](../../tdesign-component/test/components/switch/t_switch_test.dart#L665) | 8 | +| switchWidth | [测试函数](../../tdesign-component/test/components/switch/t_switch_test.dart#L665) | 12 | + +## 冻结源码无消费者 + +- buttonIconSpacer:声明存在,但本次冻结源码的编译CSS和其他源文件均未找到消费;保留声明,后续源版本变化重审。 +- inputErrorTextColor:声明存在,但本次冻结源码的编译CSS和其他源文件均未找到消费;保留声明,后续源版本变化重审。 +- inputSuccessTextColor:声明存在,但本次冻结源码的编译CSS和其他源文件均未找到消费;保留声明,后续源版本变化重审。 +- inputWarningTextColor:声明存在,但本次冻结源码的编译CSS和其他源文件均未找到消费;保留声明,后续源版本变化重审。 +- progressCircleIconSize:声明存在,但本次冻结源码的编译CSS和其他源文件均未找到消费;保留声明,后续源版本变化重审。 diff --git a/specs/059-component-token-runtime-evidence/spec.md b/specs/059-component-token-runtime-evidence/spec.md new file mode 100644 index 0000000000..8a9be99eda --- /dev/null +++ b/specs/059-component-token-runtime-evidence/spec.md @@ -0,0 +1,17 @@ +# 组件 Token 待审队列运行证据补齐 + +## 背景与授权 + +2026-10-15 用户要求补齐677项组件消费队列的运行或设计证据并继续推进。沿用Spec048冻结的小程序提交1a1c5ca135b0e9bf19abc43a59870c4908a28ad5和现有单一所有者契约;不改变此前第5项(CI/工作流/调度清单)排除范围,不发布。 + +## 契约 + +- 每项区分:默认值已验证、Token/Theme/实例覆盖已验证、实际差异、目标歧义、未实现能力、设计/跨端视觉待验证。发现差异不把当前值写成期望值来消除失败。 +- 运行断言检查真实Widget/布局/绘制输入,不能只检查getter、源码文字或行覆盖率。 +- 原始小程序声明值与实际消费状态分开;例如Less中的2dp边框须追到实际绘制表达式,不能机械换算。 +- 在现有已调度组件测试内扩展有缺口的场景,保持CI配置与调度清单不变。双SDK执行受影响功能检查与严格分析;本机macOS不生成或更新Golden。 +- 证据绑定源码指纹、SDK、依赖和可重跑命令。finalPaintVerified只在对应视觉证据充分时更新,不把运行路径通过冒称像素已对齐。 + +## 验收 + +逐条登记677项的实际状态和缺失证据;当前可自动验证的批次有真实测试与双SDK结果;遇到设计目标冲突或能力范围裁定保持明确未决,不通过批量勾选关闭总任务。 diff --git a/specs/059-component-token-runtime-evidence/tasks.md b/specs/059-component-token-runtime-evidence/tasks.md new file mode 100644 index 0000000000..cb26c29429 --- /dev/null +++ b/specs/059-component-token-runtime-evidence/tasks.md @@ -0,0 +1,9 @@ +# 任务 + +- [x] 复核冻结源码;213个Less文件实际编译,逐条登记677项状态、目标、源码及缺口。 +- [x] 首批七个高频组件新增46项默认/状态/Token/已有覆盖路径检查;150个变量名、每SDK1008条观察。 +- [x] 双Flutter严格分析、完整相关manifest回归各439项、七组件生产覆盖率均≥95%;源码/资源/测试及依赖指纹已记录。 +- [x] 更新原审查文档入口及设计/设备/能力裁定清单;CI/工作流/清单/正式版本/Golden不变。 +- [ ] 处理31项运行差异和1项平台边框几何问题,补契约裁定或修复及相应验证。 +- [ ] 按next-batches.md继续补524项运行证据,190项已有静态测试候选但不能据此关闭。 +- [ ] 完成适用的公开覆盖路径、完整状态、Linux Golden/设计和真机审查,之后才能关闭最终消费任务。 diff --git a/specs/059-component-token-runtime-evidence/validation-commands.json b/specs/059-component-token-runtime-evidence/validation-commands.json new file mode 100644 index 0000000000..0199bb52b7 --- /dev/null +++ b/specs/059-component-token-runtime-evidence/validation-commands.json @@ -0,0 +1,143 @@ +{ + "workingDirectory": "tdesign-component (separate identical source checkouts for the two SDKs)", + "sdkVersions": [ + "3.32.0", + "3.47.7" + ], + "componentTests": [ + "test/components/button/t_button_test.dart", + "test/components/button/t_button_theme_priority_test.dart", + "test/components/button/t_button_theme_test.dart", + "test/components/button/t_button_widget_test.dart", + "test/components/switch/t_switch_test.dart", + "test/components/switch/t_switch_typography_test.dart", + "test/components/switch/t_cupertino_switch_test.dart", + "test/components/input/t_input_test.dart", + "test/components/input/t_input_theme_test.dart", + "test/components/link/t_link_resolve_test.dart", + "test/components/link/t_link_test.dart", + "test/components/link/t_link_theme_test.dart", + "test/components/link/t_link_widget_test.dart", + "test/components/avatar/t_avatar_test.dart", + "test/components/empty/t_empty_test.dart", + "test/components/progress/t_progress_test.dart" + ], + "analyze": [ + "flutter", + "analyze", + "--no-pub", + "--fatal-infos" + ], + "fullRegression": [ + "flutter", + "test", + "--no-pub", + "--exclude-tags", + "demo", + "--reporter", + "expanded", + "--coverage", + "test/components/button/t_button_test.dart", + "test/components/button/t_button_theme_priority_test.dart", + "test/components/button/t_button_theme_test.dart", + "test/components/button/t_button_widget_test.dart", + "test/components/switch/t_switch_test.dart", + "test/components/switch/t_switch_typography_test.dart", + "test/components/switch/t_cupertino_switch_test.dart", + "test/components/input/t_input_test.dart", + "test/components/input/t_input_theme_test.dart", + "test/components/link/t_link_resolve_test.dart", + "test/components/link/t_link_test.dart", + "test/components/link/t_link_theme_test.dart", + "test/components/link/t_link_widget_test.dart", + "test/components/avatar/t_avatar_test.dart", + "test/components/empty/t_empty_test.dart", + "test/components/progress/t_progress_test.dart" + ], + "coverageCommands": [ + [ + "dart", + "run", + "tool/check_component_coverage.dart", + "button" + ], + [ + "dart", + "run", + "tool/check_component_coverage.dart", + "switch" + ], + [ + "dart", + "run", + "tool/check_component_coverage.dart", + "input" + ], + [ + "dart", + "run", + "tool/check_component_coverage.dart", + "link" + ], + [ + "dart", + "run", + "tool/check_component_coverage.dart", + "avatar" + ], + [ + "dart", + "run", + "tool/check_component_coverage.dart", + "empty" + ], + [ + "dart", + "run", + "tool/check_component_coverage.dart", + "progress" + ] + ], + "focusEnvironment": { + "TDESIGN_TOKEN_EVIDENCE": "1" + }, + "focus": [ + "flutter", + "test", + "--no-pub", + "--reporter", + "expanded", + "--plain-name", + "token consumption", + "test/components/button/t_button_test.dart", + "test/components/switch/t_switch_test.dart", + "test/components/input/t_input_test.dart", + "test/components/link/t_link_test.dart", + "test/components/avatar/t_avatar_test.dart", + "test/components/empty/t_empty_test.dart", + "test/components/progress/t_progress_test.dart" + ], + "sdkMetadata": [ + "flutter", + "--version", + "--machine" + ], + "compileFrozenSource": [ + "node", + "tool/audit_compiled_token_consumption.mjs", + "" + ], + "summarize": [ + "node", + "tool/summarize_component_token_evidence.mjs", + "" + ], + "requireComplete": [ + "node", + "tool/summarize_component_token_evidence.mjs", + "", + "--require-complete" + ], + "requireCompleteExpectedExit": 1, + "explanation": "The final gate remains incomplete; normal function tests do not assert unresolved diagnostic targets as passed." +} diff --git a/specs/060-token-difference-resolution/acceptance.md b/specs/060-token-difference-resolution/acceptance.md new file mode 100644 index 0000000000..7540b82580 --- /dev/null +++ b/specs/060-token-difference-resolution/acceptance.md @@ -0,0 +1,65 @@ +# 2026-10-15 差异处置与验证记录 + +## 结果 + +Spec059的31项运行差异及1项平台几何均已给出可审查的处置,见[逐项解决方案](solutions.md)。本轮实施1个确定的Ghost回退修复(对应2个观察项),为8项已有契约支持的差异补断言;其余21项差异及1项平台几何保留具体方案,不冒称已修复。 + +| 处置 | 项数 | 当前状态 | +|---|---:|---| +| Ghost语义回退已修复 | 2 | 双SDK运行通过,最终视觉仍待验收 | +| 既有Flutter契约支持 | 8 | 现有契约及双SDK运行断言支持,不应按旧CSS变量盲改 | +| 默认视觉/交互方案 | 21 | 逐项列明目标、修改位置、影响和验证;尚未实施 | +| 平台边框几何方案 | 1 | 待目标小程序宿主的实际伪元素几何证据 | + +全部677项的最新分层见[resolution-report.json](resolution-report.json):原116项默认运行通过、2项本轮修复、8项已有契约支持、21项实施方案、1项平台几何、5项无冻结消费者、524项待补运行,合计677。最终像素状态仍未转为通过。 + +## 已实施修复 + +默认配色的TButtonVariant.ghost原来读取fontWhite1,导致独立自定义textColorAnti不能控制文字/描边。现在启用态统一读取textColorAnti;禁用仍读取fontWhite4,实例ButtonStyle的前景和边框仍优先。 + +- [实际代码补丁](implemented-fix.patch)仅修改Button统一解析器的一处回退,未新增公开API或组件Theme字段。 +- 新增1项Ghost回归,分别在浅/暗下验证全局语义Token、原始白色层级、禁用及实例样式独立覆盖;检查实际Text前景、Material边框颜色及宽度。 +- 原有矩阵中的2项观察改为强制断言;默认主题下textColorAnti与fontWhite1值相等的断言通过。没有宣称自定义主题的变化无需视觉复验。 +- 迁移指南增加Ghost自定义反色主题说明,包/站点副本由同步脚本生成;发布说明只补内部草稿,不手改自动CHANGELOG。 + +## 8项契约差异 + +不是重新选择一个方便通过的目标;全部有修复前已经存在的契约依据,原始小程序比较继续保存。 + +- Avatar的4项字号/图标尺寸使用既有尺寸预设,特殊排版由内容Widget/既有Theme表达。依据Spec034、Spec048及TAvatarThemeData.iconSize的公开默认。 +- Avatar组描边回退bgColorContainer,依据公开groupBorderColor契约;此前Spec034已记录明暗头像组设计验收,未恢复固定白色。 +- Empty描述间距图标/图片分别22/16,操作间距固定32,依据Spec031的直接设计契约。 +- 独立Input的contentPadding默认固定16,FormItem作用域为0,依据公开dartdoc及已有组合规则。 + +每项新增contract/场景的强制运行断言,覆盖浅/暗与自定义全局值;旧目标的原始不匹配仍在beforeExamples/afterRawComparisons中,新契约证据单独记录为currentContractWitnesses。没有把finalPaintVerified设为true。 + +## 主工作区验证 + +| 检查 | Flutter3.32.0/Dart3.8.0 | Flutter3.47.7/Dart3.13.5 | +|---|---|---| +| 严格analyze,含info | 0问题 | 0问题 | +| 七组件现有manifest全部16个功能文件 | 440项通过 | 440项通过 | +| 聚焦token consumption检查(440的子集) | 47项通过 | 47项通过 | +| 仓库外独立迁移consumer | 严格分析及21项通过 | 严格分析及21项通过 | +| 组件生产行覆盖率 | 全部≥95% | 全部≥95% | + +覆盖率两版本相同:Button471/474=99.37%,Switch385/401=96.01%,Input321/330=97.27%,Link114/116=98.28%,Avatar281/285=98.60%,Empty33/33=100%,Progress646/655=98.63%。阈值和源码范围没有降低。 + +每SDK采集1076条观察,逐条相同;270个相关源码/资源/测试/清单/pubspec文件在测试前后及两环境间一致,实际依赖锁分别记录。较新SDK的独立迁移首次因用户缓存active_roots写入受限失败,换独立临时缓存后解析、严格分析和21项测试通过;原始失败没有冒充通过。 + +[验证器](../../tool/verify_token_difference_resolutions.mjs)检查前后源码/依赖快照、双SDK一致性、全部运行/覆盖率日志、原32项完整映射、已有契约引用及强制断言,生成本轮机器记录。运行命令和日志文件约定见[validation-commands.json](validation-commands.json)。Spec059保持修复前快照,不用旧日志给新源码背书。 + +## 四项未应用的视觉修复候选 + +[候选补丁](proposed-visual-fixes.patch)包含:默认填充按压背景bgColorComponentActive、浅色填充按压背景brandColorLightActive、Switch关闭内容色bgColorSecondaryContainerActive、Input正常分隔线componentStroke;Switch dartdoc随候选同步。 + +- 对当前主工作区git apply --check通过,补丁没有应用到主工作区。 +- 在源码/依赖固定的隔离工程、Flutter3.47.7运行47项聚焦检查通过;4项对应20条目标观察全部匹配。除了补丁的4个文件,其余验证输入与主工作区相同,运行前后快照一致。 +- 这是方案可编译且聚焦行为可复现的证据,不是完整回归或正式验收。候选尚缺低SDK、完整相关回归、目标设计及Linux受影响Golden;需根据实际按压状态层合成结果决定是否采用。 +- 其余按钮危险色/语义优先级/Ghost状态层以及Switch整体几何方案逐项写在solutions.md,未混入这个最小候选补丁。 + +## 视觉与发布边界 + +本机macOS,Docker客户端存在但Linux daemon未运行,当前不能执行规定的Linux3.32 Golden。未在macOS生成、更新或冒充Linux视觉通过。Ghost修复的自定义主题场景和所有拟议默认视觉变化仍须完成适用的设计/视觉验收。 + +本轮未改CI/工作流、集中测试清单、正式版本、远端规则或Golden;未提交、推送、建tag或发布。524项后续运行审查继续保留,32项处置记录不替代全量1.0放行。 diff --git a/specs/060-token-difference-resolution/implemented-fix.patch b/specs/060-token-difference-resolution/implemented-fix.patch new file mode 100644 index 0000000000..f59d2671e1 --- /dev/null +++ b/specs/060-token-difference-resolution/implemented-fix.patch @@ -0,0 +1,13 @@ +diff --git a/tdesign-component/lib/src/components/button/t_button_resolve.dart b/tdesign-component/lib/src/components/button/t_button_resolve.dart +index 374752c5..66b88277 100644 +--- a/tdesign-component/lib/src/components/button/t_button_resolve.dart ++++ b/tdesign-component/lib/src/components/button/t_button_resolve.dart +@@ -387,7 +387,7 @@ class TButtonResolve { + case TButtonColorPreset.light: + fg = tTheme.brandColor; + case TButtonColorPreset.defaultTheme: +- fg = tTheme.fontWhite1; ++ fg = tTheme.textColorAnti; + } + + return ButtonStyle( diff --git a/specs/060-token-difference-resolution/plan.md b/specs/060-token-difference-resolution/plan.md new file mode 100644 index 0000000000..b96353c63d --- /dev/null +++ b/specs/060-token-difference-resolution/plan.md @@ -0,0 +1,7 @@ +# 方案 + +1. 查阅Spec009/031/034/037/048及Input/Avatar公开dartdoc,区分冻结变量差异与当前Flutter契约。 +2. 修复Ghost默认启用前景/描边的语义Token回退;验证单独配置textColorAnti、fontWhite1及实例ButtonStyle时的真实Material/Text结果。 +3. 对已有契约支持的8项补当前契约断言,同时保留冻结小程序原始比较观察。原始比较不匹配不等于当前契约不通过。 +4. 给余下21项差异和1项平台几何提供逐项方案、回归边界和合并/发布条件;不擅自改变已批准设计。 +5. 在两套SDK隔离工程跑七组件既有清单、严格分析、覆盖率与迁移消费验证,保留Spec059历史证据另出Spec060记录。 diff --git a/specs/060-token-difference-resolution/proposed-visual-fixes.patch b/specs/060-token-difference-resolution/proposed-visual-fixes.patch new file mode 100644 index 0000000000..1bfd629c10 --- /dev/null +++ b/specs/060-token-difference-resolution/proposed-visual-fixes.patch @@ -0,0 +1,46 @@ +--- a/tdesign-component/lib/src/components/button/t_button_resolve.dart ++++ b/tdesign-component/lib/src/components/button/t_button_resolve.dart +@@ -565,8 +565,8 @@ + return switch (scheme) { + TButtonColorPreset.primary => tTheme.brandColorActive, + TButtonColorPreset.danger => tTheme.errorColorActive, +- TButtonColorPreset.light => tTheme.brandColorFocus, +- TButtonColorPreset.defaultTheme => tTheme.bgColorComponent, ++ TButtonColorPreset.light => tTheme.brandColorLightActive, ++ TButtonColorPreset.defaultTheme => tTheme.bgColorComponentActive, + }; + } + +--- a/tdesign-component/lib/src/components/switch/t_switch_resolve.dart ++++ b/tdesign-component/lib/src/components/switch/t_switch_resolve.dart +@@ -72,7 +72,7 @@ + theme?.loadingColor ?? (isDark ? token.fontWhite1 : token.brandColor), + thumbContentOnColor: theme?.thumbContentOnColor ?? token.brandColor, + thumbContentOffColor: +- theme?.thumbContentOffColor ?? token.textColorDisabled, ++ theme?.thumbContentOffColor ?? token.bgColorSecondaryContainerActive, + thumbContentOnFont: + theme?.thumbContentOnFont ?? + TextStyle(fontSize: token.fontBodyMedium?.size ?? 14), +--- a/tdesign-component/lib/src/components/switch/t_switch_theme_data.dart ++++ b/tdesign-component/lib/src/components/switch/t_switch_theme_data.dart +@@ -35,7 +35,7 @@ + final Color? thumbContentOnColor; + + /// 关闭态滑块内容颜色。 +- /// 未配置时使用 textColorDisabled Token。 ++ /// 未配置时使用 bgColorSecondaryContainerActive Token。 + final Color? thumbContentOffColor; + + /// 开启态滑块内容文本样式。 +--- a/tdesign-component/lib/src/components/input/t_input.dart ++++ b/tdesign-component/lib/src/components/input/t_input.dart +@@ -447,7 +447,7 @@ + }; + + Color _borderColor(TThemeData token, TInputStatus status) => switch (status) { +- TInputStatus.normal => token.componentBorder, ++ TInputStatus.normal => token.componentStroke, + TInputStatus.success => token.successColor, + TInputStatus.warning => token.warningColor, + TInputStatus.error => token.errorColor, diff --git a/specs/060-token-difference-resolution/resolution-report.json b/specs/060-token-difference-resolution/resolution-report.json new file mode 100644 index 0000000000..ad7a72deb9 --- /dev/null +++ b/specs/060-token-difference-resolution/resolution-report.json @@ -0,0 +1,6725 @@ +{ + "date": "2026-10-15", + "baselineCommit": "30767a5521e871b1738040f854adf001e50e4774", + "baselineEvidenceSha256": "ae7d0a9441a10a1cd445ae9f944b2ac80e42f3a4d85cdd501e90101fd08724a1", + "counts": { + "existing-contract-verified-visual-pending": 8, + "platform-geometry-plan-pending": 1, + "implementation-plan-pending": 21, + "fixed-runtime-verified-visual-pending": 2 + }, + "unchangedRuntimePending": 524, + "globalStages": { + "runtime-evidence-pending": 524, + "runtime-default-verified-visual-pending": 116, + "fixed-runtime-verified-visual-pending": 2, + "existing-contract-verified-visual-pending": 8, + "implementation-plan-pending": 21, + "platform-geometry-plan-pending": 1, + "no-frozen-source-consumer-found": 5 + }, + "scope": "32 previously disputed rows; contract support is not final visual acceptance. No claim that the remaining 524 rows are verified.", + "sourceFilesSha256": "f87ad2f36fe37235953c7cad20eded2f179e052bab626e4d655475fe82df4b51", + "fingerprints": [ + { + "file": "assets/tdesign/TCloudNumberVF.ttf", + "sha256": "f712f74bdb5343c12d6801b349fd5a1b07c54b9ab31023098803b98dc2ac6063" + }, + { + "file": "lib/src/components/action_sheet/t_action_sheet.dart", + "sha256": "9428b11143d3139efc714d9ea756f69b8bc266faa2630a6eff4e3118662d2e6e" + }, + { + "file": "lib/src/components/action_sheet/t_action_sheet_grid.dart", + "sha256": "64f5b8453b18c38b04c561dd4289ff0fb75b422ff942e4e664a3142f8b124727" + }, + { + "file": "lib/src/components/action_sheet/t_action_sheet_item.dart", + "sha256": "574d4ee50bc5771ca758620d01d3630551b99faeeb58b784d9d8e13f45bc4742" + }, + { + "file": "lib/src/components/action_sheet/t_action_sheet_item_widget.dart", + "sha256": "f4c0fb5d9c9f7cacc34e7acb514c7fc57165905bda8e1ea2c41f4c393e26e958" + }, + { + "file": "lib/src/components/action_sheet/t_action_sheet_list.dart", + "sha256": "9a9edf863f9bfbed2135ca321f8e8119e1e70a0fa5fbcb037add33d88665a64f" + }, + { + "file": "lib/src/components/action_sheet/t_action_sheet_theme_data.dart", + "sha256": "47e8cf56722cfd3c09cd0769bf7eb83050e05a5cea3935d5b688386db98bf005" + }, + { + "file": "lib/src/components/action_sheet/t_action_sheet_types.dart", + "sha256": "bc953484f3fbcda85b2265e6da1f26359f5e1a7f0f6c79a36da400645bf744ce" + }, + { + "file": "lib/src/components/avatar/t_avatar.dart", + "sha256": "cef88facb3314287a600e82fbce07dfa39258f99e5337d77a472ee3792fa0b6d" + }, + { + "file": "lib/src/components/avatar/t_avatar_defaults.dart", + "sha256": "e90f48ca3ffbcd128914ba5ba688ff46913bb3acbb0a1b6ca20bfed22f964716" + }, + { + "file": "lib/src/components/avatar/t_avatar_theme_data.dart", + "sha256": "9dd201ea5e8cd4d2fec16b41f43baf3b364da03c8a751042768c9cc33ade1820" + }, + { + "file": "lib/src/components/avatar/t_avatar_types.dart", + "sha256": "cd04d4ea83c659d6016ce5c67738678999d913d141a8132e04cd5b7686c56c96" + }, + { + "file": "lib/src/components/backtop/t_backtop.dart", + "sha256": "613c223e5e00f140a8a0613406fc0082485d142b568f9a12f9d98150be42017f" + }, + { + "file": "lib/src/components/backtop/t_backtop_theme_data.dart", + "sha256": "6f10265e786cd9cc9493acca19c39b4998e0054aafbf1686e4dbb553740a7806" + }, + { + "file": "lib/src/components/badge/t_badge.dart", + "sha256": "12d782a548187bfdcbaef3cd2601183d1b702ab11ca8be9509cc20fe70473d03" + }, + { + "file": "lib/src/components/badge/t_badge_defaults.dart", + "sha256": "26df77972945bf1d6b7f1bc19a921011d40cc6f8aa30b6dbe9ddbb0d8d705772" + }, + { + "file": "lib/src/components/badge/t_badge_fallback.dart", + "sha256": "b93bbf2d4d92b5baee8334133cfc184d5602f092a223415cd38c95242cfdbc75" + }, + { + "file": "lib/src/components/badge/t_badge_internal.dart", + "sha256": "e178e81e3562f70354aa51db944529e65b1e1ac213b1d0864b909f4d4fcc647e" + }, + { + "file": "lib/src/components/badge/t_badge_label.dart", + "sha256": "9705e282965abd1367a106a2e40d2f57a9125b567940f6a2e1f252c48314533f" + }, + { + "file": "lib/src/components/badge/t_badge_layout.dart", + "sha256": "ea2048a7e8ee8113f006554205f0c3ef865c95372afc9350832563dc229f474a" + }, + { + "file": "lib/src/components/badge/t_badge_resolved_style.dart", + "sha256": "2dc6b205d476eaffd0bd118de66d66eaa10c79788b075975f95c43ff6856ce58" + }, + { + "file": "lib/src/components/badge/t_badge_theme_data.dart", + "sha256": "7502e10c9b472bf6d273ae84a62533c2e67e97baae5801ac6032f3e953d7667b" + }, + { + "file": "lib/src/components/button/t_button.dart", + "sha256": "44c74c64a84b70a4b2f0f3f816a6cab98843c42d7d43136cc25c91108e49e465" + }, + { + "file": "lib/src/components/button/t_button_defaults.dart", + "sha256": "b4f0ad7379eefc2c562782ac0c1c48abe14d9ac59679d639c66a5790c38559f9" + }, + { + "file": "lib/src/components/button/t_button_resolve.dart", + "sha256": "496c2e21a24e4c1b76c253b916a02c3e434f401cfab720b265461bcde3c93867" + }, + { + "file": "lib/src/components/button/t_button_theme_data.dart", + "sha256": "db4f4331a5ebe200f03046ed95c5ff633abf7051f9064bdc986844c66216a35d" + }, + { + "file": "lib/src/components/button/t_button_types.dart", + "sha256": "e223af1e6f201b93f5723500a4ae052836075abd45c635de230ae076491e22f5" + }, + { + "file": "lib/src/components/calendar/t_calendar.dart", + "sha256": "71e148330bac972531103e819edbc413d874517a3e4763c26fbe227e0914a6d9" + }, + { + "file": "lib/src/components/calendar/t_calendar_body.dart", + "sha256": "61a542f48bd16504562b47646c1c23564c4f280a63caf9e70bd4cd975d0a3d34" + }, + { + "file": "lib/src/components/calendar/t_calendar_cell.dart", + "sha256": "77fae6aaf4728c6a915330f49eb51eb2f95cc7157c15840e6ac808b791373ce4" + }, + { + "file": "lib/src/components/calendar/t_calendar_header.dart", + "sha256": "302e20b572330fa69a8658232d0667e75a4da1786b8557255471b88adb3fdd22" + }, + { + "file": "lib/src/components/calendar/t_calendar_style.dart", + "sha256": "80985c34156b34552abd80304d3255856b60f02bc282987bfc2484ce2dfc61d9" + }, + { + "file": "lib/src/components/calendar/t_calendar_theme_data.dart", + "sha256": "373c90441bc36e9dc0d1aae211de42c33b121264f8685a07c414b33df35784bd" + }, + { + "file": "lib/src/components/calendar/t_calendar_types.dart", + "sha256": "59cb92666699dc56a4ecb1c9e32c17015a63a782bb8ba653bf5ca2d9840e7938" + }, + { + "file": "lib/src/components/cascader/t_cascader.dart", + "sha256": "2bb538d5ab0c463d7d50fa91c631df1fb654b20fe962e33c5e893a029e0a4baf" + }, + { + "file": "lib/src/components/cascader/t_cascader_defaults.dart", + "sha256": "b9f4a80d6c072db78ab4a6309ece17a0985ba902ecfd2b9fbb2a1f16b7848002" + }, + { + "file": "lib/src/components/cascader/t_cascader_theme_data.dart", + "sha256": "6caa10215842400c0c4aa12e0a0bff20ce395f3b6e1555810886e1118377733d" + }, + { + "file": "lib/src/components/cell/t_cell.dart", + "sha256": "b51f5446a1a670d4a0f065da5380735be0c20a7ff217c8f98889cc7c99824f8d" + }, + { + "file": "lib/src/components/cell/t_cell_group.dart", + "sha256": "eb0964efc5c43717425022aaf4d143ff7f367c9a17fe39d29b51f18600584394" + }, + { + "file": "lib/src/components/cell/t_cell_theme_data.dart", + "sha256": "65e0a50ec36c9073ec10d2744ccaa6599b6b9246669f6250cd8d04aedac8f092" + }, + { + "file": "lib/src/components/checkbox/t_check_box.dart", + "sha256": "586f2cce496a5713b8a8ed60b9cc92119caf57fe82823d087e5ec3292f53646a" + }, + { + "file": "lib/src/components/checkbox/t_check_box_group.dart", + "sha256": "f7fcfacb70d71ce63f621bccf5b01b48033363d4bd13233a5458d775f4bdd1a7" + }, + { + "file": "lib/src/components/checkbox/t_checkbox_theme_data.dart", + "sha256": "2993307ad235c587e13ced8ea891aaaef79735bd45283bc4e52ff3d79b23e872" + }, + { + "file": "lib/src/components/checkbox/t_selection_card.dart", + "sha256": "2abe436f3c2d20f68c58c667707c777177e93ff10c26bf24733550c21ecc3a1d" + }, + { + "file": "lib/src/components/collapse/t_collapse.dart", + "sha256": "b66d2558bb2b1efdb06abf449f72001756d28e4103dfb85a4b596d77d6bf19ef" + }, + { + "file": "lib/src/components/collapse/t_collapse_panel.dart", + "sha256": "40a55022a7171100648c4c1dcf28a71f48f1b68e4bb69942ce9062a912a93918" + }, + { + "file": "lib/src/components/collapse/t_collapse_theme_data.dart", + "sha256": "21df57f00f6b8be4d4e05f48f5882eedde0d686627bba074aa20b29d092ac418" + }, + { + "file": "lib/src/components/collapse/t_collapse_types.dart", + "sha256": "8cf810fc56a98375b0eb82ef1f489d7a70c9bea46d43c969b1457e968f240332" + }, + { + "file": "lib/src/components/collapse/t_inset_divider.dart", + "sha256": "028229a7a93bb48dc16df0f2732b726361f77d4b3edb9dfb771d0ef8b08ee1d2" + }, + { + "file": "lib/src/components/collapse/t_nonanimated_expand_icon.dart", + "sha256": "c02ebe2f0ac947e0ec32f2da9c2bd64295e644781ae561d617f8cf014e69c59e" + }, + { + "file": "lib/src/components/date_time_picker/t_date_time_picker.dart", + "sha256": "b17d3fa5ae356ac83de83d34830ab06ae00deb5a93adaca43ca787dd8bef4e32" + }, + { + "file": "lib/src/components/date_time_picker/t_date_time_picker_bounds.part.dart", + "sha256": "c2951704c1cdabe6d3e86e0ea0038c2bcbfa3fda264f7cd473284a10858e7f88" + }, + { + "file": "lib/src/components/date_time_picker/t_date_time_picker_column.dart", + "sha256": "6e9e3c38cb2ed477ac22719d5a0e54744ed19f1e159961d10a829559c54091d2" + }, + { + "file": "lib/src/components/date_time_picker/t_date_time_picker_enums.dart", + "sha256": "ea2d87d4af86d434db925b02fb482c3b0a8d4b4e76160b1f41b1e669759f5d3e" + }, + { + "file": "lib/src/components/date_time_picker/t_date_time_picker_internal.dart", + "sha256": "3e228df7d76ddcec64172747f25ded8f1cc00cc91250f9a6bcba84d5e46fc143" + }, + { + "file": "lib/src/components/date_time_picker/t_date_time_picker_labels.part.dart", + "sha256": "174a8c502b904564689b27335ba8b52520f26169d53e6c9e2fc1a75d19e49bdd" + }, + { + "file": "lib/src/components/date_time_picker/t_date_time_picker_model.dart", + "sha256": "86d94cca286a468120acce851eb04d79b4ec7d5a1116d2abd262c93e82ddd448" + }, + { + "file": "lib/src/components/date_time_picker/t_date_time_picker_snapshot.part.dart", + "sha256": "919ec53de51add20de5f6a6b3bf939617ef9d9adeb957f5e1c8219f625c5810d" + }, + { + "file": "lib/src/components/date_time_picker/t_date_time_picker_wheel.dart", + "sha256": "8b6a61c1af65085c9082d044f533c8ca49f14dc80f3ac1bd96749db0411bac3c" + }, + { + "file": "lib/src/components/dialog/t_confirm_dialog.dart", + "sha256": "0f76e26085aaf1efe34935643ec037c1ec658b244a9822f698eec2b5f2e6a280" + }, + { + "file": "lib/src/components/dialog/t_dialog.dart", + "sha256": "33e77a731c06850e037f0c670ebaf0746e81650a031211a5171c56d75ae10912" + }, + { + "file": "lib/src/components/dialog/t_dialog_theme_data.dart", + "sha256": "e41f855132773e23484cc6d064b25af6b5cb42d2c61bc90532d10cb825900afd" + }, + { + "file": "lib/src/components/divider/t_divider.dart", + "sha256": "24773ffcbc8e78be1134bd855b756cf0f86f9dbe4bd237a5c85d360d58ca3c0c" + }, + { + "file": "lib/src/components/divider/t_divider_painter.dart", + "sha256": "4ed3c0208e7270a00fe7c068212271425636c2acc61d60937eda5b2774400880" + }, + { + "file": "lib/src/components/divider/t_divider_theme_data.dart", + "sha256": "a8d1e1d428034bab934870ac885932bebff816b100eaa837bb27c05fe0341536" + }, + { + "file": "lib/src/components/drawer/t_drawer.dart", + "sha256": "30452d798c103483cf674cccdc76f87f918518458fcf59d5239bd832ab0448be" + }, + { + "file": "lib/src/components/drawer/t_drawer_content.dart", + "sha256": "a63c3936b71c173dae5d10aefa57f8360f39633eef4b13b959dc2b4fd734a0ea" + }, + { + "file": "lib/src/components/drawer/t_drawer_theme_data.dart", + "sha256": "e9cd44081104f73a2a1edb8bdbb296cd04e00e3883d006ad1b740a28748915fa" + }, + { + "file": "lib/src/components/dropdown_menu/t_dropdown_item.dart", + "sha256": "6b75f674caea72a6de714c13830ab7a9d21f582579bce55f08c356af585ed653" + }, + { + "file": "lib/src/components/dropdown_menu/t_dropdown_menu.dart", + "sha256": "da57ca61b23d2326c102a1c2812059289dbfb6b5414719d91d5ff88d73da60c4" + }, + { + "file": "lib/src/components/dropdown_menu/t_dropdown_theme_data.dart", + "sha256": "64d9c42720a8b7f1d9f23df56253498abc5b6a5d949286f36e9e2ec589213036" + }, + { + "file": "lib/src/components/empty/t_empty.dart", + "sha256": "37e4d30dd5d1616a7408d03f4a5b8bbd543e612a106b5a3a518e96f955795b2a" + }, + { + "file": "lib/src/components/empty/t_empty_theme_data.dart", + "sha256": "fb7b77b8036225091a092b1c85f8c6ef8807649d9798de55c30042fa35f0ae32" + }, + { + "file": "lib/src/components/fab/t_fab.dart", + "sha256": "ee5eea781f4546f478d587b5b8fc927ca5fbe7fe1e88edab0be74c1e94793453" + }, + { + "file": "lib/src/components/fab/t_fab_defaults.dart", + "sha256": "ad2a41b5c687cbaf5360224655a8ff02378fed5772bc6ddcca8569ea7085db93" + }, + { + "file": "lib/src/components/fab/t_fab_drag.dart", + "sha256": "4ccd88fd8e58de4c56bfc8b73ed26c76161a8540cf0af68e2e727109553d6303" + }, + { + "file": "lib/src/components/fab/t_fab_layout.dart", + "sha256": "059004be0b8d307f08e0f78605e2056f2376e031b85c84acdccc7a4f979f12c1" + }, + { + "file": "lib/src/components/fab/t_fab_resolve.dart", + "sha256": "a2b2740f66c6a3937ad7e99c995e16264ffaa76b1f96a34c9afb7d7c4ff3793f" + }, + { + "file": "lib/src/components/fab/t_fab_theme_data.dart", + "sha256": "4538dab2d7107f5a72a600c4deede1f2af9ea228e985c45f1567aac3d71939b7" + }, + { + "file": "lib/src/components/footer/t_footer.dart", + "sha256": "8a0ad86db0d8c7f8eff1dae09818146847494c750a54620a3d615619646f4279" + }, + { + "file": "lib/src/components/footer/t_footer_theme_data.dart", + "sha256": "ed8f8ab934712b39825287d94c0af1e74012a605e8dba85d1536b2825217dfaf" + }, + { + "file": "lib/src/components/form/t_field_scope.dart", + "sha256": "a3a8f393c67eb66610d67c376c3931f2e2b074b838613f54378ef21fd32e0964" + }, + { + "file": "lib/src/components/form/t_form.dart", + "sha256": "b6985f3e443c16432919c329b2941bc8a74b56b4f836c007698f25bc65c1f3f4" + }, + { + "file": "lib/src/components/form/t_form_item.dart", + "sha256": "aa9102ca45fafc7c0e29fdb38f7319d6b11742328bcb88f800c719e037277b86" + }, + { + "file": "lib/src/components/form/t_form_item_scope.dart", + "sha256": "011a3c6e16bc78e6f2868d73c9efec1d31eaae615eb3b2e9f69717af788e6b19" + }, + { + "file": "lib/src/components/form/t_form_theme_data.dart", + "sha256": "53c614a3f66ee5e9be051921214f7eb30dca00cc4c0614d7a258f0f91df7d93c" + }, + { + "file": "lib/src/components/icon/t_icon.dart", + "sha256": "2d1c9cc13dea4bca2b06a60ac9a768cbb81bca6d92c77399c5f4accf22e9a2f7" + }, + { + "file": "lib/src/components/image/t_image.dart", + "sha256": "e379fe27d53b7bb9d09e21ec45838c4c47611e70f40ac8acf89a70513e7bf867" + }, + { + "file": "lib/src/components/image/t_image_theme_data.dart", + "sha256": "1bb351535ae118890a931df5088cc1f0358d94aca0602bcd6ba465483d7be892" + }, + { + "file": "lib/src/components/image_viewer/t_image_viewer.dart", + "sha256": "ce6e8f4bdcf089239cf4759e03b51667d791d48eb37cc344125ac6671f56dedf" + }, + { + "file": "lib/src/components/image_viewer/t_image_viewer_theme_data.dart", + "sha256": "10107fc4ea83dc9463ec9de61ea7f82d089dd76b3929e93a90695f47905364a9" + }, + { + "file": "lib/src/components/indexes/sticky_header/layout_builder_hook.dart", + "sha256": "5118b00b2a59e4d1aa7393b050099cdf2717b152735f30de0c51ae4634bf227e" + }, + { + "file": "lib/src/components/indexes/sticky_header/sticky_header_layout_builder.dart", + "sha256": "b50798ce6617e087c3dc79388ee9793d77ea6baddbf63eb6e5e5fc6ca78ec111" + }, + { + "file": "lib/src/components/indexes/sticky_header/sticky_header_render.dart", + "sha256": "babb662b1d13824612aece6caf80eca08a083066d8bbbc158d8d4cdd08b1f36e" + }, + { + "file": "lib/src/components/indexes/sticky_header/sticky_header_widget.dart", + "sha256": "a20e7dcf603a7644a1cdf70b3fd6741211e5a21fc85a1ea21993792eaa10374f" + }, + { + "file": "lib/src/components/indexes/t_indexes.dart", + "sha256": "da76a5a65b25b91c9bba3378f57f3d73a831f90a4d2f19558b6cb00192ec58f7" + }, + { + "file": "lib/src/components/indexes/t_indexes_anchor.dart", + "sha256": "26934564047b0324fb46dcffc6e657b0c80450a38e384e4d8b0a7a4753071e65" + }, + { + "file": "lib/src/components/indexes/t_indexes_list.dart", + "sha256": "54bb80bd2e0859d6ada864a104971ef4ee993409c36369d8480a6e30591767ed" + }, + { + "file": "lib/src/components/indexes/t_indexes_theme_data.dart", + "sha256": "49cfad6d986004960bbe2471d344d7950de5a02d0a743645a51521b5bb976913" + }, + { + "file": "lib/src/components/input/t_input.dart", + "sha256": "ee2edc9fbad7c46752ba08e3ba3d98451a61f6c0e71e95db265d11a520cb8d7f" + }, + { + "file": "lib/src/components/input/t_input_theme_data.dart", + "sha256": "411d7b685e37fa130ecb698e52f93c2258eae64fdab1443d17af5df4da824eb1" + }, + { + "file": "lib/src/components/input/t_input_types.dart", + "sha256": "1feaa3b1f38f6a73880523ba2762b7e3c408ba30f22406d960524d1a108b247c" + }, + { + "file": "lib/src/components/link/t_link.dart", + "sha256": "fdcae77b2ff3845ab9ff37802641e2fd32b3cc185dce30c83c1a1c4a23d2cf70" + }, + { + "file": "lib/src/components/link/t_link_resolve.dart", + "sha256": "19186939ee93f09d6c32e2612889ea1077cd9daf867decd4dde54c344b4aafb5" + }, + { + "file": "lib/src/components/link/t_link_theme_data.dart", + "sha256": "46cf195252853164cb0e8f598133ccfdac931762a88493f1acb75c30aa04b5e9" + }, + { + "file": "lib/src/components/link/t_link_types.dart", + "sha256": "ff5f34ab0302cd6ed966585cf63036b076f14e6dde38711f16017b0e75443630" + }, + { + "file": "lib/src/components/loading/t_activity_indicator.dart", + "sha256": "58275f4985736435b0198a09c1865a2bb60d0f21468b3e7024004a00a69cf385" + }, + { + "file": "lib/src/components/loading/t_circle_indicator.dart", + "sha256": "ca0eb207f4a10b369697f8b7de2f2d903349e6f85dcaace87754c50fe5378273" + }, + { + "file": "lib/src/components/loading/t_loading.dart", + "sha256": "e1062a9a87b051fdcca2a0891e3dbdf300392b12d77765f3296f5e48e6c2d13f" + }, + { + "file": "lib/src/components/loading/t_loading_controller.dart", + "sha256": "20f537456edcb5b3ae3a20e9e60a1ecf98dfcf166173d519ed873aa37e622a55" + }, + { + "file": "lib/src/components/loading/t_loading_theme_data.dart", + "sha256": "0217809b3b50b73be0710ab61bc76a1d8703a924d0c744fcc8868e4a99b3beb7" + }, + { + "file": "lib/src/components/loading/t_point_indicator.dart", + "sha256": "39c95d73d54fa810c95a28929b03d05c2c6f1dcf612cc34087431f1e17a3bd79" + }, + { + "file": "lib/src/components/message/t_message.dart", + "sha256": "3b852b6881fd4a4ef43d11a8ee46a19058f2ba298d8b25ced736f9a4415fa444" + }, + { + "file": "lib/src/components/message/t_message_theme_data.dart", + "sha256": "178131a6a925602dc5eeb8e28b52b383a4af6da662530abf4e930e4a39dd0ae7" + }, + { + "file": "lib/src/components/message/t_message_types.dart", + "sha256": "5e6c06b34b8668a4553e58920b92aaaa34739ac0f9dfe91cdd5db0181c28d52a" + }, + { + "file": "lib/src/components/navbar/t_nav_bar.dart", + "sha256": "3cb32ff05116935d45e6d0773eb74dbd58ef9f92c5c11ae67261c092665a94fb" + }, + { + "file": "lib/src/components/navbar/t_nav_bar_theme_data.dart", + "sha256": "21f1796a4b4b5a084a598eb8c1fd50784251a898537618773f35e17014dc7753" + }, + { + "file": "lib/src/components/notice_bar/t_notice_bar.dart", + "sha256": "09f632ab81d08ef67ccb7a0a40ce54f2c2bc1465fc1b3f7308058d6bc3df9c2e" + }, + { + "file": "lib/src/components/notice_bar/t_notice_bar_theme_data.dart", + "sha256": "cd632cddcef45cb94ae6a0a0e23684b3e9a4e4a2669418cb7e2cb94ae10487f0" + }, + { + "file": "lib/src/components/notice_bar/t_notice_bar_types.dart", + "sha256": "57bfe5b5b3148720a4f5241cea2e317fc30ac42fa4188ef99a064544c9d024a2" + }, + { + "file": "lib/src/components/picker/multi_wheel_layout.dart", + "sha256": "e2c0cf62b68afdbb7712f8775a4bfd6b5e5b1610a21538041afff1a9e1f5465d" + }, + { + "file": "lib/src/components/picker/picker_defaults.dart", + "sha256": "3e9b857a14233b5f09bcd961dd6dd7ab9dc1f0bfd7adf2f678cb93090fc9c5f9" + }, + { + "file": "lib/src/components/picker/picker_item.dart", + "sha256": "db51764b25426849122a8731b36f6d89224d23af570456aa1dd8856b256efbb0" + }, + { + "file": "lib/src/components/picker/t_picker.dart", + "sha256": "48643ca9c9d698441de14f0db062479b5693fb0925fb956b7d0d3c2949d949c0" + }, + { + "file": "lib/src/components/picker/t_picker_popup.dart", + "sha256": "12f93ed1a88d51191814939e47e5e0b53da5de7c1d989db5e64f73121c49a38b" + }, + { + "file": "lib/src/components/picker/t_picker_theme_data.dart", + "sha256": "adf4e483ce3638f6e8350051d07e39c6b5a96a26f23a6f73f39f91caea393ee4" + }, + { + "file": "lib/src/components/picker/t_picker_types.dart", + "sha256": "c30fe1fbdc492a983fb7405c9a4ce15aa7ccaa833582685001185e6ed8da9cf2" + }, + { + "file": "lib/src/components/picker/wheel_behavior.dart", + "sha256": "9ec31330de3f5c122911e89cedfba31ea926fcc91e4d827c8328327effa55227" + }, + { + "file": "lib/src/components/picker/wheel_column.dart", + "sha256": "8dbe4b6caed43b8d19cac158cf4120819b899dc349d7a3b199a181078b2272db" + }, + { + "file": "lib/src/components/popover/t_popover.dart", + "sha256": "268507f0a2147843cde705f20ab8d6f1d6f40b48e4a9090e8f9629170133fb05" + }, + { + "file": "lib/src/components/popover/t_popover_theme_data.dart", + "sha256": "bd400a9abc392cef5e1b5ae9c5ca4a903a76144f4bb0426eb5d1280c2f1933ba" + }, + { + "file": "lib/src/components/popover/t_popover_types.dart", + "sha256": "7df3d8b79e7b8e21722da58a24bdbcbbeb4099b25391cc0c9b1f9114faad9f2c" + }, + { + "file": "lib/src/components/popover/t_popover_widget.dart", + "sha256": "51346815e0fea353c4e162f57b390fa17cf32a2dffea9d98b6e767b1b0e6e5d5" + }, + { + "file": "lib/src/components/popup/_popup_center_close.dart", + "sha256": "133784217a629e14358a099d67d8a07e7a3ade133767b20fd43bef5d964db620" + }, + { + "file": "lib/src/components/popup/_popup_header.dart", + "sha256": "21955e2c211e2e45b92dfa561e5b26ed3f37eb860957d94de198cdef329b79a4" + }, + { + "file": "lib/src/components/popup/_popup_layout.dart", + "sha256": "304894e147421324df5e2daa787e2e7e9d27f0c2f5797fb23a9ca899a1a0d050" + }, + { + "file": "lib/src/components/popup/_popup_route.dart", + "sha256": "7660fd75e5157ec70c40a41f77fdf59c8d5c052034ac2f0e3a18242845afe90e" + }, + { + "file": "lib/src/components/popup/_popup_shell.dart", + "sha256": "0eedcd8c228bd91589c784a5b45f5ad58e78c47d7e26639ca434c4f1efec2091" + }, + { + "file": "lib/src/components/popup/_popup_tracker.dart", + "sha256": "84c7692faae29ba8b67eccb364265c60d06f5758d31cb7b264e0fcb8712e9039" + }, + { + "file": "lib/src/components/popup/t_popup.dart", + "sha256": "0b428c76d216ab79f6e401574a740b1fa45ef40a93dcb854bcd23fe77be08514" + }, + { + "file": "lib/src/components/popup/t_popup_handle.dart", + "sha256": "2423e31d4f31839f8729212ddb6b118a08606ef5fa61f4499ca39f7e336c17e0" + }, + { + "file": "lib/src/components/popup/t_popup_inset.dart", + "sha256": "6db46ece40ddf554b29cf32ea95aed01a363d0665557ef78770909e06be637f3" + }, + { + "file": "lib/src/components/popup/t_popup_options.dart", + "sha256": "4fb5d1d4499b2933e45f14b7e1312dbc933ded37e519f9406e6867134e164c40" + }, + { + "file": "lib/src/components/popup/t_popup_theme_data.dart", + "sha256": "bd206e7ff0dde2ecd86d3d69a82c2942bb9ddd320d54929fc43106851964f5db" + }, + { + "file": "lib/src/components/popup/t_popup_types.dart", + "sha256": "b29f14246b271b5a7c5e26f4cb78ab42b44d7342341ee3b10de43aea5b60de3c" + }, + { + "file": "lib/src/components/progress/t_progress.dart", + "sha256": "b5cc33c69fa0402428e71169285008e033fc6fe9565a4f3af47151ce5d0f75a9" + }, + { + "file": "lib/src/components/progress/t_progress_circular.dart", + "sha256": "377b6b349fe97743c28d768f62b4838478cc80c841343823d6ca403800299609" + }, + { + "file": "lib/src/components/progress/t_progress_defaults.dart", + "sha256": "d9e8f51807288f6271fd2fcf7c47e2ce9b48e34ad55c5b9cb75ad24ea030a66f" + }, + { + "file": "lib/src/components/progress/t_progress_theme_data.dart", + "sha256": "216e7d98d8bf990c9ccd3f260bb4ea459c8243426e0e24766582773cd4c81ffe" + }, + { + "file": "lib/src/components/radio/t_radio.dart", + "sha256": "bebf8c21a0a8b365bc910ccd54f3a29bf632fbae7096126cde11d248ca8bb052" + }, + { + "file": "lib/src/components/radio/t_radio_theme_data.dart", + "sha256": "8f188b5291acb706434a2bda57095276402377f768c8b70fb2813557f14b991d" + }, + { + "file": "lib/src/components/rate/t_rate.dart", + "sha256": "186a2d4d792c3c1dd6f4f476baff651c640c4309db2c2b0ff08593f517f87de5" + }, + { + "file": "lib/src/components/rate/t_rate_theme_data.dart", + "sha256": "edf4a823b99d493c461bac7b6fe99ffa654c05e02ba89679dc1e15d5db64b612" + }, + { + "file": "lib/src/components/refresh/t_pull_down_refresh.dart", + "sha256": "007c79896c2a2b768367b9dff972a6d30de3ef0438cf06bfef4c478acec80f74" + }, + { + "file": "lib/src/components/refresh/t_pull_down_refresh_controller.dart", + "sha256": "e0e9552f863c46815ee14675e9f26c2277fb246c1e26bd89f3e4143c81f7bbbb" + }, + { + "file": "lib/src/components/refresh/t_pull_down_refresh_texts.dart", + "sha256": "577ce6b831a12205e2b141471dd7dff8d4c93318bebf2e36e06eb0ca4a631a7f" + }, + { + "file": "lib/src/components/result/t_result.dart", + "sha256": "78be893b63731d0be35bdad8b1a625fd338a3c3513fc42fc2930c6a1a07c984a" + }, + { + "file": "lib/src/components/result/t_result_theme_data.dart", + "sha256": "e1eb3b53cec69c84a25fc14e3c90b00f6ff24eed0a298a7119c3ca3ba31cde8b" + }, + { + "file": "lib/src/components/search/t_search_bar.dart", + "sha256": "82ef124d6c94419e05cbd54aeb3f977a2320c7cecbf30554e236e4da0480c031" + }, + { + "file": "lib/src/components/search/t_search_bar_theme_data.dart", + "sha256": "f25e86a5669cc71bb3feccb9e1bd2dd40cb6323b39994c96b74f5bb39e52abee" + }, + { + "file": "lib/src/components/sidebar/t_sidebar.dart", + "sha256": "216f92edf3a94865d7c5975b8e54a7626455999de74ee151778b49a681a68a10" + }, + { + "file": "lib/src/components/sidebar/t_sidebar_item.dart", + "sha256": "ec4d1e773e677ba7307ac3d7f67db98bb6cc18684cce23df1fed1d46dd8823b1" + }, + { + "file": "lib/src/components/sidebar/t_sidebar_theme_data.dart", + "sha256": "ba41313c54134ed0e5b8e58b7c5e3423fe54ec4649aa19f8c016de00c860ec21" + }, + { + "file": "lib/src/components/sidebar/t_wrap_sidebar_item.dart", + "sha256": "c8afe24c65707b3c1acb79a0c1d91f08d0764f59f203b443ebc1bf8fe6fd11af" + }, + { + "file": "lib/src/components/skeleton/t_skeleton.dart", + "sha256": "263d2cfb9d2d7008acd59f161e84b0facdf5670eeb4458853e0cefb31089f377" + }, + { + "file": "lib/src/components/skeleton/t_skeleton_layout.dart", + "sha256": "cf2b697b3ad300bbc580ee1d05840504ec32668d083795b598cc488ee7601554" + }, + { + "file": "lib/src/components/skeleton/t_skeleton_theme_data.dart", + "sha256": "da5a0f765aed1fb34ee30cf61513cc950c5a6391eb428b6e0c4da815d11d312e" + }, + { + "file": "lib/src/components/slider/t_slider.dart", + "sha256": "1e5ccc7e1ff64e1ad2465a225c0e1a79aa5f55b60d0e577e0bc7178af1efd163" + }, + { + "file": "lib/src/components/slider/t_slider_theme.dart", + "sha256": "f994388adfaff57609d214478d93b7198194025b350f921a4bc81d9850678c67" + }, + { + "file": "lib/src/components/stepper/t_stepper.dart", + "sha256": "e0582b5f1d288333c33ac5f9e2bea28715096091a188e9d41c0277e282a67083" + }, + { + "file": "lib/src/components/stepper/t_stepper_defaults.dart", + "sha256": "a538967b6abba1080899c70cddc8f1cebb5fe3f6b4788c2de6b1ee3d3cb99558" + }, + { + "file": "lib/src/components/stepper/t_stepper_theme_data.dart", + "sha256": "abce20572ccf8e2828beeba558e6ba366820ccfe210e3926f63c328216b9a66e" + }, + { + "file": "lib/src/components/stepper/t_stepper_theme_interpolation.dart", + "sha256": "1decd5487909342c3baacb1e98efc46382cf9e8a7277948c12d4256f7874bf62" + }, + { + "file": "lib/src/components/stepper/t_stepper_types.dart", + "sha256": "feba5fbfe83c7b283da1fdf332156d086bd0f60c834453fbd54fe9bed85a79fb" + }, + { + "file": "lib/src/components/steps/t_steps.dart", + "sha256": "9d638edac67122bdee3937eadc92fc8d93087c3bf7689b22f243f38ab76e8aac" + }, + { + "file": "lib/src/components/steps/t_steps_horizontal.dart", + "sha256": "e1ba9a44db6b8772adc6e0b0d1a210242873353834125cded007e4e2fac716db" + }, + { + "file": "lib/src/components/steps/t_steps_horizontal_item.dart", + "sha256": "80c0bfccb2b2f7bd2b96fee0b639eb124441fd5d2d1e0a3bb461d146c9e505a6" + }, + { + "file": "lib/src/components/steps/t_steps_mode.dart", + "sha256": "f96975092611043583629bc5d790fd9f3e5d13ff169aac1a216c2925a961810f" + }, + { + "file": "lib/src/components/steps/t_steps_vertical.dart", + "sha256": "298c164b53a66b4bcc27d15b380ade52fb44bc2f4830628059cd83c8a6e7cb1c" + }, + { + "file": "lib/src/components/steps/t_steps_vertical_item.dart", + "sha256": "d101ec7d9ccf3ac0e557aa60b5e4fa32bf68f8594d2862a79e90e9332c0fc3c0" + }, + { + "file": "lib/src/components/swipe_cell/t_swipe_cell.dart", + "sha256": "151b03380c9e7eba1074cd984e0c173c7e4b8cf371fcec98155ef16c39ab7cff" + }, + { + "file": "lib/src/components/swipe_cell/t_swipe_cell_action.dart", + "sha256": "00bd8483f07454d1c6fbebd2b426c148ff6e40c9ea81504e6410d14f45f0eb01" + }, + { + "file": "lib/src/components/swipe_cell/t_swipe_cell_inherited.dart", + "sha256": "42b7417a77fa75282c05c7af10990db9981e87503abc91b84b68603b4ff9f3b1" + }, + { + "file": "lib/src/components/swipe_cell/t_swipe_cell_panel.dart", + "sha256": "2e60fb03f8e4ec818bdbabd98e9ec5f0af95715ac784381bb1a7840620600622" + }, + { + "file": "lib/src/components/swipe_cell/t_swipe_cell_theme_data.dart", + "sha256": "e37a83966081fbe016958c66aaa6bca266e5b03b401d7e0d54444e723ffaab49" + }, + { + "file": "lib/src/components/swiper/t_swiper.dart", + "sha256": "798d7713700ecaa94b448ebdbf4943807062b4579d327a91cd3ce594e6be1abc" + }, + { + "file": "lib/src/components/swiper/t_swiper_theme_data.dart", + "sha256": "16d92386a189a411d7a380ac5108b7f93d6fc42110260aaf47100a3e10f88f89" + }, + { + "file": "lib/src/components/swiper/t_swiper_types.dart", + "sha256": "a0658544128a021628cde6bdee28e9e9f93d791c039f6400b0b04f09294be5e4" + }, + { + "file": "lib/src/components/switch/t_cupertino_switch.dart", + "sha256": "80001f11e88b8c8131f754f023588d76973158a40d3bcaca4cada48c3e87f177" + }, + { + "file": "lib/src/components/switch/t_switch.dart", + "sha256": "ca46c242e3a309d30c688507805f34084d52395847f6ed5a400995fca00493cc" + }, + { + "file": "lib/src/components/switch/t_switch_resolve.dart", + "sha256": "75f4bc2353098292fee80cf7959ddd118cd0c806008c1152fb3b4cdd3d6bd2c1" + }, + { + "file": "lib/src/components/switch/t_switch_theme_data.dart", + "sha256": "cfab457b9930daabcfc71e332ff0d8791ca4e19c9b9133e73171aa52f5f64fc1" + }, + { + "file": "lib/src/components/switch/t_switch_types.dart", + "sha256": "48776a87e0bb52ad72f53ed6ae04474e8a1ddc98f23e71495feb0751fb80418d" + }, + { + "file": "lib/src/components/tabbar/t_tab_bar.dart", + "sha256": "864dfdc60346c9d518553361258851b07e943d167d9f5d20ea5cd67c0364d1c3" + }, + { + "file": "lib/src/components/tabbar/t_tab_bar_theme_data.dart", + "sha256": "ce398447092f2010ce32585969072449f1d20127fbf98cbbb2bb640f10774087" + }, + { + "file": "lib/src/components/table/t_table.dart", + "sha256": "c5589ce8cc0198af1be1a149c2711b28e0bbc2334e3fc4b776e9f0636a1589a7" + }, + { + "file": "lib/src/components/table/t_table_col.dart", + "sha256": "2d4a73d7c21f42e432cf3e8c22ee2ab2d861ef7458ab6ad31605a23217c70ead" + }, + { + "file": "lib/src/components/table/t_table_theme_data.dart", + "sha256": "1a7b081ca34ccbd28ed68375292bf2fd735d069c17ef52bc0fb27562d02628d6" + }, + { + "file": "lib/src/components/table/t_table_types.dart", + "sha256": "421e8c13cc6ec6ef27204ac17e3ccd7414648267e68fbb5c2c18ee40bf73b4ee" + }, + { + "file": "lib/src/components/tabs/t_horizontal_tab_bar.dart", + "sha256": "4bc61decb69e43b94a5b58cb434273ff8493947389d33c878d629e994f7b1c6a" + }, + { + "file": "lib/src/components/tabs/t_tab.dart", + "sha256": "73eaf5b11b8a48c7ab832ebab4fd73566a017a6d9f367ddcf1e99a0ed301a2ff" + }, + { + "file": "lib/src/components/tabs/t_tab_bar.dart", + "sha256": "ceea2da6332b886d416a5d664e1dd8fd088999a46d3588aa7098d2a676b822a9" + }, + { + "file": "lib/src/components/tabs/t_tab_bar_theme_data.dart", + "sha256": "b8834b984aa9c8be75882eb3518ecd0fb44cd60528bd9a5d42bd945cda55ba5c" + }, + { + "file": "lib/src/components/tabs/t_tab_bar_view.dart", + "sha256": "262d681558421d9693a71a589b3fa96bf32cb419558a8ea77c8000ff5bcec6ff" + }, + { + "file": "lib/src/components/tag/t_select_tag.dart", + "sha256": "5b8b82f610345dc9b6ec021b8de97d6cf69560795b3edd0619cf0e82bf9cafe4" + }, + { + "file": "lib/src/components/tag/t_tag.dart", + "sha256": "2d7bc17b3e2d56da4b4fdcf89080138c84842c5f1e6cc4759d674555441a12d5" + }, + { + "file": "lib/src/components/tag/t_tag_theme_data.dart", + "sha256": "992cfb7c8c78f0c0d05c954f707a6f982bdbdc1ed2b5ecaebf315810798616bf" + }, + { + "file": "lib/src/components/tag/t_tag_types.dart", + "sha256": "ce68263caea41285873253427d0158e1ce71a885e80645c5af1156f7a0a5e225" + }, + { + "file": "lib/src/components/text/t_font_loader.dart", + "sha256": "fca1fe8128238820b8ac4529e798a64065e5ee280523bdf3b91cfed393c4e845" + }, + { + "file": "lib/src/components/text/t_text.dart", + "sha256": "24d31259ae53929347f8e567fc9a255815844f5805b19daeea38124af1d748c9" + }, + { + "file": "lib/src/components/text/t_text_resolve.dart", + "sha256": "ec12723dfd4fdc6f4199d6a53e1819bc51b3c383b3f0caefaef99d2890721f5a" + }, + { + "file": "lib/src/components/text/t_text_style_scope.dart", + "sha256": "ba34f4411a6a3add8e7ad5b59e00b79ba38893deef34e360f162fefc7e74aadb" + }, + { + "file": "lib/src/components/text/t_text_styled.dart", + "sha256": "48dd1012f89e0fcd9d26242f3401f9db00debc28693c406261a1a150fe5eeb95" + }, + { + "file": "lib/src/components/text/t_text_theme_data.dart", + "sha256": "cd0a068507dbe383c6d1bfe8e45e079d75d846e3e840c81ba3e6cead4606bdb1" + }, + { + "file": "lib/src/components/textarea/t_textarea.dart", + "sha256": "71514bca99bb519ac717a06251cc49d81c9194e2301b00e86817703f3b5a479d" + }, + { + "file": "lib/src/components/time_counter/t_time_counter.dart", + "sha256": "304cbe0b7c084ff44f02a402067fd4f5460fc678f816656a9109ee6c4ac8eda4" + }, + { + "file": "lib/src/components/time_counter/t_time_counter_controller.dart", + "sha256": "61419d95bb649590492c3dc3d592dcef60c399af0cc7bb03b0c2d7fc26c11bb8" + }, + { + "file": "lib/src/components/time_counter/t_time_counter_style.dart", + "sha256": "96fc838fe5a5e176fb391145239284f95c547e67178d3a796756a6473ded9edd" + }, + { + "file": "lib/src/components/time_counter/t_time_counter_theme_data.dart", + "sha256": "622a4eea07f1a462182173136b9b2be504023b2db04ac8375ea64340c7501922" + }, + { + "file": "lib/src/components/time_counter/t_time_counter_types.dart", + "sha256": "9bfc7e5e372081380a80a14c20d3ab8d11439b838bdabd23c5e30aad39b34583" + }, + { + "file": "lib/src/components/toast/t_toast.dart", + "sha256": "a417162331b11a405f4abaef43282526c54651c49302cf8e97e743bed08a7ac2" + }, + { + "file": "lib/src/components/toast/t_toast_theme_data.dart", + "sha256": "d90a632873c2323cd1b24b8d65878daab42496fc6de5627b70c1f87e721a6431" + }, + { + "file": "lib/src/components/tree/t_tree_select.dart", + "sha256": "3e2b11ff4e13b761f3c86b7e1028f936fe35005c7df77e7f8ea5c6119bf9797b" + }, + { + "file": "lib/src/components/tree/t_tree_select_theme_data.dart", + "sha256": "6e64b7c2b77449613c5b351e807a3eb238ca5cf1227c01b25d4e428abec22ed6" + }, + { + "file": "lib/src/components/upload/t_upload.dart", + "sha256": "83d1ad81afd31fb25c75de51725b4f7d31e179f2a6debc794f660771bf0c0b12" + }, + { + "file": "lib/src/components/upload/t_upload_theme_data.dart", + "sha256": "6e518ccd0f1314011a51358c417f0a514b294174619fee7d4210e2007cf805f0" + }, + { + "file": "lib/src/components/upload/t_upload_types.dart", + "sha256": "82aeb54e6193b17f7856b5fc02127ac52ecacb90eeb0fe5b99497f3960ec993a" + }, + { + "file": "lib/src/theme/basic.dart", + "sha256": "82176cb7a416e2882fe22b4c9f3e011607a916345687986231759cb79f049250" + }, + { + "file": "lib/src/theme/resource_delegate.dart", + "sha256": "1ebd7bf58528f2a815efbc7adee8b207e4cc8f1a8af39e1c3790bec5933d7c78" + }, + { + "file": "lib/src/theme/t_colors.dart", + "sha256": "80aa53da0e06a60e845aac3eb00049cb7035c99741b76e0551efbb9438aadb94" + }, + { + "file": "lib/src/theme/t_component_theme_data.dart", + "sha256": "4f3252da9acdd54dc181716db277d2aeee409b3efea3d188d286029edae9125d" + }, + { + "file": "lib/src/theme/t_default_theme.dart", + "sha256": "743894c68e5877861c11e517d5836efe0253b25d3cc48bb2389fe9e126d8be36" + }, + { + "file": "lib/src/theme/t_font_family.dart", + "sha256": "1863ddb6674e70d23cd60247b0da03c5920da3cc0185c913c8b536d47edfef6b" + }, + { + "file": "lib/src/theme/t_fonts.dart", + "sha256": "4fff418e487039865e79e5481733dbf4f88db8697b783a69709389d79aec305f" + }, + { + "file": "lib/src/theme/t_internal_material.dart", + "sha256": "a6d6a6e1199e9e2ac145a85c38cace35326e2d7f5e6435f390011e85774bc530" + }, + { + "file": "lib/src/theme/t_radius.dart", + "sha256": "284cf6ff6a57b4f5b56d542f0f254ef4ee390307eb5a57a50fb6e23f4b7f4476" + }, + { + "file": "lib/src/theme/t_shadows.dart", + "sha256": "1b7486aa7a6f991b5f263f94af52d59a5814c87becccb2e24d76b8b7cf49a9f0" + }, + { + "file": "lib/src/theme/t_spacers.dart", + "sha256": "e133289a8df2d7f0fb7e35737152eecaa5c00b6432b207ee709083f4cd8caa31" + }, + { + "file": "lib/src/theme/t_theme.dart", + "sha256": "5a5e30e228609a97cf5a0a8132a8149e02c49ac41b590fad767f4d9c02cc41c9" + }, + { + "file": "lib/src/util/auto_size.dart", + "sha256": "92e8d364c9c679faa4b8c41b065e7fb30980a45a50009d49655a43ad12d250b9" + }, + { + "file": "lib/src/util/context_extension.dart", + "sha256": "5eb9eedbb49821651af98f582b056a6f18cd772626a78d8f0bba1f3b3662d65b" + }, + { + "file": "lib/src/util/iterable_ext.dart", + "sha256": "395f2dc4615f531604845c25faf1527f00ebb7081372ca2a629b18001a0149d3" + }, + { + "file": "lib/src/util/list_ext.dart", + "sha256": "9ae31f662e8c26195ee8821763e126ba05c90372b500be90c02d8dbac78fc5fb" + }, + { + "file": "lib/src/util/log.dart", + "sha256": "9dfe1251793a0b1825ac0e8490d0471dc3dcec272a631f865d7b2b68a4ceaca8" + }, + { + "file": "lib/src/util/map_ext.dart", + "sha256": "7f4971c1cc5ee9fa0fd94c1a0d414665c556866104d9c4d6b2c679168cfaf966" + }, + { + "file": "lib/src/util/platform_util.dart", + "sha256": "9203fe2d1a9ed9fed442cd7645089acfda3238e89b1ffd874b203525b92f3b1d" + }, + { + "file": "lib/src/util/string_util.dart", + "sha256": "332a04e28162425c7b3aa59cc1a733457ff0e47bfc80034945e18c454047e2ce" + }, + { + "file": "lib/src/util/t_toolbar_pressable.dart", + "sha256": "53b4d7fd26f6dc491b4db7684ffeac9720c42ff5bf02c361f9e9abecd8cda081" + }, + { + "file": "lib/src/util/throttle.dart", + "sha256": "24118fa46782ba8c206dc1c98c12fdd58c9544a7c296503b4fa276f03edf7c05" + }, + { + "file": "lib/src/util/version_util.dart", + "sha256": "6d12fa479de56b37322583aa74c4c1cb37503a40ef6dddfa9d3a5bbd51dd4c68" + }, + { + "file": "lib/tdesign_flutter.dart", + "sha256": "20d895fbcb470e4a0d093319fef668fb46eb98e8acc186758d4ffeed00754cfa" + }, + { + "file": "pubspec.yaml", + "sha256": "bed96a58589070205525cdc9a026d5d55eb04962f7016958c34ea7f765554202" + }, + { + "file": "test/components/avatar/t_avatar_test.dart", + "sha256": "3b9e7a0337c2d90004a601b9355c1f7354225cf7ab588b6d60821d28d4229398" + }, + { + "file": "test/components/button/t_button_test.dart", + "sha256": "561980979fb140ef6e211c361ab39de59745139777682db2d5c90d1f54089716" + }, + { + "file": "test/components/button/t_button_theme_priority_test.dart", + "sha256": "3c5bb3437dbbfbbebce899d38a5b2385d4c327f64679ecd50991aadb79e13ee9" + }, + { + "file": "test/components/button/t_button_theme_test.dart", + "sha256": "a0b9d187d0c927c8f72665c334e4682a2550c20c92c1ee06c5b9d5e9262f7bf9" + }, + { + "file": "test/components/button/t_button_widget_test.dart", + "sha256": "14cc23c989161d9a14eab19276e77259a79e87ce812c5e17bde6213d8a98a252" + }, + { + "file": "test/components/empty/t_empty_test.dart", + "sha256": "4e523e8bc24ffc29dfd94682fdd982101b78bfb23379d5c8b5e8e0573010c680" + }, + { + "file": "test/components/input/t_input_test.dart", + "sha256": "89cf7b06da4fed876bb262239e90a96ba0a0925690e63a45e0423dc72e1f1c33" + }, + { + "file": "test/components/input/t_input_theme_test.dart", + "sha256": "6b6ea3128760632295eca295c519f024bd7d0e771149ac5db5510d5d4810a429" + }, + { + "file": "test/components/link/t_link_resolve_test.dart", + "sha256": "518a08ef4051acddacc1debe200af8569d58b747a42d41728775f3baf65ab401" + }, + { + "file": "test/components/link/t_link_test.dart", + "sha256": "5f0a867c04df0d6065d9f08812affdc29debb79ced5bd0f8302dba4e2a173371" + }, + { + "file": "test/components/link/t_link_theme_test.dart", + "sha256": "2914f838c499bf4abd1decc479a1405bffc282b5219b0723de91f1b80db4030d" + }, + { + "file": "test/components/link/t_link_widget_test.dart", + "sha256": "5dd427e0cf57c73af81674b406e4b0490f7791875eba75220c694af876d38202" + }, + { + "file": "test/components/progress/t_progress_test.dart", + "sha256": "61e834c2320e54faf21b36215be791823d8113a974e5a2ab5876491e65b5d0b3" + }, + { + "file": "test/components/switch/t_cupertino_switch_test.dart", + "sha256": "1af92430111f1dff0d062064e718bf4ad1807a8a412880bf146b099987fb2844" + }, + { + "file": "test/components/switch/t_switch_test.dart", + "sha256": "754d70d6b933b1069928802a85aaff30f30ded042bf92e417477175ae154fb26" + }, + { + "file": "test/components/switch/t_switch_typography_test.dart", + "sha256": "88a16e42c497cf02de643b3a82b308033973c9264108ea6b80f99fc6aea26823" + }, + { + "file": "test/support/token_consumption_evidence.dart", + "sha256": "02bc17e5a852df363a7791e2eb05295a54ceca63eef414c14035dede753ba815" + }, + { + "file": "tool/component_test_manifest.dart", + "sha256": "0d1eba025f0f62486d9b681d66a11b04dd2993bbb40119011d868d608faaceeb" + } + ], + "evidenceTools": [ + { + "file": "tool/verify_token_difference_resolutions.mjs", + "sha256": "be61735e2dbfbcd7105540f083ccee49443abddb0f35aefab23c408356733e0c" + } + ], + "checkpoints": [ + { + "sdk": { + "frameworkVersion": "3.32.0", + "channel": "stable", + "repositoryUrl": "https://github.com/flutter/flutter.git", + "frameworkRevision": "be698c48a6750c8cb8e61c740ca9991bb947aba2", + "frameworkCommitDate": "2025-05-19 12:59:14 -0700", + "engineRevision": "18818009497c581ede5d8a3b8b833b81d00cebb7", + "engineCommitDate": "2025-05-19 10:54:07 -0700", + "dartSdkVersion": "3.8.0", + "devToolsVersion": "2.45.1", + "flutterVersion": "3.32.0", + "flutterRoot": "/private/tmp/tdesign-token-flutter-3.32.0" + }, + "focusCount": 47, + "regressionCount": 440, + "migrationCount": 21, + "coverage": [ + { + "component": "button", + "hit": 471, + "found": 474, + "percent": 99.37, + "logSha256": "e7667b60b36d9cf1697dcab57d433755e536072cd686ccd2d605be2562e30056" + }, + { + "component": "switch", + "hit": 385, + "found": 401, + "percent": 96.01, + "logSha256": "960291d12ffa0579f21e0b9815f17db0486f53c3c304cdb5bd2be50c371406d2" + }, + { + "component": "input", + "hit": 321, + "found": 330, + "percent": 97.27, + "logSha256": "15e1240d66d70ea81af1ecba866e456e84012335c457efbd3f28a7629fa51d00" + }, + { + "component": "link", + "hit": 114, + "found": 116, + "percent": 98.28, + "logSha256": "2dafa9651eadaa060fae9b06491dd4bb1bfd5d5412ffe7dfe100d1a3b7f25dac" + }, + { + "component": "avatar", + "hit": 281, + "found": 285, + "percent": 98.6, + "logSha256": "e41486f9cd676cd74090f45379afacfffeef2b155d3c89ad7c9fbf2e81b3f0de" + }, + { + "component": "empty", + "hit": 33, + "found": 33, + "percent": 100, + "logSha256": "dd4a5dceb915e9748f71aa4b8064355ffcd74fe29157e647be420cc46f0fa006" + }, + { + "component": "progress", + "hit": 646, + "found": 655, + "percent": 98.63, + "logSha256": "0b0ffc8c9e25815cbd3532ebc3aad98364c635e42ee6912fdcba72eb17158914" + } + ], + "migrationRetryUsed": false, + "logHashes": { + "focus": "5c174ce9d7762100c01c2b38320108cc6f26c236e9ed00bdb2018bf81ff70cf7", + "full": "6d0e7125d6b29f6fd1bd9ae48de041412c9f686477be6826cf966ed4ae672230", + "analysis": "0c317051d2a697623e0b40b965151a02330710ab7d18421dac0652811e807324", + "migration": "7cd61acfcfe6528b13a7d2f7523da30811e5a28b4ba6b61f697cec8a3801384b" + }, + "lockSha256": "7deb49a80a8288c84280257591090c14c5fa1db08f8aabad6233b51a8a6e4d92" + }, + { + "sdk": { + "frameworkVersion": "3.47.7", + "channel": "stable", + "repositoryUrl": "https://github.com/flutter/flutter.git", + "frameworkRevision": "abaf9c523780a608bd46686fd5e53740a07077f8", + "frameworkCommitDate": "2026-10-08 09:51:21 -0700", + "engineRevision": "deb287481e3ce9468f3434937ced4240a70539ca", + "engineCommitDate": "2026-10-07 17:09:12.000Z", + "engineContentHash": "d8a2d6c768c334d53e16277f837970ffa1e2de81", + "engineBuildDate": "2026-10-08 01:51:44.552", + "dartSdkVersion": "3.13.5", + "devToolsVersion": "2.60.0", + "flutterVersion": "3.47.7", + "flutterRoot": "/private/tmp/tdesign-token-flutter-3.47.7" + }, + "focusCount": 47, + "regressionCount": 440, + "migrationCount": 21, + "coverage": [ + { + "component": "button", + "hit": 471, + "found": 474, + "percent": 99.37, + "logSha256": "e7667b60b36d9cf1697dcab57d433755e536072cd686ccd2d605be2562e30056" + }, + { + "component": "switch", + "hit": 385, + "found": 401, + "percent": 96.01, + "logSha256": "960291d12ffa0579f21e0b9815f17db0486f53c3c304cdb5bd2be50c371406d2" + }, + { + "component": "input", + "hit": 321, + "found": 330, + "percent": 97.27, + "logSha256": "15e1240d66d70ea81af1ecba866e456e84012335c457efbd3f28a7629fa51d00" + }, + { + "component": "link", + "hit": 114, + "found": 116, + "percent": 98.28, + "logSha256": "2dafa9651eadaa060fae9b06491dd4bb1bfd5d5412ffe7dfe100d1a3b7f25dac" + }, + { + "component": "avatar", + "hit": 281, + "found": 285, + "percent": 98.6, + "logSha256": "e41486f9cd676cd74090f45379afacfffeef2b155d3c89ad7c9fbf2e81b3f0de" + }, + { + "component": "empty", + "hit": 33, + "found": 33, + "percent": 100, + "logSha256": "dd4a5dceb915e9748f71aa4b8064355ffcd74fe29157e647be420cc46f0fa006" + }, + { + "component": "progress", + "hit": 646, + "found": 655, + "percent": 98.63, + "logSha256": "0b0ffc8c9e25815cbd3532ebc3aad98364c635e42ee6912fdcba72eb17158914" + } + ], + "migrationRetryUsed": true, + "logHashes": { + "focus": "6f28efaf3ec4dbdd876275869bbe6d6b724684c620881bff3e1188ef1eae2a0f", + "full": "e53c4483c16a40d08bf951b81655f756c6c2a55e75742c54c75b497233cdd44d", + "analysis": "85afaf142c8fae7e788694ee259ee5dd7c5771be92a77b9420b5143c8d09ab84", + "migration": "21cf49575b20f4cd0a44fed214536af9a1153a0011bb77cddef25b3a95bfdb7b" + }, + "lockSha256": "72ed71235498ba5e0b54fa7cafd55220347a0519feeb05b7b9221a254baa0cd3" + } + ], + "proposal": { + "appliedToMainWorkspace": false, + "patchSha256": "6f3acdc6fec78d41334fdfe46b4e614ed22fe39df800b688bcda32d8a5374607", + "appliesCleanly": true, + "isolatedFunctionalSdk": "3.47.7", + "isolatedFocusCount": 47, + "isolatedLogSha256": "a1a680812d44d0a94287c117b6af0afb0520f84e7eb51a670d333681aad20a2e", + "isolatedSourceSnapshot": { + "files": [ + { + "file": "assets/tdesign/TCloudNumberVF.ttf", + "sha256": "f712f74bdb5343c12d6801b349fd5a1b07c54b9ab31023098803b98dc2ac6063" + }, + { + "file": "lib/src/components/action_sheet/t_action_sheet.dart", + "sha256": "9428b11143d3139efc714d9ea756f69b8bc266faa2630a6eff4e3118662d2e6e" + }, + { + "file": "lib/src/components/action_sheet/t_action_sheet_grid.dart", + "sha256": "64f5b8453b18c38b04c561dd4289ff0fb75b422ff942e4e664a3142f8b124727" + }, + { + "file": "lib/src/components/action_sheet/t_action_sheet_item.dart", + "sha256": "574d4ee50bc5771ca758620d01d3630551b99faeeb58b784d9d8e13f45bc4742" + }, + { + "file": "lib/src/components/action_sheet/t_action_sheet_item_widget.dart", + "sha256": "f4c0fb5d9c9f7cacc34e7acb514c7fc57165905bda8e1ea2c41f4c393e26e958" + }, + { + "file": "lib/src/components/action_sheet/t_action_sheet_list.dart", + "sha256": "9a9edf863f9bfbed2135ca321f8e8119e1e70a0fa5fbcb037add33d88665a64f" + }, + { + "file": "lib/src/components/action_sheet/t_action_sheet_theme_data.dart", + "sha256": "47e8cf56722cfd3c09cd0769bf7eb83050e05a5cea3935d5b688386db98bf005" + }, + { + "file": "lib/src/components/action_sheet/t_action_sheet_types.dart", + "sha256": "bc953484f3fbcda85b2265e6da1f26359f5e1a7f0f6c79a36da400645bf744ce" + }, + { + "file": "lib/src/components/avatar/t_avatar.dart", + "sha256": "cef88facb3314287a600e82fbce07dfa39258f99e5337d77a472ee3792fa0b6d" + }, + { + "file": "lib/src/components/avatar/t_avatar_defaults.dart", + "sha256": "e90f48ca3ffbcd128914ba5ba688ff46913bb3acbb0a1b6ca20bfed22f964716" + }, + { + "file": "lib/src/components/avatar/t_avatar_theme_data.dart", + "sha256": "9dd201ea5e8cd4d2fec16b41f43baf3b364da03c8a751042768c9cc33ade1820" + }, + { + "file": "lib/src/components/avatar/t_avatar_types.dart", + "sha256": "cd04d4ea83c659d6016ce5c67738678999d913d141a8132e04cd5b7686c56c96" + }, + { + "file": "lib/src/components/backtop/t_backtop.dart", + "sha256": "613c223e5e00f140a8a0613406fc0082485d142b568f9a12f9d98150be42017f" + }, + { + "file": "lib/src/components/backtop/t_backtop_theme_data.dart", + "sha256": "6f10265e786cd9cc9493acca19c39b4998e0054aafbf1686e4dbb553740a7806" + }, + { + "file": "lib/src/components/badge/t_badge.dart", + "sha256": "12d782a548187bfdcbaef3cd2601183d1b702ab11ca8be9509cc20fe70473d03" + }, + { + "file": "lib/src/components/badge/t_badge_defaults.dart", + "sha256": "26df77972945bf1d6b7f1bc19a921011d40cc6f8aa30b6dbe9ddbb0d8d705772" + }, + { + "file": "lib/src/components/badge/t_badge_fallback.dart", + "sha256": "b93bbf2d4d92b5baee8334133cfc184d5602f092a223415cd38c95242cfdbc75" + }, + { + "file": "lib/src/components/badge/t_badge_internal.dart", + "sha256": "e178e81e3562f70354aa51db944529e65b1e1ac213b1d0864b909f4d4fcc647e" + }, + { + "file": "lib/src/components/badge/t_badge_label.dart", + "sha256": "9705e282965abd1367a106a2e40d2f57a9125b567940f6a2e1f252c48314533f" + }, + { + "file": "lib/src/components/badge/t_badge_layout.dart", + "sha256": "ea2048a7e8ee8113f006554205f0c3ef865c95372afc9350832563dc229f474a" + }, + { + "file": "lib/src/components/badge/t_badge_resolved_style.dart", + "sha256": "2dc6b205d476eaffd0bd118de66d66eaa10c79788b075975f95c43ff6856ce58" + }, + { + "file": "lib/src/components/badge/t_badge_theme_data.dart", + "sha256": "7502e10c9b472bf6d273ae84a62533c2e67e97baae5801ac6032f3e953d7667b" + }, + { + "file": "lib/src/components/button/t_button.dart", + "sha256": "44c74c64a84b70a4b2f0f3f816a6cab98843c42d7d43136cc25c91108e49e465" + }, + { + "file": "lib/src/components/button/t_button_defaults.dart", + "sha256": "b4f0ad7379eefc2c562782ac0c1c48abe14d9ac59679d639c66a5790c38559f9" + }, + { + "file": "lib/src/components/button/t_button_resolve.dart", + "sha256": "b090836c2ba010cbd492cabff14529ce9c179bd1d06e2d13d1e2155aaeefc307" + }, + { + "file": "lib/src/components/button/t_button_theme_data.dart", + "sha256": "db4f4331a5ebe200f03046ed95c5ff633abf7051f9064bdc986844c66216a35d" + }, + { + "file": "lib/src/components/button/t_button_types.dart", + "sha256": "e223af1e6f201b93f5723500a4ae052836075abd45c635de230ae076491e22f5" + }, + { + "file": "lib/src/components/calendar/t_calendar.dart", + "sha256": "71e148330bac972531103e819edbc413d874517a3e4763c26fbe227e0914a6d9" + }, + { + "file": "lib/src/components/calendar/t_calendar_body.dart", + "sha256": "61a542f48bd16504562b47646c1c23564c4f280a63caf9e70bd4cd975d0a3d34" + }, + { + "file": "lib/src/components/calendar/t_calendar_cell.dart", + "sha256": "77fae6aaf4728c6a915330f49eb51eb2f95cc7157c15840e6ac808b791373ce4" + }, + { + "file": "lib/src/components/calendar/t_calendar_header.dart", + "sha256": "302e20b572330fa69a8658232d0667e75a4da1786b8557255471b88adb3fdd22" + }, + { + "file": "lib/src/components/calendar/t_calendar_style.dart", + "sha256": "80985c34156b34552abd80304d3255856b60f02bc282987bfc2484ce2dfc61d9" + }, + { + "file": "lib/src/components/calendar/t_calendar_theme_data.dart", + "sha256": "373c90441bc36e9dc0d1aae211de42c33b121264f8685a07c414b33df35784bd" + }, + { + "file": "lib/src/components/calendar/t_calendar_types.dart", + "sha256": "59cb92666699dc56a4ecb1c9e32c17015a63a782bb8ba653bf5ca2d9840e7938" + }, + { + "file": "lib/src/components/cascader/t_cascader.dart", + "sha256": "2bb538d5ab0c463d7d50fa91c631df1fb654b20fe962e33c5e893a029e0a4baf" + }, + { + "file": "lib/src/components/cascader/t_cascader_defaults.dart", + "sha256": "b9f4a80d6c072db78ab4a6309ece17a0985ba902ecfd2b9fbb2a1f16b7848002" + }, + { + "file": "lib/src/components/cascader/t_cascader_theme_data.dart", + "sha256": "6caa10215842400c0c4aa12e0a0bff20ce395f3b6e1555810886e1118377733d" + }, + { + "file": "lib/src/components/cell/t_cell.dart", + "sha256": "b51f5446a1a670d4a0f065da5380735be0c20a7ff217c8f98889cc7c99824f8d" + }, + { + "file": "lib/src/components/cell/t_cell_group.dart", + "sha256": "eb0964efc5c43717425022aaf4d143ff7f367c9a17fe39d29b51f18600584394" + }, + { + "file": "lib/src/components/cell/t_cell_theme_data.dart", + "sha256": "65e0a50ec36c9073ec10d2744ccaa6599b6b9246669f6250cd8d04aedac8f092" + }, + { + "file": "lib/src/components/checkbox/t_check_box.dart", + "sha256": "586f2cce496a5713b8a8ed60b9cc92119caf57fe82823d087e5ec3292f53646a" + }, + { + "file": "lib/src/components/checkbox/t_check_box_group.dart", + "sha256": "f7fcfacb70d71ce63f621bccf5b01b48033363d4bd13233a5458d775f4bdd1a7" + }, + { + "file": "lib/src/components/checkbox/t_checkbox_theme_data.dart", + "sha256": "2993307ad235c587e13ced8ea891aaaef79735bd45283bc4e52ff3d79b23e872" + }, + { + "file": "lib/src/components/checkbox/t_selection_card.dart", + "sha256": "2abe436f3c2d20f68c58c667707c777177e93ff10c26bf24733550c21ecc3a1d" + }, + { + "file": "lib/src/components/collapse/t_collapse.dart", + "sha256": "b66d2558bb2b1efdb06abf449f72001756d28e4103dfb85a4b596d77d6bf19ef" + }, + { + "file": "lib/src/components/collapse/t_collapse_panel.dart", + "sha256": "40a55022a7171100648c4c1dcf28a71f48f1b68e4bb69942ce9062a912a93918" + }, + { + "file": "lib/src/components/collapse/t_collapse_theme_data.dart", + "sha256": "21df57f00f6b8be4d4e05f48f5882eedde0d686627bba074aa20b29d092ac418" + }, + { + "file": "lib/src/components/collapse/t_collapse_types.dart", + "sha256": "8cf810fc56a98375b0eb82ef1f489d7a70c9bea46d43c969b1457e968f240332" + }, + { + "file": "lib/src/components/collapse/t_inset_divider.dart", + "sha256": "028229a7a93bb48dc16df0f2732b726361f77d4b3edb9dfb771d0ef8b08ee1d2" + }, + { + "file": "lib/src/components/collapse/t_nonanimated_expand_icon.dart", + "sha256": "c02ebe2f0ac947e0ec32f2da9c2bd64295e644781ae561d617f8cf014e69c59e" + }, + { + "file": "lib/src/components/date_time_picker/t_date_time_picker.dart", + "sha256": "b17d3fa5ae356ac83de83d34830ab06ae00deb5a93adaca43ca787dd8bef4e32" + }, + { + "file": "lib/src/components/date_time_picker/t_date_time_picker_bounds.part.dart", + "sha256": "c2951704c1cdabe6d3e86e0ea0038c2bcbfa3fda264f7cd473284a10858e7f88" + }, + { + "file": "lib/src/components/date_time_picker/t_date_time_picker_column.dart", + "sha256": "6e9e3c38cb2ed477ac22719d5a0e54744ed19f1e159961d10a829559c54091d2" + }, + { + "file": "lib/src/components/date_time_picker/t_date_time_picker_enums.dart", + "sha256": "ea2d87d4af86d434db925b02fb482c3b0a8d4b4e76160b1f41b1e669759f5d3e" + }, + { + "file": "lib/src/components/date_time_picker/t_date_time_picker_internal.dart", + "sha256": "3e228df7d76ddcec64172747f25ded8f1cc00cc91250f9a6bcba84d5e46fc143" + }, + { + "file": "lib/src/components/date_time_picker/t_date_time_picker_labels.part.dart", + "sha256": "174a8c502b904564689b27335ba8b52520f26169d53e6c9e2fc1a75d19e49bdd" + }, + { + "file": "lib/src/components/date_time_picker/t_date_time_picker_model.dart", + "sha256": "86d94cca286a468120acce851eb04d79b4ec7d5a1116d2abd262c93e82ddd448" + }, + { + "file": "lib/src/components/date_time_picker/t_date_time_picker_snapshot.part.dart", + "sha256": "919ec53de51add20de5f6a6b3bf939617ef9d9adeb957f5e1c8219f625c5810d" + }, + { + "file": "lib/src/components/date_time_picker/t_date_time_picker_wheel.dart", + "sha256": "8b6a61c1af65085c9082d044f533c8ca49f14dc80f3ac1bd96749db0411bac3c" + }, + { + "file": "lib/src/components/dialog/t_confirm_dialog.dart", + "sha256": "0f76e26085aaf1efe34935643ec037c1ec658b244a9822f698eec2b5f2e6a280" + }, + { + "file": "lib/src/components/dialog/t_dialog.dart", + "sha256": "33e77a731c06850e037f0c670ebaf0746e81650a031211a5171c56d75ae10912" + }, + { + "file": "lib/src/components/dialog/t_dialog_theme_data.dart", + "sha256": "e41f855132773e23484cc6d064b25af6b5cb42d2c61bc90532d10cb825900afd" + }, + { + "file": "lib/src/components/divider/t_divider.dart", + "sha256": "24773ffcbc8e78be1134bd855b756cf0f86f9dbe4bd237a5c85d360d58ca3c0c" + }, + { + "file": "lib/src/components/divider/t_divider_painter.dart", + "sha256": "4ed3c0208e7270a00fe7c068212271425636c2acc61d60937eda5b2774400880" + }, + { + "file": "lib/src/components/divider/t_divider_theme_data.dart", + "sha256": "a8d1e1d428034bab934870ac885932bebff816b100eaa837bb27c05fe0341536" + }, + { + "file": "lib/src/components/drawer/t_drawer.dart", + "sha256": "30452d798c103483cf674cccdc76f87f918518458fcf59d5239bd832ab0448be" + }, + { + "file": "lib/src/components/drawer/t_drawer_content.dart", + "sha256": "a63c3936b71c173dae5d10aefa57f8360f39633eef4b13b959dc2b4fd734a0ea" + }, + { + "file": "lib/src/components/drawer/t_drawer_theme_data.dart", + "sha256": "e9cd44081104f73a2a1edb8bdbb296cd04e00e3883d006ad1b740a28748915fa" + }, + { + "file": "lib/src/components/dropdown_menu/t_dropdown_item.dart", + "sha256": "6b75f674caea72a6de714c13830ab7a9d21f582579bce55f08c356af585ed653" + }, + { + "file": "lib/src/components/dropdown_menu/t_dropdown_menu.dart", + "sha256": "da57ca61b23d2326c102a1c2812059289dbfb6b5414719d91d5ff88d73da60c4" + }, + { + "file": "lib/src/components/dropdown_menu/t_dropdown_theme_data.dart", + "sha256": "64d9c42720a8b7f1d9f23df56253498abc5b6a5d949286f36e9e2ec589213036" + }, + { + "file": "lib/src/components/empty/t_empty.dart", + "sha256": "37e4d30dd5d1616a7408d03f4a5b8bbd543e612a106b5a3a518e96f955795b2a" + }, + { + "file": "lib/src/components/empty/t_empty_theme_data.dart", + "sha256": "fb7b77b8036225091a092b1c85f8c6ef8807649d9798de55c30042fa35f0ae32" + }, + { + "file": "lib/src/components/fab/t_fab.dart", + "sha256": "ee5eea781f4546f478d587b5b8fc927ca5fbe7fe1e88edab0be74c1e94793453" + }, + { + "file": "lib/src/components/fab/t_fab_defaults.dart", + "sha256": "ad2a41b5c687cbaf5360224655a8ff02378fed5772bc6ddcca8569ea7085db93" + }, + { + "file": "lib/src/components/fab/t_fab_drag.dart", + "sha256": "4ccd88fd8e58de4c56bfc8b73ed26c76161a8540cf0af68e2e727109553d6303" + }, + { + "file": "lib/src/components/fab/t_fab_layout.dart", + "sha256": "059004be0b8d307f08e0f78605e2056f2376e031b85c84acdccc7a4f979f12c1" + }, + { + "file": "lib/src/components/fab/t_fab_resolve.dart", + "sha256": "a2b2740f66c6a3937ad7e99c995e16264ffaa76b1f96a34c9afb7d7c4ff3793f" + }, + { + "file": "lib/src/components/fab/t_fab_theme_data.dart", + "sha256": "4538dab2d7107f5a72a600c4deede1f2af9ea228e985c45f1567aac3d71939b7" + }, + { + "file": "lib/src/components/footer/t_footer.dart", + "sha256": "8a0ad86db0d8c7f8eff1dae09818146847494c750a54620a3d615619646f4279" + }, + { + "file": "lib/src/components/footer/t_footer_theme_data.dart", + "sha256": "ed8f8ab934712b39825287d94c0af1e74012a605e8dba85d1536b2825217dfaf" + }, + { + "file": "lib/src/components/form/t_field_scope.dart", + "sha256": "a3a8f393c67eb66610d67c376c3931f2e2b074b838613f54378ef21fd32e0964" + }, + { + "file": "lib/src/components/form/t_form.dart", + "sha256": "b6985f3e443c16432919c329b2941bc8a74b56b4f836c007698f25bc65c1f3f4" + }, + { + "file": "lib/src/components/form/t_form_item.dart", + "sha256": "aa9102ca45fafc7c0e29fdb38f7319d6b11742328bcb88f800c719e037277b86" + }, + { + "file": "lib/src/components/form/t_form_item_scope.dart", + "sha256": "011a3c6e16bc78e6f2868d73c9efec1d31eaae615eb3b2e9f69717af788e6b19" + }, + { + "file": "lib/src/components/form/t_form_theme_data.dart", + "sha256": "53c614a3f66ee5e9be051921214f7eb30dca00cc4c0614d7a258f0f91df7d93c" + }, + { + "file": "lib/src/components/icon/t_icon.dart", + "sha256": "2d1c9cc13dea4bca2b06a60ac9a768cbb81bca6d92c77399c5f4accf22e9a2f7" + }, + { + "file": "lib/src/components/image/t_image.dart", + "sha256": "e379fe27d53b7bb9d09e21ec45838c4c47611e70f40ac8acf89a70513e7bf867" + }, + { + "file": "lib/src/components/image/t_image_theme_data.dart", + "sha256": "1bb351535ae118890a931df5088cc1f0358d94aca0602bcd6ba465483d7be892" + }, + { + "file": "lib/src/components/image_viewer/t_image_viewer.dart", + "sha256": "ce6e8f4bdcf089239cf4759e03b51667d791d48eb37cc344125ac6671f56dedf" + }, + { + "file": "lib/src/components/image_viewer/t_image_viewer_theme_data.dart", + "sha256": "10107fc4ea83dc9463ec9de61ea7f82d089dd76b3929e93a90695f47905364a9" + }, + { + "file": "lib/src/components/indexes/sticky_header/layout_builder_hook.dart", + "sha256": "5118b00b2a59e4d1aa7393b050099cdf2717b152735f30de0c51ae4634bf227e" + }, + { + "file": "lib/src/components/indexes/sticky_header/sticky_header_layout_builder.dart", + "sha256": "b50798ce6617e087c3dc79388ee9793d77ea6baddbf63eb6e5e5fc6ca78ec111" + }, + { + "file": "lib/src/components/indexes/sticky_header/sticky_header_render.dart", + "sha256": "babb662b1d13824612aece6caf80eca08a083066d8bbbc158d8d4cdd08b1f36e" + }, + { + "file": "lib/src/components/indexes/sticky_header/sticky_header_widget.dart", + "sha256": "a20e7dcf603a7644a1cdf70b3fd6741211e5a21fc85a1ea21993792eaa10374f" + }, + { + "file": "lib/src/components/indexes/t_indexes.dart", + "sha256": "da76a5a65b25b91c9bba3378f57f3d73a831f90a4d2f19558b6cb00192ec58f7" + }, + { + "file": "lib/src/components/indexes/t_indexes_anchor.dart", + "sha256": "26934564047b0324fb46dcffc6e657b0c80450a38e384e4d8b0a7a4753071e65" + }, + { + "file": "lib/src/components/indexes/t_indexes_list.dart", + "sha256": "54bb80bd2e0859d6ada864a104971ef4ee993409c36369d8480a6e30591767ed" + }, + { + "file": "lib/src/components/indexes/t_indexes_theme_data.dart", + "sha256": "49cfad6d986004960bbe2471d344d7950de5a02d0a743645a51521b5bb976913" + }, + { + "file": "lib/src/components/input/t_input.dart", + "sha256": "076648f4bd96ea1d2cb1194fd196b98861bafceea28b6a6c0938d63ad491015a" + }, + { + "file": "lib/src/components/input/t_input_theme_data.dart", + "sha256": "411d7b685e37fa130ecb698e52f93c2258eae64fdab1443d17af5df4da824eb1" + }, + { + "file": "lib/src/components/input/t_input_types.dart", + "sha256": "1feaa3b1f38f6a73880523ba2762b7e3c408ba30f22406d960524d1a108b247c" + }, + { + "file": "lib/src/components/link/t_link.dart", + "sha256": "fdcae77b2ff3845ab9ff37802641e2fd32b3cc185dce30c83c1a1c4a23d2cf70" + }, + { + "file": "lib/src/components/link/t_link_resolve.dart", + "sha256": "19186939ee93f09d6c32e2612889ea1077cd9daf867decd4dde54c344b4aafb5" + }, + { + "file": "lib/src/components/link/t_link_theme_data.dart", + "sha256": "46cf195252853164cb0e8f598133ccfdac931762a88493f1acb75c30aa04b5e9" + }, + { + "file": "lib/src/components/link/t_link_types.dart", + "sha256": "ff5f34ab0302cd6ed966585cf63036b076f14e6dde38711f16017b0e75443630" + }, + { + "file": "lib/src/components/loading/t_activity_indicator.dart", + "sha256": "58275f4985736435b0198a09c1865a2bb60d0f21468b3e7024004a00a69cf385" + }, + { + "file": "lib/src/components/loading/t_circle_indicator.dart", + "sha256": "ca0eb207f4a10b369697f8b7de2f2d903349e6f85dcaace87754c50fe5378273" + }, + { + "file": "lib/src/components/loading/t_loading.dart", + "sha256": "e1062a9a87b051fdcca2a0891e3dbdf300392b12d77765f3296f5e48e6c2d13f" + }, + { + "file": "lib/src/components/loading/t_loading_controller.dart", + "sha256": "20f537456edcb5b3ae3a20e9e60a1ecf98dfcf166173d519ed873aa37e622a55" + }, + { + "file": "lib/src/components/loading/t_loading_theme_data.dart", + "sha256": "0217809b3b50b73be0710ab61bc76a1d8703a924d0c744fcc8868e4a99b3beb7" + }, + { + "file": "lib/src/components/loading/t_point_indicator.dart", + "sha256": "39c95d73d54fa810c95a28929b03d05c2c6f1dcf612cc34087431f1e17a3bd79" + }, + { + "file": "lib/src/components/message/t_message.dart", + "sha256": "3b852b6881fd4a4ef43d11a8ee46a19058f2ba298d8b25ced736f9a4415fa444" + }, + { + "file": "lib/src/components/message/t_message_theme_data.dart", + "sha256": "178131a6a925602dc5eeb8e28b52b383a4af6da662530abf4e930e4a39dd0ae7" + }, + { + "file": "lib/src/components/message/t_message_types.dart", + "sha256": "5e6c06b34b8668a4553e58920b92aaaa34739ac0f9dfe91cdd5db0181c28d52a" + }, + { + "file": "lib/src/components/navbar/t_nav_bar.dart", + "sha256": "3cb32ff05116935d45e6d0773eb74dbd58ef9f92c5c11ae67261c092665a94fb" + }, + { + "file": "lib/src/components/navbar/t_nav_bar_theme_data.dart", + "sha256": "21f1796a4b4b5a084a598eb8c1fd50784251a898537618773f35e17014dc7753" + }, + { + "file": "lib/src/components/notice_bar/t_notice_bar.dart", + "sha256": "09f632ab81d08ef67ccb7a0a40ce54f2c2bc1465fc1b3f7308058d6bc3df9c2e" + }, + { + "file": "lib/src/components/notice_bar/t_notice_bar_theme_data.dart", + "sha256": "cd632cddcef45cb94ae6a0a0e23684b3e9a4e4a2669418cb7e2cb94ae10487f0" + }, + { + "file": "lib/src/components/notice_bar/t_notice_bar_types.dart", + "sha256": "57bfe5b5b3148720a4f5241cea2e317fc30ac42fa4188ef99a064544c9d024a2" + }, + { + "file": "lib/src/components/picker/multi_wheel_layout.dart", + "sha256": "e2c0cf62b68afdbb7712f8775a4bfd6b5e5b1610a21538041afff1a9e1f5465d" + }, + { + "file": "lib/src/components/picker/picker_defaults.dart", + "sha256": "3e9b857a14233b5f09bcd961dd6dd7ab9dc1f0bfd7adf2f678cb93090fc9c5f9" + }, + { + "file": "lib/src/components/picker/picker_item.dart", + "sha256": "db51764b25426849122a8731b36f6d89224d23af570456aa1dd8856b256efbb0" + }, + { + "file": "lib/src/components/picker/t_picker.dart", + "sha256": "48643ca9c9d698441de14f0db062479b5693fb0925fb956b7d0d3c2949d949c0" + }, + { + "file": "lib/src/components/picker/t_picker_popup.dart", + "sha256": "12f93ed1a88d51191814939e47e5e0b53da5de7c1d989db5e64f73121c49a38b" + }, + { + "file": "lib/src/components/picker/t_picker_theme_data.dart", + "sha256": "adf4e483ce3638f6e8350051d07e39c6b5a96a26f23a6f73f39f91caea393ee4" + }, + { + "file": "lib/src/components/picker/t_picker_types.dart", + "sha256": "c30fe1fbdc492a983fb7405c9a4ce15aa7ccaa833582685001185e6ed8da9cf2" + }, + { + "file": "lib/src/components/picker/wheel_behavior.dart", + "sha256": "9ec31330de3f5c122911e89cedfba31ea926fcc91e4d827c8328327effa55227" + }, + { + "file": "lib/src/components/picker/wheel_column.dart", + "sha256": "8dbe4b6caed43b8d19cac158cf4120819b899dc349d7a3b199a181078b2272db" + }, + { + "file": "lib/src/components/popover/t_popover.dart", + "sha256": "268507f0a2147843cde705f20ab8d6f1d6f40b48e4a9090e8f9629170133fb05" + }, + { + "file": "lib/src/components/popover/t_popover_theme_data.dart", + "sha256": "bd400a9abc392cef5e1b5ae9c5ca4a903a76144f4bb0426eb5d1280c2f1933ba" + }, + { + "file": "lib/src/components/popover/t_popover_types.dart", + "sha256": "7df3d8b79e7b8e21722da58a24bdbcbbeb4099b25391cc0c9b1f9114faad9f2c" + }, + { + "file": "lib/src/components/popover/t_popover_widget.dart", + "sha256": "51346815e0fea353c4e162f57b390fa17cf32a2dffea9d98b6e767b1b0e6e5d5" + }, + { + "file": "lib/src/components/popup/_popup_center_close.dart", + "sha256": "133784217a629e14358a099d67d8a07e7a3ade133767b20fd43bef5d964db620" + }, + { + "file": "lib/src/components/popup/_popup_header.dart", + "sha256": "21955e2c211e2e45b92dfa561e5b26ed3f37eb860957d94de198cdef329b79a4" + }, + { + "file": "lib/src/components/popup/_popup_layout.dart", + "sha256": "304894e147421324df5e2daa787e2e7e9d27f0c2f5797fb23a9ca899a1a0d050" + }, + { + "file": "lib/src/components/popup/_popup_route.dart", + "sha256": "7660fd75e5157ec70c40a41f77fdf59c8d5c052034ac2f0e3a18242845afe90e" + }, + { + "file": "lib/src/components/popup/_popup_shell.dart", + "sha256": "0eedcd8c228bd91589c784a5b45f5ad58e78c47d7e26639ca434c4f1efec2091" + }, + { + "file": "lib/src/components/popup/_popup_tracker.dart", + "sha256": "84c7692faae29ba8b67eccb364265c60d06f5758d31cb7b264e0fcb8712e9039" + }, + { + "file": "lib/src/components/popup/t_popup.dart", + "sha256": "0b428c76d216ab79f6e401574a740b1fa45ef40a93dcb854bcd23fe77be08514" + }, + { + "file": "lib/src/components/popup/t_popup_handle.dart", + "sha256": "2423e31d4f31839f8729212ddb6b118a08606ef5fa61f4499ca39f7e336c17e0" + }, + { + "file": "lib/src/components/popup/t_popup_inset.dart", + "sha256": "6db46ece40ddf554b29cf32ea95aed01a363d0665557ef78770909e06be637f3" + }, + { + "file": "lib/src/components/popup/t_popup_options.dart", + "sha256": "4fb5d1d4499b2933e45f14b7e1312dbc933ded37e519f9406e6867134e164c40" + }, + { + "file": "lib/src/components/popup/t_popup_theme_data.dart", + "sha256": "bd206e7ff0dde2ecd86d3d69a82c2942bb9ddd320d54929fc43106851964f5db" + }, + { + "file": "lib/src/components/popup/t_popup_types.dart", + "sha256": "b29f14246b271b5a7c5e26f4cb78ab42b44d7342341ee3b10de43aea5b60de3c" + }, + { + "file": "lib/src/components/progress/t_progress.dart", + "sha256": "b5cc33c69fa0402428e71169285008e033fc6fe9565a4f3af47151ce5d0f75a9" + }, + { + "file": "lib/src/components/progress/t_progress_circular.dart", + "sha256": "377b6b349fe97743c28d768f62b4838478cc80c841343823d6ca403800299609" + }, + { + "file": "lib/src/components/progress/t_progress_defaults.dart", + "sha256": "d9e8f51807288f6271fd2fcf7c47e2ce9b48e34ad55c5b9cb75ad24ea030a66f" + }, + { + "file": "lib/src/components/progress/t_progress_theme_data.dart", + "sha256": "216e7d98d8bf990c9ccd3f260bb4ea459c8243426e0e24766582773cd4c81ffe" + }, + { + "file": "lib/src/components/radio/t_radio.dart", + "sha256": "bebf8c21a0a8b365bc910ccd54f3a29bf632fbae7096126cde11d248ca8bb052" + }, + { + "file": "lib/src/components/radio/t_radio_theme_data.dart", + "sha256": "8f188b5291acb706434a2bda57095276402377f768c8b70fb2813557f14b991d" + }, + { + "file": "lib/src/components/rate/t_rate.dart", + "sha256": "186a2d4d792c3c1dd6f4f476baff651c640c4309db2c2b0ff08593f517f87de5" + }, + { + "file": "lib/src/components/rate/t_rate_theme_data.dart", + "sha256": "edf4a823b99d493c461bac7b6fe99ffa654c05e02ba89679dc1e15d5db64b612" + }, + { + "file": "lib/src/components/refresh/t_pull_down_refresh.dart", + "sha256": "007c79896c2a2b768367b9dff972a6d30de3ef0438cf06bfef4c478acec80f74" + }, + { + "file": "lib/src/components/refresh/t_pull_down_refresh_controller.dart", + "sha256": "e0e9552f863c46815ee14675e9f26c2277fb246c1e26bd89f3e4143c81f7bbbb" + }, + { + "file": "lib/src/components/refresh/t_pull_down_refresh_texts.dart", + "sha256": "577ce6b831a12205e2b141471dd7dff8d4c93318bebf2e36e06eb0ca4a631a7f" + }, + { + "file": "lib/src/components/result/t_result.dart", + "sha256": "78be893b63731d0be35bdad8b1a625fd338a3c3513fc42fc2930c6a1a07c984a" + }, + { + "file": "lib/src/components/result/t_result_theme_data.dart", + "sha256": "e1eb3b53cec69c84a25fc14e3c90b00f6ff24eed0a298a7119c3ca3ba31cde8b" + }, + { + "file": "lib/src/components/search/t_search_bar.dart", + "sha256": "82ef124d6c94419e05cbd54aeb3f977a2320c7cecbf30554e236e4da0480c031" + }, + { + "file": "lib/src/components/search/t_search_bar_theme_data.dart", + "sha256": "f25e86a5669cc71bb3feccb9e1bd2dd40cb6323b39994c96b74f5bb39e52abee" + }, + { + "file": "lib/src/components/sidebar/t_sidebar.dart", + "sha256": "216f92edf3a94865d7c5975b8e54a7626455999de74ee151778b49a681a68a10" + }, + { + "file": "lib/src/components/sidebar/t_sidebar_item.dart", + "sha256": "ec4d1e773e677ba7307ac3d7f67db98bb6cc18684cce23df1fed1d46dd8823b1" + }, + { + "file": "lib/src/components/sidebar/t_sidebar_theme_data.dart", + "sha256": "ba41313c54134ed0e5b8e58b7c5e3423fe54ec4649aa19f8c016de00c860ec21" + }, + { + "file": "lib/src/components/sidebar/t_wrap_sidebar_item.dart", + "sha256": "c8afe24c65707b3c1acb79a0c1d91f08d0764f59f203b443ebc1bf8fe6fd11af" + }, + { + "file": "lib/src/components/skeleton/t_skeleton.dart", + "sha256": "263d2cfb9d2d7008acd59f161e84b0facdf5670eeb4458853e0cefb31089f377" + }, + { + "file": "lib/src/components/skeleton/t_skeleton_layout.dart", + "sha256": "cf2b697b3ad300bbc580ee1d05840504ec32668d083795b598cc488ee7601554" + }, + { + "file": "lib/src/components/skeleton/t_skeleton_theme_data.dart", + "sha256": "da5a0f765aed1fb34ee30cf61513cc950c5a6391eb428b6e0c4da815d11d312e" + }, + { + "file": "lib/src/components/slider/t_slider.dart", + "sha256": "1e5ccc7e1ff64e1ad2465a225c0e1a79aa5f55b60d0e577e0bc7178af1efd163" + }, + { + "file": "lib/src/components/slider/t_slider_theme.dart", + "sha256": "f994388adfaff57609d214478d93b7198194025b350f921a4bc81d9850678c67" + }, + { + "file": "lib/src/components/stepper/t_stepper.dart", + "sha256": "e0582b5f1d288333c33ac5f9e2bea28715096091a188e9d41c0277e282a67083" + }, + { + "file": "lib/src/components/stepper/t_stepper_defaults.dart", + "sha256": "a538967b6abba1080899c70cddc8f1cebb5fe3f6b4788c2de6b1ee3d3cb99558" + }, + { + "file": "lib/src/components/stepper/t_stepper_theme_data.dart", + "sha256": "abce20572ccf8e2828beeba558e6ba366820ccfe210e3926f63c328216b9a66e" + }, + { + "file": "lib/src/components/stepper/t_stepper_theme_interpolation.dart", + "sha256": "1decd5487909342c3baacb1e98efc46382cf9e8a7277948c12d4256f7874bf62" + }, + { + "file": "lib/src/components/stepper/t_stepper_types.dart", + "sha256": "feba5fbfe83c7b283da1fdf332156d086bd0f60c834453fbd54fe9bed85a79fb" + }, + { + "file": "lib/src/components/steps/t_steps.dart", + "sha256": "9d638edac67122bdee3937eadc92fc8d93087c3bf7689b22f243f38ab76e8aac" + }, + { + "file": "lib/src/components/steps/t_steps_horizontal.dart", + "sha256": "e1ba9a44db6b8772adc6e0b0d1a210242873353834125cded007e4e2fac716db" + }, + { + "file": "lib/src/components/steps/t_steps_horizontal_item.dart", + "sha256": "80c0bfccb2b2f7bd2b96fee0b639eb124441fd5d2d1e0a3bb461d146c9e505a6" + }, + { + "file": "lib/src/components/steps/t_steps_mode.dart", + "sha256": "f96975092611043583629bc5d790fd9f3e5d13ff169aac1a216c2925a961810f" + }, + { + "file": "lib/src/components/steps/t_steps_vertical.dart", + "sha256": "298c164b53a66b4bcc27d15b380ade52fb44bc2f4830628059cd83c8a6e7cb1c" + }, + { + "file": "lib/src/components/steps/t_steps_vertical_item.dart", + "sha256": "d101ec7d9ccf3ac0e557aa60b5e4fa32bf68f8594d2862a79e90e9332c0fc3c0" + }, + { + "file": "lib/src/components/swipe_cell/t_swipe_cell.dart", + "sha256": "151b03380c9e7eba1074cd984e0c173c7e4b8cf371fcec98155ef16c39ab7cff" + }, + { + "file": "lib/src/components/swipe_cell/t_swipe_cell_action.dart", + "sha256": "00bd8483f07454d1c6fbebd2b426c148ff6e40c9ea81504e6410d14f45f0eb01" + }, + { + "file": "lib/src/components/swipe_cell/t_swipe_cell_inherited.dart", + "sha256": "42b7417a77fa75282c05c7af10990db9981e87503abc91b84b68603b4ff9f3b1" + }, + { + "file": "lib/src/components/swipe_cell/t_swipe_cell_panel.dart", + "sha256": "2e60fb03f8e4ec818bdbabd98e9ec5f0af95715ac784381bb1a7840620600622" + }, + { + "file": "lib/src/components/swipe_cell/t_swipe_cell_theme_data.dart", + "sha256": "e37a83966081fbe016958c66aaa6bca266e5b03b401d7e0d54444e723ffaab49" + }, + { + "file": "lib/src/components/swiper/t_swiper.dart", + "sha256": "798d7713700ecaa94b448ebdbf4943807062b4579d327a91cd3ce594e6be1abc" + }, + { + "file": "lib/src/components/swiper/t_swiper_theme_data.dart", + "sha256": "16d92386a189a411d7a380ac5108b7f93d6fc42110260aaf47100a3e10f88f89" + }, + { + "file": "lib/src/components/swiper/t_swiper_types.dart", + "sha256": "a0658544128a021628cde6bdee28e9e9f93d791c039f6400b0b04f09294be5e4" + }, + { + "file": "lib/src/components/switch/t_cupertino_switch.dart", + "sha256": "80001f11e88b8c8131f754f023588d76973158a40d3bcaca4cada48c3e87f177" + }, + { + "file": "lib/src/components/switch/t_switch.dart", + "sha256": "ca46c242e3a309d30c688507805f34084d52395847f6ed5a400995fca00493cc" + }, + { + "file": "lib/src/components/switch/t_switch_resolve.dart", + "sha256": "b366ce7a8410446bb62714c8b7cde39974475bf3c45d4b64d9ff54f9fad5eacc" + }, + { + "file": "lib/src/components/switch/t_switch_theme_data.dart", + "sha256": "54bedc88c862aa9bd844108f3268203d0cc8be4d46756643e41645960b40e375" + }, + { + "file": "lib/src/components/switch/t_switch_types.dart", + "sha256": "48776a87e0bb52ad72f53ed6ae04474e8a1ddc98f23e71495feb0751fb80418d" + }, + { + "file": "lib/src/components/tabbar/t_tab_bar.dart", + "sha256": "864dfdc60346c9d518553361258851b07e943d167d9f5d20ea5cd67c0364d1c3" + }, + { + "file": "lib/src/components/tabbar/t_tab_bar_theme_data.dart", + "sha256": "ce398447092f2010ce32585969072449f1d20127fbf98cbbb2bb640f10774087" + }, + { + "file": "lib/src/components/table/t_table.dart", + "sha256": "c5589ce8cc0198af1be1a149c2711b28e0bbc2334e3fc4b776e9f0636a1589a7" + }, + { + "file": "lib/src/components/table/t_table_col.dart", + "sha256": "2d4a73d7c21f42e432cf3e8c22ee2ab2d861ef7458ab6ad31605a23217c70ead" + }, + { + "file": "lib/src/components/table/t_table_theme_data.dart", + "sha256": "1a7b081ca34ccbd28ed68375292bf2fd735d069c17ef52bc0fb27562d02628d6" + }, + { + "file": "lib/src/components/table/t_table_types.dart", + "sha256": "421e8c13cc6ec6ef27204ac17e3ccd7414648267e68fbb5c2c18ee40bf73b4ee" + }, + { + "file": "lib/src/components/tabs/t_horizontal_tab_bar.dart", + "sha256": "4bc61decb69e43b94a5b58cb434273ff8493947389d33c878d629e994f7b1c6a" + }, + { + "file": "lib/src/components/tabs/t_tab.dart", + "sha256": "73eaf5b11b8a48c7ab832ebab4fd73566a017a6d9f367ddcf1e99a0ed301a2ff" + }, + { + "file": "lib/src/components/tabs/t_tab_bar.dart", + "sha256": "ceea2da6332b886d416a5d664e1dd8fd088999a46d3588aa7098d2a676b822a9" + }, + { + "file": "lib/src/components/tabs/t_tab_bar_theme_data.dart", + "sha256": "b8834b984aa9c8be75882eb3518ecd0fb44cd60528bd9a5d42bd945cda55ba5c" + }, + { + "file": "lib/src/components/tabs/t_tab_bar_view.dart", + "sha256": "262d681558421d9693a71a589b3fa96bf32cb419558a8ea77c8000ff5bcec6ff" + }, + { + "file": "lib/src/components/tag/t_select_tag.dart", + "sha256": "5b8b82f610345dc9b6ec021b8de97d6cf69560795b3edd0619cf0e82bf9cafe4" + }, + { + "file": "lib/src/components/tag/t_tag.dart", + "sha256": "2d7bc17b3e2d56da4b4fdcf89080138c84842c5f1e6cc4759d674555441a12d5" + }, + { + "file": "lib/src/components/tag/t_tag_theme_data.dart", + "sha256": "992cfb7c8c78f0c0d05c954f707a6f982bdbdc1ed2b5ecaebf315810798616bf" + }, + { + "file": "lib/src/components/tag/t_tag_types.dart", + "sha256": "ce68263caea41285873253427d0158e1ce71a885e80645c5af1156f7a0a5e225" + }, + { + "file": "lib/src/components/text/t_font_loader.dart", + "sha256": "fca1fe8128238820b8ac4529e798a64065e5ee280523bdf3b91cfed393c4e845" + }, + { + "file": "lib/src/components/text/t_text.dart", + "sha256": "24d31259ae53929347f8e567fc9a255815844f5805b19daeea38124af1d748c9" + }, + { + "file": "lib/src/components/text/t_text_resolve.dart", + "sha256": "ec12723dfd4fdc6f4199d6a53e1819bc51b3c383b3f0caefaef99d2890721f5a" + }, + { + "file": "lib/src/components/text/t_text_style_scope.dart", + "sha256": "ba34f4411a6a3add8e7ad5b59e00b79ba38893deef34e360f162fefc7e74aadb" + }, + { + "file": "lib/src/components/text/t_text_styled.dart", + "sha256": "48dd1012f89e0fcd9d26242f3401f9db00debc28693c406261a1a150fe5eeb95" + }, + { + "file": "lib/src/components/text/t_text_theme_data.dart", + "sha256": "cd0a068507dbe383c6d1bfe8e45e079d75d846e3e840c81ba3e6cead4606bdb1" + }, + { + "file": "lib/src/components/textarea/t_textarea.dart", + "sha256": "71514bca99bb519ac717a06251cc49d81c9194e2301b00e86817703f3b5a479d" + }, + { + "file": "lib/src/components/time_counter/t_time_counter.dart", + "sha256": "304cbe0b7c084ff44f02a402067fd4f5460fc678f816656a9109ee6c4ac8eda4" + }, + { + "file": "lib/src/components/time_counter/t_time_counter_controller.dart", + "sha256": "61419d95bb649590492c3dc3d592dcef60c399af0cc7bb03b0c2d7fc26c11bb8" + }, + { + "file": "lib/src/components/time_counter/t_time_counter_style.dart", + "sha256": "96fc838fe5a5e176fb391145239284f95c547e67178d3a796756a6473ded9edd" + }, + { + "file": "lib/src/components/time_counter/t_time_counter_theme_data.dart", + "sha256": "622a4eea07f1a462182173136b9b2be504023b2db04ac8375ea64340c7501922" + }, + { + "file": "lib/src/components/time_counter/t_time_counter_types.dart", + "sha256": "9bfc7e5e372081380a80a14c20d3ab8d11439b838bdabd23c5e30aad39b34583" + }, + { + "file": "lib/src/components/toast/t_toast.dart", + "sha256": "a417162331b11a405f4abaef43282526c54651c49302cf8e97e743bed08a7ac2" + }, + { + "file": "lib/src/components/toast/t_toast_theme_data.dart", + "sha256": "d90a632873c2323cd1b24b8d65878daab42496fc6de5627b70c1f87e721a6431" + }, + { + "file": "lib/src/components/tree/t_tree_select.dart", + "sha256": "3e2b11ff4e13b761f3c86b7e1028f936fe35005c7df77e7f8ea5c6119bf9797b" + }, + { + "file": "lib/src/components/tree/t_tree_select_theme_data.dart", + "sha256": "6e64b7c2b77449613c5b351e807a3eb238ca5cf1227c01b25d4e428abec22ed6" + }, + { + "file": "lib/src/components/upload/t_upload.dart", + "sha256": "83d1ad81afd31fb25c75de51725b4f7d31e179f2a6debc794f660771bf0c0b12" + }, + { + "file": "lib/src/components/upload/t_upload_theme_data.dart", + "sha256": "6e518ccd0f1314011a51358c417f0a514b294174619fee7d4210e2007cf805f0" + }, + { + "file": "lib/src/components/upload/t_upload_types.dart", + "sha256": "82aeb54e6193b17f7856b5fc02127ac52ecacb90eeb0fe5b99497f3960ec993a" + }, + { + "file": "lib/src/theme/basic.dart", + "sha256": "82176cb7a416e2882fe22b4c9f3e011607a916345687986231759cb79f049250" + }, + { + "file": "lib/src/theme/resource_delegate.dart", + "sha256": "1ebd7bf58528f2a815efbc7adee8b207e4cc8f1a8af39e1c3790bec5933d7c78" + }, + { + "file": "lib/src/theme/t_colors.dart", + "sha256": "80aa53da0e06a60e845aac3eb00049cb7035c99741b76e0551efbb9438aadb94" + }, + { + "file": "lib/src/theme/t_component_theme_data.dart", + "sha256": "4f3252da9acdd54dc181716db277d2aeee409b3efea3d188d286029edae9125d" + }, + { + "file": "lib/src/theme/t_default_theme.dart", + "sha256": "743894c68e5877861c11e517d5836efe0253b25d3cc48bb2389fe9e126d8be36" + }, + { + "file": "lib/src/theme/t_font_family.dart", + "sha256": "1863ddb6674e70d23cd60247b0da03c5920da3cc0185c913c8b536d47edfef6b" + }, + { + "file": "lib/src/theme/t_fonts.dart", + "sha256": "4fff418e487039865e79e5481733dbf4f88db8697b783a69709389d79aec305f" + }, + { + "file": "lib/src/theme/t_internal_material.dart", + "sha256": "a6d6a6e1199e9e2ac145a85c38cace35326e2d7f5e6435f390011e85774bc530" + }, + { + "file": "lib/src/theme/t_radius.dart", + "sha256": "284cf6ff6a57b4f5b56d542f0f254ef4ee390307eb5a57a50fb6e23f4b7f4476" + }, + { + "file": "lib/src/theme/t_shadows.dart", + "sha256": "1b7486aa7a6f991b5f263f94af52d59a5814c87becccb2e24d76b8b7cf49a9f0" + }, + { + "file": "lib/src/theme/t_spacers.dart", + "sha256": "e133289a8df2d7f0fb7e35737152eecaa5c00b6432b207ee709083f4cd8caa31" + }, + { + "file": "lib/src/theme/t_theme.dart", + "sha256": "5a5e30e228609a97cf5a0a8132a8149e02c49ac41b590fad767f4d9c02cc41c9" + }, + { + "file": "lib/src/util/auto_size.dart", + "sha256": "92e8d364c9c679faa4b8c41b065e7fb30980a45a50009d49655a43ad12d250b9" + }, + { + "file": "lib/src/util/context_extension.dart", + "sha256": "5eb9eedbb49821651af98f582b056a6f18cd772626a78d8f0bba1f3b3662d65b" + }, + { + "file": "lib/src/util/iterable_ext.dart", + "sha256": "395f2dc4615f531604845c25faf1527f00ebb7081372ca2a629b18001a0149d3" + }, + { + "file": "lib/src/util/list_ext.dart", + "sha256": "9ae31f662e8c26195ee8821763e126ba05c90372b500be90c02d8dbac78fc5fb" + }, + { + "file": "lib/src/util/log.dart", + "sha256": "9dfe1251793a0b1825ac0e8490d0471dc3dcec272a631f865d7b2b68a4ceaca8" + }, + { + "file": "lib/src/util/map_ext.dart", + "sha256": "7f4971c1cc5ee9fa0fd94c1a0d414665c556866104d9c4d6b2c679168cfaf966" + }, + { + "file": "lib/src/util/platform_util.dart", + "sha256": "9203fe2d1a9ed9fed442cd7645089acfda3238e89b1ffd874b203525b92f3b1d" + }, + { + "file": "lib/src/util/string_util.dart", + "sha256": "332a04e28162425c7b3aa59cc1a733457ff0e47bfc80034945e18c454047e2ce" + }, + { + "file": "lib/src/util/t_toolbar_pressable.dart", + "sha256": "53b4d7fd26f6dc491b4db7684ffeac9720c42ff5bf02c361f9e9abecd8cda081" + }, + { + "file": "lib/src/util/throttle.dart", + "sha256": "24118fa46782ba8c206dc1c98c12fdd58c9544a7c296503b4fa276f03edf7c05" + }, + { + "file": "lib/src/util/version_util.dart", + "sha256": "6d12fa479de56b37322583aa74c4c1cb37503a40ef6dddfa9d3a5bbd51dd4c68" + }, + { + "file": "lib/tdesign_flutter.dart", + "sha256": "20d895fbcb470e4a0d093319fef668fb46eb98e8acc186758d4ffeed00754cfa" + }, + { + "file": "pubspec.yaml", + "sha256": "bed96a58589070205525cdc9a026d5d55eb04962f7016958c34ea7f765554202" + }, + { + "file": "test/components/avatar/t_avatar_test.dart", + "sha256": "3b9e7a0337c2d90004a601b9355c1f7354225cf7ab588b6d60821d28d4229398" + }, + { + "file": "test/components/button/t_button_test.dart", + "sha256": "561980979fb140ef6e211c361ab39de59745139777682db2d5c90d1f54089716" + }, + { + "file": "test/components/button/t_button_theme_priority_test.dart", + "sha256": "3c5bb3437dbbfbbebce899d38a5b2385d4c327f64679ecd50991aadb79e13ee9" + }, + { + "file": "test/components/button/t_button_theme_test.dart", + "sha256": "a0b9d187d0c927c8f72665c334e4682a2550c20c92c1ee06c5b9d5e9262f7bf9" + }, + { + "file": "test/components/button/t_button_widget_test.dart", + "sha256": "14cc23c989161d9a14eab19276e77259a79e87ce812c5e17bde6213d8a98a252" + }, + { + "file": "test/components/empty/t_empty_test.dart", + "sha256": "4e523e8bc24ffc29dfd94682fdd982101b78bfb23379d5c8b5e8e0573010c680" + }, + { + "file": "test/components/input/t_input_test.dart", + "sha256": "89cf7b06da4fed876bb262239e90a96ba0a0925690e63a45e0423dc72e1f1c33" + }, + { + "file": "test/components/input/t_input_theme_test.dart", + "sha256": "6b6ea3128760632295eca295c519f024bd7d0e771149ac5db5510d5d4810a429" + }, + { + "file": "test/components/link/t_link_resolve_test.dart", + "sha256": "518a08ef4051acddacc1debe200af8569d58b747a42d41728775f3baf65ab401" + }, + { + "file": "test/components/link/t_link_test.dart", + "sha256": "5f0a867c04df0d6065d9f08812affdc29debb79ced5bd0f8302dba4e2a173371" + }, + { + "file": "test/components/link/t_link_theme_test.dart", + "sha256": "2914f838c499bf4abd1decc479a1405bffc282b5219b0723de91f1b80db4030d" + }, + { + "file": "test/components/link/t_link_widget_test.dart", + "sha256": "5dd427e0cf57c73af81674b406e4b0490f7791875eba75220c694af876d38202" + }, + { + "file": "test/components/progress/t_progress_test.dart", + "sha256": "61e834c2320e54faf21b36215be791823d8113a974e5a2ab5876491e65b5d0b3" + }, + { + "file": "test/components/switch/t_cupertino_switch_test.dart", + "sha256": "1af92430111f1dff0d062064e718bf4ad1807a8a412880bf146b099987fb2844" + }, + { + "file": "test/components/switch/t_switch_test.dart", + "sha256": "754d70d6b933b1069928802a85aaff30f30ded042bf92e417477175ae154fb26" + }, + { + "file": "test/components/switch/t_switch_typography_test.dart", + "sha256": "88a16e42c497cf02de643b3a82b308033973c9264108ea6b80f99fc6aea26823" + }, + { + "file": "test/support/token_consumption_evidence.dart", + "sha256": "02bc17e5a852df363a7791e2eb05295a54ceca63eef414c14035dede753ba815" + }, + { + "file": "tool/component_test_manifest.dart", + "sha256": "0d1eba025f0f62486d9b681d66a11b04dd2993bbb40119011d868d608faaceeb" + } + ], + "lockSha256": "72ed71235498ba5e0b54fa7cafd55220347a0519feeb05b7b9221a254baa0cd3" + }, + "targetObservations": [ + { + "name": "buttonDefaultActiveBgColor", + "scenario": "dark/custom=false/fill/defaultTheme/pressed", + "actual": "#ff4b4b4b", + "expected": "#ff4b4b4b", + "matches": true, + "enforced": false + }, + { + "name": "buttonDefaultActiveBgColor", + "scenario": "dark/custom=true/fill/defaultTheme/pressed", + "actual": "#ff2c214d", + "expected": "#ff2c214d", + "matches": true, + "enforced": false + }, + { + "name": "buttonDefaultActiveBgColor", + "scenario": "light/custom=false/fill/defaultTheme/pressed", + "actual": "#ffa6a6a6", + "expected": "#ffa6a6a6", + "matches": true, + "enforced": false + }, + { + "name": "buttonDefaultActiveBgColor", + "scenario": "light/custom=true/fill/defaultTheme/pressed", + "actual": "#ff2c214d", + "expected": "#ff2c214d", + "matches": true, + "enforced": false + }, + { + "name": "buttonLightActiveBgColor", + "scenario": "dark/custom=false/fill/light/pressed", + "actual": "#ff173463", + "expected": "#ff173463", + "matches": true, + "enforced": false + }, + { + "name": "buttonLightActiveBgColor", + "scenario": "dark/custom=true/fill/light/pressed", + "actual": "#ff260f23", + "expected": "#ff260f23", + "matches": true, + "enforced": false + }, + { + "name": "buttonLightActiveBgColor", + "scenario": "light/custom=false/fill/light/pressed", + "actual": "#ffd9e1ff", + "expected": "#ffd9e1ff", + "matches": true, + "enforced": false + }, + { + "name": "buttonLightActiveBgColor", + "scenario": "light/custom=true/fill/light/pressed", + "actual": "#ff260f23", + "expected": "#ff260f23", + "matches": true, + "enforced": false + }, + { + "name": "inputBorderColor", + "scenario": "dark/custom=false/enabled=true", + "actual": "#ff383838", + "expected": "#ff383838", + "matches": true, + "enforced": false + }, + { + "name": "inputBorderColor", + "scenario": "dark/custom=true/enabled=true", + "actual": "#ff323377", + "expected": "#ff323377", + "matches": true, + "enforced": false + }, + { + "name": "inputBorderColor", + "scenario": "light/custom=false/enabled=true", + "actual": "#ffe8e8e8", + "expected": "#ffe8e8e8", + "matches": true, + "enforced": false + }, + { + "name": "inputBorderColor", + "scenario": "light/custom=true/enabled=true", + "actual": "#ff323377", + "expected": "#ff323377", + "matches": true, + "enforced": false + }, + { + "name": "switchLabelColor", + "scenario": "dark/custom=false/TSwitchVariant.icon/value=false", + "actual": "#ff383838", + "expected": "#ff383838", + "matches": true, + "enforced": false + }, + { + "name": "switchLabelColor", + "scenario": "dark/custom=false/TSwitchVariant.text/value=false", + "actual": "#ff383838", + "expected": "#ff383838", + "matches": true, + "enforced": false + }, + { + "name": "switchLabelColor", + "scenario": "dark/custom=true/TSwitchVariant.icon/value=false", + "actual": "#ff302d69", + "expected": "#ff302d69", + "matches": true, + "enforced": false + }, + { + "name": "switchLabelColor", + "scenario": "dark/custom=true/TSwitchVariant.text/value=false", + "actual": "#ff302d69", + "expected": "#ff302d69", + "matches": true, + "enforced": false + }, + { + "name": "switchLabelColor", + "scenario": "light/custom=false/TSwitchVariant.icon/value=false", + "actual": "#ffdcdcdc", + "expected": "#ffdcdcdc", + "matches": true, + "enforced": false + }, + { + "name": "switchLabelColor", + "scenario": "light/custom=false/TSwitchVariant.text/value=false", + "actual": "#ffdcdcdc", + "expected": "#ffdcdcdc", + "matches": true, + "enforced": false + }, + { + "name": "switchLabelColor", + "scenario": "light/custom=true/TSwitchVariant.icon/value=false", + "actual": "#ff302d69", + "expected": "#ff302d69", + "matches": true, + "enforced": false + }, + { + "name": "switchLabelColor", + "scenario": "light/custom=true/TSwitchVariant.text/value=false", + "actual": "#ff302d69", + "expected": "#ff302d69", + "matches": true, + "enforced": false + } + ], + "limitations": [ + "Not a full regression of the prototype", + "Low SDK prototype not run", + "Linux Golden and design/host verification remain pending" + ] + }, + "rows": [ + { + "name": "avatarBorderColor", + "disposition": "existing-contract-verified-visual-pending", + "action": "保留当前Flutter契约,不按旧CSS变量默认或覆盖能力修改生产实现;补当前契约的实际Widget断言。", + "contractReferences": [ + { + "file": "tdesign-component/lib/src/components/avatar/t_avatar_theme_data.dart", + "quote": "头像组成员描边颜色;未设置时使用 `bgColorContainer` Token。", + "line": 84, + "sha256": "9dd201ea5e8cd4d2fec16b41f43baf3b364da03c8a751042768c9cc33ade1820" + }, + { + "file": "specs/034-avatar-design-alignment/acceptance.md", + "quote": "明暗 Golden 中本次变更的头像组裁剪、边框与 `+5` 溢出文案符合设计稿", + "line": 33, + "sha256": "f282a8d9f1c9b2c1f08b232a4f16c94dc81764b1eb7108343b4cf3718f3ced50" + } + ], + "validation": "保留旧目标原始比较;新增contract/场景必须enforce=true且匹配,并覆盖浅/暗及自定义全局Token。", + "beforeExamples": [ + { + "name": "avatarBorderColor", + "scenario": "dark/custom=false/large", + "actual": "#ff242424", + "expected": "#ffffffff", + "matches": false, + "enforced": false + }, + { + "name": "avatarBorderColor", + "scenario": "dark/custom=false/large", + "actual": "#ff242424", + "expected": "#ffffffff", + "matches": false, + "enforced": false + }, + { + "name": "avatarBorderColor", + "scenario": "dark/custom=false/medium", + "actual": "#ff242424", + "expected": "#ffffffff", + "matches": false, + "enforced": false + }, + { + "name": "avatarBorderColor", + "scenario": "dark/custom=false/medium", + "actual": "#ff242424", + "expected": "#ffffffff", + "matches": false, + "enforced": false + }, + { + "name": "avatarBorderColor", + "scenario": "dark/custom=false/small", + "actual": "#ff242424", + "expected": "#ffffffff", + "matches": false, + "enforced": false + }, + { + "name": "avatarBorderColor", + "scenario": "dark/custom=false/small", + "actual": "#ff242424", + "expected": "#ffffffff", + "matches": false, + "enforced": false + }, + { + "name": "avatarBorderColor", + "scenario": "dark/custom=true/large", + "actual": "#ff2e275b", + "expected": "#ffffffff", + "matches": false, + "enforced": false + }, + { + "name": "avatarBorderColor", + "scenario": "dark/custom=true/large", + "actual": "#ff2e275b", + "expected": "#ffffffff", + "matches": false, + "enforced": false + }, + { + "name": "avatarBorderColor", + "scenario": "dark/custom=true/medium", + "actual": "#ff2e275b", + "expected": "#ffffffff", + "matches": false, + "enforced": false + }, + { + "name": "avatarBorderColor", + "scenario": "dark/custom=true/medium", + "actual": "#ff2e275b", + "expected": "#ffffffff", + "matches": false, + "enforced": false + }, + { + "name": "avatarBorderColor", + "scenario": "dark/custom=true/small", + "actual": "#ff2e275b", + "expected": "#ffffffff", + "matches": false, + "enforced": false + }, + { + "name": "avatarBorderColor", + "scenario": "dark/custom=true/small", + "actual": "#ff2e275b", + "expected": "#ffffffff", + "matches": false, + "enforced": false + }, + { + "name": "avatarBorderColor", + "scenario": "light/custom=true/large", + "actual": "#ff2e275b", + "expected": "#ffffffff", + "matches": false, + "enforced": false + }, + { + "name": "avatarBorderColor", + "scenario": "light/custom=true/large", + "actual": "#ff2e275b", + "expected": "#ffffffff", + "matches": false, + "enforced": false + }, + { + "name": "avatarBorderColor", + "scenario": "light/custom=true/medium", + "actual": "#ff2e275b", + "expected": "#ffffffff", + "matches": false, + "enforced": false + }, + { + "name": "avatarBorderColor", + "scenario": "light/custom=true/medium", + "actual": "#ff2e275b", + "expected": "#ffffffff", + "matches": false, + "enforced": false + }, + { + "name": "avatarBorderColor", + "scenario": "light/custom=true/small", + "actual": "#ff2e275b", + "expected": "#ffffffff", + "matches": false, + "enforced": false + }, + { + "name": "avatarBorderColor", + "scenario": "light/custom=true/small", + "actual": "#ff2e275b", + "expected": "#ffffffff", + "matches": false, + "enforced": false + } + ], + "afterRawComparisons": [ + { + "name": "avatarBorderColor", + "scenario": "dark/custom=false/large", + "actual": "#ff242424", + "expected": "#ffffffff", + "matches": false, + "enforced": false + }, + { + "name": "avatarBorderColor", + "scenario": "dark/custom=false/large", + "actual": "#ff242424", + "expected": "#ffffffff", + "matches": false, + "enforced": false + }, + { + "name": "avatarBorderColor", + "scenario": "dark/custom=false/medium", + "actual": "#ff242424", + "expected": "#ffffffff", + "matches": false, + "enforced": false + }, + { + "name": "avatarBorderColor", + "scenario": "dark/custom=false/medium", + "actual": "#ff242424", + "expected": "#ffffffff", + "matches": false, + "enforced": false + }, + { + "name": "avatarBorderColor", + "scenario": "dark/custom=false/small", + "actual": "#ff242424", + "expected": "#ffffffff", + "matches": false, + "enforced": false + }, + { + "name": "avatarBorderColor", + "scenario": "dark/custom=false/small", + "actual": "#ff242424", + "expected": "#ffffffff", + "matches": false, + "enforced": false + }, + { + "name": "avatarBorderColor", + "scenario": "dark/custom=true/large", + "actual": "#ff2e275b", + "expected": "#ffffffff", + "matches": false, + "enforced": false + }, + { + "name": "avatarBorderColor", + "scenario": "dark/custom=true/large", + "actual": "#ff2e275b", + "expected": "#ffffffff", + "matches": false, + "enforced": false + }, + { + "name": "avatarBorderColor", + "scenario": "dark/custom=true/medium", + "actual": "#ff2e275b", + "expected": "#ffffffff", + "matches": false, + "enforced": false + }, + { + "name": "avatarBorderColor", + "scenario": "dark/custom=true/medium", + "actual": "#ff2e275b", + "expected": "#ffffffff", + "matches": false, + "enforced": false + }, + { + "name": "avatarBorderColor", + "scenario": "dark/custom=true/small", + "actual": "#ff2e275b", + "expected": "#ffffffff", + "matches": false, + "enforced": false + }, + { + "name": "avatarBorderColor", + "scenario": "dark/custom=true/small", + "actual": "#ff2e275b", + "expected": "#ffffffff", + "matches": false, + "enforced": false + }, + { + "name": "avatarBorderColor", + "scenario": "light/custom=false/large", + "actual": "#ffffffff", + "expected": "#ffffffff", + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderColor", + "scenario": "light/custom=false/large", + "actual": "#ffffffff", + "expected": "#ffffffff", + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderColor", + "scenario": "light/custom=false/medium", + "actual": "#ffffffff", + "expected": "#ffffffff", + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderColor", + "scenario": "light/custom=false/medium", + "actual": "#ffffffff", + "expected": "#ffffffff", + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderColor", + "scenario": "light/custom=false/small", + "actual": "#ffffffff", + "expected": "#ffffffff", + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderColor", + "scenario": "light/custom=false/small", + "actual": "#ffffffff", + "expected": "#ffffffff", + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderColor", + "scenario": "light/custom=true/large", + "actual": "#ff2e275b", + "expected": "#ffffffff", + "matches": false, + "enforced": false + }, + { + "name": "avatarBorderColor", + "scenario": "light/custom=true/large", + "actual": "#ff2e275b", + "expected": "#ffffffff", + "matches": false, + "enforced": false + }, + { + "name": "avatarBorderColor", + "scenario": "light/custom=true/medium", + "actual": "#ff2e275b", + "expected": "#ffffffff", + "matches": false, + "enforced": false + }, + { + "name": "avatarBorderColor", + "scenario": "light/custom=true/medium", + "actual": "#ff2e275b", + "expected": "#ffffffff", + "matches": false, + "enforced": false + }, + { + "name": "avatarBorderColor", + "scenario": "light/custom=true/small", + "actual": "#ff2e275b", + "expected": "#ffffffff", + "matches": false, + "enforced": false + }, + { + "name": "avatarBorderColor", + "scenario": "light/custom=true/small", + "actual": "#ff2e275b", + "expected": "#ffffffff", + "matches": false, + "enforced": false + } + ], + "currentContractWitnesses": [ + { + "name": "avatarBorderColor", + "scenario": "contract/dark/custom=false/large/group-border", + "actual": "#ff242424", + "expected": "#ff242424", + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderColor", + "scenario": "contract/dark/custom=false/large/group-border", + "actual": "#ff242424", + "expected": "#ff242424", + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderColor", + "scenario": "contract/dark/custom=false/medium/group-border", + "actual": "#ff242424", + "expected": "#ff242424", + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderColor", + "scenario": "contract/dark/custom=false/medium/group-border", + "actual": "#ff242424", + "expected": "#ff242424", + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderColor", + "scenario": "contract/dark/custom=false/small/group-border", + "actual": "#ff242424", + "expected": "#ff242424", + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderColor", + "scenario": "contract/dark/custom=false/small/group-border", + "actual": "#ff242424", + "expected": "#ff242424", + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderColor", + "scenario": "contract/dark/custom=true/large/group-border", + "actual": "#ff2e275b", + "expected": "#ff2e275b", + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderColor", + "scenario": "contract/dark/custom=true/large/group-border", + "actual": "#ff2e275b", + "expected": "#ff2e275b", + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderColor", + "scenario": "contract/dark/custom=true/medium/group-border", + "actual": "#ff2e275b", + "expected": "#ff2e275b", + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderColor", + "scenario": "contract/dark/custom=true/medium/group-border", + "actual": "#ff2e275b", + "expected": "#ff2e275b", + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderColor", + "scenario": "contract/dark/custom=true/small/group-border", + "actual": "#ff2e275b", + "expected": "#ff2e275b", + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderColor", + "scenario": "contract/dark/custom=true/small/group-border", + "actual": "#ff2e275b", + "expected": "#ff2e275b", + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderColor", + "scenario": "contract/light/custom=false/large/group-border", + "actual": "#ffffffff", + "expected": "#ffffffff", + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderColor", + "scenario": "contract/light/custom=false/large/group-border", + "actual": "#ffffffff", + "expected": "#ffffffff", + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderColor", + "scenario": "contract/light/custom=false/medium/group-border", + "actual": "#ffffffff", + "expected": "#ffffffff", + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderColor", + "scenario": "contract/light/custom=false/medium/group-border", + "actual": "#ffffffff", + "expected": "#ffffffff", + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderColor", + "scenario": "contract/light/custom=false/small/group-border", + "actual": "#ffffffff", + "expected": "#ffffffff", + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderColor", + "scenario": "contract/light/custom=false/small/group-border", + "actual": "#ffffffff", + "expected": "#ffffffff", + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderColor", + "scenario": "contract/light/custom=true/large/group-border", + "actual": "#ff2e275b", + "expected": "#ff2e275b", + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderColor", + "scenario": "contract/light/custom=true/large/group-border", + "actual": "#ff2e275b", + "expected": "#ff2e275b", + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderColor", + "scenario": "contract/light/custom=true/medium/group-border", + "actual": "#ff2e275b", + "expected": "#ff2e275b", + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderColor", + "scenario": "contract/light/custom=true/medium/group-border", + "actual": "#ff2e275b", + "expected": "#ff2e275b", + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderColor", + "scenario": "contract/light/custom=true/small/group-border", + "actual": "#ff2e275b", + "expected": "#ff2e275b", + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderColor", + "scenario": "contract/light/custom=true/small/group-border", + "actual": "#ff2e275b", + "expected": "#ff2e275b", + "matches": true, + "enforced": true + } + ], + "runtimeResolved": true, + "finalPaintVerified": false + }, + { + "name": "avatarIconSmallFontSize", + "disposition": "existing-contract-verified-visual-pending", + "action": "保留当前Flutter契约,不按旧CSS变量默认或覆盖能力修改生产实现;补当前契约的实际Widget断言。", + "contractReferences": [ + { + "file": "tdesign-component/lib/src/components/avatar/t_avatar_theme_data.dart", + "quote": "默认图标大小;未设置时小、中、大尺寸分别为 20、24、32 逻辑像素。", + "line": 62, + "sha256": "9dd201ea5e8cd4d2fec16b41f43baf3b364da03c8a751042768c9cc33ade1820" + } + ], + "validation": "保留旧目标原始比较;新增contract/场景必须enforce=true且匹配,并覆盖浅/暗及自定义全局Token。", + "beforeExamples": [ + { + "name": "avatarIconSmallFontSize", + "scenario": "dark/custom=true/small", + "actual": 20, + "expected": 31, + "matches": false, + "enforced": false + }, + { + "name": "avatarIconSmallFontSize", + "scenario": "light/custom=true/small", + "actual": 20, + "expected": 31, + "matches": false, + "enforced": false + } + ], + "afterRawComparisons": [ + { + "name": "avatarIconSmallFontSize", + "scenario": "dark/custom=false/small", + "actual": 20, + "expected": 20, + "matches": true, + "enforced": true + }, + { + "name": "avatarIconSmallFontSize", + "scenario": "dark/custom=true/small", + "actual": 20, + "expected": 31, + "matches": false, + "enforced": false + }, + { + "name": "avatarIconSmallFontSize", + "scenario": "light/custom=false/small", + "actual": 20, + "expected": 20, + "matches": true, + "enforced": true + }, + { + "name": "avatarIconSmallFontSize", + "scenario": "light/custom=true/small", + "actual": 20, + "expected": 31, + "matches": false, + "enforced": false + } + ], + "currentContractWitnesses": [ + { + "name": "avatarIconSmallFontSize", + "scenario": "contract/dark/custom=false/small/icon-preset", + "actual": 20, + "expected": 20, + "matches": true, + "enforced": true + }, + { + "name": "avatarIconSmallFontSize", + "scenario": "contract/dark/custom=true/small/icon-preset", + "actual": 20, + "expected": 20, + "matches": true, + "enforced": true + }, + { + "name": "avatarIconSmallFontSize", + "scenario": "contract/light/custom=false/small/icon-preset", + "actual": 20, + "expected": 20, + "matches": true, + "enforced": true + }, + { + "name": "avatarIconSmallFontSize", + "scenario": "contract/light/custom=true/small/icon-preset", + "actual": 20, + "expected": 20, + "matches": true, + "enforced": true + } + ], + "runtimeResolved": true, + "finalPaintVerified": false + }, + { + "name": "avatarTextLargeFontSize", + "disposition": "existing-contract-verified-visual-pending", + "action": "保留当前Flutter契约,不按旧CSS变量默认或覆盖能力修改生产实现;补当前契约的实际Widget断言。", + "contractReferences": [ + { + "file": "specs/048-component-token-theme-ownership/spec.md", + "quote": "字符头像仍按 `size` 使用内置字号与字重", + "line": 51, + "sha256": "73bf3477f46c61d458ee6634b89b7ad7be519d5ddd5994b61786389bac1b4e6e" + }, + { + "file": "specs/034-avatar-design-alignment/spec.md", + "quote": "字符头像按大、中、小尺寸默认使用 20、16、14 字号和 Semibold 字重。", + "line": 36, + "sha256": "064012ac000ff5a7a362fe431726e0b60a973bc27849bc6c77ab404ad2a3ad73" + } + ], + "validation": "保留旧目标原始比较;新增contract/场景必须enforce=true且匹配,并覆盖浅/暗及自定义全局Token。", + "beforeExamples": [ + { + "name": "avatarTextLargeFontSize", + "scenario": "dark/custom=true/large", + "actual": 20, + "expected": 31, + "matches": false, + "enforced": false + }, + { + "name": "avatarTextLargeFontSize", + "scenario": "light/custom=true/large", + "actual": 20, + "expected": 31, + "matches": false, + "enforced": false + } + ], + "afterRawComparisons": [ + { + "name": "avatarTextLargeFontSize", + "scenario": "dark/custom=false/large", + "actual": 20, + "expected": 20, + "matches": true, + "enforced": true + }, + { + "name": "avatarTextLargeFontSize", + "scenario": "dark/custom=true/large", + "actual": 20, + "expected": 31, + "matches": false, + "enforced": false + }, + { + "name": "avatarTextLargeFontSize", + "scenario": "light/custom=false/large", + "actual": 20, + "expected": 20, + "matches": true, + "enforced": true + }, + { + "name": "avatarTextLargeFontSize", + "scenario": "light/custom=true/large", + "actual": 20, + "expected": 31, + "matches": false, + "enforced": false + } + ], + "currentContractWitnesses": [ + { + "name": "avatarTextLargeFontSize", + "scenario": "contract/dark/custom=false/large/text-preset", + "actual": 20, + "expected": 20, + "matches": true, + "enforced": true + }, + { + "name": "avatarTextLargeFontSize", + "scenario": "contract/dark/custom=true/large/text-preset", + "actual": 20, + "expected": 20, + "matches": true, + "enforced": true + }, + { + "name": "avatarTextLargeFontSize", + "scenario": "contract/light/custom=false/large/text-preset", + "actual": 20, + "expected": 20, + "matches": true, + "enforced": true + }, + { + "name": "avatarTextLargeFontSize", + "scenario": "contract/light/custom=true/large/text-preset", + "actual": 20, + "expected": 20, + "matches": true, + "enforced": true + } + ], + "runtimeResolved": true, + "finalPaintVerified": false + }, + { + "name": "avatarTextMediumFontSize", + "disposition": "existing-contract-verified-visual-pending", + "action": "保留当前Flutter契约,不按旧CSS变量默认或覆盖能力修改生产实现;补当前契约的实际Widget断言。", + "contractReferences": [ + { + "file": "specs/048-component-token-theme-ownership/spec.md", + "quote": "字符头像仍按 `size` 使用内置字号与字重", + "line": 51, + "sha256": "73bf3477f46c61d458ee6634b89b7ad7be519d5ddd5994b61786389bac1b4e6e" + }, + { + "file": "specs/034-avatar-design-alignment/spec.md", + "quote": "字符头像按大、中、小尺寸默认使用 20、16、14 字号和 Semibold 字重。", + "line": 36, + "sha256": "064012ac000ff5a7a362fe431726e0b60a973bc27849bc6c77ab404ad2a3ad73" + } + ], + "validation": "保留旧目标原始比较;新增contract/场景必须enforce=true且匹配,并覆盖浅/暗及自定义全局Token。", + "beforeExamples": [ + { + "name": "avatarTextMediumFontSize", + "scenario": "dark/custom=true/medium", + "actual": 16, + "expected": 21, + "matches": false, + "enforced": false + }, + { + "name": "avatarTextMediumFontSize", + "scenario": "light/custom=true/medium", + "actual": 16, + "expected": 21, + "matches": false, + "enforced": false + } + ], + "afterRawComparisons": [ + { + "name": "avatarTextMediumFontSize", + "scenario": "dark/custom=false/medium", + "actual": 16, + "expected": 16, + "matches": true, + "enforced": true + }, + { + "name": "avatarTextMediumFontSize", + "scenario": "dark/custom=true/medium", + "actual": 16, + "expected": 21, + "matches": false, + "enforced": false + }, + { + "name": "avatarTextMediumFontSize", + "scenario": "light/custom=false/medium", + "actual": 16, + "expected": 16, + "matches": true, + "enforced": true + }, + { + "name": "avatarTextMediumFontSize", + "scenario": "light/custom=true/medium", + "actual": 16, + "expected": 21, + "matches": false, + "enforced": false + } + ], + "currentContractWitnesses": [ + { + "name": "avatarTextMediumFontSize", + "scenario": "contract/dark/custom=false/medium/text-preset", + "actual": 16, + "expected": 16, + "matches": true, + "enforced": true + }, + { + "name": "avatarTextMediumFontSize", + "scenario": "contract/dark/custom=true/medium/text-preset", + "actual": 16, + "expected": 16, + "matches": true, + "enforced": true + }, + { + "name": "avatarTextMediumFontSize", + "scenario": "contract/light/custom=false/medium/text-preset", + "actual": 16, + "expected": 16, + "matches": true, + "enforced": true + }, + { + "name": "avatarTextMediumFontSize", + "scenario": "contract/light/custom=true/medium/text-preset", + "actual": 16, + "expected": 16, + "matches": true, + "enforced": true + } + ], + "runtimeResolved": true, + "finalPaintVerified": false + }, + { + "name": "avatarTextSmallFontSize", + "disposition": "existing-contract-verified-visual-pending", + "action": "保留当前Flutter契约,不按旧CSS变量默认或覆盖能力修改生产实现;补当前契约的实际Widget断言。", + "contractReferences": [ + { + "file": "specs/048-component-token-theme-ownership/spec.md", + "quote": "字符头像仍按 `size` 使用内置字号与字重", + "line": 51, + "sha256": "73bf3477f46c61d458ee6634b89b7ad7be519d5ddd5994b61786389bac1b4e6e" + }, + { + "file": "specs/034-avatar-design-alignment/spec.md", + "quote": "字符头像按大、中、小尺寸默认使用 20、16、14 字号和 Semibold 字重。", + "line": 36, + "sha256": "064012ac000ff5a7a362fe431726e0b60a973bc27849bc6c77ab404ad2a3ad73" + } + ], + "validation": "保留旧目标原始比较;新增contract/场景必须enforce=true且匹配,并覆盖浅/暗及自定义全局Token。", + "beforeExamples": [ + { + "name": "avatarTextSmallFontSize", + "scenario": "dark/custom=true/small", + "actual": 14, + "expected": 18, + "matches": false, + "enforced": false + }, + { + "name": "avatarTextSmallFontSize", + "scenario": "light/custom=true/small", + "actual": 14, + "expected": 18, + "matches": false, + "enforced": false + } + ], + "afterRawComparisons": [ + { + "name": "avatarTextSmallFontSize", + "scenario": "dark/custom=false/small", + "actual": 14, + "expected": 14, + "matches": true, + "enforced": true + }, + { + "name": "avatarTextSmallFontSize", + "scenario": "dark/custom=true/small", + "actual": 14, + "expected": 18, + "matches": false, + "enforced": false + }, + { + "name": "avatarTextSmallFontSize", + "scenario": "light/custom=false/small", + "actual": 14, + "expected": 14, + "matches": true, + "enforced": true + }, + { + "name": "avatarTextSmallFontSize", + "scenario": "light/custom=true/small", + "actual": 14, + "expected": 18, + "matches": false, + "enforced": false + } + ], + "currentContractWitnesses": [ + { + "name": "avatarTextSmallFontSize", + "scenario": "contract/dark/custom=false/small/text-preset", + "actual": 14, + "expected": 14, + "matches": true, + "enforced": true + }, + { + "name": "avatarTextSmallFontSize", + "scenario": "contract/dark/custom=true/small/text-preset", + "actual": 14, + "expected": 14, + "matches": true, + "enforced": true + }, + { + "name": "avatarTextSmallFontSize", + "scenario": "contract/light/custom=false/small/text-preset", + "actual": 14, + "expected": 14, + "matches": true, + "enforced": true + }, + { + "name": "avatarTextSmallFontSize", + "scenario": "contract/light/custom=true/small/text-preset", + "actual": 14, + "expected": 14, + "matches": true, + "enforced": true + } + ], + "runtimeResolved": true, + "finalPaintVerified": false + }, + { + "name": "buttonBorderWidth", + "disposition": "platform-geometry-plan-pending", + "action": "先在375宽目标小程序宿主记录button及::after的有效width/height、border-width、transform和transform-origin;连同基础库/OS/DPR存档,再裁定Flutter 1dp是否等效。", + "risk": "若存在200%伪元素和scale(0.5),4rpx在375宽下为2dp再缩至1dp;这是条件推导,不是已取得的宿主事实。没有缩放时才应按2dp讨论。", + "validation": "DPR2/3及浅/暗outline/ghost实际描边与边框盒;固定viewport和来源版本。不得由源码字面值直接改成2dp。", + "contractReferences": [], + "beforeExamples": [], + "afterRawComparisons": [ + { + "name": "buttonBorderWidth", + "scenario": "dark/custom=false/outline/danger/disabled", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "dark/custom=false/outline/danger/idle", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "dark/custom=false/outline/danger/pressed", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "dark/custom=false/outline/defaultTheme/disabled", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "dark/custom=false/outline/defaultTheme/idle", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "dark/custom=false/outline/defaultTheme/pressed", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "dark/custom=false/outline/light/disabled", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "dark/custom=false/outline/light/idle", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "dark/custom=false/outline/light/pressed", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "dark/custom=false/outline/primary/disabled", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "dark/custom=false/outline/primary/idle", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "dark/custom=false/outline/primary/pressed", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "dark/custom=true/outline/danger/disabled", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "dark/custom=true/outline/danger/idle", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "dark/custom=true/outline/danger/pressed", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "dark/custom=true/outline/defaultTheme/disabled", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "dark/custom=true/outline/defaultTheme/idle", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "dark/custom=true/outline/defaultTheme/pressed", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "dark/custom=true/outline/light/disabled", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "dark/custom=true/outline/light/idle", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "dark/custom=true/outline/light/pressed", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "dark/custom=true/outline/primary/disabled", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "dark/custom=true/outline/primary/idle", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "dark/custom=true/outline/primary/pressed", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "light/custom=false/outline/danger/disabled", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "light/custom=false/outline/danger/idle", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "light/custom=false/outline/danger/pressed", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "light/custom=false/outline/defaultTheme/disabled", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "light/custom=false/outline/defaultTheme/idle", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "light/custom=false/outline/defaultTheme/pressed", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "light/custom=false/outline/light/disabled", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "light/custom=false/outline/light/idle", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "light/custom=false/outline/light/pressed", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "light/custom=false/outline/primary/disabled", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "light/custom=false/outline/primary/idle", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "light/custom=false/outline/primary/pressed", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "light/custom=true/outline/danger/disabled", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "light/custom=true/outline/danger/idle", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "light/custom=true/outline/danger/pressed", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "light/custom=true/outline/defaultTheme/disabled", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "light/custom=true/outline/defaultTheme/idle", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "light/custom=true/outline/defaultTheme/pressed", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "light/custom=true/outline/light/disabled", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "light/custom=true/outline/light/idle", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "light/custom=true/outline/light/pressed", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "light/custom=true/outline/primary/disabled", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "light/custom=true/outline/primary/idle", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "light/custom=true/outline/primary/pressed", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + } + ], + "currentContractWitnesses": [], + "runtimeResolved": false, + "finalPaintVerified": false + }, + { + "name": "buttonDangerDisabledBg", + "disposition": "implementation-plan-pending", + "action": "建议保留语义errorColorDisabled,并明确记录与直接errorColor3覆盖的区别;确认语义优先策略后登记为Flutter契约差异。", + "risk": "不改当前默认像素;单独设置调色板errorColor3与语义errorColorDisabled时的结果不同。", + "validation": "同时测试只覆盖errorColor3、只覆盖errorColorDisabled、两者同时覆盖;已裁定语义优先后断言后者胜出。", + "constraints": [ + "保留primary深色禁用fontWhite4裁定。", + "保留实例ButtonStyle(含WidgetState)的最高优先级与Material样式隔离。", + "普通/渐变、浅/暗、启用/按压/禁用及悬浮/焦点必须复验。" + ], + "contractReferences": [], + "beforeExamples": [ + { + "name": "buttonDangerDisabledBg", + "scenario": "dark/custom=true/fill/danger/disabled", + "actual": "#ff291838", + "expected": "#ff2a1b3f", + "matches": false, + "enforced": false + }, + { + "name": "buttonDangerDisabledBg", + "scenario": "light/custom=true/fill/danger/disabled", + "actual": "#ff291838", + "expected": "#ff2a1b3f", + "matches": false, + "enforced": false + } + ], + "afterRawComparisons": [ + { + "name": "buttonDangerDisabledBg", + "scenario": "dark/custom=false/fill/danger/disabled", + "actual": "#ff703439", + "expected": "#ff703439", + "matches": true, + "enforced": false + }, + { + "name": "buttonDangerDisabledBg", + "scenario": "dark/custom=true/fill/danger/disabled", + "actual": "#ff291838", + "expected": "#ff2a1b3f", + "matches": false, + "enforced": false + }, + { + "name": "buttonDangerDisabledBg", + "scenario": "light/custom=false/fill/danger/disabled", + "actual": "#ffffb9b0", + "expected": "#ffffb9b0", + "matches": true, + "enforced": false + }, + { + "name": "buttonDangerDisabledBg", + "scenario": "light/custom=true/fill/danger/disabled", + "actual": "#ff291838", + "expected": "#ff2a1b3f", + "matches": false, + "enforced": false + } + ], + "currentContractWitnesses": [], + "runtimeResolved": false, + "finalPaintVerified": false + }, + { + "name": "buttonDangerDisabledColor", + "disposition": "implementation-plan-pending", + "action": "建议填充危险按钮禁用前景使用fontWhite1,保留危险禁用背景errorColorDisabled;必须先核对危险填充按钮的浅/暗设计节点。", + "risk": "当前通用禁用字色会变为白色层级,属于可见默认变化;不能沿用primary深色fontWhite4裁定。", + "validation": "核对危险背景上的对比及浅/暗最终颜色;显式实例disabled foreground仍优先,Linux定向Golden先无更新比对。", + "constraints": [ + "保留primary深色禁用fontWhite4裁定。", + "保留实例ButtonStyle(含WidgetState)的最高优先级与Material样式隔离。", + "普通/渐变、浅/暗、启用/按压/禁用及悬浮/焦点必须复验。" + ], + "contractReferences": [], + "beforeExamples": [ + { + "name": "buttonDangerDisabledColor", + "scenario": "dark/custom=false/fill/danger/disabled", + "actual": "#38ffffff", + "expected": "#e6ffffff", + "matches": false, + "enforced": false + }, + { + "name": "buttonDangerDisabledColor", + "scenario": "dark/custom=true/fill/danger/disabled", + "actual": "#ff353c8c", + "expected": "#ff37429a", + "matches": false, + "enforced": false + }, + { + "name": "buttonDangerDisabledColor", + "scenario": "light/custom=false/fill/danger/disabled", + "actual": "#42000000", + "expected": "#ffffffff", + "matches": false, + "enforced": false + }, + { + "name": "buttonDangerDisabledColor", + "scenario": "light/custom=true/fill/danger/disabled", + "actual": "#ff353c8c", + "expected": "#ff37429a", + "matches": false, + "enforced": false + } + ], + "afterRawComparisons": [ + { + "name": "buttonDangerDisabledColor", + "scenario": "dark/custom=false/fill/danger/disabled", + "actual": "#38ffffff", + "expected": "#e6ffffff", + "matches": false, + "enforced": false + }, + { + "name": "buttonDangerDisabledColor", + "scenario": "dark/custom=true/fill/danger/disabled", + "actual": "#ff353c8c", + "expected": "#ff37429a", + "matches": false, + "enforced": false + }, + { + "name": "buttonDangerDisabledColor", + "scenario": "light/custom=false/fill/danger/disabled", + "actual": "#42000000", + "expected": "#ffffffff", + "matches": false, + "enforced": false + }, + { + "name": "buttonDangerDisabledColor", + "scenario": "light/custom=true/fill/danger/disabled", + "actual": "#ff353c8c", + "expected": "#ff37429a", + "matches": false, + "enforced": false + } + ], + "currentContractWitnesses": [], + "runtimeResolved": false, + "finalPaintVerified": false + }, + { + "name": "buttonDangerOutlineDisabledColor", + "disposition": "implementation-plan-pending", + "action": "与危险填充禁用背景采用同一语义规则:建议前景和描边使用errorColorDisabled;不为旧CSS调色板引用新增独立入口。", + "risk": "默认主题不变;独立Token覆盖的优先级需要文档化。", + "validation": "前景与描边必须同源;覆盖errorColor3/errorColorDisabled及实例ButtonStyle时分别断言。", + "constraints": [ + "保留primary深色禁用fontWhite4裁定。", + "保留实例ButtonStyle(含WidgetState)的最高优先级与Material样式隔离。", + "普通/渐变、浅/暗、启用/按压/禁用及悬浮/焦点必须复验。" + ], + "contractReferences": [], + "beforeExamples": [ + { + "name": "buttonDangerOutlineDisabledColor", + "scenario": "dark/custom=true/outline/danger/disabled", + "actual": "#ff291838", + "expected": "#ff2a1b3f", + "matches": false, + "enforced": false + }, + { + "name": "buttonDangerOutlineDisabledColor", + "scenario": "dark/custom=true/outline/danger/disabled", + "actual": "#ff291838", + "expected": "#ff2a1b3f", + "matches": false, + "enforced": false + }, + { + "name": "buttonDangerOutlineDisabledColor", + "scenario": "light/custom=true/outline/danger/disabled", + "actual": "#ff291838", + "expected": "#ff2a1b3f", + "matches": false, + "enforced": false + }, + { + "name": "buttonDangerOutlineDisabledColor", + "scenario": "light/custom=true/outline/danger/disabled", + "actual": "#ff291838", + "expected": "#ff2a1b3f", + "matches": false, + "enforced": false + } + ], + "afterRawComparisons": [ + { + "name": "buttonDangerOutlineDisabledColor", + "scenario": "dark/custom=false/outline/danger/disabled", + "actual": "#ff703439", + "expected": "#ff703439", + "matches": true, + "enforced": false + }, + { + "name": "buttonDangerOutlineDisabledColor", + "scenario": "dark/custom=false/outline/danger/disabled", + "actual": "#ff703439", + "expected": "#ff703439", + "matches": true, + "enforced": false + }, + { + "name": "buttonDangerOutlineDisabledColor", + "scenario": "dark/custom=true/outline/danger/disabled", + "actual": "#ff291838", + "expected": "#ff2a1b3f", + "matches": false, + "enforced": false + }, + { + "name": "buttonDangerOutlineDisabledColor", + "scenario": "dark/custom=true/outline/danger/disabled", + "actual": "#ff291838", + "expected": "#ff2a1b3f", + "matches": false, + "enforced": false + }, + { + "name": "buttonDangerOutlineDisabledColor", + "scenario": "light/custom=false/outline/danger/disabled", + "actual": "#ffffb9b0", + "expected": "#ffffb9b0", + "matches": true, + "enforced": false + }, + { + "name": "buttonDangerOutlineDisabledColor", + "scenario": "light/custom=false/outline/danger/disabled", + "actual": "#ffffb9b0", + "expected": "#ffffb9b0", + "matches": true, + "enforced": false + }, + { + "name": "buttonDangerOutlineDisabledColor", + "scenario": "light/custom=true/outline/danger/disabled", + "actual": "#ff291838", + "expected": "#ff2a1b3f", + "matches": false, + "enforced": false + }, + { + "name": "buttonDangerOutlineDisabledColor", + "scenario": "light/custom=true/outline/danger/disabled", + "actual": "#ff291838", + "expected": "#ff2a1b3f", + "matches": false, + "enforced": false + } + ], + "currentContractWitnesses": [], + "runtimeResolved": false, + "finalPaintVerified": false + }, + { + "name": "buttonDangerTextDisabledColor", + "disposition": "implementation-plan-pending", + "action": "建议文字危险按钮禁用前景使用errorColorDisabled;不机械复制冻结源码fontWhite1,以免浅色容器出现白底白字。取得设计裁定后再实施。", + "risk": "当前通用禁用字色会变成危险语义禁用色;需同时核对文字按钮背景和可读性。", + "validation": "分别验证填充与文字分支;禁止复用同一disabled helper而把文字分支变成白字;实例状态样式优先。", + "constraints": [ + "保留primary深色禁用fontWhite4裁定。", + "保留实例ButtonStyle(含WidgetState)的最高优先级与Material样式隔离。", + "普通/渐变、浅/暗、启用/按压/禁用及悬浮/焦点必须复验。" + ], + "contractReferences": [], + "beforeExamples": [ + { + "name": "buttonDangerTextDisabledColor", + "scenario": "dark/custom=false/text/danger/disabled", + "actual": "#38ffffff", + "expected": "#e6ffffff", + "matches": false, + "enforced": false + }, + { + "name": "buttonDangerTextDisabledColor", + "scenario": "dark/custom=true/text/danger/disabled", + "actual": "#ff353c8c", + "expected": "#ff37429a", + "matches": false, + "enforced": false + }, + { + "name": "buttonDangerTextDisabledColor", + "scenario": "light/custom=false/text/danger/disabled", + "actual": "#42000000", + "expected": "#ffffffff", + "matches": false, + "enforced": false + }, + { + "name": "buttonDangerTextDisabledColor", + "scenario": "light/custom=true/text/danger/disabled", + "actual": "#ff353c8c", + "expected": "#ff37429a", + "matches": false, + "enforced": false + } + ], + "afterRawComparisons": [ + { + "name": "buttonDangerTextDisabledColor", + "scenario": "dark/custom=false/text/danger/disabled", + "actual": "#38ffffff", + "expected": "#e6ffffff", + "matches": false, + "enforced": false + }, + { + "name": "buttonDangerTextDisabledColor", + "scenario": "dark/custom=true/text/danger/disabled", + "actual": "#ff353c8c", + "expected": "#ff37429a", + "matches": false, + "enforced": false + }, + { + "name": "buttonDangerTextDisabledColor", + "scenario": "light/custom=false/text/danger/disabled", + "actual": "#42000000", + "expected": "#ffffffff", + "matches": false, + "enforced": false + }, + { + "name": "buttonDangerTextDisabledColor", + "scenario": "light/custom=true/text/danger/disabled", + "actual": "#ff353c8c", + "expected": "#ff37429a", + "matches": false, + "enforced": false + } + ], + "currentContractWitnesses": [], + "runtimeResolved": false, + "finalPaintVerified": false + }, + { + "name": "buttonDefaultActiveBgColor", + "disposition": "implementation-plan-pending", + "action": "拟将_resolveFillColors调用的_pressedBackgroundColor默认配色改为bgColorComponentActive;并让既有hasPressedBackground检测关闭重复pressed overlay。", + "risk": "普通与渐变/自定义背景必须按实际路径区分;默认填充按压视觉变化。", + "validation": "真实指针按下保持、释放、取消、禁用切换;浅/暗下断言背景及overlay,P0 stateful背景不能被二次叠色。", + "constraints": [ + "保留primary深色禁用fontWhite4裁定。", + "保留实例ButtonStyle(含WidgetState)的最高优先级与Material样式隔离。", + "普通/渐变、浅/暗、启用/按压/禁用及悬浮/焦点必须复验。" + ], + "contractReferences": [], + "beforeExamples": [ + { + "name": "buttonDefaultActiveBgColor", + "scenario": "dark/custom=false/fill/defaultTheme/pressed", + "actual": "#ff383838", + "expected": "#ff4b4b4b", + "matches": false, + "enforced": false + }, + { + "name": "buttonDefaultActiveBgColor", + "scenario": "dark/custom=true/fill/defaultTheme/pressed", + "actual": "#ff2b1e46", + "expected": "#ff2c214d", + "matches": false, + "enforced": false + }, + { + "name": "buttonDefaultActiveBgColor", + "scenario": "light/custom=false/fill/defaultTheme/pressed", + "actual": "#ffe8e8e8", + "expected": "#ffa6a6a6", + "matches": false, + "enforced": false + }, + { + "name": "buttonDefaultActiveBgColor", + "scenario": "light/custom=true/fill/defaultTheme/pressed", + "actual": "#ff2b1e46", + "expected": "#ff2c214d", + "matches": false, + "enforced": false + } + ], + "afterRawComparisons": [ + { + "name": "buttonDefaultActiveBgColor", + "scenario": "dark/custom=false/fill/defaultTheme/pressed", + "actual": "#ff383838", + "expected": "#ff4b4b4b", + "matches": false, + "enforced": false + }, + { + "name": "buttonDefaultActiveBgColor", + "scenario": "dark/custom=true/fill/defaultTheme/pressed", + "actual": "#ff2b1e46", + "expected": "#ff2c214d", + "matches": false, + "enforced": false + }, + { + "name": "buttonDefaultActiveBgColor", + "scenario": "light/custom=false/fill/defaultTheme/pressed", + "actual": "#ffe8e8e8", + "expected": "#ffa6a6a6", + "matches": false, + "enforced": false + }, + { + "name": "buttonDefaultActiveBgColor", + "scenario": "light/custom=true/fill/defaultTheme/pressed", + "actual": "#ff2b1e46", + "expected": "#ff2c214d", + "matches": false, + "enforced": false + } + ], + "currentContractWitnesses": [], + "runtimeResolved": false, + "finalPaintVerified": false + }, + { + "name": "buttonGhostBorderColor", + "disposition": "fixed-runtime-verified-visual-pending", + "action": "默认配色启用态前景/描边统一回退textColorAnti;禁用fontWhite4与实例ButtonStyle优先级不变。", + "source": "tdesign-component/lib/src/components/button/t_button_resolve.dart", + "validation": "检查独立textColorAnti/fontWhite1,实际Text前景与Material边框一致;默认主题两Token相等,默认像素不变。", + "contractReferences": [], + "beforeExamples": [ + { + "name": "buttonGhostBorderColor", + "scenario": "dark/custom=true/ghost/defaultTheme/idle", + "actual": "#ff37429a", + "expected": "#ff363f93", + "matches": false, + "enforced": false + }, + { + "name": "buttonGhostBorderColor", + "scenario": "light/custom=true/ghost/defaultTheme/idle", + "actual": "#ff37429a", + "expected": "#ff363f93", + "matches": false, + "enforced": false + } + ], + "afterRawComparisons": [ + { + "name": "buttonGhostBorderColor", + "scenario": "dark/custom=false/ghost/defaultTheme/idle", + "actual": "#e6ffffff", + "expected": "#e6ffffff", + "matches": true, + "enforced": true + }, + { + "name": "buttonGhostBorderColor", + "scenario": "dark/custom=true/ghost/defaultTheme/idle", + "actual": "#ff363f93", + "expected": "#ff363f93", + "matches": true, + "enforced": true + }, + { + "name": "buttonGhostBorderColor", + "scenario": "light/custom=false/ghost/defaultTheme/idle", + "actual": "#ffffffff", + "expected": "#ffffffff", + "matches": true, + "enforced": true + }, + { + "name": "buttonGhostBorderColor", + "scenario": "light/custom=true/ghost/defaultTheme/idle", + "actual": "#ff363f93", + "expected": "#ff363f93", + "matches": true, + "enforced": true + } + ], + "currentContractWitnesses": [], + "runtimeResolved": true, + "finalPaintVerified": false + }, + { + "name": "buttonGhostColor", + "disposition": "fixed-runtime-verified-visual-pending", + "action": "默认配色启用态前景/描边统一回退textColorAnti;禁用fontWhite4与实例ButtonStyle优先级不变。", + "source": "tdesign-component/lib/src/components/button/t_button_resolve.dart", + "validation": "检查独立textColorAnti/fontWhite1,实际Text前景与Material边框一致;默认主题两Token相等,默认像素不变。", + "contractReferences": [], + "beforeExamples": [ + { + "name": "buttonGhostColor", + "scenario": "dark/custom=true/ghost/defaultTheme/idle", + "actual": "#ff37429a", + "expected": "#ff363f93", + "matches": false, + "enforced": false + }, + { + "name": "buttonGhostColor", + "scenario": "light/custom=true/ghost/defaultTheme/idle", + "actual": "#ff37429a", + "expected": "#ff363f93", + "matches": false, + "enforced": false + } + ], + "afterRawComparisons": [ + { + "name": "buttonGhostColor", + "scenario": "dark/custom=false/ghost/defaultTheme/idle", + "actual": "#e6ffffff", + "expected": "#e6ffffff", + "matches": true, + "enforced": true + }, + { + "name": "buttonGhostColor", + "scenario": "dark/custom=true/ghost/defaultTheme/idle", + "actual": "#ff363f93", + "expected": "#ff363f93", + "matches": true, + "enforced": true + }, + { + "name": "buttonGhostColor", + "scenario": "light/custom=false/ghost/defaultTheme/idle", + "actual": "#ffffffff", + "expected": "#ffffffff", + "matches": true, + "enforced": true + }, + { + "name": "buttonGhostColor", + "scenario": "light/custom=true/ghost/defaultTheme/idle", + "actual": "#ff363f93", + "expected": "#ff363f93", + "matches": true, + "enforced": true + } + ], + "currentContractWitnesses": [], + "runtimeResolved": true, + "finalPaintVerified": false + }, + { + "name": "buttonGhostDangerHoverColor", + "disposition": "implementation-plan-pending", + "action": "与ghost交互统一裁定;如按目标改变前景/描边,危险色按压取errorColorActive,避免只改文字遗漏边框。", + "risk": "须同时评估Ink层和透明容器上的实际视觉;不能把一次getter修正当作像素验收。", + "validation": "独立覆盖errorColor/errorColorActive,按下/释放/禁用均检查前景、边框和实例优先级。", + "constraints": [ + "保留primary深色禁用fontWhite4裁定。", + "保留实例ButtonStyle(含WidgetState)的最高优先级与Material样式隔离。", + "普通/渐变、浅/暗、启用/按压/禁用及悬浮/焦点必须复验。" + ], + "contractReferences": [], + "beforeExamples": [ + { + "name": "buttonGhostDangerHoverColor", + "scenario": "dark/custom=false/ghost/danger/pressed", + "actual": "#ffc64751", + "expected": "#ffa03f46", + "matches": false, + "enforced": false + }, + { + "name": "buttonGhostDangerHoverColor", + "scenario": "dark/custom=true/ghost/danger/pressed", + "actual": "#ff27122a", + "expected": "#ff281531", + "matches": false, + "enforced": false + }, + { + "name": "buttonGhostDangerHoverColor", + "scenario": "light/custom=false/ghost/danger/pressed", + "actual": "#ffd54941", + "expected": "#ffad352f", + "matches": false, + "enforced": false + }, + { + "name": "buttonGhostDangerHoverColor", + "scenario": "light/custom=true/ghost/danger/pressed", + "actual": "#ff27122a", + "expected": "#ff281531", + "matches": false, + "enforced": false + } + ], + "afterRawComparisons": [ + { + "name": "buttonGhostDangerHoverColor", + "scenario": "dark/custom=false/ghost/danger/pressed", + "actual": "#ffc64751", + "expected": "#ffa03f46", + "matches": false, + "enforced": false + }, + { + "name": "buttonGhostDangerHoverColor", + "scenario": "dark/custom=true/ghost/danger/pressed", + "actual": "#ff27122a", + "expected": "#ff281531", + "matches": false, + "enforced": false + }, + { + "name": "buttonGhostDangerHoverColor", + "scenario": "light/custom=false/ghost/danger/pressed", + "actual": "#ffd54941", + "expected": "#ffad352f", + "matches": false, + "enforced": false + }, + { + "name": "buttonGhostDangerHoverColor", + "scenario": "light/custom=true/ghost/danger/pressed", + "actual": "#ff27122a", + "expected": "#ff281531", + "matches": false, + "enforced": false + } + ], + "currentContractWitnesses": [], + "runtimeResolved": false, + "finalPaintVerified": false + }, + { + "name": "buttonGhostHoverColor", + "disposition": "implementation-plan-pending", + "action": "建议先沿用Spec009的Flutter Ink状态层契约;取得目标按压设计后记录平台交互例外。若要求前景随按压变化,则默认ghost前景/边框用fontWhite2,并以已产生的前景/边框反馈抑制重复pressed overlay。", + "risk": "现有12%前景色状态层与冻结CSS前景变化不能只用字段相等判断视觉等价;必须检查实际合成结果。", + "validation": "真实按下/释放/取消、hover/focus、透明背景及P0透明overlay;已产生反馈时不得重复叠加,禁用始终无反馈。", + "constraints": [ + "保留primary深色禁用fontWhite4裁定。", + "保留实例ButtonStyle(含WidgetState)的最高优先级与Material样式隔离。", + "普通/渐变、浅/暗、启用/按压/禁用及悬浮/焦点必须复验。" + ], + "contractReferences": [], + "beforeExamples": [ + { + "name": "buttonGhostHoverColor", + "scenario": "dark/custom=false/ghost/defaultTheme/pressed", + "actual": "#e6ffffff", + "expected": "#8cffffff", + "matches": false, + "enforced": false + }, + { + "name": "buttonGhostHoverColor", + "scenario": "dark/custom=true/ghost/defaultTheme/pressed", + "actual": "#ff37429a", + "expected": "#ff3845a1", + "matches": false, + "enforced": false + }, + { + "name": "buttonGhostHoverColor", + "scenario": "light/custom=false/ghost/defaultTheme/pressed", + "actual": "#ffffffff", + "expected": "#8cffffff", + "matches": false, + "enforced": false + }, + { + "name": "buttonGhostHoverColor", + "scenario": "light/custom=true/ghost/defaultTheme/pressed", + "actual": "#ff37429a", + "expected": "#ff3845a1", + "matches": false, + "enforced": false + } + ], + "afterRawComparisons": [ + { + "name": "buttonGhostHoverColor", + "scenario": "dark/custom=false/ghost/defaultTheme/pressed", + "actual": "#e6ffffff", + "expected": "#8cffffff", + "matches": false, + "enforced": false + }, + { + "name": "buttonGhostHoverColor", + "scenario": "dark/custom=true/ghost/defaultTheme/pressed", + "actual": "#ff363f93", + "expected": "#ff3845a1", + "matches": false, + "enforced": false + }, + { + "name": "buttonGhostHoverColor", + "scenario": "light/custom=false/ghost/defaultTheme/pressed", + "actual": "#ffffffff", + "expected": "#8cffffff", + "matches": false, + "enforced": false + }, + { + "name": "buttonGhostHoverColor", + "scenario": "light/custom=true/ghost/defaultTheme/pressed", + "actual": "#ff363f93", + "expected": "#ff3845a1", + "matches": false, + "enforced": false + } + ], + "currentContractWitnesses": [], + "runtimeResolved": false, + "finalPaintVerified": false + }, + { + "name": "buttonGhostPrimaryHoverColor", + "disposition": "implementation-plan-pending", + "action": "与默认ghost采用同一交互裁定;如按目标改变前景/描边,主色按压取brandColorActive,且与overlay反馈统一解析。", + "risk": "不新加activeColor入口;保持实例ButtonStyle拥有最终状态样式。", + "validation": "独立覆盖brandColor与brandColorActive,检查真实按压的Text与Material边框及overlay组合。", + "constraints": [ + "保留primary深色禁用fontWhite4裁定。", + "保留实例ButtonStyle(含WidgetState)的最高优先级与Material样式隔离。", + "普通/渐变、浅/暗、启用/按压/禁用及悬浮/焦点必须复验。" + ], + "contractReferences": [], + "beforeExamples": [ + { + "name": "buttonGhostPrimaryHoverColor", + "scenario": "dark/custom=false/ghost/primary/pressed", + "actual": "#ff4582e6", + "expected": "#ff699ef5", + "matches": false, + "enforced": false + }, + { + "name": "buttonGhostPrimaryHoverColor", + "scenario": "dark/custom=true/ghost/primary/pressed", + "actual": "#ff220307", + "expected": "#ff23060e", + "matches": false, + "enforced": false + }, + { + "name": "buttonGhostPrimaryHoverColor", + "scenario": "light/custom=false/ghost/primary/pressed", + "actual": "#ff0052d9", + "expected": "#ff003cab", + "matches": false, + "enforced": false + }, + { + "name": "buttonGhostPrimaryHoverColor", + "scenario": "light/custom=true/ghost/primary/pressed", + "actual": "#ff220307", + "expected": "#ff23060e", + "matches": false, + "enforced": false + } + ], + "afterRawComparisons": [ + { + "name": "buttonGhostPrimaryHoverColor", + "scenario": "dark/custom=false/ghost/primary/pressed", + "actual": "#ff4582e6", + "expected": "#ff699ef5", + "matches": false, + "enforced": false + }, + { + "name": "buttonGhostPrimaryHoverColor", + "scenario": "dark/custom=true/ghost/primary/pressed", + "actual": "#ff220307", + "expected": "#ff23060e", + "matches": false, + "enforced": false + }, + { + "name": "buttonGhostPrimaryHoverColor", + "scenario": "light/custom=false/ghost/primary/pressed", + "actual": "#ff0052d9", + "expected": "#ff003cab", + "matches": false, + "enforced": false + }, + { + "name": "buttonGhostPrimaryHoverColor", + "scenario": "light/custom=true/ghost/primary/pressed", + "actual": "#ff220307", + "expected": "#ff23060e", + "matches": false, + "enforced": false + } + ], + "currentContractWitnesses": [], + "runtimeResolved": false, + "finalPaintVerified": false + }, + { + "name": "buttonLightActiveBgColor", + "disposition": "implementation-plan-pending", + "action": "拟将_pressedBackgroundColor浅色配色改为brandColorLightActive,避免使用brandColorFocus;沿同一resolve路径覆盖普通分支。", + "risk": "浅色填充按压色变化;焦点色不应被当作按压默认。", + "validation": "独立设置brandColorFocus和brandColorLightActive,确认按压读取后者;复验焦点反馈和实例stateful ButtonStyle。", + "constraints": [ + "保留primary深色禁用fontWhite4裁定。", + "保留实例ButtonStyle(含WidgetState)的最高优先级与Material样式隔离。", + "普通/渐变、浅/暗、启用/按压/禁用及悬浮/焦点必须复验。" + ], + "contractReferences": [], + "beforeExamples": [ + { + "name": "buttonLightActiveBgColor", + "scenario": "dark/custom=false/fill/light/pressed", + "actual": "#ff1b2f51", + "expected": "#ff173463", + "matches": false, + "enforced": false + }, + { + "name": "buttonLightActiveBgColor", + "scenario": "dark/custom=true/fill/light/pressed", + "actual": "#ff1b2f51", + "expected": "#ff260f23", + "matches": false, + "enforced": false + }, + { + "name": "buttonLightActiveBgColor", + "scenario": "light/custom=false/fill/light/pressed", + "actual": "#fff2f3ff", + "expected": "#ffd9e1ff", + "matches": false, + "enforced": false + }, + { + "name": "buttonLightActiveBgColor", + "scenario": "light/custom=true/fill/light/pressed", + "actual": "#fff2f3ff", + "expected": "#ff260f23", + "matches": false, + "enforced": false + } + ], + "afterRawComparisons": [ + { + "name": "buttonLightActiveBgColor", + "scenario": "dark/custom=false/fill/light/pressed", + "actual": "#ff1b2f51", + "expected": "#ff173463", + "matches": false, + "enforced": false + }, + { + "name": "buttonLightActiveBgColor", + "scenario": "dark/custom=true/fill/light/pressed", + "actual": "#ff1b2f51", + "expected": "#ff260f23", + "matches": false, + "enforced": false + }, + { + "name": "buttonLightActiveBgColor", + "scenario": "light/custom=false/fill/light/pressed", + "actual": "#fff2f3ff", + "expected": "#ffd9e1ff", + "matches": false, + "enforced": false + }, + { + "name": "buttonLightActiveBgColor", + "scenario": "light/custom=true/fill/light/pressed", + "actual": "#fff2f3ff", + "expected": "#ff260f23", + "matches": false, + "enforced": false + } + ], + "currentContractWitnesses": [], + "runtimeResolved": false, + "finalPaintVerified": false + }, + { + "name": "emptyActionMarginTop", + "disposition": "existing-contract-verified-visual-pending", + "action": "保留当前Flutter契约,不按旧CSS变量默认或覆盖能力修改生产实现;补当前契约的实际Widget断言。", + "contractReferences": [ + { + "file": "specs/031-empty-design-alignment/spec.md", + "quote": "图片优先于图标,描述始终可选;操作 Widget 非空时以 32 间距展示。", + "line": 11, + "sha256": "c02eef6d49c5d1e730441ec07d9fc9c544269fb40d8996e8f1ede8bcf4de1e65" + } + ], + "validation": "保留旧目标原始比较;新增contract/场景必须enforce=true且匹配,并覆盖浅/暗及自定义全局Token。", + "beforeExamples": [ + { + "name": "emptyActionMarginTop", + "scenario": "dark/custom=true/image=false", + "actual": 32, + "expected": 37, + "matches": false, + "enforced": false + }, + { + "name": "emptyActionMarginTop", + "scenario": "dark/custom=true/image=true", + "actual": 32, + "expected": 37, + "matches": false, + "enforced": false + }, + { + "name": "emptyActionMarginTop", + "scenario": "light/custom=true/image=false", + "actual": 32, + "expected": 37, + "matches": false, + "enforced": false + }, + { + "name": "emptyActionMarginTop", + "scenario": "light/custom=true/image=true", + "actual": 32, + "expected": 37, + "matches": false, + "enforced": false + } + ], + "afterRawComparisons": [ + { + "name": "emptyActionMarginTop", + "scenario": "dark/custom=false/image=false", + "actual": 32, + "expected": 32, + "matches": true, + "enforced": true + }, + { + "name": "emptyActionMarginTop", + "scenario": "dark/custom=false/image=true", + "actual": 32, + "expected": 32, + "matches": true, + "enforced": true + }, + { + "name": "emptyActionMarginTop", + "scenario": "dark/custom=true/image=false", + "actual": 32, + "expected": 37, + "matches": false, + "enforced": false + }, + { + "name": "emptyActionMarginTop", + "scenario": "dark/custom=true/image=true", + "actual": 32, + "expected": 37, + "matches": false, + "enforced": false + }, + { + "name": "emptyActionMarginTop", + "scenario": "light/custom=false/image=false", + "actual": 32, + "expected": 32, + "matches": true, + "enforced": true + }, + { + "name": "emptyActionMarginTop", + "scenario": "light/custom=false/image=true", + "actual": 32, + "expected": 32, + "matches": true, + "enforced": true + }, + { + "name": "emptyActionMarginTop", + "scenario": "light/custom=true/image=false", + "actual": 32, + "expected": 37, + "matches": false, + "enforced": false + }, + { + "name": "emptyActionMarginTop", + "scenario": "light/custom=true/image=true", + "actual": 32, + "expected": 37, + "matches": false, + "enforced": false + } + ], + "currentContractWitnesses": [ + { + "name": "emptyActionMarginTop", + "scenario": "contract/dark/custom=false/image=false/action-gap", + "actual": 32, + "expected": 32, + "matches": true, + "enforced": true + }, + { + "name": "emptyActionMarginTop", + "scenario": "contract/dark/custom=false/image=true/action-gap", + "actual": 32, + "expected": 32, + "matches": true, + "enforced": true + }, + { + "name": "emptyActionMarginTop", + "scenario": "contract/dark/custom=true/image=false/action-gap", + "actual": 32, + "expected": 32, + "matches": true, + "enforced": true + }, + { + "name": "emptyActionMarginTop", + "scenario": "contract/dark/custom=true/image=true/action-gap", + "actual": 32, + "expected": 32, + "matches": true, + "enforced": true + }, + { + "name": "emptyActionMarginTop", + "scenario": "contract/light/custom=false/image=false/action-gap", + "actual": 32, + "expected": 32, + "matches": true, + "enforced": true + }, + { + "name": "emptyActionMarginTop", + "scenario": "contract/light/custom=false/image=true/action-gap", + "actual": 32, + "expected": 32, + "matches": true, + "enforced": true + }, + { + "name": "emptyActionMarginTop", + "scenario": "contract/light/custom=true/image=false/action-gap", + "actual": 32, + "expected": 32, + "matches": true, + "enforced": true + }, + { + "name": "emptyActionMarginTop", + "scenario": "contract/light/custom=true/image=true/action-gap", + "actual": 32, + "expected": 32, + "matches": true, + "enforced": true + } + ], + "runtimeResolved": true, + "finalPaintVerified": false + }, + { + "name": "emptyDescriptionMarginTop", + "disposition": "existing-contract-verified-visual-pending", + "action": "保留当前Flutter契约,不按旧CSS变量默认或覆盖能力修改生产实现;补当前契约的实际Widget断言。", + "contractReferences": [ + { + "file": "specs/031-empty-design-alignment/spec.md", + "quote": "默认图标 96,图标/图片到描述间距分别为 22/16。", + "line": 12, + "sha256": "c02eef6d49c5d1e730441ec07d9fc9c544269fb40d8996e8f1ede8bcf4de1e65" + } + ], + "validation": "保留旧目标原始比较;新增contract/场景必须enforce=true且匹配,并覆盖浅/暗及自定义全局Token。", + "beforeExamples": [ + { + "name": "emptyDescriptionMarginTop", + "scenario": "dark/custom=false/image=false", + "actual": 22, + "expected": 16, + "matches": false, + "enforced": false + }, + { + "name": "emptyDescriptionMarginTop", + "scenario": "dark/custom=true/image=false", + "actual": 22, + "expected": 19, + "matches": false, + "enforced": false + }, + { + "name": "emptyDescriptionMarginTop", + "scenario": "dark/custom=true/image=true", + "actual": 16, + "expected": 19, + "matches": false, + "enforced": false + }, + { + "name": "emptyDescriptionMarginTop", + "scenario": "light/custom=false/image=false", + "actual": 22, + "expected": 16, + "matches": false, + "enforced": false + }, + { + "name": "emptyDescriptionMarginTop", + "scenario": "light/custom=true/image=false", + "actual": 22, + "expected": 19, + "matches": false, + "enforced": false + }, + { + "name": "emptyDescriptionMarginTop", + "scenario": "light/custom=true/image=true", + "actual": 16, + "expected": 19, + "matches": false, + "enforced": false + } + ], + "afterRawComparisons": [ + { + "name": "emptyDescriptionMarginTop", + "scenario": "dark/custom=false/image=false", + "actual": 22, + "expected": 16, + "matches": false, + "enforced": false + }, + { + "name": "emptyDescriptionMarginTop", + "scenario": "dark/custom=false/image=true", + "actual": 16, + "expected": 16, + "matches": true, + "enforced": true + }, + { + "name": "emptyDescriptionMarginTop", + "scenario": "dark/custom=true/image=false", + "actual": 22, + "expected": 19, + "matches": false, + "enforced": false + }, + { + "name": "emptyDescriptionMarginTop", + "scenario": "dark/custom=true/image=true", + "actual": 16, + "expected": 19, + "matches": false, + "enforced": false + }, + { + "name": "emptyDescriptionMarginTop", + "scenario": "light/custom=false/image=false", + "actual": 22, + "expected": 16, + "matches": false, + "enforced": false + }, + { + "name": "emptyDescriptionMarginTop", + "scenario": "light/custom=false/image=true", + "actual": 16, + "expected": 16, + "matches": true, + "enforced": true + }, + { + "name": "emptyDescriptionMarginTop", + "scenario": "light/custom=true/image=false", + "actual": 22, + "expected": 19, + "matches": false, + "enforced": false + }, + { + "name": "emptyDescriptionMarginTop", + "scenario": "light/custom=true/image=true", + "actual": 16, + "expected": 19, + "matches": false, + "enforced": false + } + ], + "currentContractWitnesses": [ + { + "name": "emptyDescriptionMarginTop", + "scenario": "contract/dark/custom=false/image=false/description-gap", + "actual": 22, + "expected": 22, + "matches": true, + "enforced": true + }, + { + "name": "emptyDescriptionMarginTop", + "scenario": "contract/dark/custom=false/image=true/description-gap", + "actual": 16, + "expected": 16, + "matches": true, + "enforced": true + }, + { + "name": "emptyDescriptionMarginTop", + "scenario": "contract/dark/custom=true/image=false/description-gap", + "actual": 22, + "expected": 22, + "matches": true, + "enforced": true + }, + { + "name": "emptyDescriptionMarginTop", + "scenario": "contract/dark/custom=true/image=true/description-gap", + "actual": 16, + "expected": 16, + "matches": true, + "enforced": true + }, + { + "name": "emptyDescriptionMarginTop", + "scenario": "contract/light/custom=false/image=false/description-gap", + "actual": 22, + "expected": 22, + "matches": true, + "enforced": true + }, + { + "name": "emptyDescriptionMarginTop", + "scenario": "contract/light/custom=false/image=true/description-gap", + "actual": 16, + "expected": 16, + "matches": true, + "enforced": true + }, + { + "name": "emptyDescriptionMarginTop", + "scenario": "contract/light/custom=true/image=false/description-gap", + "actual": 22, + "expected": 22, + "matches": true, + "enforced": true + }, + { + "name": "emptyDescriptionMarginTop", + "scenario": "contract/light/custom=true/image=true/description-gap", + "actual": 16, + "expected": 16, + "matches": true, + "enforced": true + } + ], + "runtimeResolved": true, + "finalPaintVerified": false + }, + { + "name": "inputBorderColor", + "disposition": "implementation-plan-pending", + "action": "拟仅将TInput._borderColor中normal分支由componentBorder改为componentStroke;保留focused/status和显式Theme边框策略,先核对Input分隔线设计。", + "risk": "浅色与暗色默认分隔线颜色均变化;FormItem外层分隔线与Input自身分隔线需避免双线。", + "validation": "独立覆盖componentBorder/componentStroke;正常、聚焦、禁用、success/warning/error及borderless/FormItem组合均需Widget与定向Golden。", + "constraints": [ + "保留TInputThemeData显式borderColor及focus/status语义色。", + "FormItem组合的单次内边距和分隔线所有权不得重复。" + ], + "contractReferences": [], + "beforeExamples": [ + { + "name": "inputBorderColor", + "scenario": "dark/custom=false/enabled=true", + "actual": "#ff5e5e5e", + "expected": "#ff383838", + "matches": false, + "enforced": false + }, + { + "name": "inputBorderColor", + "scenario": "dark/custom=true/enabled=true", + "actual": "#ff313070", + "expected": "#ff323377", + "matches": false, + "enforced": false + }, + { + "name": "inputBorderColor", + "scenario": "light/custom=false/enabled=true", + "actual": "#ffdcdcdc", + "expected": "#ffe8e8e8", + "matches": false, + "enforced": false + }, + { + "name": "inputBorderColor", + "scenario": "light/custom=true/enabled=true", + "actual": "#ff313070", + "expected": "#ff323377", + "matches": false, + "enforced": false + } + ], + "afterRawComparisons": [ + { + "name": "inputBorderColor", + "scenario": "dark/custom=false/enabled=true", + "actual": "#ff5e5e5e", + "expected": "#ff383838", + "matches": false, + "enforced": false + }, + { + "name": "inputBorderColor", + "scenario": "dark/custom=true/enabled=true", + "actual": "#ff313070", + "expected": "#ff323377", + "matches": false, + "enforced": false + }, + { + "name": "inputBorderColor", + "scenario": "light/custom=false/enabled=true", + "actual": "#ffdcdcdc", + "expected": "#ffe8e8e8", + "matches": false, + "enforced": false + }, + { + "name": "inputBorderColor", + "scenario": "light/custom=true/enabled=true", + "actual": "#ff313070", + "expected": "#ff323377", + "matches": false, + "enforced": false + } + ], + "currentContractWitnesses": [], + "runtimeResolved": false, + "finalPaintVerified": false + }, + { + "name": "inputVerticalPadding", + "disposition": "existing-contract-verified-visual-pending", + "action": "保留当前Flutter契约,不按旧CSS变量默认或覆盖能力修改生产实现;补当前契约的实际Widget断言。", + "contractReferences": [ + { + "file": "tdesign-component/lib/src/components/input/t_input_theme_data.dart", + "quote": "null 时在 TFormItem 作用域内为零,独立输入框为四周 16 逻辑像素", + "line": 38, + "sha256": "411d7b685e37fa130ecb698e52f93c2258eae64fdab1443d17af5df4da824eb1" + } + ], + "validation": "保留旧目标原始比较;新增contract/场景必须enforce=true且匹配,并覆盖浅/暗及自定义全局Token。", + "beforeExamples": [ + { + "name": "inputVerticalPadding", + "scenario": "dark/custom=true/enabled=true", + "actual": 16, + "expected": 19, + "matches": false, + "enforced": false + }, + { + "name": "inputVerticalPadding", + "scenario": "light/custom=true/enabled=true", + "actual": 16, + "expected": 19, + "matches": false, + "enforced": false + } + ], + "afterRawComparisons": [ + { + "name": "inputVerticalPadding", + "scenario": "dark/custom=false/enabled=true", + "actual": 16, + "expected": 16, + "matches": true, + "enforced": true + }, + { + "name": "inputVerticalPadding", + "scenario": "dark/custom=true/enabled=true", + "actual": 16, + "expected": 19, + "matches": false, + "enforced": false + }, + { + "name": "inputVerticalPadding", + "scenario": "light/custom=false/enabled=true", + "actual": 16, + "expected": 16, + "matches": true, + "enforced": true + }, + { + "name": "inputVerticalPadding", + "scenario": "light/custom=true/enabled=true", + "actual": 16, + "expected": 19, + "matches": false, + "enforced": false + } + ], + "currentContractWitnesses": [ + { + "name": "inputVerticalPadding", + "scenario": "contract/dark/custom=false/enabled=true/standalone-padding", + "actual": 16, + "expected": 16, + "matches": true, + "enforced": true + }, + { + "name": "inputVerticalPadding", + "scenario": "contract/dark/custom=true/enabled=true/standalone-padding", + "actual": 16, + "expected": 16, + "matches": true, + "enforced": true + }, + { + "name": "inputVerticalPadding", + "scenario": "contract/light/custom=false/enabled=true/standalone-padding", + "actual": 16, + "expected": 16, + "matches": true, + "enforced": true + }, + { + "name": "inputVerticalPadding", + "scenario": "contract/light/custom=true/enabled=true/standalone-padding", + "actual": 16, + "expected": 16, + "matches": true, + "enforced": true + } + ], + "runtimeResolved": true, + "finalPaintVerified": false + }, + { + "name": "switchDotLargeSize", + "disposition": "implementation-plan-pending", + "action": "在Switch内部建立按size解析的私有几何值,直接传到实际RenderBox/Painter以实现大号普通滑块直径26;去除整件FittedBox统一缩放。有图文/加载或开启态按26绘制。", + "risk": "这是同一几何修复批次,不逐项打补丁;不将私有几何表暴露为新的公开配置源。", + "validation": "三尺寸×filled/text/icon×开/关×禁用/加载;测真实轨道、滑块、图标和字号。保留长文案、1/2/3倍字号、Theme插值、RTL手势;双SDK与Linux受影响Golden。", + "constraints": [ + "不新增尺寸/颜色状态源或defaultSize。", + "保留受控值、onChanged-null禁用、loading禁用、RTL拖动与语义。", + "按实际RenderBox/Painter尺寸验证,不能只断言外层SizedBox。", + "去除整体缩放后,默认大/中/小实际字号仍须16/14/12;Theme显式字号和无size文字自动增长保留,复用t_switch_typography_test的真实渲染尺度断言。" + ], + "contractReferences": [], + "beforeExamples": [ + { + "name": "switchDotLargeSize", + "scenario": "dark/large/value=false/icon", + "actual": 25.14285714, + "expected": 26, + "matches": false, + "enforced": false + }, + { + "name": "switchDotLargeSize", + "scenario": "dark/large/value=false/text", + "actual": 25.14285714, + "expected": 26, + "matches": false, + "enforced": false + }, + { + "name": "switchDotLargeSize", + "scenario": "dark/large/value=true/filled", + "actual": 25.14285714, + "expected": 26, + "matches": false, + "enforced": false + }, + { + "name": "switchDotLargeSize", + "scenario": "dark/large/value=true/icon", + "actual": 25.14285714, + "expected": 26, + "matches": false, + "enforced": false + }, + { + "name": "switchDotLargeSize", + "scenario": "dark/large/value=true/text", + "actual": 25.14285714, + "expected": 26, + "matches": false, + "enforced": false + }, + { + "name": "switchDotLargeSize", + "scenario": "light/large/value=false/icon", + "actual": 25.14285714, + "expected": 26, + "matches": false, + "enforced": false + }, + { + "name": "switchDotLargeSize", + "scenario": "light/large/value=false/text", + "actual": 25.14285714, + "expected": 26, + "matches": false, + "enforced": false + }, + { + "name": "switchDotLargeSize", + "scenario": "light/large/value=true/filled", + "actual": 25.14285714, + "expected": 26, + "matches": false, + "enforced": false + }, + { + "name": "switchDotLargeSize", + "scenario": "light/large/value=true/icon", + "actual": 25.14285714, + "expected": 26, + "matches": false, + "enforced": false + }, + { + "name": "switchDotLargeSize", + "scenario": "light/large/value=true/text", + "actual": 25.14285714, + "expected": 26, + "matches": false, + "enforced": false + } + ], + "afterRawComparisons": [ + { + "name": "switchDotLargeSize", + "scenario": "dark/large/value=false/icon", + "actual": 25.14285714, + "expected": 26, + "matches": false, + "enforced": false + }, + { + "name": "switchDotLargeSize", + "scenario": "dark/large/value=false/text", + "actual": 25.14285714, + "expected": 26, + "matches": false, + "enforced": false + }, + { + "name": "switchDotLargeSize", + "scenario": "dark/large/value=true/filled", + "actual": 25.14285714, + "expected": 26, + "matches": false, + "enforced": false + }, + { + "name": "switchDotLargeSize", + "scenario": "dark/large/value=true/icon", + "actual": 25.14285714, + "expected": 26, + "matches": false, + "enforced": false + }, + { + "name": "switchDotLargeSize", + "scenario": "dark/large/value=true/text", + "actual": 25.14285714, + "expected": 26, + "matches": false, + "enforced": false + }, + { + "name": "switchDotLargeSize", + "scenario": "light/large/value=false/icon", + "actual": 25.14285714, + "expected": 26, + "matches": false, + "enforced": false + }, + { + "name": "switchDotLargeSize", + "scenario": "light/large/value=false/text", + "actual": 25.14285714, + "expected": 26, + "matches": false, + "enforced": false + }, + { + "name": "switchDotLargeSize", + "scenario": "light/large/value=true/filled", + "actual": 25.14285714, + "expected": 26, + "matches": false, + "enforced": false + }, + { + "name": "switchDotLargeSize", + "scenario": "light/large/value=true/icon", + "actual": 25.14285714, + "expected": 26, + "matches": false, + "enforced": false + }, + { + "name": "switchDotLargeSize", + "scenario": "light/large/value=true/text", + "actual": 25.14285714, + "expected": 26, + "matches": false, + "enforced": false + } + ], + "currentContractWitnesses": [], + "runtimeResolved": false, + "finalPaintVerified": false + }, + { + "name": "switchDotPlainLargeSize", + "disposition": "implementation-plan-pending", + "action": "在Switch内部建立按size解析的私有几何值,直接传到实际RenderBox/Painter以实现大号无图文未选中滑块直径22;去除整件FittedBox统一缩放。plain条件同冻结WXML,开启态回到普通26。", + "risk": "这是同一几何修复批次,不逐项打补丁;不将私有几何表暴露为新的公开配置源。", + "validation": "三尺寸×filled/text/icon×开/关×禁用/加载;测真实轨道、滑块、图标和字号。保留长文案、1/2/3倍字号、Theme插值、RTL手势;双SDK与Linux受影响Golden。", + "constraints": [ + "不新增尺寸/颜色状态源或defaultSize。", + "保留受控值、onChanged-null禁用、loading禁用、RTL拖动与语义。", + "按实际RenderBox/Painter尺寸验证,不能只断言外层SizedBox。", + "去除整体缩放后,默认大/中/小实际字号仍须16/14/12;Theme显式字号和无size文字自动增长保留,复用t_switch_typography_test的真实渲染尺度断言。" + ], + "contractReferences": [], + "beforeExamples": [ + { + "name": "switchDotPlainLargeSize", + "scenario": "dark/large/value=false/filled", + "actual": 18.28571429, + "expected": 22, + "matches": false, + "enforced": false + }, + { + "name": "switchDotPlainLargeSize", + "scenario": "light/large/value=false/filled", + "actual": 18.28571429, + "expected": 22, + "matches": false, + "enforced": false + } + ], + "afterRawComparisons": [ + { + "name": "switchDotPlainLargeSize", + "scenario": "dark/large/value=false/filled", + "actual": 18.28571429, + "expected": 22, + "matches": false, + "enforced": false + }, + { + "name": "switchDotPlainLargeSize", + "scenario": "light/large/value=false/filled", + "actual": 18.28571429, + "expected": 22, + "matches": false, + "enforced": false + } + ], + "currentContractWitnesses": [], + "runtimeResolved": false, + "finalPaintVerified": false + }, + { + "name": "switchDotPlainSize", + "disposition": "implementation-plan-pending", + "action": "在Switch内部建立按size解析的私有几何值,直接传到实际RenderBox/Painter以实现中号无图文未选中滑块直径18;去除整件FittedBox统一缩放。plain由无两项label、无两项icon且非loading决定,不能误用于图文/加载态。", + "risk": "这是同一几何修复批次,不逐项打补丁;不将私有几何表暴露为新的公开配置源。", + "validation": "三尺寸×filled/text/icon×开/关×禁用/加载;测真实轨道、滑块、图标和字号。保留长文案、1/2/3倍字号、Theme插值、RTL手势;双SDK与Linux受影响Golden。", + "constraints": [ + "不新增尺寸/颜色状态源或defaultSize。", + "保留受控值、onChanged-null禁用、loading禁用、RTL拖动与语义。", + "按实际RenderBox/Painter尺寸验证,不能只断言外层SizedBox。", + "去除整体缩放后,默认大/中/小实际字号仍须16/14/12;Theme显式字号和无size文字自动增长保留,复用t_switch_typography_test的真实渲染尺度断言。" + ], + "contractReferences": [], + "beforeExamples": [ + { + "name": "switchDotPlainSize", + "scenario": "dark/medium/value=false/filled", + "actual": 16, + "expected": 18, + "matches": false, + "enforced": false + }, + { + "name": "switchDotPlainSize", + "scenario": "light/medium/value=false/filled", + "actual": 16, + "expected": 18, + "matches": false, + "enforced": false + } + ], + "afterRawComparisons": [ + { + "name": "switchDotPlainSize", + "scenario": "dark/medium/value=false/filled", + "actual": 16, + "expected": 18, + "matches": false, + "enforced": false + }, + { + "name": "switchDotPlainSize", + "scenario": "light/medium/value=false/filled", + "actual": 16, + "expected": 18, + "matches": false, + "enforced": false + } + ], + "currentContractWitnesses": [], + "runtimeResolved": false, + "finalPaintVerified": false + }, + { + "name": "switchDotPlainSmallSize", + "disposition": "implementation-plan-pending", + "action": "在Switch内部建立按size解析的私有几何值,直接传到实际RenderBox/Painter以实现小号无图文未选中滑块直径14;去除整件FittedBox统一缩放。plain条件同冻结WXML,开启态回到普通18。", + "risk": "这是同一几何修复批次,不逐项打补丁;不将私有几何表暴露为新的公开配置源。", + "validation": "三尺寸×filled/text/icon×开/关×禁用/加载;测真实轨道、滑块、图标和字号。保留长文案、1/2/3倍字号、Theme插值、RTL手势;双SDK与Linux受影响Golden。", + "constraints": [ + "不新增尺寸/颜色状态源或defaultSize。", + "保留受控值、onChanged-null禁用、loading禁用、RTL拖动与语义。", + "按实际RenderBox/Painter尺寸验证,不能只断言外层SizedBox。", + "去除整体缩放后,默认大/中/小实际字号仍须16/14/12;Theme显式字号和无size文字自动增长保留,复用t_switch_typography_test的真实渲染尺度断言。" + ], + "contractReferences": [], + "beforeExamples": [ + { + "name": "switchDotPlainSmallSize", + "scenario": "dark/small/value=false/filled", + "actual": 13.71428571, + "expected": 14, + "matches": false, + "enforced": false + }, + { + "name": "switchDotPlainSmallSize", + "scenario": "light/small/value=false/filled", + "actual": 13.71428571, + "expected": 14, + "matches": false, + "enforced": false + } + ], + "afterRawComparisons": [ + { + "name": "switchDotPlainSmallSize", + "scenario": "dark/small/value=false/filled", + "actual": 13.71428571, + "expected": 14, + "matches": false, + "enforced": false + }, + { + "name": "switchDotPlainSmallSize", + "scenario": "light/small/value=false/filled", + "actual": 13.71428571, + "expected": 14, + "matches": false, + "enforced": false + } + ], + "currentContractWitnesses": [], + "runtimeResolved": false, + "finalPaintVerified": false + }, + { + "name": "switchDotSmallSize", + "disposition": "implementation-plan-pending", + "action": "在Switch内部建立按size解析的私有几何值,直接传到实际RenderBox/Painter以实现小号普通滑块直径18;去除整件FittedBox统一缩放。有图文/加载或开启态按18绘制。", + "risk": "这是同一几何修复批次,不逐项打补丁;不将私有几何表暴露为新的公开配置源。", + "validation": "三尺寸×filled/text/icon×开/关×禁用/加载;测真实轨道、滑块、图标和字号。保留长文案、1/2/3倍字号、Theme插值、RTL手势;双SDK与Linux受影响Golden。", + "constraints": [ + "不新增尺寸/颜色状态源或defaultSize。", + "保留受控值、onChanged-null禁用、loading禁用、RTL拖动与语义。", + "按实际RenderBox/Painter尺寸验证,不能只断言外层SizedBox。", + "去除整体缩放后,默认大/中/小实际字号仍须16/14/12;Theme显式字号和无size文字自动增长保留,复用t_switch_typography_test的真实渲染尺度断言。" + ], + "contractReferences": [], + "beforeExamples": [ + { + "name": "switchDotSmallSize", + "scenario": "dark/small/value=false/icon", + "actual": 18.85714286, + "expected": 18, + "matches": false, + "enforced": false + }, + { + "name": "switchDotSmallSize", + "scenario": "dark/small/value=false/text", + "actual": 18.85714286, + "expected": 18, + "matches": false, + "enforced": false + }, + { + "name": "switchDotSmallSize", + "scenario": "dark/small/value=true/filled", + "actual": 18.85714286, + "expected": 18, + "matches": false, + "enforced": false + }, + { + "name": "switchDotSmallSize", + "scenario": "dark/small/value=true/icon", + "actual": 18.85714286, + "expected": 18, + "matches": false, + "enforced": false + }, + { + "name": "switchDotSmallSize", + "scenario": "dark/small/value=true/text", + "actual": 18.85714286, + "expected": 18, + "matches": false, + "enforced": false + }, + { + "name": "switchDotSmallSize", + "scenario": "light/small/value=false/icon", + "actual": 18.85714286, + "expected": 18, + "matches": false, + "enforced": false + }, + { + "name": "switchDotSmallSize", + "scenario": "light/small/value=false/text", + "actual": 18.85714286, + "expected": 18, + "matches": false, + "enforced": false + }, + { + "name": "switchDotSmallSize", + "scenario": "light/small/value=true/filled", + "actual": 18.85714286, + "expected": 18, + "matches": false, + "enforced": false + }, + { + "name": "switchDotSmallSize", + "scenario": "light/small/value=true/icon", + "actual": 18.85714286, + "expected": 18, + "matches": false, + "enforced": false + }, + { + "name": "switchDotSmallSize", + "scenario": "light/small/value=true/text", + "actual": 18.85714286, + "expected": 18, + "matches": false, + "enforced": false + } + ], + "afterRawComparisons": [ + { + "name": "switchDotSmallSize", + "scenario": "dark/small/value=false/icon", + "actual": 18.85714286, + "expected": 18, + "matches": false, + "enforced": false + }, + { + "name": "switchDotSmallSize", + "scenario": "dark/small/value=false/text", + "actual": 18.85714286, + "expected": 18, + "matches": false, + "enforced": false + }, + { + "name": "switchDotSmallSize", + "scenario": "dark/small/value=true/filled", + "actual": 18.85714286, + "expected": 18, + "matches": false, + "enforced": false + }, + { + "name": "switchDotSmallSize", + "scenario": "dark/small/value=true/icon", + "actual": 18.85714286, + "expected": 18, + "matches": false, + "enforced": false + }, + { + "name": "switchDotSmallSize", + "scenario": "dark/small/value=true/text", + "actual": 18.85714286, + "expected": 18, + "matches": false, + "enforced": false + }, + { + "name": "switchDotSmallSize", + "scenario": "light/small/value=false/icon", + "actual": 18.85714286, + "expected": 18, + "matches": false, + "enforced": false + }, + { + "name": "switchDotSmallSize", + "scenario": "light/small/value=false/text", + "actual": 18.85714286, + "expected": 18, + "matches": false, + "enforced": false + }, + { + "name": "switchDotSmallSize", + "scenario": "light/small/value=true/filled", + "actual": 18.85714286, + "expected": 18, + "matches": false, + "enforced": false + }, + { + "name": "switchDotSmallSize", + "scenario": "light/small/value=true/icon", + "actual": 18.85714286, + "expected": 18, + "matches": false, + "enforced": false + }, + { + "name": "switchDotSmallSize", + "scenario": "light/small/value=true/text", + "actual": 18.85714286, + "expected": 18, + "matches": false, + "enforced": false + } + ], + "currentContractWitnesses": [], + "runtimeResolved": false, + "finalPaintVerified": false + }, + { + "name": "switchIconLargeSize", + "disposition": "implementation-plan-pending", + "action": "在Switch内部建立按size解析的私有几何值,直接传到实际RenderBox/Painter以实现大号图标实际尺寸24;去除整件FittedBox统一缩放。图标和26dp滑块保留各自真实尺寸。", + "risk": "这是同一几何修复批次,不逐项打补丁;不将私有几何表暴露为新的公开配置源。", + "validation": "三尺寸×filled/text/icon×开/关×禁用/加载;测真实轨道、滑块、图标和字号。保留长文案、1/2/3倍字号、Theme插值、RTL手势;双SDK与Linux受影响Golden。", + "constraints": [ + "不新增尺寸/颜色状态源或defaultSize。", + "保留受控值、onChanged-null禁用、loading禁用、RTL拖动与语义。", + "按实际RenderBox/Painter尺寸验证,不能只断言外层SizedBox。", + "去除整体缩放后,默认大/中/小实际字号仍须16/14/12;Theme显式字号和无size文字自动增长保留,复用t_switch_typography_test的真实渲染尺度断言。" + ], + "contractReferences": [], + "beforeExamples": [ + { + "name": "switchIconLargeSize", + "scenario": "dark/large/value=false/icon", + "actual": 18.28571429, + "expected": 24, + "matches": false, + "enforced": false + }, + { + "name": "switchIconLargeSize", + "scenario": "dark/large/value=true/icon", + "actual": 18.28571429, + "expected": 24, + "matches": false, + "enforced": false + }, + { + "name": "switchIconLargeSize", + "scenario": "light/large/value=false/icon", + "actual": 18.28571429, + "expected": 24, + "matches": false, + "enforced": false + }, + { + "name": "switchIconLargeSize", + "scenario": "light/large/value=true/icon", + "actual": 18.28571429, + "expected": 24, + "matches": false, + "enforced": false + } + ], + "afterRawComparisons": [ + { + "name": "switchIconLargeSize", + "scenario": "dark/large/value=false/icon", + "actual": 18.28571429, + "expected": 24, + "matches": false, + "enforced": false + }, + { + "name": "switchIconLargeSize", + "scenario": "dark/large/value=true/icon", + "actual": 18.28571429, + "expected": 24, + "matches": false, + "enforced": false + }, + { + "name": "switchIconLargeSize", + "scenario": "light/large/value=false/icon", + "actual": 18.28571429, + "expected": 24, + "matches": false, + "enforced": false + }, + { + "name": "switchIconLargeSize", + "scenario": "light/large/value=true/icon", + "actual": 18.28571429, + "expected": 24, + "matches": false, + "enforced": false + } + ], + "currentContractWitnesses": [], + "runtimeResolved": false, + "finalPaintVerified": false + }, + { + "name": "switchIconSize", + "disposition": "implementation-plan-pending", + "action": "在Switch内部建立按size解析的私有几何值,直接传到实际RenderBox/Painter以实现中号图标实际尺寸20;去除整件FittedBox统一缩放。独立图标尺寸不能随22dp滑块槽被缩成16。", + "risk": "这是同一几何修复批次,不逐项打补丁;不将私有几何表暴露为新的公开配置源。", + "validation": "三尺寸×filled/text/icon×开/关×禁用/加载;测真实轨道、滑块、图标和字号。保留长文案、1/2/3倍字号、Theme插值、RTL手势;双SDK与Linux受影响Golden。", + "constraints": [ + "不新增尺寸/颜色状态源或defaultSize。", + "保留受控值、onChanged-null禁用、loading禁用、RTL拖动与语义。", + "按实际RenderBox/Painter尺寸验证,不能只断言外层SizedBox。", + "去除整体缩放后,默认大/中/小实际字号仍须16/14/12;Theme显式字号和无size文字自动增长保留,复用t_switch_typography_test的真实渲染尺度断言。" + ], + "contractReferences": [], + "beforeExamples": [ + { + "name": "switchIconSize", + "scenario": "dark/medium/value=false/icon", + "actual": 16, + "expected": 20, + "matches": false, + "enforced": false + }, + { + "name": "switchIconSize", + "scenario": "dark/medium/value=true/icon", + "actual": 16, + "expected": 20, + "matches": false, + "enforced": false + }, + { + "name": "switchIconSize", + "scenario": "light/medium/value=false/icon", + "actual": 16, + "expected": 20, + "matches": false, + "enforced": false + }, + { + "name": "switchIconSize", + "scenario": "light/medium/value=true/icon", + "actual": 16, + "expected": 20, + "matches": false, + "enforced": false + } + ], + "afterRawComparisons": [ + { + "name": "switchIconSize", + "scenario": "dark/medium/value=false/icon", + "actual": 16, + "expected": 20, + "matches": false, + "enforced": false + }, + { + "name": "switchIconSize", + "scenario": "dark/medium/value=true/icon", + "actual": 16, + "expected": 20, + "matches": false, + "enforced": false + }, + { + "name": "switchIconSize", + "scenario": "light/medium/value=false/icon", + "actual": 16, + "expected": 20, + "matches": false, + "enforced": false + }, + { + "name": "switchIconSize", + "scenario": "light/medium/value=true/icon", + "actual": 16, + "expected": 20, + "matches": false, + "enforced": false + } + ], + "currentContractWitnesses": [], + "runtimeResolved": false, + "finalPaintVerified": false + }, + { + "name": "switchIconSmallSize", + "disposition": "implementation-plan-pending", + "action": "在Switch内部建立按size解析的私有几何值,直接传到实际RenderBox/Painter以实现小号图标实际尺寸16;去除整件FittedBox统一缩放。图标和18dp滑块保留各自真实尺寸。", + "risk": "这是同一几何修复批次,不逐项打补丁;不将私有几何表暴露为新的公开配置源。", + "validation": "三尺寸×filled/text/icon×开/关×禁用/加载;测真实轨道、滑块、图标和字号。保留长文案、1/2/3倍字号、Theme插值、RTL手势;双SDK与Linux受影响Golden。", + "constraints": [ + "不新增尺寸/颜色状态源或defaultSize。", + "保留受控值、onChanged-null禁用、loading禁用、RTL拖动与语义。", + "按实际RenderBox/Painter尺寸验证,不能只断言外层SizedBox。", + "去除整体缩放后,默认大/中/小实际字号仍须16/14/12;Theme显式字号和无size文字自动增长保留,复用t_switch_typography_test的真实渲染尺度断言。" + ], + "contractReferences": [], + "beforeExamples": [ + { + "name": "switchIconSmallSize", + "scenario": "dark/small/value=false/icon", + "actual": 13.71428571, + "expected": 16, + "matches": false, + "enforced": false + }, + { + "name": "switchIconSmallSize", + "scenario": "dark/small/value=true/icon", + "actual": 13.71428571, + "expected": 16, + "matches": false, + "enforced": false + }, + { + "name": "switchIconSmallSize", + "scenario": "light/small/value=false/icon", + "actual": 13.71428571, + "expected": 16, + "matches": false, + "enforced": false + }, + { + "name": "switchIconSmallSize", + "scenario": "light/small/value=true/icon", + "actual": 13.71428571, + "expected": 16, + "matches": false, + "enforced": false + } + ], + "afterRawComparisons": [ + { + "name": "switchIconSmallSize", + "scenario": "dark/small/value=false/icon", + "actual": 13.71428571, + "expected": 16, + "matches": false, + "enforced": false + }, + { + "name": "switchIconSmallSize", + "scenario": "dark/small/value=true/icon", + "actual": 13.71428571, + "expected": 16, + "matches": false, + "enforced": false + }, + { + "name": "switchIconSmallSize", + "scenario": "light/small/value=false/icon", + "actual": 13.71428571, + "expected": 16, + "matches": false, + "enforced": false + }, + { + "name": "switchIconSmallSize", + "scenario": "light/small/value=true/icon", + "actual": 13.71428571, + "expected": 16, + "matches": false, + "enforced": false + } + ], + "currentContractWitnesses": [], + "runtimeResolved": false, + "finalPaintVerified": false + }, + { + "name": "switchLabelColor", + "disposition": "implementation-plan-pending", + "action": "拟将TSwitchResolve.thumbContentOffColor默认回退改为bgColorSecondaryContainerActive,同步公开dartdoc;Theme显式值与禁用分支保留。", + "risk": "正常未选中文字/图标颜色变化;已记录的禁用/加载分层不变。", + "validation": "分别验证text/icon、on/off、enabled/disabled/loading、浅/暗、全局Token与组件Theme独立覆盖;保留用户自定义前景。", + "constraints": [ + "不新增尺寸/颜色状态源或defaultSize。", + "保留受控值、onChanged-null禁用、loading禁用、RTL拖动与语义。", + "按实际RenderBox/Painter尺寸验证,不能只断言外层SizedBox。", + "去除整体缩放后,默认大/中/小实际字号仍须16/14/12;Theme显式字号和无size文字自动增长保留,复用t_switch_typography_test的真实渲染尺度断言。" + ], + "contractReferences": [], + "beforeExamples": [ + { + "name": "switchLabelColor", + "scenario": "dark/custom=false/TSwitchVariant.icon/value=false", + "actual": "#38ffffff", + "expected": "#ff383838", + "matches": false, + "enforced": false + }, + { + "name": "switchLabelColor", + "scenario": "dark/custom=false/TSwitchVariant.text/value=false", + "actual": "#38ffffff", + "expected": "#ff383838", + "matches": false, + "enforced": false + }, + { + "name": "switchLabelColor", + "scenario": "dark/custom=true/TSwitchVariant.icon/value=false", + "actual": "#ff353c8c", + "expected": "#ff302d69", + "matches": false, + "enforced": false + }, + { + "name": "switchLabelColor", + "scenario": "dark/custom=true/TSwitchVariant.text/value=false", + "actual": "#ff353c8c", + "expected": "#ff302d69", + "matches": false, + "enforced": false + }, + { + "name": "switchLabelColor", + "scenario": "light/custom=false/TSwitchVariant.icon/value=false", + "actual": "#42000000", + "expected": "#ffdcdcdc", + "matches": false, + "enforced": false + }, + { + "name": "switchLabelColor", + "scenario": "light/custom=false/TSwitchVariant.text/value=false", + "actual": "#42000000", + "expected": "#ffdcdcdc", + "matches": false, + "enforced": false + }, + { + "name": "switchLabelColor", + "scenario": "light/custom=true/TSwitchVariant.icon/value=false", + "actual": "#ff353c8c", + "expected": "#ff302d69", + "matches": false, + "enforced": false + }, + { + "name": "switchLabelColor", + "scenario": "light/custom=true/TSwitchVariant.text/value=false", + "actual": "#ff353c8c", + "expected": "#ff302d69", + "matches": false, + "enforced": false + } + ], + "afterRawComparisons": [ + { + "name": "switchLabelColor", + "scenario": "dark/custom=false/TSwitchVariant.icon/value=false", + "actual": "#38ffffff", + "expected": "#ff383838", + "matches": false, + "enforced": false + }, + { + "name": "switchLabelColor", + "scenario": "dark/custom=false/TSwitchVariant.text/value=false", + "actual": "#38ffffff", + "expected": "#ff383838", + "matches": false, + "enforced": false + }, + { + "name": "switchLabelColor", + "scenario": "dark/custom=true/TSwitchVariant.icon/value=false", + "actual": "#ff353c8c", + "expected": "#ff302d69", + "matches": false, + "enforced": false + }, + { + "name": "switchLabelColor", + "scenario": "dark/custom=true/TSwitchVariant.text/value=false", + "actual": "#ff353c8c", + "expected": "#ff302d69", + "matches": false, + "enforced": false + }, + { + "name": "switchLabelColor", + "scenario": "light/custom=false/TSwitchVariant.icon/value=false", + "actual": "#42000000", + "expected": "#ffdcdcdc", + "matches": false, + "enforced": false + }, + { + "name": "switchLabelColor", + "scenario": "light/custom=false/TSwitchVariant.text/value=false", + "actual": "#42000000", + "expected": "#ffdcdcdc", + "matches": false, + "enforced": false + }, + { + "name": "switchLabelColor", + "scenario": "light/custom=true/TSwitchVariant.icon/value=false", + "actual": "#ff353c8c", + "expected": "#ff302d69", + "matches": false, + "enforced": false + }, + { + "name": "switchLabelColor", + "scenario": "light/custom=true/TSwitchVariant.text/value=false", + "actual": "#ff353c8c", + "expected": "#ff302d69", + "matches": false, + "enforced": false + } + ], + "currentContractWitnesses": [], + "runtimeResolved": false, + "finalPaintVerified": false + }, + { + "name": "switchLargeWidth", + "disposition": "implementation-plan-pending", + "action": "在Switch内部建立按size解析的私有几何值,直接传到实际RenderBox/Painter以实现large轨道实际宽度52;去除整件FittedBox统一缩放。大号外框52×32,Painter轨道也应52×32。", + "risk": "这是同一几何修复批次,不逐项打补丁;不将私有几何表暴露为新的公开配置源。", + "validation": "三尺寸×filled/text/icon×开/关×禁用/加载;测真实轨道、滑块、图标和字号。保留长文案、1/2/3倍字号、Theme插值、RTL手势;双SDK与Linux受影响Golden。", + "constraints": [ + "不新增尺寸/颜色状态源或defaultSize。", + "保留受控值、onChanged-null禁用、loading禁用、RTL拖动与语义。", + "按实际RenderBox/Painter尺寸验证,不能只断言外层SizedBox。", + "去除整体缩放后,默认大/中/小实际字号仍须16/14/12;Theme显式字号和无size文字自动增长保留,复用t_switch_typography_test的真实渲染尺度断言。" + ], + "contractReferences": [], + "beforeExamples": [ + { + "name": "switchLargeWidth", + "scenario": "dark/large/value=false/filled", + "actual": 51.42857143, + "expected": 52, + "matches": false, + "enforced": false + }, + { + "name": "switchLargeWidth", + "scenario": "dark/large/value=false/icon", + "actual": 51.42857143, + "expected": 52, + "matches": false, + "enforced": false + }, + { + "name": "switchLargeWidth", + "scenario": "dark/large/value=false/text", + "actual": 51.42857143, + "expected": 52, + "matches": false, + "enforced": false + }, + { + "name": "switchLargeWidth", + "scenario": "dark/large/value=true/filled", + "actual": 51.42857143, + "expected": 52, + "matches": false, + "enforced": false + }, + { + "name": "switchLargeWidth", + "scenario": "dark/large/value=true/icon", + "actual": 51.42857143, + "expected": 52, + "matches": false, + "enforced": false + }, + { + "name": "switchLargeWidth", + "scenario": "dark/large/value=true/text", + "actual": 51.42857143, + "expected": 52, + "matches": false, + "enforced": false + }, + { + "name": "switchLargeWidth", + "scenario": "light/large/value=false/filled", + "actual": 51.42857143, + "expected": 52, + "matches": false, + "enforced": false + }, + { + "name": "switchLargeWidth", + "scenario": "light/large/value=false/icon", + "actual": 51.42857143, + "expected": 52, + "matches": false, + "enforced": false + }, + { + "name": "switchLargeWidth", + "scenario": "light/large/value=false/text", + "actual": 51.42857143, + "expected": 52, + "matches": false, + "enforced": false + }, + { + "name": "switchLargeWidth", + "scenario": "light/large/value=true/filled", + "actual": 51.42857143, + "expected": 52, + "matches": false, + "enforced": false + }, + { + "name": "switchLargeWidth", + "scenario": "light/large/value=true/icon", + "actual": 51.42857143, + "expected": 52, + "matches": false, + "enforced": false + }, + { + "name": "switchLargeWidth", + "scenario": "light/large/value=true/text", + "actual": 51.42857143, + "expected": 52, + "matches": false, + "enforced": false + } + ], + "afterRawComparisons": [ + { + "name": "switchLargeWidth", + "scenario": "dark/large/value=false/filled", + "actual": 51.42857143, + "expected": 52, + "matches": false, + "enforced": false + }, + { + "name": "switchLargeWidth", + "scenario": "dark/large/value=false/icon", + "actual": 51.42857143, + "expected": 52, + "matches": false, + "enforced": false + }, + { + "name": "switchLargeWidth", + "scenario": "dark/large/value=false/text", + "actual": 51.42857143, + "expected": 52, + "matches": false, + "enforced": false + }, + { + "name": "switchLargeWidth", + "scenario": "dark/large/value=true/filled", + "actual": 51.42857143, + "expected": 52, + "matches": false, + "enforced": false + }, + { + "name": "switchLargeWidth", + "scenario": "dark/large/value=true/icon", + "actual": 51.42857143, + "expected": 52, + "matches": false, + "enforced": false + }, + { + "name": "switchLargeWidth", + "scenario": "dark/large/value=true/text", + "actual": 51.42857143, + "expected": 52, + "matches": false, + "enforced": false + }, + { + "name": "switchLargeWidth", + "scenario": "light/large/value=false/filled", + "actual": 51.42857143, + "expected": 52, + "matches": false, + "enforced": false + }, + { + "name": "switchLargeWidth", + "scenario": "light/large/value=false/icon", + "actual": 51.42857143, + "expected": 52, + "matches": false, + "enforced": false + }, + { + "name": "switchLargeWidth", + "scenario": "light/large/value=false/text", + "actual": 51.42857143, + "expected": 52, + "matches": false, + "enforced": false + }, + { + "name": "switchLargeWidth", + "scenario": "light/large/value=true/filled", + "actual": 51.42857143, + "expected": 52, + "matches": false, + "enforced": false + }, + { + "name": "switchLargeWidth", + "scenario": "light/large/value=true/icon", + "actual": 51.42857143, + "expected": 52, + "matches": false, + "enforced": false + }, + { + "name": "switchLargeWidth", + "scenario": "light/large/value=true/text", + "actual": 51.42857143, + "expected": 52, + "matches": false, + "enforced": false + } + ], + "currentContractWitnesses": [], + "runtimeResolved": false, + "finalPaintVerified": false + }, + { + "name": "switchSmallWidth", + "disposition": "implementation-plan-pending", + "action": "在Switch内部建立按size解析的私有几何值,直接传到实际RenderBox/Painter以实现small轨道实际宽度39;去除整件FittedBox统一缩放。小号外框39×24,Painter轨道也应39×24。", + "risk": "这是同一几何修复批次,不逐项打补丁;不将私有几何表暴露为新的公开配置源。", + "validation": "三尺寸×filled/text/icon×开/关×禁用/加载;测真实轨道、滑块、图标和字号。保留长文案、1/2/3倍字号、Theme插值、RTL手势;双SDK与Linux受影响Golden。", + "constraints": [ + "不新增尺寸/颜色状态源或defaultSize。", + "保留受控值、onChanged-null禁用、loading禁用、RTL拖动与语义。", + "按实际RenderBox/Painter尺寸验证,不能只断言外层SizedBox。", + "去除整体缩放后,默认大/中/小实际字号仍须16/14/12;Theme显式字号和无size文字自动增长保留,复用t_switch_typography_test的真实渲染尺度断言。" + ], + "contractReferences": [], + "beforeExamples": [ + { + "name": "switchSmallWidth", + "scenario": "dark/small/value=false/filled", + "actual": 38.57142857, + "expected": 39, + "matches": false, + "enforced": false + }, + { + "name": "switchSmallWidth", + "scenario": "dark/small/value=false/icon", + "actual": 38.57142857, + "expected": 39, + "matches": false, + "enforced": false + }, + { + "name": "switchSmallWidth", + "scenario": "dark/small/value=false/text", + "actual": 38.57142857, + "expected": 39, + "matches": false, + "enforced": false + }, + { + "name": "switchSmallWidth", + "scenario": "dark/small/value=true/filled", + "actual": 38.57142857, + "expected": 39, + "matches": false, + "enforced": false + }, + { + "name": "switchSmallWidth", + "scenario": "dark/small/value=true/icon", + "actual": 38.57142857, + "expected": 39, + "matches": false, + "enforced": false + }, + { + "name": "switchSmallWidth", + "scenario": "dark/small/value=true/text", + "actual": 38.57142857, + "expected": 39, + "matches": false, + "enforced": false + }, + { + "name": "switchSmallWidth", + "scenario": "light/small/value=false/filled", + "actual": 38.57142857, + "expected": 39, + "matches": false, + "enforced": false + }, + { + "name": "switchSmallWidth", + "scenario": "light/small/value=false/icon", + "actual": 38.57142857, + "expected": 39, + "matches": false, + "enforced": false + }, + { + "name": "switchSmallWidth", + "scenario": "light/small/value=false/text", + "actual": 38.57142857, + "expected": 39, + "matches": false, + "enforced": false + }, + { + "name": "switchSmallWidth", + "scenario": "light/small/value=true/filled", + "actual": 38.57142857, + "expected": 39, + "matches": false, + "enforced": false + }, + { + "name": "switchSmallWidth", + "scenario": "light/small/value=true/icon", + "actual": 38.57142857, + "expected": 39, + "matches": false, + "enforced": false + }, + { + "name": "switchSmallWidth", + "scenario": "light/small/value=true/text", + "actual": 38.57142857, + "expected": 39, + "matches": false, + "enforced": false + } + ], + "afterRawComparisons": [ + { + "name": "switchSmallWidth", + "scenario": "dark/small/value=false/filled", + "actual": 38.57142857, + "expected": 39, + "matches": false, + "enforced": false + }, + { + "name": "switchSmallWidth", + "scenario": "dark/small/value=false/icon", + "actual": 38.57142857, + "expected": 39, + "matches": false, + "enforced": false + }, + { + "name": "switchSmallWidth", + "scenario": "dark/small/value=false/text", + "actual": 38.57142857, + "expected": 39, + "matches": false, + "enforced": false + }, + { + "name": "switchSmallWidth", + "scenario": "dark/small/value=true/filled", + "actual": 38.57142857, + "expected": 39, + "matches": false, + "enforced": false + }, + { + "name": "switchSmallWidth", + "scenario": "dark/small/value=true/icon", + "actual": 38.57142857, + "expected": 39, + "matches": false, + "enforced": false + }, + { + "name": "switchSmallWidth", + "scenario": "dark/small/value=true/text", + "actual": 38.57142857, + "expected": 39, + "matches": false, + "enforced": false + }, + { + "name": "switchSmallWidth", + "scenario": "light/small/value=false/filled", + "actual": 38.57142857, + "expected": 39, + "matches": false, + "enforced": false + }, + { + "name": "switchSmallWidth", + "scenario": "light/small/value=false/icon", + "actual": 38.57142857, + "expected": 39, + "matches": false, + "enforced": false + }, + { + "name": "switchSmallWidth", + "scenario": "light/small/value=false/text", + "actual": 38.57142857, + "expected": 39, + "matches": false, + "enforced": false + }, + { + "name": "switchSmallWidth", + "scenario": "light/small/value=true/filled", + "actual": 38.57142857, + "expected": 39, + "matches": false, + "enforced": false + }, + { + "name": "switchSmallWidth", + "scenario": "light/small/value=true/icon", + "actual": 38.57142857, + "expected": 39, + "matches": false, + "enforced": false + }, + { + "name": "switchSmallWidth", + "scenario": "light/small/value=true/text", + "actual": 38.57142857, + "expected": 39, + "matches": false, + "enforced": false + } + ], + "currentContractWitnesses": [], + "runtimeResolved": false, + "finalPaintVerified": false + } + ] +} diff --git a/specs/060-token-difference-resolution/resolution-rules.json b/specs/060-token-difference-resolution/resolution-rules.json new file mode 100644 index 0000000000..74d597bd92 --- /dev/null +++ b/specs/060-token-difference-resolution/resolution-rules.json @@ -0,0 +1,401 @@ +{ + "baseline": "../059-component-token-runtime-evidence/runtime-review.json", + "scope": "31 runtime differences plus one platform geometry item; no final pixel acceptance implied", + "rows": [ + { + "name": "avatarBorderColor", + "disposition": "existing-contract-verified-visual-pending", + "action": "保留当前Flutter契约,不按旧CSS变量默认或覆盖能力修改生产实现;补当前契约的实际Widget断言。", + "contractReferences": [ + { + "file": "tdesign-component/lib/src/components/avatar/t_avatar_theme_data.dart", + "quote": "头像组成员描边颜色;未设置时使用 `bgColorContainer` Token。" + }, + { + "file": "specs/034-avatar-design-alignment/acceptance.md", + "quote": "明暗 Golden 中本次变更的头像组裁剪、边框与 `+5` 溢出文案符合设计稿" + } + ], + "validation": "保留旧目标原始比较;新增contract/场景必须enforce=true且匹配,并覆盖浅/暗及自定义全局Token。" + }, + { + "name": "avatarIconSmallFontSize", + "disposition": "existing-contract-verified-visual-pending", + "action": "保留当前Flutter契约,不按旧CSS变量默认或覆盖能力修改生产实现;补当前契约的实际Widget断言。", + "contractReferences": [ + { + "file": "tdesign-component/lib/src/components/avatar/t_avatar_theme_data.dart", + "quote": "默认图标大小;未设置时小、中、大尺寸分别为 20、24、32 逻辑像素。" + } + ], + "validation": "保留旧目标原始比较;新增contract/场景必须enforce=true且匹配,并覆盖浅/暗及自定义全局Token。" + }, + { + "name": "avatarTextLargeFontSize", + "disposition": "existing-contract-verified-visual-pending", + "action": "保留当前Flutter契约,不按旧CSS变量默认或覆盖能力修改生产实现;补当前契约的实际Widget断言。", + "contractReferences": [ + { + "file": "specs/048-component-token-theme-ownership/spec.md", + "quote": "字符头像仍按 `size` 使用内置字号与字重" + }, + { + "file": "specs/034-avatar-design-alignment/spec.md", + "quote": "字符头像按大、中、小尺寸默认使用 20、16、14 字号和 Semibold 字重。" + } + ], + "validation": "保留旧目标原始比较;新增contract/场景必须enforce=true且匹配,并覆盖浅/暗及自定义全局Token。" + }, + { + "name": "avatarTextMediumFontSize", + "disposition": "existing-contract-verified-visual-pending", + "action": "保留当前Flutter契约,不按旧CSS变量默认或覆盖能力修改生产实现;补当前契约的实际Widget断言。", + "contractReferences": [ + { + "file": "specs/048-component-token-theme-ownership/spec.md", + "quote": "字符头像仍按 `size` 使用内置字号与字重" + }, + { + "file": "specs/034-avatar-design-alignment/spec.md", + "quote": "字符头像按大、中、小尺寸默认使用 20、16、14 字号和 Semibold 字重。" + } + ], + "validation": "保留旧目标原始比较;新增contract/场景必须enforce=true且匹配,并覆盖浅/暗及自定义全局Token。" + }, + { + "name": "avatarTextSmallFontSize", + "disposition": "existing-contract-verified-visual-pending", + "action": "保留当前Flutter契约,不按旧CSS变量默认或覆盖能力修改生产实现;补当前契约的实际Widget断言。", + "contractReferences": [ + { + "file": "specs/048-component-token-theme-ownership/spec.md", + "quote": "字符头像仍按 `size` 使用内置字号与字重" + }, + { + "file": "specs/034-avatar-design-alignment/spec.md", + "quote": "字符头像按大、中、小尺寸默认使用 20、16、14 字号和 Semibold 字重。" + } + ], + "validation": "保留旧目标原始比较;新增contract/场景必须enforce=true且匹配,并覆盖浅/暗及自定义全局Token。" + }, + { + "name": "buttonBorderWidth", + "disposition": "platform-geometry-plan-pending", + "action": "先在375宽目标小程序宿主记录button及::after的有效width/height、border-width、transform和transform-origin;连同基础库/OS/DPR存档,再裁定Flutter 1dp是否等效。", + "risk": "若存在200%伪元素和scale(0.5),4rpx在375宽下为2dp再缩至1dp;这是条件推导,不是已取得的宿主事实。没有缩放时才应按2dp讨论。", + "validation": "DPR2/3及浅/暗outline/ghost实际描边与边框盒;固定viewport和来源版本。不得由源码字面值直接改成2dp。" + }, + { + "name": "buttonDangerDisabledBg", + "disposition": "implementation-plan-pending", + "action": "建议保留语义errorColorDisabled,并明确记录与直接errorColor3覆盖的区别;确认语义优先策略后登记为Flutter契约差异。", + "risk": "不改当前默认像素;单独设置调色板errorColor3与语义errorColorDisabled时的结果不同。", + "validation": "同时测试只覆盖errorColor3、只覆盖errorColorDisabled、两者同时覆盖;已裁定语义优先后断言后者胜出。", + "constraints": [ + "保留primary深色禁用fontWhite4裁定。", + "保留实例ButtonStyle(含WidgetState)的最高优先级与Material样式隔离。", + "普通/渐变、浅/暗、启用/按压/禁用及悬浮/焦点必须复验。" + ] + }, + { + "name": "buttonDangerDisabledColor", + "disposition": "implementation-plan-pending", + "action": "建议填充危险按钮禁用前景使用fontWhite1,保留危险禁用背景errorColorDisabled;必须先核对危险填充按钮的浅/暗设计节点。", + "risk": "当前通用禁用字色会变为白色层级,属于可见默认变化;不能沿用primary深色fontWhite4裁定。", + "validation": "核对危险背景上的对比及浅/暗最终颜色;显式实例disabled foreground仍优先,Linux定向Golden先无更新比对。", + "constraints": [ + "保留primary深色禁用fontWhite4裁定。", + "保留实例ButtonStyle(含WidgetState)的最高优先级与Material样式隔离。", + "普通/渐变、浅/暗、启用/按压/禁用及悬浮/焦点必须复验。" + ] + }, + { + "name": "buttonDangerOutlineDisabledColor", + "disposition": "implementation-plan-pending", + "action": "与危险填充禁用背景采用同一语义规则:建议前景和描边使用errorColorDisabled;不为旧CSS调色板引用新增独立入口。", + "risk": "默认主题不变;独立Token覆盖的优先级需要文档化。", + "validation": "前景与描边必须同源;覆盖errorColor3/errorColorDisabled及实例ButtonStyle时分别断言。", + "constraints": [ + "保留primary深色禁用fontWhite4裁定。", + "保留实例ButtonStyle(含WidgetState)的最高优先级与Material样式隔离。", + "普通/渐变、浅/暗、启用/按压/禁用及悬浮/焦点必须复验。" + ] + }, + { + "name": "buttonDangerTextDisabledColor", + "disposition": "implementation-plan-pending", + "action": "建议文字危险按钮禁用前景使用errorColorDisabled;不机械复制冻结源码fontWhite1,以免浅色容器出现白底白字。取得设计裁定后再实施。", + "risk": "当前通用禁用字色会变成危险语义禁用色;需同时核对文字按钮背景和可读性。", + "validation": "分别验证填充与文字分支;禁止复用同一disabled helper而把文字分支变成白字;实例状态样式优先。", + "constraints": [ + "保留primary深色禁用fontWhite4裁定。", + "保留实例ButtonStyle(含WidgetState)的最高优先级与Material样式隔离。", + "普通/渐变、浅/暗、启用/按压/禁用及悬浮/焦点必须复验。" + ] + }, + { + "name": "buttonDefaultActiveBgColor", + "disposition": "implementation-plan-pending", + "action": "拟将_resolveFillColors调用的_pressedBackgroundColor默认配色改为bgColorComponentActive;并让既有hasPressedBackground检测关闭重复pressed overlay。", + "risk": "普通与渐变/自定义背景必须按实际路径区分;默认填充按压视觉变化。", + "validation": "真实指针按下保持、释放、取消、禁用切换;浅/暗下断言背景及overlay,P0 stateful背景不能被二次叠色。", + "constraints": [ + "保留primary深色禁用fontWhite4裁定。", + "保留实例ButtonStyle(含WidgetState)的最高优先级与Material样式隔离。", + "普通/渐变、浅/暗、启用/按压/禁用及悬浮/焦点必须复验。" + ] + }, + { + "name": "buttonGhostBorderColor", + "disposition": "fixed-runtime-verified-visual-pending", + "action": "默认配色启用态前景/描边统一回退textColorAnti;禁用fontWhite4与实例ButtonStyle优先级不变。", + "source": "tdesign-component/lib/src/components/button/t_button_resolve.dart", + "validation": "检查独立textColorAnti/fontWhite1,实际Text前景与Material边框一致;默认主题两Token相等,默认像素不变。" + }, + { + "name": "buttonGhostColor", + "disposition": "fixed-runtime-verified-visual-pending", + "action": "默认配色启用态前景/描边统一回退textColorAnti;禁用fontWhite4与实例ButtonStyle优先级不变。", + "source": "tdesign-component/lib/src/components/button/t_button_resolve.dart", + "validation": "检查独立textColorAnti/fontWhite1,实际Text前景与Material边框一致;默认主题两Token相等,默认像素不变。" + }, + { + "name": "buttonGhostDangerHoverColor", + "disposition": "implementation-plan-pending", + "action": "与ghost交互统一裁定;如按目标改变前景/描边,危险色按压取errorColorActive,避免只改文字遗漏边框。", + "risk": "须同时评估Ink层和透明容器上的实际视觉;不能把一次getter修正当作像素验收。", + "validation": "独立覆盖errorColor/errorColorActive,按下/释放/禁用均检查前景、边框和实例优先级。", + "constraints": [ + "保留primary深色禁用fontWhite4裁定。", + "保留实例ButtonStyle(含WidgetState)的最高优先级与Material样式隔离。", + "普通/渐变、浅/暗、启用/按压/禁用及悬浮/焦点必须复验。" + ] + }, + { + "name": "buttonGhostHoverColor", + "disposition": "implementation-plan-pending", + "action": "建议先沿用Spec009的Flutter Ink状态层契约;取得目标按压设计后记录平台交互例外。若要求前景随按压变化,则默认ghost前景/边框用fontWhite2,并以已产生的前景/边框反馈抑制重复pressed overlay。", + "risk": "现有12%前景色状态层与冻结CSS前景变化不能只用字段相等判断视觉等价;必须检查实际合成结果。", + "validation": "真实按下/释放/取消、hover/focus、透明背景及P0透明overlay;已产生反馈时不得重复叠加,禁用始终无反馈。", + "constraints": [ + "保留primary深色禁用fontWhite4裁定。", + "保留实例ButtonStyle(含WidgetState)的最高优先级与Material样式隔离。", + "普通/渐变、浅/暗、启用/按压/禁用及悬浮/焦点必须复验。" + ] + }, + { + "name": "buttonGhostPrimaryHoverColor", + "disposition": "implementation-plan-pending", + "action": "与默认ghost采用同一交互裁定;如按目标改变前景/描边,主色按压取brandColorActive,且与overlay反馈统一解析。", + "risk": "不新加activeColor入口;保持实例ButtonStyle拥有最终状态样式。", + "validation": "独立覆盖brandColor与brandColorActive,检查真实按压的Text与Material边框及overlay组合。", + "constraints": [ + "保留primary深色禁用fontWhite4裁定。", + "保留实例ButtonStyle(含WidgetState)的最高优先级与Material样式隔离。", + "普通/渐变、浅/暗、启用/按压/禁用及悬浮/焦点必须复验。" + ] + }, + { + "name": "buttonLightActiveBgColor", + "disposition": "implementation-plan-pending", + "action": "拟将_pressedBackgroundColor浅色配色改为brandColorLightActive,避免使用brandColorFocus;沿同一resolve路径覆盖普通分支。", + "risk": "浅色填充按压色变化;焦点色不应被当作按压默认。", + "validation": "独立设置brandColorFocus和brandColorLightActive,确认按压读取后者;复验焦点反馈和实例stateful ButtonStyle。", + "constraints": [ + "保留primary深色禁用fontWhite4裁定。", + "保留实例ButtonStyle(含WidgetState)的最高优先级与Material样式隔离。", + "普通/渐变、浅/暗、启用/按压/禁用及悬浮/焦点必须复验。" + ] + }, + { + "name": "emptyActionMarginTop", + "disposition": "existing-contract-verified-visual-pending", + "action": "保留当前Flutter契约,不按旧CSS变量默认或覆盖能力修改生产实现;补当前契约的实际Widget断言。", + "contractReferences": [ + { + "file": "specs/031-empty-design-alignment/spec.md", + "quote": "图片优先于图标,描述始终可选;操作 Widget 非空时以 32 间距展示。" + } + ], + "validation": "保留旧目标原始比较;新增contract/场景必须enforce=true且匹配,并覆盖浅/暗及自定义全局Token。" + }, + { + "name": "emptyDescriptionMarginTop", + "disposition": "existing-contract-verified-visual-pending", + "action": "保留当前Flutter契约,不按旧CSS变量默认或覆盖能力修改生产实现;补当前契约的实际Widget断言。", + "contractReferences": [ + { + "file": "specs/031-empty-design-alignment/spec.md", + "quote": "默认图标 96,图标/图片到描述间距分别为 22/16。" + } + ], + "validation": "保留旧目标原始比较;新增contract/场景必须enforce=true且匹配,并覆盖浅/暗及自定义全局Token。" + }, + { + "name": "inputBorderColor", + "disposition": "implementation-plan-pending", + "action": "拟仅将TInput._borderColor中normal分支由componentBorder改为componentStroke;保留focused/status和显式Theme边框策略,先核对Input分隔线设计。", + "risk": "浅色与暗色默认分隔线颜色均变化;FormItem外层分隔线与Input自身分隔线需避免双线。", + "validation": "独立覆盖componentBorder/componentStroke;正常、聚焦、禁用、success/warning/error及borderless/FormItem组合均需Widget与定向Golden。", + "constraints": [ + "保留TInputThemeData显式borderColor及focus/status语义色。", + "FormItem组合的单次内边距和分隔线所有权不得重复。" + ] + }, + { + "name": "inputVerticalPadding", + "disposition": "existing-contract-verified-visual-pending", + "action": "保留当前Flutter契约,不按旧CSS变量默认或覆盖能力修改生产实现;补当前契约的实际Widget断言。", + "contractReferences": [ + { + "file": "tdesign-component/lib/src/components/input/t_input_theme_data.dart", + "quote": "null 时在 TFormItem 作用域内为零,独立输入框为四周 16 逻辑像素" + } + ], + "validation": "保留旧目标原始比较;新增contract/场景必须enforce=true且匹配,并覆盖浅/暗及自定义全局Token。" + }, + { + "name": "switchDotLargeSize", + "disposition": "implementation-plan-pending", + "action": "在Switch内部建立按size解析的私有几何值,直接传到实际RenderBox/Painter以实现大号普通滑块直径26;去除整件FittedBox统一缩放。有图文/加载或开启态按26绘制。", + "risk": "这是同一几何修复批次,不逐项打补丁;不将私有几何表暴露为新的公开配置源。", + "validation": "三尺寸×filled/text/icon×开/关×禁用/加载;测真实轨道、滑块、图标和字号。保留长文案、1/2/3倍字号、Theme插值、RTL手势;双SDK与Linux受影响Golden。", + "constraints": [ + "不新增尺寸/颜色状态源或defaultSize。", + "保留受控值、onChanged-null禁用、loading禁用、RTL拖动与语义。", + "按实际RenderBox/Painter尺寸验证,不能只断言外层SizedBox。", + "去除整体缩放后,默认大/中/小实际字号仍须16/14/12;Theme显式字号和无size文字自动增长保留,复用t_switch_typography_test的真实渲染尺度断言。" + ] + }, + { + "name": "switchDotPlainLargeSize", + "disposition": "implementation-plan-pending", + "action": "在Switch内部建立按size解析的私有几何值,直接传到实际RenderBox/Painter以实现大号无图文未选中滑块直径22;去除整件FittedBox统一缩放。plain条件同冻结WXML,开启态回到普通26。", + "risk": "这是同一几何修复批次,不逐项打补丁;不将私有几何表暴露为新的公开配置源。", + "validation": "三尺寸×filled/text/icon×开/关×禁用/加载;测真实轨道、滑块、图标和字号。保留长文案、1/2/3倍字号、Theme插值、RTL手势;双SDK与Linux受影响Golden。", + "constraints": [ + "不新增尺寸/颜色状态源或defaultSize。", + "保留受控值、onChanged-null禁用、loading禁用、RTL拖动与语义。", + "按实际RenderBox/Painter尺寸验证,不能只断言外层SizedBox。", + "去除整体缩放后,默认大/中/小实际字号仍须16/14/12;Theme显式字号和无size文字自动增长保留,复用t_switch_typography_test的真实渲染尺度断言。" + ] + }, + { + "name": "switchDotPlainSize", + "disposition": "implementation-plan-pending", + "action": "在Switch内部建立按size解析的私有几何值,直接传到实际RenderBox/Painter以实现中号无图文未选中滑块直径18;去除整件FittedBox统一缩放。plain由无两项label、无两项icon且非loading决定,不能误用于图文/加载态。", + "risk": "这是同一几何修复批次,不逐项打补丁;不将私有几何表暴露为新的公开配置源。", + "validation": "三尺寸×filled/text/icon×开/关×禁用/加载;测真实轨道、滑块、图标和字号。保留长文案、1/2/3倍字号、Theme插值、RTL手势;双SDK与Linux受影响Golden。", + "constraints": [ + "不新增尺寸/颜色状态源或defaultSize。", + "保留受控值、onChanged-null禁用、loading禁用、RTL拖动与语义。", + "按实际RenderBox/Painter尺寸验证,不能只断言外层SizedBox。", + "去除整体缩放后,默认大/中/小实际字号仍须16/14/12;Theme显式字号和无size文字自动增长保留,复用t_switch_typography_test的真实渲染尺度断言。" + ] + }, + { + "name": "switchDotPlainSmallSize", + "disposition": "implementation-plan-pending", + "action": "在Switch内部建立按size解析的私有几何值,直接传到实际RenderBox/Painter以实现小号无图文未选中滑块直径14;去除整件FittedBox统一缩放。plain条件同冻结WXML,开启态回到普通18。", + "risk": "这是同一几何修复批次,不逐项打补丁;不将私有几何表暴露为新的公开配置源。", + "validation": "三尺寸×filled/text/icon×开/关×禁用/加载;测真实轨道、滑块、图标和字号。保留长文案、1/2/3倍字号、Theme插值、RTL手势;双SDK与Linux受影响Golden。", + "constraints": [ + "不新增尺寸/颜色状态源或defaultSize。", + "保留受控值、onChanged-null禁用、loading禁用、RTL拖动与语义。", + "按实际RenderBox/Painter尺寸验证,不能只断言外层SizedBox。", + "去除整体缩放后,默认大/中/小实际字号仍须16/14/12;Theme显式字号和无size文字自动增长保留,复用t_switch_typography_test的真实渲染尺度断言。" + ] + }, + { + "name": "switchDotSmallSize", + "disposition": "implementation-plan-pending", + "action": "在Switch内部建立按size解析的私有几何值,直接传到实际RenderBox/Painter以实现小号普通滑块直径18;去除整件FittedBox统一缩放。有图文/加载或开启态按18绘制。", + "risk": "这是同一几何修复批次,不逐项打补丁;不将私有几何表暴露为新的公开配置源。", + "validation": "三尺寸×filled/text/icon×开/关×禁用/加载;测真实轨道、滑块、图标和字号。保留长文案、1/2/3倍字号、Theme插值、RTL手势;双SDK与Linux受影响Golden。", + "constraints": [ + "不新增尺寸/颜色状态源或defaultSize。", + "保留受控值、onChanged-null禁用、loading禁用、RTL拖动与语义。", + "按实际RenderBox/Painter尺寸验证,不能只断言外层SizedBox。", + "去除整体缩放后,默认大/中/小实际字号仍须16/14/12;Theme显式字号和无size文字自动增长保留,复用t_switch_typography_test的真实渲染尺度断言。" + ] + }, + { + "name": "switchIconLargeSize", + "disposition": "implementation-plan-pending", + "action": "在Switch内部建立按size解析的私有几何值,直接传到实际RenderBox/Painter以实现大号图标实际尺寸24;去除整件FittedBox统一缩放。图标和26dp滑块保留各自真实尺寸。", + "risk": "这是同一几何修复批次,不逐项打补丁;不将私有几何表暴露为新的公开配置源。", + "validation": "三尺寸×filled/text/icon×开/关×禁用/加载;测真实轨道、滑块、图标和字号。保留长文案、1/2/3倍字号、Theme插值、RTL手势;双SDK与Linux受影响Golden。", + "constraints": [ + "不新增尺寸/颜色状态源或defaultSize。", + "保留受控值、onChanged-null禁用、loading禁用、RTL拖动与语义。", + "按实际RenderBox/Painter尺寸验证,不能只断言外层SizedBox。", + "去除整体缩放后,默认大/中/小实际字号仍须16/14/12;Theme显式字号和无size文字自动增长保留,复用t_switch_typography_test的真实渲染尺度断言。" + ] + }, + { + "name": "switchIconSize", + "disposition": "implementation-plan-pending", + "action": "在Switch内部建立按size解析的私有几何值,直接传到实际RenderBox/Painter以实现中号图标实际尺寸20;去除整件FittedBox统一缩放。独立图标尺寸不能随22dp滑块槽被缩成16。", + "risk": "这是同一几何修复批次,不逐项打补丁;不将私有几何表暴露为新的公开配置源。", + "validation": "三尺寸×filled/text/icon×开/关×禁用/加载;测真实轨道、滑块、图标和字号。保留长文案、1/2/3倍字号、Theme插值、RTL手势;双SDK与Linux受影响Golden。", + "constraints": [ + "不新增尺寸/颜色状态源或defaultSize。", + "保留受控值、onChanged-null禁用、loading禁用、RTL拖动与语义。", + "按实际RenderBox/Painter尺寸验证,不能只断言外层SizedBox。", + "去除整体缩放后,默认大/中/小实际字号仍须16/14/12;Theme显式字号和无size文字自动增长保留,复用t_switch_typography_test的真实渲染尺度断言。" + ] + }, + { + "name": "switchIconSmallSize", + "disposition": "implementation-plan-pending", + "action": "在Switch内部建立按size解析的私有几何值,直接传到实际RenderBox/Painter以实现小号图标实际尺寸16;去除整件FittedBox统一缩放。图标和18dp滑块保留各自真实尺寸。", + "risk": "这是同一几何修复批次,不逐项打补丁;不将私有几何表暴露为新的公开配置源。", + "validation": "三尺寸×filled/text/icon×开/关×禁用/加载;测真实轨道、滑块、图标和字号。保留长文案、1/2/3倍字号、Theme插值、RTL手势;双SDK与Linux受影响Golden。", + "constraints": [ + "不新增尺寸/颜色状态源或defaultSize。", + "保留受控值、onChanged-null禁用、loading禁用、RTL拖动与语义。", + "按实际RenderBox/Painter尺寸验证,不能只断言外层SizedBox。", + "去除整体缩放后,默认大/中/小实际字号仍须16/14/12;Theme显式字号和无size文字自动增长保留,复用t_switch_typography_test的真实渲染尺度断言。" + ] + }, + { + "name": "switchLabelColor", + "disposition": "implementation-plan-pending", + "action": "拟将TSwitchResolve.thumbContentOffColor默认回退改为bgColorSecondaryContainerActive,同步公开dartdoc;Theme显式值与禁用分支保留。", + "risk": "正常未选中文字/图标颜色变化;已记录的禁用/加载分层不变。", + "validation": "分别验证text/icon、on/off、enabled/disabled/loading、浅/暗、全局Token与组件Theme独立覆盖;保留用户自定义前景。", + "constraints": [ + "不新增尺寸/颜色状态源或defaultSize。", + "保留受控值、onChanged-null禁用、loading禁用、RTL拖动与语义。", + "按实际RenderBox/Painter尺寸验证,不能只断言外层SizedBox。", + "去除整体缩放后,默认大/中/小实际字号仍须16/14/12;Theme显式字号和无size文字自动增长保留,复用t_switch_typography_test的真实渲染尺度断言。" + ] + }, + { + "name": "switchLargeWidth", + "disposition": "implementation-plan-pending", + "action": "在Switch内部建立按size解析的私有几何值,直接传到实际RenderBox/Painter以实现large轨道实际宽度52;去除整件FittedBox统一缩放。大号外框52×32,Painter轨道也应52×32。", + "risk": "这是同一几何修复批次,不逐项打补丁;不将私有几何表暴露为新的公开配置源。", + "validation": "三尺寸×filled/text/icon×开/关×禁用/加载;测真实轨道、滑块、图标和字号。保留长文案、1/2/3倍字号、Theme插值、RTL手势;双SDK与Linux受影响Golden。", + "constraints": [ + "不新增尺寸/颜色状态源或defaultSize。", + "保留受控值、onChanged-null禁用、loading禁用、RTL拖动与语义。", + "按实际RenderBox/Painter尺寸验证,不能只断言外层SizedBox。", + "去除整体缩放后,默认大/中/小实际字号仍须16/14/12;Theme显式字号和无size文字自动增长保留,复用t_switch_typography_test的真实渲染尺度断言。" + ] + }, + { + "name": "switchSmallWidth", + "disposition": "implementation-plan-pending", + "action": "在Switch内部建立按size解析的私有几何值,直接传到实际RenderBox/Painter以实现small轨道实际宽度39;去除整件FittedBox统一缩放。小号外框39×24,Painter轨道也应39×24。", + "risk": "这是同一几何修复批次,不逐项打补丁;不将私有几何表暴露为新的公开配置源。", + "validation": "三尺寸×filled/text/icon×开/关×禁用/加载;测真实轨道、滑块、图标和字号。保留长文案、1/2/3倍字号、Theme插值、RTL手势;双SDK与Linux受影响Golden。", + "constraints": [ + "不新增尺寸/颜色状态源或defaultSize。", + "保留受控值、onChanged-null禁用、loading禁用、RTL拖动与语义。", + "按实际RenderBox/Painter尺寸验证,不能只断言外层SizedBox。", + "去除整体缩放后,默认大/中/小实际字号仍须16/14/12;Theme显式字号和无size文字自动增长保留,复用t_switch_typography_test的真实渲染尺度断言。" + ] + } + ] +} diff --git a/specs/060-token-difference-resolution/runtime-observations.json b/specs/060-token-difference-resolution/runtime-observations.json new file mode 100644 index 0000000000..3a425955c3 --- /dev/null +++ b/specs/060-token-difference-resolution/runtime-observations.json @@ -0,0 +1,8613 @@ +{ + "identicalAcrossSdks": true, + "observations": [ + { + "name": "avatarBgColor", + "scenario": "dark/custom=false/large", + "actual": "#ff173463", + "expected": "#ff173463", + "matches": true, + "enforced": true + }, + { + "name": "avatarBgColor", + "scenario": "dark/custom=false/medium", + "actual": "#ff173463", + "expected": "#ff173463", + "matches": true, + "enforced": true + }, + { + "name": "avatarBgColor", + "scenario": "dark/custom=false/small", + "actual": "#ff173463", + "expected": "#ff173463", + "matches": true, + "enforced": true + }, + { + "name": "avatarBgColor", + "scenario": "dark/custom=true/large", + "actual": "#ff260f23", + "expected": "#ff260f23", + "matches": true, + "enforced": true + }, + { + "name": "avatarBgColor", + "scenario": "dark/custom=true/medium", + "actual": "#ff260f23", + "expected": "#ff260f23", + "matches": true, + "enforced": true + }, + { + "name": "avatarBgColor", + "scenario": "dark/custom=true/small", + "actual": "#ff260f23", + "expected": "#ff260f23", + "matches": true, + "enforced": true + }, + { + "name": "avatarBgColor", + "scenario": "light/custom=false/large", + "actual": "#ffd9e1ff", + "expected": "#ffd9e1ff", + "matches": true, + "enforced": true + }, + { + "name": "avatarBgColor", + "scenario": "light/custom=false/medium", + "actual": "#ffd9e1ff", + "expected": "#ffd9e1ff", + "matches": true, + "enforced": true + }, + { + "name": "avatarBgColor", + "scenario": "light/custom=false/small", + "actual": "#ffd9e1ff", + "expected": "#ffd9e1ff", + "matches": true, + "enforced": true + }, + { + "name": "avatarBgColor", + "scenario": "light/custom=true/large", + "actual": "#ff260f23", + "expected": "#ff260f23", + "matches": true, + "enforced": true + }, + { + "name": "avatarBgColor", + "scenario": "light/custom=true/medium", + "actual": "#ff260f23", + "expected": "#ff260f23", + "matches": true, + "enforced": true + }, + { + "name": "avatarBgColor", + "scenario": "light/custom=true/small", + "actual": "#ff260f23", + "expected": "#ff260f23", + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderColor", + "scenario": "contract/dark/custom=false/large/group-border", + "actual": "#ff242424", + "expected": "#ff242424", + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderColor", + "scenario": "contract/dark/custom=false/large/group-border", + "actual": "#ff242424", + "expected": "#ff242424", + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderColor", + "scenario": "contract/dark/custom=false/medium/group-border", + "actual": "#ff242424", + "expected": "#ff242424", + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderColor", + "scenario": "contract/dark/custom=false/medium/group-border", + "actual": "#ff242424", + "expected": "#ff242424", + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderColor", + "scenario": "contract/dark/custom=false/small/group-border", + "actual": "#ff242424", + "expected": "#ff242424", + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderColor", + "scenario": "contract/dark/custom=false/small/group-border", + "actual": "#ff242424", + "expected": "#ff242424", + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderColor", + "scenario": "contract/dark/custom=true/large/group-border", + "actual": "#ff2e275b", + "expected": "#ff2e275b", + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderColor", + "scenario": "contract/dark/custom=true/large/group-border", + "actual": "#ff2e275b", + "expected": "#ff2e275b", + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderColor", + "scenario": "contract/dark/custom=true/medium/group-border", + "actual": "#ff2e275b", + "expected": "#ff2e275b", + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderColor", + "scenario": "contract/dark/custom=true/medium/group-border", + "actual": "#ff2e275b", + "expected": "#ff2e275b", + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderColor", + "scenario": "contract/dark/custom=true/small/group-border", + "actual": "#ff2e275b", + "expected": "#ff2e275b", + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderColor", + "scenario": "contract/dark/custom=true/small/group-border", + "actual": "#ff2e275b", + "expected": "#ff2e275b", + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderColor", + "scenario": "contract/light/custom=false/large/group-border", + "actual": "#ffffffff", + "expected": "#ffffffff", + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderColor", + "scenario": "contract/light/custom=false/large/group-border", + "actual": "#ffffffff", + "expected": "#ffffffff", + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderColor", + "scenario": "contract/light/custom=false/medium/group-border", + "actual": "#ffffffff", + "expected": "#ffffffff", + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderColor", + "scenario": "contract/light/custom=false/medium/group-border", + "actual": "#ffffffff", + "expected": "#ffffffff", + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderColor", + "scenario": "contract/light/custom=false/small/group-border", + "actual": "#ffffffff", + "expected": "#ffffffff", + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderColor", + "scenario": "contract/light/custom=false/small/group-border", + "actual": "#ffffffff", + "expected": "#ffffffff", + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderColor", + "scenario": "contract/light/custom=true/large/group-border", + "actual": "#ff2e275b", + "expected": "#ff2e275b", + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderColor", + "scenario": "contract/light/custom=true/large/group-border", + "actual": "#ff2e275b", + "expected": "#ff2e275b", + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderColor", + "scenario": "contract/light/custom=true/medium/group-border", + "actual": "#ff2e275b", + "expected": "#ff2e275b", + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderColor", + "scenario": "contract/light/custom=true/medium/group-border", + "actual": "#ff2e275b", + "expected": "#ff2e275b", + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderColor", + "scenario": "contract/light/custom=true/small/group-border", + "actual": "#ff2e275b", + "expected": "#ff2e275b", + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderColor", + "scenario": "contract/light/custom=true/small/group-border", + "actual": "#ff2e275b", + "expected": "#ff2e275b", + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderColor", + "scenario": "dark/custom=false/large", + "actual": "#ff242424", + "expected": "#ffffffff", + "matches": false, + "enforced": false + }, + { + "name": "avatarBorderColor", + "scenario": "dark/custom=false/large", + "actual": "#ff242424", + "expected": "#ffffffff", + "matches": false, + "enforced": false + }, + { + "name": "avatarBorderColor", + "scenario": "dark/custom=false/medium", + "actual": "#ff242424", + "expected": "#ffffffff", + "matches": false, + "enforced": false + }, + { + "name": "avatarBorderColor", + "scenario": "dark/custom=false/medium", + "actual": "#ff242424", + "expected": "#ffffffff", + "matches": false, + "enforced": false + }, + { + "name": "avatarBorderColor", + "scenario": "dark/custom=false/small", + "actual": "#ff242424", + "expected": "#ffffffff", + "matches": false, + "enforced": false + }, + { + "name": "avatarBorderColor", + "scenario": "dark/custom=false/small", + "actual": "#ff242424", + "expected": "#ffffffff", + "matches": false, + "enforced": false + }, + { + "name": "avatarBorderColor", + "scenario": "dark/custom=true/large", + "actual": "#ff2e275b", + "expected": "#ffffffff", + "matches": false, + "enforced": false + }, + { + "name": "avatarBorderColor", + "scenario": "dark/custom=true/large", + "actual": "#ff2e275b", + "expected": "#ffffffff", + "matches": false, + "enforced": false + }, + { + "name": "avatarBorderColor", + "scenario": "dark/custom=true/medium", + "actual": "#ff2e275b", + "expected": "#ffffffff", + "matches": false, + "enforced": false + }, + { + "name": "avatarBorderColor", + "scenario": "dark/custom=true/medium", + "actual": "#ff2e275b", + "expected": "#ffffffff", + "matches": false, + "enforced": false + }, + { + "name": "avatarBorderColor", + "scenario": "dark/custom=true/small", + "actual": "#ff2e275b", + "expected": "#ffffffff", + "matches": false, + "enforced": false + }, + { + "name": "avatarBorderColor", + "scenario": "dark/custom=true/small", + "actual": "#ff2e275b", + "expected": "#ffffffff", + "matches": false, + "enforced": false + }, + { + "name": "avatarBorderColor", + "scenario": "light/custom=false/large", + "actual": "#ffffffff", + "expected": "#ffffffff", + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderColor", + "scenario": "light/custom=false/large", + "actual": "#ffffffff", + "expected": "#ffffffff", + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderColor", + "scenario": "light/custom=false/medium", + "actual": "#ffffffff", + "expected": "#ffffffff", + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderColor", + "scenario": "light/custom=false/medium", + "actual": "#ffffffff", + "expected": "#ffffffff", + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderColor", + "scenario": "light/custom=false/small", + "actual": "#ffffffff", + "expected": "#ffffffff", + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderColor", + "scenario": "light/custom=false/small", + "actual": "#ffffffff", + "expected": "#ffffffff", + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderColor", + "scenario": "light/custom=true/large", + "actual": "#ff2e275b", + "expected": "#ffffffff", + "matches": false, + "enforced": false + }, + { + "name": "avatarBorderColor", + "scenario": "light/custom=true/large", + "actual": "#ff2e275b", + "expected": "#ffffffff", + "matches": false, + "enforced": false + }, + { + "name": "avatarBorderColor", + "scenario": "light/custom=true/medium", + "actual": "#ff2e275b", + "expected": "#ffffffff", + "matches": false, + "enforced": false + }, + { + "name": "avatarBorderColor", + "scenario": "light/custom=true/medium", + "actual": "#ff2e275b", + "expected": "#ffffffff", + "matches": false, + "enforced": false + }, + { + "name": "avatarBorderColor", + "scenario": "light/custom=true/small", + "actual": "#ff2e275b", + "expected": "#ffffffff", + "matches": false, + "enforced": false + }, + { + "name": "avatarBorderColor", + "scenario": "light/custom=true/small", + "actual": "#ff2e275b", + "expected": "#ffffffff", + "matches": false, + "enforced": false + }, + { + "name": "avatarBorderWidthLarge", + "scenario": "dark/custom=false/large", + "actual": 3, + "expected": 3, + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderWidthLarge", + "scenario": "dark/custom=false/large", + "actual": 3, + "expected": 3, + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderWidthLarge", + "scenario": "dark/custom=true/large", + "actual": 3, + "expected": 3, + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderWidthLarge", + "scenario": "dark/custom=true/large", + "actual": 3, + "expected": 3, + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderWidthLarge", + "scenario": "light/custom=false/large", + "actual": 3, + "expected": 3, + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderWidthLarge", + "scenario": "light/custom=false/large", + "actual": 3, + "expected": 3, + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderWidthLarge", + "scenario": "light/custom=true/large", + "actual": 3, + "expected": 3, + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderWidthLarge", + "scenario": "light/custom=true/large", + "actual": 3, + "expected": 3, + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderWidthMedium", + "scenario": "dark/custom=false/medium", + "actual": 2, + "expected": 2, + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderWidthMedium", + "scenario": "dark/custom=false/medium", + "actual": 2, + "expected": 2, + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderWidthMedium", + "scenario": "dark/custom=true/medium", + "actual": 2, + "expected": 2, + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderWidthMedium", + "scenario": "dark/custom=true/medium", + "actual": 2, + "expected": 2, + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderWidthMedium", + "scenario": "light/custom=false/medium", + "actual": 2, + "expected": 2, + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderWidthMedium", + "scenario": "light/custom=false/medium", + "actual": 2, + "expected": 2, + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderWidthMedium", + "scenario": "light/custom=true/medium", + "actual": 2, + "expected": 2, + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderWidthMedium", + "scenario": "light/custom=true/medium", + "actual": 2, + "expected": 2, + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderWidthSmall", + "scenario": "dark/custom=false/small", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderWidthSmall", + "scenario": "dark/custom=false/small", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderWidthSmall", + "scenario": "dark/custom=true/small", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderWidthSmall", + "scenario": "dark/custom=true/small", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderWidthSmall", + "scenario": "light/custom=false/small", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderWidthSmall", + "scenario": "light/custom=false/small", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderWidthSmall", + "scenario": "light/custom=true/small", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "avatarBorderWidthSmall", + "scenario": "light/custom=true/small", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "avatarCircleBorderRadius", + "scenario": "dark/custom=false/large", + "actual": 9999, + "expected": 9999, + "matches": true, + "enforced": true + }, + { + "name": "avatarCircleBorderRadius", + "scenario": "dark/custom=false/medium", + "actual": 9999, + "expected": 9999, + "matches": true, + "enforced": true + }, + { + "name": "avatarCircleBorderRadius", + "scenario": "dark/custom=false/small", + "actual": 9999, + "expected": 9999, + "matches": true, + "enforced": true + }, + { + "name": "avatarCircleBorderRadius", + "scenario": "dark/custom=true/large", + "actual": 23, + "expected": 23, + "matches": true, + "enforced": true + }, + { + "name": "avatarCircleBorderRadius", + "scenario": "dark/custom=true/medium", + "actual": 23, + "expected": 23, + "matches": true, + "enforced": true + }, + { + "name": "avatarCircleBorderRadius", + "scenario": "dark/custom=true/small", + "actual": 23, + "expected": 23, + "matches": true, + "enforced": true + }, + { + "name": "avatarCircleBorderRadius", + "scenario": "light/custom=false/large", + "actual": 9999, + "expected": 9999, + "matches": true, + "enforced": true + }, + { + "name": "avatarCircleBorderRadius", + "scenario": "light/custom=false/medium", + "actual": 9999, + "expected": 9999, + "matches": true, + "enforced": true + }, + { + "name": "avatarCircleBorderRadius", + "scenario": "light/custom=false/small", + "actual": 9999, + "expected": 9999, + "matches": true, + "enforced": true + }, + { + "name": "avatarCircleBorderRadius", + "scenario": "light/custom=true/large", + "actual": 23, + "expected": 23, + "matches": true, + "enforced": true + }, + { + "name": "avatarCircleBorderRadius", + "scenario": "light/custom=true/medium", + "actual": 23, + "expected": 23, + "matches": true, + "enforced": true + }, + { + "name": "avatarCircleBorderRadius", + "scenario": "light/custom=true/small", + "actual": 23, + "expected": 23, + "matches": true, + "enforced": true + }, + { + "name": "avatarContentColor", + "scenario": "dark/custom=false/large", + "actual": "#ff4582e6", + "expected": "#ff4582e6", + "matches": true, + "enforced": true + }, + { + "name": "avatarContentColor", + "scenario": "dark/custom=false/medium", + "actual": "#ff4582e6", + "expected": "#ff4582e6", + "matches": true, + "enforced": true + }, + { + "name": "avatarContentColor", + "scenario": "dark/custom=false/small", + "actual": "#ff4582e6", + "expected": "#ff4582e6", + "matches": true, + "enforced": true + }, + { + "name": "avatarContentColor", + "scenario": "dark/custom=true/large", + "actual": "#ff220307", + "expected": "#ff220307", + "matches": true, + "enforced": true + }, + { + "name": "avatarContentColor", + "scenario": "dark/custom=true/medium", + "actual": "#ff220307", + "expected": "#ff220307", + "matches": true, + "enforced": true + }, + { + "name": "avatarContentColor", + "scenario": "dark/custom=true/small", + "actual": "#ff220307", + "expected": "#ff220307", + "matches": true, + "enforced": true + }, + { + "name": "avatarContentColor", + "scenario": "light/custom=false/large", + "actual": "#ff0052d9", + "expected": "#ff0052d9", + "matches": true, + "enforced": true + }, + { + "name": "avatarContentColor", + "scenario": "light/custom=false/medium", + "actual": "#ff0052d9", + "expected": "#ff0052d9", + "matches": true, + "enforced": true + }, + { + "name": "avatarContentColor", + "scenario": "light/custom=false/small", + "actual": "#ff0052d9", + "expected": "#ff0052d9", + "matches": true, + "enforced": true + }, + { + "name": "avatarContentColor", + "scenario": "light/custom=true/large", + "actual": "#ff220307", + "expected": "#ff220307", + "matches": true, + "enforced": true + }, + { + "name": "avatarContentColor", + "scenario": "light/custom=true/medium", + "actual": "#ff220307", + "expected": "#ff220307", + "matches": true, + "enforced": true + }, + { + "name": "avatarContentColor", + "scenario": "light/custom=true/small", + "actual": "#ff220307", + "expected": "#ff220307", + "matches": true, + "enforced": true + }, + { + "name": "avatarIconLargeFontSize", + "scenario": "contract/dark/custom=false/large/icon-preset", + "actual": 32, + "expected": 32, + "matches": true, + "enforced": true + }, + { + "name": "avatarIconLargeFontSize", + "scenario": "contract/dark/custom=true/large/icon-preset", + "actual": 32, + "expected": 32, + "matches": true, + "enforced": true + }, + { + "name": "avatarIconLargeFontSize", + "scenario": "contract/light/custom=false/large/icon-preset", + "actual": 32, + "expected": 32, + "matches": true, + "enforced": true + }, + { + "name": "avatarIconLargeFontSize", + "scenario": "contract/light/custom=true/large/icon-preset", + "actual": 32, + "expected": 32, + "matches": true, + "enforced": true + }, + { + "name": "avatarIconLargeFontSize", + "scenario": "dark/custom=false/large", + "actual": 32, + "expected": 32, + "matches": true, + "enforced": true + }, + { + "name": "avatarIconLargeFontSize", + "scenario": "dark/custom=true/large", + "actual": 32, + "expected": 32, + "matches": true, + "enforced": true + }, + { + "name": "avatarIconLargeFontSize", + "scenario": "light/custom=false/large", + "actual": 32, + "expected": 32, + "matches": true, + "enforced": true + }, + { + "name": "avatarIconLargeFontSize", + "scenario": "light/custom=true/large", + "actual": 32, + "expected": 32, + "matches": true, + "enforced": true + }, + { + "name": "avatarIconMediumFontSize", + "scenario": "contract/dark/custom=false/medium/icon-preset", + "actual": 24, + "expected": 24, + "matches": true, + "enforced": true + }, + { + "name": "avatarIconMediumFontSize", + "scenario": "contract/dark/custom=true/medium/icon-preset", + "actual": 24, + "expected": 24, + "matches": true, + "enforced": true + }, + { + "name": "avatarIconMediumFontSize", + "scenario": "contract/light/custom=false/medium/icon-preset", + "actual": 24, + "expected": 24, + "matches": true, + "enforced": true + }, + { + "name": "avatarIconMediumFontSize", + "scenario": "contract/light/custom=true/medium/icon-preset", + "actual": 24, + "expected": 24, + "matches": true, + "enforced": true + }, + { + "name": "avatarIconMediumFontSize", + "scenario": "dark/custom=false/medium", + "actual": 24, + "expected": 24, + "matches": true, + "enforced": true + }, + { + "name": "avatarIconMediumFontSize", + "scenario": "dark/custom=true/medium", + "actual": 24, + "expected": 24, + "matches": true, + "enforced": true + }, + { + "name": "avatarIconMediumFontSize", + "scenario": "light/custom=false/medium", + "actual": 24, + "expected": 24, + "matches": true, + "enforced": true + }, + { + "name": "avatarIconMediumFontSize", + "scenario": "light/custom=true/medium", + "actual": 24, + "expected": 24, + "matches": true, + "enforced": true + }, + { + "name": "avatarIconSmallFontSize", + "scenario": "contract/dark/custom=false/small/icon-preset", + "actual": 20, + "expected": 20, + "matches": true, + "enforced": true + }, + { + "name": "avatarIconSmallFontSize", + "scenario": "contract/dark/custom=true/small/icon-preset", + "actual": 20, + "expected": 20, + "matches": true, + "enforced": true + }, + { + "name": "avatarIconSmallFontSize", + "scenario": "contract/light/custom=false/small/icon-preset", + "actual": 20, + "expected": 20, + "matches": true, + "enforced": true + }, + { + "name": "avatarIconSmallFontSize", + "scenario": "contract/light/custom=true/small/icon-preset", + "actual": 20, + "expected": 20, + "matches": true, + "enforced": true + }, + { + "name": "avatarIconSmallFontSize", + "scenario": "dark/custom=false/small", + "actual": 20, + "expected": 20, + "matches": true, + "enforced": true + }, + { + "name": "avatarIconSmallFontSize", + "scenario": "dark/custom=true/small", + "actual": 20, + "expected": 31, + "matches": false, + "enforced": false + }, + { + "name": "avatarIconSmallFontSize", + "scenario": "light/custom=false/small", + "actual": 20, + "expected": 20, + "matches": true, + "enforced": true + }, + { + "name": "avatarIconSmallFontSize", + "scenario": "light/custom=true/small", + "actual": 20, + "expected": 31, + "matches": false, + "enforced": false + }, + { + "name": "avatarLargeWidth", + "scenario": "dark/custom=false/large", + "actual": 64, + "expected": 64, + "matches": true, + "enforced": true + }, + { + "name": "avatarLargeWidth", + "scenario": "dark/custom=true/large", + "actual": 64, + "expected": 64, + "matches": true, + "enforced": true + }, + { + "name": "avatarLargeWidth", + "scenario": "light/custom=false/large", + "actual": 64, + "expected": 64, + "matches": true, + "enforced": true + }, + { + "name": "avatarLargeWidth", + "scenario": "light/custom=true/large", + "actual": 64, + "expected": 64, + "matches": true, + "enforced": true + }, + { + "name": "avatarMediumWidth", + "scenario": "dark/custom=false/medium", + "actual": 48, + "expected": 48, + "matches": true, + "enforced": true + }, + { + "name": "avatarMediumWidth", + "scenario": "dark/custom=true/medium", + "actual": 48, + "expected": 48, + "matches": true, + "enforced": true + }, + { + "name": "avatarMediumWidth", + "scenario": "light/custom=false/medium", + "actual": 48, + "expected": 48, + "matches": true, + "enforced": true + }, + { + "name": "avatarMediumWidth", + "scenario": "light/custom=true/medium", + "actual": 48, + "expected": 48, + "matches": true, + "enforced": true + }, + { + "name": "avatarRoundBorderRadius", + "scenario": "dark/custom=false/large", + "actual": 6, + "expected": 6, + "matches": true, + "enforced": true + }, + { + "name": "avatarRoundBorderRadius", + "scenario": "dark/custom=false/medium", + "actual": 6, + "expected": 6, + "matches": true, + "enforced": true + }, + { + "name": "avatarRoundBorderRadius", + "scenario": "dark/custom=false/small", + "actual": 6, + "expected": 6, + "matches": true, + "enforced": true + }, + { + "name": "avatarRoundBorderRadius", + "scenario": "dark/custom=true/large", + "actual": 13, + "expected": 13, + "matches": true, + "enforced": true + }, + { + "name": "avatarRoundBorderRadius", + "scenario": "dark/custom=true/medium", + "actual": 13, + "expected": 13, + "matches": true, + "enforced": true + }, + { + "name": "avatarRoundBorderRadius", + "scenario": "dark/custom=true/small", + "actual": 13, + "expected": 13, + "matches": true, + "enforced": true + }, + { + "name": "avatarRoundBorderRadius", + "scenario": "light/custom=false/large", + "actual": 6, + "expected": 6, + "matches": true, + "enforced": true + }, + { + "name": "avatarRoundBorderRadius", + "scenario": "light/custom=false/medium", + "actual": 6, + "expected": 6, + "matches": true, + "enforced": true + }, + { + "name": "avatarRoundBorderRadius", + "scenario": "light/custom=false/small", + "actual": 6, + "expected": 6, + "matches": true, + "enforced": true + }, + { + "name": "avatarRoundBorderRadius", + "scenario": "light/custom=true/large", + "actual": 13, + "expected": 13, + "matches": true, + "enforced": true + }, + { + "name": "avatarRoundBorderRadius", + "scenario": "light/custom=true/medium", + "actual": 13, + "expected": 13, + "matches": true, + "enforced": true + }, + { + "name": "avatarRoundBorderRadius", + "scenario": "light/custom=true/small", + "actual": 13, + "expected": 13, + "matches": true, + "enforced": true + }, + { + "name": "avatarSmallWidth", + "scenario": "dark/custom=false/small", + "actual": 40, + "expected": 40, + "matches": true, + "enforced": true + }, + { + "name": "avatarSmallWidth", + "scenario": "dark/custom=true/small", + "actual": 40, + "expected": 40, + "matches": true, + "enforced": true + }, + { + "name": "avatarSmallWidth", + "scenario": "light/custom=false/small", + "actual": 40, + "expected": 40, + "matches": true, + "enforced": true + }, + { + "name": "avatarSmallWidth", + "scenario": "light/custom=true/small", + "actual": 40, + "expected": 40, + "matches": true, + "enforced": true + }, + { + "name": "avatarTextLargeFontSize", + "scenario": "contract/dark/custom=false/large/text-preset", + "actual": 20, + "expected": 20, + "matches": true, + "enforced": true + }, + { + "name": "avatarTextLargeFontSize", + "scenario": "contract/dark/custom=true/large/text-preset", + "actual": 20, + "expected": 20, + "matches": true, + "enforced": true + }, + { + "name": "avatarTextLargeFontSize", + "scenario": "contract/light/custom=false/large/text-preset", + "actual": 20, + "expected": 20, + "matches": true, + "enforced": true + }, + { + "name": "avatarTextLargeFontSize", + "scenario": "contract/light/custom=true/large/text-preset", + "actual": 20, + "expected": 20, + "matches": true, + "enforced": true + }, + { + "name": "avatarTextLargeFontSize", + "scenario": "dark/custom=false/large", + "actual": 20, + "expected": 20, + "matches": true, + "enforced": true + }, + { + "name": "avatarTextLargeFontSize", + "scenario": "dark/custom=true/large", + "actual": 20, + "expected": 31, + "matches": false, + "enforced": false + }, + { + "name": "avatarTextLargeFontSize", + "scenario": "light/custom=false/large", + "actual": 20, + "expected": 20, + "matches": true, + "enforced": true + }, + { + "name": "avatarTextLargeFontSize", + "scenario": "light/custom=true/large", + "actual": 20, + "expected": 31, + "matches": false, + "enforced": false + }, + { + "name": "avatarTextMediumFontSize", + "scenario": "contract/dark/custom=false/medium/text-preset", + "actual": 16, + "expected": 16, + "matches": true, + "enforced": true + }, + { + "name": "avatarTextMediumFontSize", + "scenario": "contract/dark/custom=true/medium/text-preset", + "actual": 16, + "expected": 16, + "matches": true, + "enforced": true + }, + { + "name": "avatarTextMediumFontSize", + "scenario": "contract/light/custom=false/medium/text-preset", + "actual": 16, + "expected": 16, + "matches": true, + "enforced": true + }, + { + "name": "avatarTextMediumFontSize", + "scenario": "contract/light/custom=true/medium/text-preset", + "actual": 16, + "expected": 16, + "matches": true, + "enforced": true + }, + { + "name": "avatarTextMediumFontSize", + "scenario": "dark/custom=false/medium", + "actual": 16, + "expected": 16, + "matches": true, + "enforced": true + }, + { + "name": "avatarTextMediumFontSize", + "scenario": "dark/custom=true/medium", + "actual": 16, + "expected": 21, + "matches": false, + "enforced": false + }, + { + "name": "avatarTextMediumFontSize", + "scenario": "light/custom=false/medium", + "actual": 16, + "expected": 16, + "matches": true, + "enforced": true + }, + { + "name": "avatarTextMediumFontSize", + "scenario": "light/custom=true/medium", + "actual": 16, + "expected": 21, + "matches": false, + "enforced": false + }, + { + "name": "avatarTextSmallFontSize", + "scenario": "contract/dark/custom=false/small/text-preset", + "actual": 14, + "expected": 14, + "matches": true, + "enforced": true + }, + { + "name": "avatarTextSmallFontSize", + "scenario": "contract/dark/custom=true/small/text-preset", + "actual": 14, + "expected": 14, + "matches": true, + "enforced": true + }, + { + "name": "avatarTextSmallFontSize", + "scenario": "contract/light/custom=false/small/text-preset", + "actual": 14, + "expected": 14, + "matches": true, + "enforced": true + }, + { + "name": "avatarTextSmallFontSize", + "scenario": "contract/light/custom=true/small/text-preset", + "actual": 14, + "expected": 14, + "matches": true, + "enforced": true + }, + { + "name": "avatarTextSmallFontSize", + "scenario": "dark/custom=false/small", + "actual": 14, + "expected": 14, + "matches": true, + "enforced": true + }, + { + "name": "avatarTextSmallFontSize", + "scenario": "dark/custom=true/small", + "actual": 14, + "expected": 18, + "matches": false, + "enforced": false + }, + { + "name": "avatarTextSmallFontSize", + "scenario": "light/custom=false/small", + "actual": 14, + "expected": 14, + "matches": true, + "enforced": true + }, + { + "name": "avatarTextSmallFontSize", + "scenario": "light/custom=true/small", + "actual": 14, + "expected": 18, + "matches": false, + "enforced": false + }, + { + "name": "buttonBorderRadius", + "scenario": "dark/custom=false/extraSmall", + "actual": 6, + "expected": 6, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderRadius", + "scenario": "dark/custom=false/large", + "actual": 6, + "expected": 6, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderRadius", + "scenario": "dark/custom=false/medium", + "actual": 6, + "expected": 6, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderRadius", + "scenario": "dark/custom=false/small", + "actual": 6, + "expected": 6, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderRadius", + "scenario": "dark/custom=true/extraSmall", + "actual": 13, + "expected": 13, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderRadius", + "scenario": "dark/custom=true/large", + "actual": 13, + "expected": 13, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderRadius", + "scenario": "dark/custom=true/medium", + "actual": 13, + "expected": 13, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderRadius", + "scenario": "dark/custom=true/small", + "actual": 13, + "expected": 13, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderRadius", + "scenario": "light/custom=false/extraSmall", + "actual": 6, + "expected": 6, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderRadius", + "scenario": "light/custom=false/large", + "actual": 6, + "expected": 6, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderRadius", + "scenario": "light/custom=false/medium", + "actual": 6, + "expected": 6, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderRadius", + "scenario": "light/custom=false/small", + "actual": 6, + "expected": 6, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderRadius", + "scenario": "light/custom=true/extraSmall", + "actual": 13, + "expected": 13, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderRadius", + "scenario": "light/custom=true/large", + "actual": 13, + "expected": 13, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderRadius", + "scenario": "light/custom=true/medium", + "actual": 13, + "expected": 13, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderRadius", + "scenario": "light/custom=true/small", + "actual": 13, + "expected": 13, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "dark/custom=false/outline/danger/disabled", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "dark/custom=false/outline/danger/idle", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "dark/custom=false/outline/danger/pressed", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "dark/custom=false/outline/defaultTheme/disabled", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "dark/custom=false/outline/defaultTheme/idle", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "dark/custom=false/outline/defaultTheme/pressed", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "dark/custom=false/outline/light/disabled", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "dark/custom=false/outline/light/idle", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "dark/custom=false/outline/light/pressed", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "dark/custom=false/outline/primary/disabled", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "dark/custom=false/outline/primary/idle", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "dark/custom=false/outline/primary/pressed", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "dark/custom=true/outline/danger/disabled", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "dark/custom=true/outline/danger/idle", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "dark/custom=true/outline/danger/pressed", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "dark/custom=true/outline/defaultTheme/disabled", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "dark/custom=true/outline/defaultTheme/idle", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "dark/custom=true/outline/defaultTheme/pressed", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "dark/custom=true/outline/light/disabled", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "dark/custom=true/outline/light/idle", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "dark/custom=true/outline/light/pressed", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "dark/custom=true/outline/primary/disabled", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "dark/custom=true/outline/primary/idle", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "dark/custom=true/outline/primary/pressed", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "light/custom=false/outline/danger/disabled", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "light/custom=false/outline/danger/idle", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "light/custom=false/outline/danger/pressed", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "light/custom=false/outline/defaultTheme/disabled", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "light/custom=false/outline/defaultTheme/idle", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "light/custom=false/outline/defaultTheme/pressed", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "light/custom=false/outline/light/disabled", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "light/custom=false/outline/light/idle", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "light/custom=false/outline/light/pressed", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "light/custom=false/outline/primary/disabled", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "light/custom=false/outline/primary/idle", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "light/custom=false/outline/primary/pressed", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "light/custom=true/outline/danger/disabled", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "light/custom=true/outline/danger/idle", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "light/custom=true/outline/danger/pressed", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "light/custom=true/outline/defaultTheme/disabled", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "light/custom=true/outline/defaultTheme/idle", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "light/custom=true/outline/defaultTheme/pressed", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "light/custom=true/outline/light/disabled", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "light/custom=true/outline/light/idle", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "light/custom=true/outline/light/pressed", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "light/custom=true/outline/primary/disabled", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "light/custom=true/outline/primary/idle", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonBorderWidth", + "scenario": "light/custom=true/outline/primary/pressed", + "actual": 1, + "expected": 1, + "matches": true, + "enforced": true + }, + { + "name": "buttonDangerActiveBgColor", + "scenario": "dark/custom=false/fill/danger/pressed", + "actual": "#ffa03f46", + "expected": "#ffa03f46", + "matches": true, + "enforced": true + }, + { + "name": "buttonDangerActiveBgColor", + "scenario": "dark/custom=true/fill/danger/pressed", + "actual": "#ff281531", + "expected": "#ff281531", + "matches": true, + "enforced": true + }, + { + "name": "buttonDangerActiveBgColor", + "scenario": "light/custom=false/fill/danger/pressed", + "actual": "#ffad352f", + "expected": "#ffad352f", + "matches": true, + "enforced": true + }, + { + "name": "buttonDangerActiveBgColor", + "scenario": "light/custom=true/fill/danger/pressed", + "actual": "#ff281531", + "expected": "#ff281531", + "matches": true, + "enforced": true + }, + { + "name": "buttonDangerBgColor", + "scenario": "dark/custom=false/fill/danger/idle", + "actual": "#ffc64751", + "expected": "#ffc64751", + "matches": true, + "enforced": true + }, + { + "name": "buttonDangerBgColor", + "scenario": "dark/custom=true/fill/danger/idle", + "actual": "#ff27122a", + "expected": "#ff27122a", + "matches": true, + "enforced": true + }, + { + "name": "buttonDangerBgColor", + "scenario": "light/custom=false/fill/danger/idle", + "actual": "#ffd54941", + "expected": "#ffd54941", + "matches": true, + "enforced": true + }, + { + "name": "buttonDangerBgColor", + "scenario": "light/custom=true/fill/danger/idle", + "actual": "#ff27122a", + "expected": "#ff27122a", + "matches": true, + "enforced": true + }, + { + "name": "buttonDangerColor", + "scenario": "dark/custom=false/fill/danger/idle", + "actual": "#e6ffffff", + "expected": "#e6ffffff", + "matches": true, + "enforced": true + }, + { + "name": "buttonDangerColor", + "scenario": "dark/custom=false/fill/danger/pressed", + "actual": "#e6ffffff", + "expected": "#e6ffffff", + "matches": true, + "enforced": true + }, + { + "name": "buttonDangerColor", + "scenario": "dark/custom=true/fill/danger/idle", + "actual": "#ff363f93", + "expected": "#ff363f93", + "matches": true, + "enforced": true + }, + { + "name": "buttonDangerColor", + "scenario": "dark/custom=true/fill/danger/pressed", + "actual": "#ff363f93", + "expected": "#ff363f93", + "matches": true, + "enforced": true + }, + { + "name": "buttonDangerColor", + "scenario": "light/custom=false/fill/danger/idle", + "actual": "#ffffffff", + "expected": "#ffffffff", + "matches": true, + "enforced": true + }, + { + "name": "buttonDangerColor", + "scenario": "light/custom=false/fill/danger/pressed", + "actual": "#ffffffff", + "expected": "#ffffffff", + "matches": true, + "enforced": true + }, + { + "name": "buttonDangerColor", + "scenario": "light/custom=true/fill/danger/idle", + "actual": "#ff363f93", + "expected": "#ff363f93", + "matches": true, + "enforced": true + }, + { + "name": "buttonDangerColor", + "scenario": "light/custom=true/fill/danger/pressed", + "actual": "#ff363f93", + "expected": "#ff363f93", + "matches": true, + "enforced": true + }, + { + "name": "buttonDangerDisabledBg", + "scenario": "dark/custom=false/fill/danger/disabled", + "actual": "#ff703439", + "expected": "#ff703439", + "matches": true, + "enforced": false + }, + { + "name": "buttonDangerDisabledBg", + "scenario": "dark/custom=true/fill/danger/disabled", + "actual": "#ff291838", + "expected": "#ff2a1b3f", + "matches": false, + "enforced": false + }, + { + "name": "buttonDangerDisabledBg", + "scenario": "light/custom=false/fill/danger/disabled", + "actual": "#ffffb9b0", + "expected": "#ffffb9b0", + "matches": true, + "enforced": false + }, + { + "name": "buttonDangerDisabledBg", + "scenario": "light/custom=true/fill/danger/disabled", + "actual": "#ff291838", + "expected": "#ff2a1b3f", + "matches": false, + "enforced": false + }, + { + "name": "buttonDangerDisabledColor", + "scenario": "dark/custom=false/fill/danger/disabled", + "actual": "#38ffffff", + "expected": "#e6ffffff", + "matches": false, + "enforced": false + }, + { + "name": "buttonDangerDisabledColor", + "scenario": "dark/custom=true/fill/danger/disabled", + "actual": "#ff353c8c", + "expected": "#ff37429a", + "matches": false, + "enforced": false + }, + { + "name": "buttonDangerDisabledColor", + "scenario": "light/custom=false/fill/danger/disabled", + "actual": "#42000000", + "expected": "#ffffffff", + "matches": false, + "enforced": false + }, + { + "name": "buttonDangerDisabledColor", + "scenario": "light/custom=true/fill/danger/disabled", + "actual": "#ff353c8c", + "expected": "#ff37429a", + "matches": false, + "enforced": false + }, + { + "name": "buttonDangerOutlineActiveBgColor", + "scenario": "dark/custom=false/outline/danger/pressed", + "actual": "#ff2c2c2c", + "expected": "#ff2c2c2c", + "matches": true, + "enforced": true + }, + { + "name": "buttonDangerOutlineActiveBgColor", + "scenario": "dark/custom=true/outline/danger/pressed", + "actual": "#ff2f2a62", + "expected": "#ff2f2a62", + "matches": true, + "enforced": true + }, + { + "name": "buttonDangerOutlineActiveBgColor", + "scenario": "light/custom=false/outline/danger/pressed", + "actual": "#ffe8e8e8", + "expected": "#ffe8e8e8", + "matches": true, + "enforced": true + }, + { + "name": "buttonDangerOutlineActiveBgColor", + "scenario": "light/custom=true/outline/danger/pressed", + "actual": "#ff2f2a62", + "expected": "#ff2f2a62", + "matches": true, + "enforced": true + }, + { + "name": "buttonDangerOutlineActiveBorderColor", + "scenario": "dark/custom=false/outline/danger/pressed", + "actual": "#ffa03f46", + "expected": "#ffa03f46", + "matches": true, + "enforced": true + }, + { + "name": "buttonDangerOutlineActiveBorderColor", + "scenario": "dark/custom=true/outline/danger/pressed", + "actual": "#ff281531", + "expected": "#ff281531", + "matches": true, + "enforced": true + }, + { + "name": "buttonDangerOutlineActiveBorderColor", + "scenario": "light/custom=false/outline/danger/pressed", + "actual": "#ffad352f", + "expected": "#ffad352f", + "matches": true, + "enforced": true + }, + { + "name": "buttonDangerOutlineActiveBorderColor", + "scenario": "light/custom=true/outline/danger/pressed", + "actual": "#ff281531", + "expected": "#ff281531", + "matches": true, + "enforced": true + }, + { + "name": "buttonDangerOutlineBorderColor", + "scenario": "dark/custom=false/outline/danger/idle", + "actual": "#ffc64751", + "expected": "#ffc64751", + "matches": true, + "enforced": true + }, + { + "name": "buttonDangerOutlineBorderColor", + "scenario": "dark/custom=true/outline/danger/idle", + "actual": "#ff27122a", + "expected": "#ff27122a", + "matches": true, + "enforced": true + }, + { + "name": "buttonDangerOutlineBorderColor", + "scenario": "light/custom=false/outline/danger/idle", + "actual": "#ffd54941", + "expected": "#ffd54941", + "matches": true, + "enforced": true + }, + { + "name": "buttonDangerOutlineBorderColor", + "scenario": "light/custom=true/outline/danger/idle", + "actual": "#ff27122a", + "expected": "#ff27122a", + "matches": true, + "enforced": true + }, + { + "name": "buttonDangerOutlineColor", + "scenario": "dark/custom=false/outline/danger/idle", + "actual": "#ffc64751", + "expected": "#ffc64751", + "matches": true, + "enforced": true + }, + { + "name": "buttonDangerOutlineColor", + "scenario": "dark/custom=false/outline/danger/pressed", + "actual": "#ffa03f46", + "expected": "#ffa03f46", + "matches": true, + "enforced": true + }, + { + "name": "buttonDangerOutlineColor", + "scenario": "dark/custom=true/outline/danger/idle", + "actual": "#ff27122a", + "expected": "#ff27122a", + "matches": true, + "enforced": true + }, + { + "name": "buttonDangerOutlineColor", + "scenario": "dark/custom=true/outline/danger/pressed", + "actual": "#ff281531", + "expected": "#ff281531", + "matches": true, + "enforced": true + }, + { + "name": "buttonDangerOutlineColor", + "scenario": "light/custom=false/outline/danger/idle", + "actual": "#ffd54941", + "expected": "#ffd54941", + "matches": true, + "enforced": true + }, + { + "name": "buttonDangerOutlineColor", + "scenario": "light/custom=false/outline/danger/pressed", + "actual": "#ffad352f", + "expected": "#ffad352f", + "matches": true, + "enforced": true + }, + { + "name": "buttonDangerOutlineColor", + "scenario": "light/custom=true/outline/danger/idle", + "actual": "#ff27122a", + "expected": "#ff27122a", + "matches": true, + "enforced": true + }, + { + "name": "buttonDangerOutlineColor", + "scenario": "light/custom=true/outline/danger/pressed", + "actual": "#ff281531", + "expected": "#ff281531", + "matches": true, + "enforced": true + }, + { + "name": "buttonDangerOutlineDisabledColor", + "scenario": "dark/custom=false/outline/danger/disabled", + "actual": "#ff703439", + "expected": "#ff703439", + "matches": true, + "enforced": false + }, + { + "name": "buttonDangerOutlineDisabledColor", + "scenario": "dark/custom=false/outline/danger/disabled", + "actual": "#ff703439", + "expected": "#ff703439", + "matches": true, + "enforced": false + }, + { + "name": "buttonDangerOutlineDisabledColor", + "scenario": "dark/custom=true/outline/danger/disabled", + "actual": "#ff291838", + "expected": "#ff2a1b3f", + "matches": false, + "enforced": false + }, + { + "name": "buttonDangerOutlineDisabledColor", + "scenario": "dark/custom=true/outline/danger/disabled", + "actual": "#ff291838", + "expected": "#ff2a1b3f", + "matches": false, + "enforced": false + }, + { + "name": "buttonDangerOutlineDisabledColor", + "scenario": "light/custom=false/outline/danger/disabled", + "actual": "#ffffb9b0", + "expected": "#ffffb9b0", + "matches": true, + "enforced": false + }, + { + "name": "buttonDangerOutlineDisabledColor", + "scenario": "light/custom=false/outline/danger/disabled", + "actual": "#ffffb9b0", + "expected": "#ffffb9b0", + "matches": true, + "enforced": false + }, + { + "name": "buttonDangerOutlineDisabledColor", + "scenario": "light/custom=true/outline/danger/disabled", + "actual": "#ff291838", + "expected": "#ff2a1b3f", + "matches": false, + "enforced": false + }, + { + "name": "buttonDangerOutlineDisabledColor", + "scenario": "light/custom=true/outline/danger/disabled", + "actual": "#ff291838", + "expected": "#ff2a1b3f", + "matches": false, + "enforced": false + }, + { + "name": "buttonDangerTextActiveBgColor", + "scenario": "dark/custom=false/text/danger/pressed", + "actual": "#ff2c2c2c", + "expected": "#ff2c2c2c", + "matches": true, + "enforced": true + }, + { + "name": "buttonDangerTextActiveBgColor", + "scenario": "dark/custom=true/text/danger/pressed", + "actual": "#ff2f2a62", + "expected": "#ff2f2a62", + "matches": true, + "enforced": true + }, + { + "name": "buttonDangerTextActiveBgColor", + "scenario": "light/custom=false/text/danger/pressed", + "actual": "#ffe8e8e8", + "expected": "#ffe8e8e8", + "matches": true, + "enforced": true + }, + { + "name": "buttonDangerTextActiveBgColor", + "scenario": "light/custom=true/text/danger/pressed", + "actual": "#ff2f2a62", + "expected": "#ff2f2a62", + "matches": true, + "enforced": true + }, + { + "name": "buttonDangerTextColor", + "scenario": "dark/custom=false/text/danger/idle", + "actual": "#ffc64751", + "expected": "#ffc64751", + "matches": true, + "enforced": true + }, + { + "name": "buttonDangerTextColor", + "scenario": "dark/custom=false/text/danger/pressed", + "actual": "#ffc64751", + "expected": "#ffc64751", + "matches": true, + "enforced": true + }, + { + "name": "buttonDangerTextColor", + "scenario": "dark/custom=true/text/danger/idle", + "actual": "#ff27122a", + "expected": "#ff27122a", + "matches": true, + "enforced": true + }, + { + "name": "buttonDangerTextColor", + "scenario": "dark/custom=true/text/danger/pressed", + "actual": "#ff27122a", + "expected": "#ff27122a", + "matches": true, + "enforced": true + }, + { + "name": "buttonDangerTextColor", + "scenario": "light/custom=false/text/danger/idle", + "actual": "#ffd54941", + "expected": "#ffd54941", + "matches": true, + "enforced": true + }, + { + "name": "buttonDangerTextColor", + "scenario": "light/custom=false/text/danger/pressed", + "actual": "#ffd54941", + "expected": "#ffd54941", + "matches": true, + "enforced": true + }, + { + "name": "buttonDangerTextColor", + "scenario": "light/custom=true/text/danger/idle", + "actual": "#ff27122a", + "expected": "#ff27122a", + "matches": true, + "enforced": true + }, + { + "name": "buttonDangerTextColor", + "scenario": "light/custom=true/text/danger/pressed", + "actual": "#ff27122a", + "expected": "#ff27122a", + "matches": true, + "enforced": true + }, + { + "name": "buttonDangerTextDisabledColor", + "scenario": "dark/custom=false/text/danger/disabled", + "actual": "#38ffffff", + "expected": "#e6ffffff", + "matches": false, + "enforced": false + }, + { + "name": "buttonDangerTextDisabledColor", + "scenario": "dark/custom=true/text/danger/disabled", + "actual": "#ff353c8c", + "expected": "#ff37429a", + "matches": false, + "enforced": false + }, + { + "name": "buttonDangerTextDisabledColor", + "scenario": "light/custom=false/text/danger/disabled", + "actual": "#42000000", + "expected": "#ffffffff", + "matches": false, + "enforced": false + }, + { + "name": "buttonDangerTextDisabledColor", + "scenario": "light/custom=true/text/danger/disabled", + "actual": "#ff353c8c", + "expected": "#ff37429a", + "matches": false, + "enforced": false + }, + { + "name": "buttonDefaultActiveBgColor", + "scenario": "dark/custom=false/fill/defaultTheme/pressed", + "actual": "#ff383838", + "expected": "#ff4b4b4b", + "matches": false, + "enforced": false + }, + { + "name": "buttonDefaultActiveBgColor", + "scenario": "dark/custom=true/fill/defaultTheme/pressed", + "actual": "#ff2b1e46", + "expected": "#ff2c214d", + "matches": false, + "enforced": false + }, + { + "name": "buttonDefaultActiveBgColor", + "scenario": "light/custom=false/fill/defaultTheme/pressed", + "actual": "#ffe8e8e8", + "expected": "#ffa6a6a6", + "matches": false, + "enforced": false + }, + { + "name": "buttonDefaultActiveBgColor", + "scenario": "light/custom=true/fill/defaultTheme/pressed", + "actual": "#ff2b1e46", + "expected": "#ff2c214d", + "matches": false, + "enforced": false + }, + { + "name": "buttonDefaultBgColor", + "scenario": "dark/custom=false/fill/defaultTheme/idle", + "actual": "#ff383838", + "expected": "#ff383838", + "matches": true, + "enforced": true + }, + { + "name": "buttonDefaultBgColor", + "scenario": "dark/custom=true/fill/defaultTheme/idle", + "actual": "#ff2b1e46", + "expected": "#ff2b1e46", + "matches": true, + "enforced": true + }, + { + "name": "buttonDefaultBgColor", + "scenario": "light/custom=false/fill/defaultTheme/idle", + "actual": "#ffe8e8e8", + "expected": "#ffe8e8e8", + "matches": true, + "enforced": true + }, + { + "name": "buttonDefaultBgColor", + "scenario": "light/custom=true/fill/defaultTheme/idle", + "actual": "#ff2b1e46", + "expected": "#ff2b1e46", + "matches": true, + "enforced": true + }, + { + "name": "buttonDefaultColor", + "scenario": "dark/custom=false/fill/defaultTheme/idle", + "actual": "#e6ffffff", + "expected": "#e6ffffff", + "matches": true, + "enforced": true + }, + { + "name": "buttonDefaultColor", + "scenario": "dark/custom=false/fill/defaultTheme/pressed", + "actual": "#e6ffffff", + "expected": "#e6ffffff", + "matches": true, + "enforced": true + }, + { + "name": "buttonDefaultColor", + "scenario": "dark/custom=true/fill/defaultTheme/idle", + "actual": "#ff33367e", + "expected": "#ff33367e", + "matches": true, + "enforced": true + }, + { + "name": "buttonDefaultColor", + "scenario": "dark/custom=true/fill/defaultTheme/pressed", + "actual": "#ff33367e", + "expected": "#ff33367e", + "matches": true, + "enforced": true + }, + { + "name": "buttonDefaultColor", + "scenario": "light/custom=false/fill/defaultTheme/idle", + "actual": "#e5000000", + "expected": "#e5000000", + "matches": true, + "enforced": true + }, + { + "name": "buttonDefaultColor", + "scenario": "light/custom=false/fill/defaultTheme/pressed", + "actual": "#e5000000", + "expected": "#e5000000", + "matches": true, + "enforced": true + }, + { + "name": "buttonDefaultColor", + "scenario": "light/custom=true/fill/defaultTheme/idle", + "actual": "#ff33367e", + "expected": "#ff33367e", + "matches": true, + "enforced": true + }, + { + "name": "buttonDefaultColor", + "scenario": "light/custom=true/fill/defaultTheme/pressed", + "actual": "#ff33367e", + "expected": "#ff33367e", + "matches": true, + "enforced": true + }, + { + "name": "buttonDefaultDisabledBg", + "scenario": "dark/custom=false/fill/defaultTheme/disabled", + "actual": "#ff2c2c2c", + "expected": "#ff2c2c2c", + "matches": true, + "enforced": true + }, + { + "name": "buttonDefaultDisabledBg", + "scenario": "dark/custom=true/fill/defaultTheme/disabled", + "actual": "#ff2d2454", + "expected": "#ff2d2454", + "matches": true, + "enforced": true + }, + { + "name": "buttonDefaultDisabledBg", + "scenario": "light/custom=false/fill/defaultTheme/disabled", + "actual": "#ffeeeeee", + "expected": "#ffeeeeee", + "matches": true, + "enforced": true + }, + { + "name": "buttonDefaultDisabledBg", + "scenario": "light/custom=true/fill/defaultTheme/disabled", + "actual": "#ff2d2454", + "expected": "#ff2d2454", + "matches": true, + "enforced": true + }, + { + "name": "buttonDefaultDisabledColor", + "scenario": "dark/custom=false/fill/defaultTheme/disabled", + "actual": "#38ffffff", + "expected": "#38ffffff", + "matches": true, + "enforced": true + }, + { + "name": "buttonDefaultDisabledColor", + "scenario": "dark/custom=true/fill/defaultTheme/disabled", + "actual": "#ff353c8c", + "expected": "#ff353c8c", + "matches": true, + "enforced": true + }, + { + "name": "buttonDefaultDisabledColor", + "scenario": "light/custom=false/fill/defaultTheme/disabled", + "actual": "#42000000", + "expected": "#42000000", + "matches": true, + "enforced": true + }, + { + "name": "buttonDefaultDisabledColor", + "scenario": "light/custom=true/fill/defaultTheme/disabled", + "actual": "#ff353c8c", + "expected": "#ff353c8c", + "matches": true, + "enforced": true + }, + { + "name": "buttonDefaultOutlineActiveBgColor", + "scenario": "dark/custom=false/outline/defaultTheme/pressed", + "actual": "#ff2c2c2c", + "expected": "#ff2c2c2c", + "matches": true, + "enforced": true + }, + { + "name": "buttonDefaultOutlineActiveBgColor", + "scenario": "dark/custom=true/outline/defaultTheme/pressed", + "actual": "#ff2f2a62", + "expected": "#ff2f2a62", + "matches": true, + "enforced": true + }, + { + "name": "buttonDefaultOutlineActiveBgColor", + "scenario": "light/custom=false/outline/defaultTheme/pressed", + "actual": "#ffe8e8e8", + "expected": "#ffe8e8e8", + "matches": true, + "enforced": true + }, + { + "name": "buttonDefaultOutlineActiveBgColor", + "scenario": "light/custom=true/outline/defaultTheme/pressed", + "actual": "#ff2f2a62", + "expected": "#ff2f2a62", + "matches": true, + "enforced": true + }, + { + "name": "buttonDefaultOutlineActiveBorderColor", + "scenario": "dark/custom=false/outline/defaultTheme/pressed", + "actual": "#ff5e5e5e", + "expected": "#ff5e5e5e", + "matches": true, + "enforced": true + }, + { + "name": "buttonDefaultOutlineActiveBorderColor", + "scenario": "dark/custom=true/outline/defaultTheme/pressed", + "actual": "#ff313070", + "expected": "#ff313070", + "matches": true, + "enforced": true + }, + { + "name": "buttonDefaultOutlineActiveBorderColor", + "scenario": "light/custom=false/outline/defaultTheme/pressed", + "actual": "#ffdcdcdc", + "expected": "#ffdcdcdc", + "matches": true, + "enforced": true + }, + { + "name": "buttonDefaultOutlineActiveBorderColor", + "scenario": "light/custom=true/outline/defaultTheme/pressed", + "actual": "#ff313070", + "expected": "#ff313070", + "matches": true, + "enforced": true + }, + { + "name": "buttonDefaultOutlineBorderColor", + "scenario": "dark/custom=false/outline/defaultTheme/idle", + "actual": "#ff5e5e5e", + "expected": "#ff5e5e5e", + "matches": true, + "enforced": true + }, + { + "name": "buttonDefaultOutlineBorderColor", + "scenario": "dark/custom=true/outline/defaultTheme/idle", + "actual": "#ff313070", + "expected": "#ff313070", + "matches": true, + "enforced": true + }, + { + "name": "buttonDefaultOutlineBorderColor", + "scenario": "light/custom=false/outline/defaultTheme/idle", + "actual": "#ffdcdcdc", + "expected": "#ffdcdcdc", + "matches": true, + "enforced": true + }, + { + "name": "buttonDefaultOutlineBorderColor", + "scenario": "light/custom=true/outline/defaultTheme/idle", + "actual": "#ff313070", + "expected": "#ff313070", + "matches": true, + "enforced": true + }, + { + "name": "buttonDefaultOutlineColor", + "scenario": "dark/custom=false/outline/defaultTheme/idle", + "actual": "#e6ffffff", + "expected": "#e6ffffff", + "matches": true, + "enforced": true + }, + { + "name": "buttonDefaultOutlineColor", + "scenario": "dark/custom=false/outline/defaultTheme/pressed", + "actual": "#e6ffffff", + "expected": "#e6ffffff", + "matches": true, + "enforced": true + }, + { + "name": "buttonDefaultOutlineColor", + "scenario": "dark/custom=true/outline/defaultTheme/idle", + "actual": "#ff33367e", + "expected": "#ff33367e", + "matches": true, + "enforced": true + }, + { + "name": "buttonDefaultOutlineColor", + "scenario": "dark/custom=true/outline/defaultTheme/pressed", + "actual": "#ff33367e", + "expected": "#ff33367e", + "matches": true, + "enforced": true + }, + { + "name": "buttonDefaultOutlineColor", + "scenario": "light/custom=false/outline/defaultTheme/idle", + "actual": "#e5000000", + "expected": "#e5000000", + "matches": true, + "enforced": true + }, + { + "name": "buttonDefaultOutlineColor", + "scenario": "light/custom=false/outline/defaultTheme/pressed", + "actual": "#e5000000", + "expected": "#e5000000", + "matches": true, + "enforced": true + }, + { + "name": "buttonDefaultOutlineColor", + "scenario": "light/custom=true/outline/defaultTheme/idle", + "actual": "#ff33367e", + "expected": "#ff33367e", + "matches": true, + "enforced": true + }, + { + "name": "buttonDefaultOutlineColor", + "scenario": "light/custom=true/outline/defaultTheme/pressed", + "actual": "#ff33367e", + "expected": "#ff33367e", + "matches": true, + "enforced": true + }, + { + "name": "buttonDefaultOutlineDisabledColor", + "scenario": "dark/custom=false/outline/defaultTheme/disabled", + "actual": "#ff5e5e5e", + "expected": "#ff5e5e5e", + "matches": true, + "enforced": true + }, + { + "name": "buttonDefaultOutlineDisabledColor", + "scenario": "dark/custom=false/outline/defaultTheme/disabled", + "actual": "#ff5e5e5e", + "expected": "#ff5e5e5e", + "matches": true, + "enforced": true + }, + { + "name": "buttonDefaultOutlineDisabledColor", + "scenario": "dark/custom=true/outline/defaultTheme/disabled", + "actual": "#ff313070", + "expected": "#ff313070", + "matches": true, + "enforced": true + }, + { + "name": "buttonDefaultOutlineDisabledColor", + "scenario": "dark/custom=true/outline/defaultTheme/disabled", + "actual": "#ff313070", + "expected": "#ff313070", + "matches": true, + "enforced": true + }, + { + "name": "buttonDefaultOutlineDisabledColor", + "scenario": "light/custom=false/outline/defaultTheme/disabled", + "actual": "#ffdcdcdc", + "expected": "#ffdcdcdc", + "matches": true, + "enforced": true + }, + { + "name": "buttonDefaultOutlineDisabledColor", + "scenario": "light/custom=false/outline/defaultTheme/disabled", + "actual": "#ffdcdcdc", + "expected": "#ffdcdcdc", + "matches": true, + "enforced": true + }, + { + "name": "buttonDefaultOutlineDisabledColor", + "scenario": "light/custom=true/outline/defaultTheme/disabled", + "actual": "#ff313070", + "expected": "#ff313070", + "matches": true, + "enforced": true + }, + { + "name": "buttonDefaultOutlineDisabledColor", + "scenario": "light/custom=true/outline/defaultTheme/disabled", + "actual": "#ff313070", + "expected": "#ff313070", + "matches": true, + "enforced": true + }, + { + "name": "buttonDefaultTextActiveBgColor", + "scenario": "dark/custom=false/text/defaultTheme/pressed", + "actual": "#ff2c2c2c", + "expected": "#ff2c2c2c", + "matches": true, + "enforced": true + }, + { + "name": "buttonDefaultTextActiveBgColor", + "scenario": "dark/custom=true/text/defaultTheme/pressed", + "actual": "#ff2f2a62", + "expected": "#ff2f2a62", + "matches": true, + "enforced": true + }, + { + "name": "buttonDefaultTextActiveBgColor", + "scenario": "light/custom=false/text/defaultTheme/pressed", + "actual": "#ffe8e8e8", + "expected": "#ffe8e8e8", + "matches": true, + "enforced": true + }, + { + "name": "buttonDefaultTextActiveBgColor", + "scenario": "light/custom=true/text/defaultTheme/pressed", + "actual": "#ff2f2a62", + "expected": "#ff2f2a62", + "matches": true, + "enforced": true + }, + { + "name": "buttonExtraSmallFont", + "scenario": "dark/custom=false/extraSmall", + "actual": "14.0/22.0/FontWeight.w600", + "expected": "14.0/22.0/FontWeight.w600", + "matches": true, + "enforced": true + }, + { + "name": "buttonExtraSmallFont", + "scenario": "dark/custom=true/extraSmall", + "actual": "17.0/25.0/FontWeight.w700", + "expected": "17.0/25.0/FontWeight.w700", + "matches": true, + "enforced": true + }, + { + "name": "buttonExtraSmallFont", + "scenario": "light/custom=false/extraSmall", + "actual": "14.0/22.0/FontWeight.w600", + "expected": "14.0/22.0/FontWeight.w600", + "matches": true, + "enforced": true + }, + { + "name": "buttonExtraSmallFont", + "scenario": "light/custom=true/extraSmall", + "actual": "17.0/25.0/FontWeight.w700", + "expected": "17.0/25.0/FontWeight.w700", + "matches": true, + "enforced": true + }, + { + "name": "buttonGhostBorderColor", + "scenario": "dark/custom=false/ghost/defaultTheme/idle", + "actual": "#e6ffffff", + "expected": "#e6ffffff", + "matches": true, + "enforced": true + }, + { + "name": "buttonGhostBorderColor", + "scenario": "dark/custom=true/ghost/defaultTheme/idle", + "actual": "#ff363f93", + "expected": "#ff363f93", + "matches": true, + "enforced": true + }, + { + "name": "buttonGhostBorderColor", + "scenario": "light/custom=false/ghost/defaultTheme/idle", + "actual": "#ffffffff", + "expected": "#ffffffff", + "matches": true, + "enforced": true + }, + { + "name": "buttonGhostBorderColor", + "scenario": "light/custom=true/ghost/defaultTheme/idle", + "actual": "#ff363f93", + "expected": "#ff363f93", + "matches": true, + "enforced": true + }, + { + "name": "buttonGhostColor", + "scenario": "dark/custom=false/ghost/defaultTheme/idle", + "actual": "#e6ffffff", + "expected": "#e6ffffff", + "matches": true, + "enforced": true + }, + { + "name": "buttonGhostColor", + "scenario": "dark/custom=true/ghost/defaultTheme/idle", + "actual": "#ff363f93", + "expected": "#ff363f93", + "matches": true, + "enforced": true + }, + { + "name": "buttonGhostColor", + "scenario": "light/custom=false/ghost/defaultTheme/idle", + "actual": "#ffffffff", + "expected": "#ffffffff", + "matches": true, + "enforced": true + }, + { + "name": "buttonGhostColor", + "scenario": "light/custom=true/ghost/defaultTheme/idle", + "actual": "#ff363f93", + "expected": "#ff363f93", + "matches": true, + "enforced": true + }, + { + "name": "buttonGhostDangerBorderColor", + "scenario": "dark/custom=false/ghost/danger/idle", + "actual": "#ffc64751", + "expected": "#ffc64751", + "matches": true, + "enforced": true + }, + { + "name": "buttonGhostDangerBorderColor", + "scenario": "dark/custom=true/ghost/danger/idle", + "actual": "#ff27122a", + "expected": "#ff27122a", + "matches": true, + "enforced": true + }, + { + "name": "buttonGhostDangerBorderColor", + "scenario": "light/custom=false/ghost/danger/idle", + "actual": "#ffd54941", + "expected": "#ffd54941", + "matches": true, + "enforced": true + }, + { + "name": "buttonGhostDangerBorderColor", + "scenario": "light/custom=true/ghost/danger/idle", + "actual": "#ff27122a", + "expected": "#ff27122a", + "matches": true, + "enforced": true + }, + { + "name": "buttonGhostDangerColor", + "scenario": "dark/custom=false/ghost/danger/idle", + "actual": "#ffc64751", + "expected": "#ffc64751", + "matches": true, + "enforced": true + }, + { + "name": "buttonGhostDangerColor", + "scenario": "dark/custom=true/ghost/danger/idle", + "actual": "#ff27122a", + "expected": "#ff27122a", + "matches": true, + "enforced": true + }, + { + "name": "buttonGhostDangerColor", + "scenario": "light/custom=false/ghost/danger/idle", + "actual": "#ffd54941", + "expected": "#ffd54941", + "matches": true, + "enforced": true + }, + { + "name": "buttonGhostDangerColor", + "scenario": "light/custom=true/ghost/danger/idle", + "actual": "#ff27122a", + "expected": "#ff27122a", + "matches": true, + "enforced": true + }, + { + "name": "buttonGhostDangerHoverColor", + "scenario": "dark/custom=false/ghost/danger/pressed", + "actual": "#ffc64751", + "expected": "#ffa03f46", + "matches": false, + "enforced": false + }, + { + "name": "buttonGhostDangerHoverColor", + "scenario": "dark/custom=true/ghost/danger/pressed", + "actual": "#ff27122a", + "expected": "#ff281531", + "matches": false, + "enforced": false + }, + { + "name": "buttonGhostDangerHoverColor", + "scenario": "light/custom=false/ghost/danger/pressed", + "actual": "#ffd54941", + "expected": "#ffad352f", + "matches": false, + "enforced": false + }, + { + "name": "buttonGhostDangerHoverColor", + "scenario": "light/custom=true/ghost/danger/pressed", + "actual": "#ff27122a", + "expected": "#ff281531", + "matches": false, + "enforced": false + }, + { + "name": "buttonGhostDisabledColor", + "scenario": "dark/custom=false/ghost/danger/disabled", + "actual": "#38ffffff", + "expected": "#38ffffff", + "matches": true, + "enforced": true + }, + { + "name": "buttonGhostDisabledColor", + "scenario": "dark/custom=false/ghost/defaultTheme/disabled", + "actual": "#38ffffff", + "expected": "#38ffffff", + "matches": true, + "enforced": true + }, + { + "name": "buttonGhostDisabledColor", + "scenario": "dark/custom=false/ghost/primary/disabled", + "actual": "#38ffffff", + "expected": "#38ffffff", + "matches": true, + "enforced": true + }, + { + "name": "buttonGhostDisabledColor", + "scenario": "dark/custom=true/ghost/danger/disabled", + "actual": "#ff3948a8", + "expected": "#ff3948a8", + "matches": true, + "enforced": true + }, + { + "name": "buttonGhostDisabledColor", + "scenario": "dark/custom=true/ghost/defaultTheme/disabled", + "actual": "#ff3948a8", + "expected": "#ff3948a8", + "matches": true, + "enforced": true + }, + { + "name": "buttonGhostDisabledColor", + "scenario": "dark/custom=true/ghost/primary/disabled", + "actual": "#ff3948a8", + "expected": "#ff3948a8", + "matches": true, + "enforced": true + }, + { + "name": "buttonGhostDisabledColor", + "scenario": "light/custom=false/ghost/danger/disabled", + "actual": "#38ffffff", + "expected": "#38ffffff", + "matches": true, + "enforced": true + }, + { + "name": "buttonGhostDisabledColor", + "scenario": "light/custom=false/ghost/defaultTheme/disabled", + "actual": "#38ffffff", + "expected": "#38ffffff", + "matches": true, + "enforced": true + }, + { + "name": "buttonGhostDisabledColor", + "scenario": "light/custom=false/ghost/primary/disabled", + "actual": "#38ffffff", + "expected": "#38ffffff", + "matches": true, + "enforced": true + }, + { + "name": "buttonGhostDisabledColor", + "scenario": "light/custom=true/ghost/danger/disabled", + "actual": "#ff3948a8", + "expected": "#ff3948a8", + "matches": true, + "enforced": true + }, + { + "name": "buttonGhostDisabledColor", + "scenario": "light/custom=true/ghost/defaultTheme/disabled", + "actual": "#ff3948a8", + "expected": "#ff3948a8", + "matches": true, + "enforced": true + }, + { + "name": "buttonGhostDisabledColor", + "scenario": "light/custom=true/ghost/primary/disabled", + "actual": "#ff3948a8", + "expected": "#ff3948a8", + "matches": true, + "enforced": true + }, + { + "name": "buttonGhostHoverColor", + "scenario": "dark/custom=false/ghost/defaultTheme/pressed", + "actual": "#e6ffffff", + "expected": "#8cffffff", + "matches": false, + "enforced": false + }, + { + "name": "buttonGhostHoverColor", + "scenario": "dark/custom=true/ghost/defaultTheme/pressed", + "actual": "#ff363f93", + "expected": "#ff3845a1", + "matches": false, + "enforced": false + }, + { + "name": "buttonGhostHoverColor", + "scenario": "light/custom=false/ghost/defaultTheme/pressed", + "actual": "#ffffffff", + "expected": "#8cffffff", + "matches": false, + "enforced": false + }, + { + "name": "buttonGhostHoverColor", + "scenario": "light/custom=true/ghost/defaultTheme/pressed", + "actual": "#ff363f93", + "expected": "#ff3845a1", + "matches": false, + "enforced": false + }, + { + "name": "buttonGhostPrimaryBorderColor", + "scenario": "dark/custom=false/ghost/primary/idle", + "actual": "#ff4582e6", + "expected": "#ff4582e6", + "matches": true, + "enforced": true + }, + { + "name": "buttonGhostPrimaryBorderColor", + "scenario": "dark/custom=true/ghost/primary/idle", + "actual": "#ff220307", + "expected": "#ff220307", + "matches": true, + "enforced": true + }, + { + "name": "buttonGhostPrimaryBorderColor", + "scenario": "light/custom=false/ghost/primary/idle", + "actual": "#ff0052d9", + "expected": "#ff0052d9", + "matches": true, + "enforced": true + }, + { + "name": "buttonGhostPrimaryBorderColor", + "scenario": "light/custom=true/ghost/primary/idle", + "actual": "#ff220307", + "expected": "#ff220307", + "matches": true, + "enforced": true + }, + { + "name": "buttonGhostPrimaryColor", + "scenario": "dark/custom=false/ghost/primary/idle", + "actual": "#ff4582e6", + "expected": "#ff4582e6", + "matches": true, + "enforced": true + }, + { + "name": "buttonGhostPrimaryColor", + "scenario": "dark/custom=true/ghost/primary/idle", + "actual": "#ff220307", + "expected": "#ff220307", + "matches": true, + "enforced": true + }, + { + "name": "buttonGhostPrimaryColor", + "scenario": "light/custom=false/ghost/primary/idle", + "actual": "#ff0052d9", + "expected": "#ff0052d9", + "matches": true, + "enforced": true + }, + { + "name": "buttonGhostPrimaryColor", + "scenario": "light/custom=true/ghost/primary/idle", + "actual": "#ff220307", + "expected": "#ff220307", + "matches": true, + "enforced": true + }, + { + "name": "buttonGhostPrimaryHoverColor", + "scenario": "dark/custom=false/ghost/primary/pressed", + "actual": "#ff4582e6", + "expected": "#ff699ef5", + "matches": false, + "enforced": false + }, + { + "name": "buttonGhostPrimaryHoverColor", + "scenario": "dark/custom=true/ghost/primary/pressed", + "actual": "#ff220307", + "expected": "#ff23060e", + "matches": false, + "enforced": false + }, + { + "name": "buttonGhostPrimaryHoverColor", + "scenario": "light/custom=false/ghost/primary/pressed", + "actual": "#ff0052d9", + "expected": "#ff003cab", + "matches": false, + "enforced": false + }, + { + "name": "buttonGhostPrimaryHoverColor", + "scenario": "light/custom=true/ghost/primary/pressed", + "actual": "#ff220307", + "expected": "#ff23060e", + "matches": false, + "enforced": false + }, + { + "name": "buttonIconSpacer", + "scenario": "dark/custom=false/extraSmall", + "actual": 4, + "expected": 8, + "matches": false, + "enforced": false + }, + { + "name": "buttonIconSpacer", + "scenario": "dark/custom=false/large", + "actual": 4, + "expected": 8, + "matches": false, + "enforced": false + }, + { + "name": "buttonIconSpacer", + "scenario": "dark/custom=false/medium", + "actual": 4, + "expected": 8, + "matches": false, + "enforced": false + }, + { + "name": "buttonIconSpacer", + "scenario": "dark/custom=false/small", + "actual": 4, + "expected": 8, + "matches": false, + "enforced": false + }, + { + "name": "buttonIconSpacer", + "scenario": "dark/custom=true/extraSmall", + "actual": 4, + "expected": 11, + "matches": false, + "enforced": false + }, + { + "name": "buttonIconSpacer", + "scenario": "dark/custom=true/large", + "actual": 4, + "expected": 11, + "matches": false, + "enforced": false + }, + { + "name": "buttonIconSpacer", + "scenario": "dark/custom=true/medium", + "actual": 4, + "expected": 11, + "matches": false, + "enforced": false + }, + { + "name": "buttonIconSpacer", + "scenario": "dark/custom=true/small", + "actual": 4, + "expected": 11, + "matches": false, + "enforced": false + }, + { + "name": "buttonIconSpacer", + "scenario": "light/custom=false/extraSmall", + "actual": 4, + "expected": 8, + "matches": false, + "enforced": false + }, + { + "name": "buttonIconSpacer", + "scenario": "light/custom=false/large", + "actual": 4, + "expected": 8, + "matches": false, + "enforced": false + }, + { + "name": "buttonIconSpacer", + "scenario": "light/custom=false/medium", + "actual": 4, + "expected": 8, + "matches": false, + "enforced": false + }, + { + "name": "buttonIconSpacer", + "scenario": "light/custom=false/small", + "actual": 4, + "expected": 8, + "matches": false, + "enforced": false + }, + { + "name": "buttonIconSpacer", + "scenario": "light/custom=true/extraSmall", + "actual": 4, + "expected": 11, + "matches": false, + "enforced": false + }, + { + "name": "buttonIconSpacer", + "scenario": "light/custom=true/large", + "actual": 4, + "expected": 11, + "matches": false, + "enforced": false + }, + { + "name": "buttonIconSpacer", + "scenario": "light/custom=true/medium", + "actual": 4, + "expected": 11, + "matches": false, + "enforced": false + }, + { + "name": "buttonIconSpacer", + "scenario": "light/custom=true/small", + "actual": 4, + "expected": 11, + "matches": false, + "enforced": false + }, + { + "name": "buttonLargeFont", + "scenario": "dark/custom=false/large", + "actual": "16.0/24.0/FontWeight.w600", + "expected": "16.0/24.0/FontWeight.w600", + "matches": true, + "enforced": true + }, + { + "name": "buttonLargeFont", + "scenario": "dark/custom=true/large", + "actual": "19.0/27.0/FontWeight.w700", + "expected": "19.0/27.0/FontWeight.w700", + "matches": true, + "enforced": true + }, + { + "name": "buttonLargeFont", + "scenario": "light/custom=false/large", + "actual": "16.0/24.0/FontWeight.w600", + "expected": "16.0/24.0/FontWeight.w600", + "matches": true, + "enforced": true + }, + { + "name": "buttonLargeFont", + "scenario": "light/custom=true/large", + "actual": "19.0/27.0/FontWeight.w700", + "expected": "19.0/27.0/FontWeight.w700", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightActiveBgColor", + "scenario": "dark/custom=false/fill/light/pressed", + "actual": "#ff1b2f51", + "expected": "#ff173463", + "matches": false, + "enforced": false + }, + { + "name": "buttonLightActiveBgColor", + "scenario": "dark/custom=true/fill/light/pressed", + "actual": "#ff1b2f51", + "expected": "#ff260f23", + "matches": false, + "enforced": false + }, + { + "name": "buttonLightActiveBgColor", + "scenario": "light/custom=false/fill/light/pressed", + "actual": "#fff2f3ff", + "expected": "#ffd9e1ff", + "matches": false, + "enforced": false + }, + { + "name": "buttonLightActiveBgColor", + "scenario": "light/custom=true/fill/light/pressed", + "actual": "#fff2f3ff", + "expected": "#ff260f23", + "matches": false, + "enforced": false + }, + { + "name": "buttonLightBgColor", + "scenario": "dark/custom=false/fill/light/idle", + "actual": "#ff1b2f51", + "expected": "#ff1b2f51", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightBgColor", + "scenario": "dark/custom=true/fill/light/idle", + "actual": "#ff250c1c", + "expected": "#ff250c1c", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightBgColor", + "scenario": "light/custom=false/fill/light/idle", + "actual": "#fff2f3ff", + "expected": "#fff2f3ff", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightBgColor", + "scenario": "light/custom=true/fill/light/idle", + "actual": "#ff250c1c", + "expected": "#ff250c1c", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightColor", + "scenario": "dark/custom=false/fill/light/idle", + "actual": "#ff4582e6", + "expected": "#ff4582e6", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightColor", + "scenario": "dark/custom=false/fill/light/pressed", + "actual": "#ff4582e6", + "expected": "#ff4582e6", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightColor", + "scenario": "dark/custom=true/fill/light/idle", + "actual": "#ff220307", + "expected": "#ff220307", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightColor", + "scenario": "dark/custom=true/fill/light/pressed", + "actual": "#ff220307", + "expected": "#ff220307", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightColor", + "scenario": "light/custom=false/fill/light/idle", + "actual": "#ff0052d9", + "expected": "#ff0052d9", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightColor", + "scenario": "light/custom=false/fill/light/pressed", + "actual": "#ff0052d9", + "expected": "#ff0052d9", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightColor", + "scenario": "light/custom=true/fill/light/idle", + "actual": "#ff220307", + "expected": "#ff220307", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightColor", + "scenario": "light/custom=true/fill/light/pressed", + "actual": "#ff220307", + "expected": "#ff220307", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightDisabledBg", + "scenario": "dark/custom=false/fill/light/disabled", + "actual": "#ff1b2f51", + "expected": "#ff1b2f51", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightDisabledBg", + "scenario": "dark/custom=true/fill/light/disabled", + "actual": "#ff250c1c", + "expected": "#ff250c1c", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightDisabledBg", + "scenario": "light/custom=false/fill/light/disabled", + "actual": "#fff2f3ff", + "expected": "#fff2f3ff", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightDisabledBg", + "scenario": "light/custom=true/fill/light/disabled", + "actual": "#ff250c1c", + "expected": "#ff250c1c", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightDisabledColor", + "scenario": "dark/custom=false/fill/light/disabled", + "actual": "#ff143975", + "expected": "#ff143975", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightDisabledColor", + "scenario": "dark/custom=true/fill/light/disabled", + "actual": "#ff240915", + "expected": "#ff240915", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightDisabledColor", + "scenario": "light/custom=false/fill/light/disabled", + "actual": "#ffb5c7ff", + "expected": "#ffb5c7ff", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightDisabledColor", + "scenario": "light/custom=true/fill/light/disabled", + "actual": "#ff240915", + "expected": "#ff240915", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightOutlineActiveBgColor", + "scenario": "dark/custom=false/outline/light/pressed", + "actual": "#ff173463", + "expected": "#ff173463", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightOutlineActiveBgColor", + "scenario": "dark/custom=true/outline/light/pressed", + "actual": "#ff260f23", + "expected": "#ff260f23", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightOutlineActiveBgColor", + "scenario": "light/custom=false/outline/light/pressed", + "actual": "#ffd9e1ff", + "expected": "#ffd9e1ff", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightOutlineActiveBgColor", + "scenario": "light/custom=true/outline/light/pressed", + "actual": "#ff260f23", + "expected": "#ff260f23", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightOutlineActiveBorderColor", + "scenario": "dark/custom=false/outline/light/pressed", + "actual": "#ff699ef5", + "expected": "#ff699ef5", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightOutlineActiveBorderColor", + "scenario": "dark/custom=true/outline/light/pressed", + "actual": "#ff23060e", + "expected": "#ff23060e", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightOutlineActiveBorderColor", + "scenario": "light/custom=false/outline/light/pressed", + "actual": "#ff003cab", + "expected": "#ff003cab", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightOutlineActiveBorderColor", + "scenario": "light/custom=true/outline/light/pressed", + "actual": "#ff23060e", + "expected": "#ff23060e", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightOutlineBgColor", + "scenario": "dark/custom=false/outline/light/idle", + "actual": "#ff1b2f51", + "expected": "#ff1b2f51", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightOutlineBgColor", + "scenario": "dark/custom=true/outline/light/idle", + "actual": "#ff250c1c", + "expected": "#ff250c1c", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightOutlineBgColor", + "scenario": "light/custom=false/outline/light/idle", + "actual": "#fff2f3ff", + "expected": "#fff2f3ff", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightOutlineBgColor", + "scenario": "light/custom=true/outline/light/idle", + "actual": "#ff250c1c", + "expected": "#ff250c1c", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightOutlineBorderColor", + "scenario": "dark/custom=false/outline/light/idle", + "actual": "#ff4582e6", + "expected": "#ff4582e6", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightOutlineBorderColor", + "scenario": "dark/custom=true/outline/light/idle", + "actual": "#ff220307", + "expected": "#ff220307", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightOutlineBorderColor", + "scenario": "light/custom=false/outline/light/idle", + "actual": "#ff0052d9", + "expected": "#ff0052d9", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightOutlineBorderColor", + "scenario": "light/custom=true/outline/light/idle", + "actual": "#ff220307", + "expected": "#ff220307", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightOutlineColor", + "scenario": "dark/custom=false/outline/light/idle", + "actual": "#ff4582e6", + "expected": "#ff4582e6", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightOutlineColor", + "scenario": "dark/custom=false/outline/light/pressed", + "actual": "#ff699ef5", + "expected": "#ff699ef5", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightOutlineColor", + "scenario": "dark/custom=true/outline/light/idle", + "actual": "#ff220307", + "expected": "#ff220307", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightOutlineColor", + "scenario": "dark/custom=true/outline/light/pressed", + "actual": "#ff23060e", + "expected": "#ff23060e", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightOutlineColor", + "scenario": "light/custom=false/outline/light/idle", + "actual": "#ff0052d9", + "expected": "#ff0052d9", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightOutlineColor", + "scenario": "light/custom=false/outline/light/pressed", + "actual": "#ff003cab", + "expected": "#ff003cab", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightOutlineColor", + "scenario": "light/custom=true/outline/light/idle", + "actual": "#ff220307", + "expected": "#ff220307", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightOutlineColor", + "scenario": "light/custom=true/outline/light/pressed", + "actual": "#ff23060e", + "expected": "#ff23060e", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightOutlineDisabledColor", + "scenario": "dark/custom=false/outline/light/disabled", + "actual": "#ff143975", + "expected": "#ff143975", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightOutlineDisabledColor", + "scenario": "dark/custom=false/outline/light/disabled", + "actual": "#ff143975", + "expected": "#ff143975", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightOutlineDisabledColor", + "scenario": "dark/custom=true/outline/light/disabled", + "actual": "#ff240915", + "expected": "#ff240915", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightOutlineDisabledColor", + "scenario": "dark/custom=true/outline/light/disabled", + "actual": "#ff240915", + "expected": "#ff240915", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightOutlineDisabledColor", + "scenario": "light/custom=false/outline/light/disabled", + "actual": "#ffb5c7ff", + "expected": "#ffb5c7ff", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightOutlineDisabledColor", + "scenario": "light/custom=false/outline/light/disabled", + "actual": "#ffb5c7ff", + "expected": "#ffb5c7ff", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightOutlineDisabledColor", + "scenario": "light/custom=true/outline/light/disabled", + "actual": "#ff240915", + "expected": "#ff240915", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightOutlineDisabledColor", + "scenario": "light/custom=true/outline/light/disabled", + "actual": "#ff240915", + "expected": "#ff240915", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightTextActiveBgColor", + "scenario": "dark/custom=false/text/light/pressed", + "actual": "#ff2c2c2c", + "expected": "#ff2c2c2c", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightTextActiveBgColor", + "scenario": "dark/custom=true/text/light/pressed", + "actual": "#ff2f2a62", + "expected": "#ff2f2a62", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightTextActiveBgColor", + "scenario": "light/custom=false/text/light/pressed", + "actual": "#ffe8e8e8", + "expected": "#ffe8e8e8", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightTextActiveBgColor", + "scenario": "light/custom=true/text/light/pressed", + "actual": "#ff2f2a62", + "expected": "#ff2f2a62", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightTextColor", + "scenario": "dark/custom=false/text/light/idle", + "actual": "#ff4582e6", + "expected": "#ff4582e6", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightTextColor", + "scenario": "dark/custom=false/text/light/pressed", + "actual": "#ff4582e6", + "expected": "#ff4582e6", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightTextColor", + "scenario": "dark/custom=true/text/light/idle", + "actual": "#ff220307", + "expected": "#ff220307", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightTextColor", + "scenario": "dark/custom=true/text/light/pressed", + "actual": "#ff220307", + "expected": "#ff220307", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightTextColor", + "scenario": "light/custom=false/text/light/idle", + "actual": "#ff0052d9", + "expected": "#ff0052d9", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightTextColor", + "scenario": "light/custom=false/text/light/pressed", + "actual": "#ff0052d9", + "expected": "#ff0052d9", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightTextColor", + "scenario": "light/custom=true/text/light/idle", + "actual": "#ff220307", + "expected": "#ff220307", + "matches": true, + "enforced": true + }, + { + "name": "buttonLightTextColor", + "scenario": "light/custom=true/text/light/pressed", + "actual": "#ff220307", + "expected": "#ff220307", + "matches": true, + "enforced": true + }, + { + "name": "buttonMediumFont", + "scenario": "dark/custom=false/medium", + "actual": "16.0/24.0/FontWeight.w600", + "expected": "16.0/24.0/FontWeight.w600", + "matches": true, + "enforced": true + }, + { + "name": "buttonMediumFont", + "scenario": "dark/custom=true/medium", + "actual": "19.0/27.0/FontWeight.w700", + "expected": "19.0/27.0/FontWeight.w700", + "matches": true, + "enforced": true + }, + { + "name": "buttonMediumFont", + "scenario": "light/custom=false/medium", + "actual": "16.0/24.0/FontWeight.w600", + "expected": "16.0/24.0/FontWeight.w600", + "matches": true, + "enforced": true + }, + { + "name": "buttonMediumFont", + "scenario": "light/custom=true/medium", + "actual": "19.0/27.0/FontWeight.w700", + "expected": "19.0/27.0/FontWeight.w700", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryActiveBgColor", + "scenario": "dark/custom=false/fill/primary/pressed", + "actual": "#ff699ef5", + "expected": "#ff699ef5", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryActiveBgColor", + "scenario": "dark/custom=true/fill/primary/pressed", + "actual": "#ff23060e", + "expected": "#ff23060e", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryActiveBgColor", + "scenario": "light/custom=false/fill/primary/pressed", + "actual": "#ff003cab", + "expected": "#ff003cab", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryActiveBgColor", + "scenario": "light/custom=true/fill/primary/pressed", + "actual": "#ff23060e", + "expected": "#ff23060e", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryBgColor", + "scenario": "dark/custom=false/fill/primary/idle", + "actual": "#ff4582e6", + "expected": "#ff4582e6", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryBgColor", + "scenario": "dark/custom=true/fill/primary/idle", + "actual": "#ff220307", + "expected": "#ff220307", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryBgColor", + "scenario": "light/custom=false/fill/primary/idle", + "actual": "#ff0052d9", + "expected": "#ff0052d9", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryBgColor", + "scenario": "light/custom=true/fill/primary/idle", + "actual": "#ff220307", + "expected": "#ff220307", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryColor", + "scenario": "dark/custom=false/fill/primary/idle", + "actual": "#e6ffffff", + "expected": "#e6ffffff", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryColor", + "scenario": "dark/custom=false/fill/primary/pressed", + "actual": "#e6ffffff", + "expected": "#e6ffffff", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryColor", + "scenario": "dark/custom=true/fill/primary/idle", + "actual": "#ff363f93", + "expected": "#ff363f93", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryColor", + "scenario": "dark/custom=true/fill/primary/pressed", + "actual": "#ff363f93", + "expected": "#ff363f93", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryColor", + "scenario": "light/custom=false/fill/primary/idle", + "actual": "#ffffffff", + "expected": "#ffffffff", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryColor", + "scenario": "light/custom=false/fill/primary/pressed", + "actual": "#ffffffff", + "expected": "#ffffffff", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryColor", + "scenario": "light/custom=true/fill/primary/idle", + "actual": "#ff363f93", + "expected": "#ff363f93", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryColor", + "scenario": "light/custom=true/fill/primary/pressed", + "actual": "#ff363f93", + "expected": "#ff363f93", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryDisabledBg", + "scenario": "dark/custom=false/fill/primary/disabled", + "actual": "#ff143975", + "expected": "#ff143975", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryDisabledBg", + "scenario": "dark/custom=true/fill/primary/disabled", + "actual": "#ff240915", + "expected": "#ff240915", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryDisabledBg", + "scenario": "light/custom=false/fill/primary/disabled", + "actual": "#ffb5c7ff", + "expected": "#ffb5c7ff", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryDisabledBg", + "scenario": "light/custom=true/fill/primary/disabled", + "actual": "#ff240915", + "expected": "#ff240915", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryDisabledColor", + "scenario": "dark/custom=false/fill/primary/disabled", + "actual": "#38ffffff", + "expected": "#38ffffff", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryDisabledColor", + "scenario": "dark/custom=true/fill/primary/disabled", + "actual": "#ff3948a8", + "expected": "#ff3948a8", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryDisabledColor", + "scenario": "light/custom=false/fill/primary/disabled", + "actual": "#ffffffff", + "expected": "#ffffffff", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryDisabledColor", + "scenario": "light/custom=true/fill/primary/disabled", + "actual": "#ff363f93", + "expected": "#ff363f93", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryOutlineActiveBgColor", + "scenario": "dark/custom=false/outline/primary/pressed", + "actual": "#ff2c2c2c", + "expected": "#ff2c2c2c", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryOutlineActiveBgColor", + "scenario": "dark/custom=true/outline/primary/pressed", + "actual": "#ff2f2a62", + "expected": "#ff2f2a62", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryOutlineActiveBgColor", + "scenario": "light/custom=false/outline/primary/pressed", + "actual": "#ffe8e8e8", + "expected": "#ffe8e8e8", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryOutlineActiveBgColor", + "scenario": "light/custom=true/outline/primary/pressed", + "actual": "#ff2f2a62", + "expected": "#ff2f2a62", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryOutlineActiveBorderColor", + "scenario": "dark/custom=false/outline/primary/pressed", + "actual": "#ff699ef5", + "expected": "#ff699ef5", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryOutlineActiveBorderColor", + "scenario": "dark/custom=true/outline/primary/pressed", + "actual": "#ff23060e", + "expected": "#ff23060e", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryOutlineActiveBorderColor", + "scenario": "light/custom=false/outline/primary/pressed", + "actual": "#ff003cab", + "expected": "#ff003cab", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryOutlineActiveBorderColor", + "scenario": "light/custom=true/outline/primary/pressed", + "actual": "#ff23060e", + "expected": "#ff23060e", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryOutlineBorderColor", + "scenario": "dark/custom=false/outline/primary/idle", + "actual": "#ff4582e6", + "expected": "#ff4582e6", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryOutlineBorderColor", + "scenario": "dark/custom=true/outline/primary/idle", + "actual": "#ff220307", + "expected": "#ff220307", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryOutlineBorderColor", + "scenario": "light/custom=false/outline/primary/idle", + "actual": "#ff0052d9", + "expected": "#ff0052d9", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryOutlineBorderColor", + "scenario": "light/custom=true/outline/primary/idle", + "actual": "#ff220307", + "expected": "#ff220307", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryOutlineColor", + "scenario": "dark/custom=false/outline/primary/idle", + "actual": "#ff4582e6", + "expected": "#ff4582e6", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryOutlineColor", + "scenario": "dark/custom=false/outline/primary/pressed", + "actual": "#ff699ef5", + "expected": "#ff699ef5", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryOutlineColor", + "scenario": "dark/custom=true/outline/primary/idle", + "actual": "#ff220307", + "expected": "#ff220307", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryOutlineColor", + "scenario": "dark/custom=true/outline/primary/pressed", + "actual": "#ff23060e", + "expected": "#ff23060e", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryOutlineColor", + "scenario": "light/custom=false/outline/primary/idle", + "actual": "#ff0052d9", + "expected": "#ff0052d9", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryOutlineColor", + "scenario": "light/custom=false/outline/primary/pressed", + "actual": "#ff003cab", + "expected": "#ff003cab", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryOutlineColor", + "scenario": "light/custom=true/outline/primary/idle", + "actual": "#ff220307", + "expected": "#ff220307", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryOutlineColor", + "scenario": "light/custom=true/outline/primary/pressed", + "actual": "#ff23060e", + "expected": "#ff23060e", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryOutlineDisabledColor", + "scenario": "dark/custom=false/outline/primary/disabled", + "actual": "#ff143975", + "expected": "#ff143975", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryOutlineDisabledColor", + "scenario": "dark/custom=false/outline/primary/disabled", + "actual": "#ff143975", + "expected": "#ff143975", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryOutlineDisabledColor", + "scenario": "dark/custom=true/outline/primary/disabled", + "actual": "#ff240915", + "expected": "#ff240915", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryOutlineDisabledColor", + "scenario": "dark/custom=true/outline/primary/disabled", + "actual": "#ff240915", + "expected": "#ff240915", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryOutlineDisabledColor", + "scenario": "light/custom=false/outline/primary/disabled", + "actual": "#ffb5c7ff", + "expected": "#ffb5c7ff", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryOutlineDisabledColor", + "scenario": "light/custom=false/outline/primary/disabled", + "actual": "#ffb5c7ff", + "expected": "#ffb5c7ff", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryOutlineDisabledColor", + "scenario": "light/custom=true/outline/primary/disabled", + "actual": "#ff240915", + "expected": "#ff240915", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryOutlineDisabledColor", + "scenario": "light/custom=true/outline/primary/disabled", + "actual": "#ff240915", + "expected": "#ff240915", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryTextActiveBgColor", + "scenario": "dark/custom=false/text/primary/pressed", + "actual": "#ff2c2c2c", + "expected": "#ff2c2c2c", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryTextActiveBgColor", + "scenario": "dark/custom=true/text/primary/pressed", + "actual": "#ff2f2a62", + "expected": "#ff2f2a62", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryTextActiveBgColor", + "scenario": "light/custom=false/text/primary/pressed", + "actual": "#ffe8e8e8", + "expected": "#ffe8e8e8", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryTextActiveBgColor", + "scenario": "light/custom=true/text/primary/pressed", + "actual": "#ff2f2a62", + "expected": "#ff2f2a62", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryTextColor", + "scenario": "dark/custom=false/text/primary/idle", + "actual": "#ff4582e6", + "expected": "#ff4582e6", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryTextColor", + "scenario": "dark/custom=false/text/primary/pressed", + "actual": "#ff4582e6", + "expected": "#ff4582e6", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryTextColor", + "scenario": "dark/custom=true/text/primary/idle", + "actual": "#ff220307", + "expected": "#ff220307", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryTextColor", + "scenario": "dark/custom=true/text/primary/pressed", + "actual": "#ff220307", + "expected": "#ff220307", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryTextColor", + "scenario": "light/custom=false/text/primary/idle", + "actual": "#ff0052d9", + "expected": "#ff0052d9", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryTextColor", + "scenario": "light/custom=false/text/primary/pressed", + "actual": "#ff0052d9", + "expected": "#ff0052d9", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryTextColor", + "scenario": "light/custom=true/text/primary/idle", + "actual": "#ff220307", + "expected": "#ff220307", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryTextColor", + "scenario": "light/custom=true/text/primary/pressed", + "actual": "#ff220307", + "expected": "#ff220307", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryTextDisabledColor", + "scenario": "dark/custom=false/text/primary/disabled", + "actual": "#ff143975", + "expected": "#ff143975", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryTextDisabledColor", + "scenario": "dark/custom=true/text/primary/disabled", + "actual": "#ff240915", + "expected": "#ff240915", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryTextDisabledColor", + "scenario": "light/custom=false/text/primary/disabled", + "actual": "#ffb5c7ff", + "expected": "#ffb5c7ff", + "matches": true, + "enforced": true + }, + { + "name": "buttonPrimaryTextDisabledColor", + "scenario": "light/custom=true/text/primary/disabled", + "actual": "#ff240915", + "expected": "#ff240915", + "matches": true, + "enforced": true + }, + { + "name": "buttonSmallFont", + "scenario": "dark/custom=false/small", + "actual": "14.0/22.0/FontWeight.w600", + "expected": "14.0/22.0/FontWeight.w600", + "matches": true, + "enforced": true + }, + { + "name": "buttonSmallFont", + "scenario": "dark/custom=true/small", + "actual": "17.0/25.0/FontWeight.w700", + "expected": "17.0/25.0/FontWeight.w700", + "matches": true, + "enforced": true + }, + { + "name": "buttonSmallFont", + "scenario": "light/custom=false/small", + "actual": "14.0/22.0/FontWeight.w600", + "expected": "14.0/22.0/FontWeight.w600", + "matches": true, + "enforced": true + }, + { + "name": "buttonSmallFont", + "scenario": "light/custom=true/small", + "actual": "17.0/25.0/FontWeight.w700", + "expected": "17.0/25.0/FontWeight.w700", + "matches": true, + "enforced": true + }, + { + "name": "emptyActionMarginTop", + "scenario": "contract/dark/custom=false/image=false/action-gap", + "actual": 32, + "expected": 32, + "matches": true, + "enforced": true + }, + { + "name": "emptyActionMarginTop", + "scenario": "contract/dark/custom=false/image=true/action-gap", + "actual": 32, + "expected": 32, + "matches": true, + "enforced": true + }, + { + "name": "emptyActionMarginTop", + "scenario": "contract/dark/custom=true/image=false/action-gap", + "actual": 32, + "expected": 32, + "matches": true, + "enforced": true + }, + { + "name": "emptyActionMarginTop", + "scenario": "contract/dark/custom=true/image=true/action-gap", + "actual": 32, + "expected": 32, + "matches": true, + "enforced": true + }, + { + "name": "emptyActionMarginTop", + "scenario": "contract/light/custom=false/image=false/action-gap", + "actual": 32, + "expected": 32, + "matches": true, + "enforced": true + }, + { + "name": "emptyActionMarginTop", + "scenario": "contract/light/custom=false/image=true/action-gap", + "actual": 32, + "expected": 32, + "matches": true, + "enforced": true + }, + { + "name": "emptyActionMarginTop", + "scenario": "contract/light/custom=true/image=false/action-gap", + "actual": 32, + "expected": 32, + "matches": true, + "enforced": true + }, + { + "name": "emptyActionMarginTop", + "scenario": "contract/light/custom=true/image=true/action-gap", + "actual": 32, + "expected": 32, + "matches": true, + "enforced": true + }, + { + "name": "emptyActionMarginTop", + "scenario": "dark/custom=false/image=false", + "actual": 32, + "expected": 32, + "matches": true, + "enforced": true + }, + { + "name": "emptyActionMarginTop", + "scenario": "dark/custom=false/image=true", + "actual": 32, + "expected": 32, + "matches": true, + "enforced": true + }, + { + "name": "emptyActionMarginTop", + "scenario": "dark/custom=true/image=false", + "actual": 32, + "expected": 37, + "matches": false, + "enforced": false + }, + { + "name": "emptyActionMarginTop", + "scenario": "dark/custom=true/image=true", + "actual": 32, + "expected": 37, + "matches": false, + "enforced": false + }, + { + "name": "emptyActionMarginTop", + "scenario": "light/custom=false/image=false", + "actual": 32, + "expected": 32, + "matches": true, + "enforced": true + }, + { + "name": "emptyActionMarginTop", + "scenario": "light/custom=false/image=true", + "actual": 32, + "expected": 32, + "matches": true, + "enforced": true + }, + { + "name": "emptyActionMarginTop", + "scenario": "light/custom=true/image=false", + "actual": 32, + "expected": 37, + "matches": false, + "enforced": false + }, + { + "name": "emptyActionMarginTop", + "scenario": "light/custom=true/image=true", + "actual": 32, + "expected": 37, + "matches": false, + "enforced": false + }, + { + "name": "emptyDescriptionColor", + "scenario": "dark/custom=false/image=false", + "actual": "#59ffffff", + "expected": "#59ffffff", + "matches": true, + "enforced": true + }, + { + "name": "emptyDescriptionColor", + "scenario": "dark/custom=false/image=true", + "actual": "#59ffffff", + "expected": "#59ffffff", + "matches": true, + "enforced": true + }, + { + "name": "emptyDescriptionColor", + "scenario": "dark/custom=true/image=false", + "actual": "#ff343985", + "expected": "#ff343985", + "matches": true, + "enforced": true + }, + { + "name": "emptyDescriptionColor", + "scenario": "dark/custom=true/image=true", + "actual": "#ff343985", + "expected": "#ff343985", + "matches": true, + "enforced": true + }, + { + "name": "emptyDescriptionColor", + "scenario": "light/custom=false/image=false", + "actual": "#66000000", + "expected": "#66000000", + "matches": true, + "enforced": true + }, + { + "name": "emptyDescriptionColor", + "scenario": "light/custom=false/image=true", + "actual": "#66000000", + "expected": "#66000000", + "matches": true, + "enforced": true + }, + { + "name": "emptyDescriptionColor", + "scenario": "light/custom=true/image=false", + "actual": "#ff343985", + "expected": "#ff343985", + "matches": true, + "enforced": true + }, + { + "name": "emptyDescriptionColor", + "scenario": "light/custom=true/image=true", + "actual": "#ff343985", + "expected": "#ff343985", + "matches": true, + "enforced": true + }, + { + "name": "emptyDescriptionFont", + "scenario": "dark/custom=false/image=false", + "actual": "14.0/22.0", + "expected": "14.0/22.0", + "matches": true, + "enforced": true + }, + { + "name": "emptyDescriptionFont", + "scenario": "dark/custom=false/image=true", + "actual": "14.0/22.0", + "expected": "14.0/22.0", + "matches": true, + "enforced": true + }, + { + "name": "emptyDescriptionFont", + "scenario": "dark/custom=true/image=false", + "actual": "19.0/27.0", + "expected": "19.0/27.0", + "matches": true, + "enforced": true + }, + { + "name": "emptyDescriptionFont", + "scenario": "dark/custom=true/image=true", + "actual": "19.0/27.0", + "expected": "19.0/27.0", + "matches": true, + "enforced": true + }, + { + "name": "emptyDescriptionFont", + "scenario": "light/custom=false/image=false", + "actual": "14.0/22.0", + "expected": "14.0/22.0", + "matches": true, + "enforced": true + }, + { + "name": "emptyDescriptionFont", + "scenario": "light/custom=false/image=true", + "actual": "14.0/22.0", + "expected": "14.0/22.0", + "matches": true, + "enforced": true + }, + { + "name": "emptyDescriptionFont", + "scenario": "light/custom=true/image=false", + "actual": "19.0/27.0", + "expected": "19.0/27.0", + "matches": true, + "enforced": true + }, + { + "name": "emptyDescriptionFont", + "scenario": "light/custom=true/image=true", + "actual": "19.0/27.0", + "expected": "19.0/27.0", + "matches": true, + "enforced": true + }, + { + "name": "emptyDescriptionMarginTop", + "scenario": "contract/dark/custom=false/image=false/description-gap", + "actual": 22, + "expected": 22, + "matches": true, + "enforced": true + }, + { + "name": "emptyDescriptionMarginTop", + "scenario": "contract/dark/custom=false/image=true/description-gap", + "actual": 16, + "expected": 16, + "matches": true, + "enforced": true + }, + { + "name": "emptyDescriptionMarginTop", + "scenario": "contract/dark/custom=true/image=false/description-gap", + "actual": 22, + "expected": 22, + "matches": true, + "enforced": true + }, + { + "name": "emptyDescriptionMarginTop", + "scenario": "contract/dark/custom=true/image=true/description-gap", + "actual": 16, + "expected": 16, + "matches": true, + "enforced": true + }, + { + "name": "emptyDescriptionMarginTop", + "scenario": "contract/light/custom=false/image=false/description-gap", + "actual": 22, + "expected": 22, + "matches": true, + "enforced": true + }, + { + "name": "emptyDescriptionMarginTop", + "scenario": "contract/light/custom=false/image=true/description-gap", + "actual": 16, + "expected": 16, + "matches": true, + "enforced": true + }, + { + "name": "emptyDescriptionMarginTop", + "scenario": "contract/light/custom=true/image=false/description-gap", + "actual": 22, + "expected": 22, + "matches": true, + "enforced": true + }, + { + "name": "emptyDescriptionMarginTop", + "scenario": "contract/light/custom=true/image=true/description-gap", + "actual": 16, + "expected": 16, + "matches": true, + "enforced": true + }, + { + "name": "emptyDescriptionMarginTop", + "scenario": "dark/custom=false/image=false", + "actual": 22, + "expected": 16, + "matches": false, + "enforced": false + }, + { + "name": "emptyDescriptionMarginTop", + "scenario": "dark/custom=false/image=true", + "actual": 16, + "expected": 16, + "matches": true, + "enforced": true + }, + { + "name": "emptyDescriptionMarginTop", + "scenario": "dark/custom=true/image=false", + "actual": 22, + "expected": 19, + "matches": false, + "enforced": false + }, + { + "name": "emptyDescriptionMarginTop", + "scenario": "dark/custom=true/image=true", + "actual": 16, + "expected": 19, + "matches": false, + "enforced": false + }, + { + "name": "emptyDescriptionMarginTop", + "scenario": "light/custom=false/image=false", + "actual": 22, + "expected": 16, + "matches": false, + "enforced": false + }, + { + "name": "emptyDescriptionMarginTop", + "scenario": "light/custom=false/image=true", + "actual": 16, + "expected": 16, + "matches": true, + "enforced": true + }, + { + "name": "emptyDescriptionMarginTop", + "scenario": "light/custom=true/image=false", + "actual": 22, + "expected": 19, + "matches": false, + "enforced": false + }, + { + "name": "emptyDescriptionMarginTop", + "scenario": "light/custom=true/image=true", + "actual": 16, + "expected": 19, + "matches": false, + "enforced": false + }, + { + "name": "emptyIconColor", + "scenario": "dark/custom=false/image=false", + "actual": "#59ffffff", + "expected": "#59ffffff", + "matches": true, + "enforced": true + }, + { + "name": "emptyIconColor", + "scenario": "dark/custom=true/image=false", + "actual": "#ff343985", + "expected": "#ff343985", + "matches": true, + "enforced": true + }, + { + "name": "emptyIconColor", + "scenario": "light/custom=false/image=false", + "actual": "#66000000", + "expected": "#66000000", + "matches": true, + "enforced": true + }, + { + "name": "emptyIconColor", + "scenario": "light/custom=true/image=false", + "actual": "#ff343985", + "expected": "#ff343985", + "matches": true, + "enforced": true + }, + { + "name": "inputBgColor", + "scenario": "dark/custom=false/enabled=true", + "actual": "#ff242424", + "expected": "#ff242424", + "matches": true, + "enforced": true + }, + { + "name": "inputBgColor", + "scenario": "dark/custom=true/enabled=true", + "actual": "#ff2e275b", + "expected": "#ff2e275b", + "matches": true, + "enforced": true + }, + { + "name": "inputBgColor", + "scenario": "light/custom=false/enabled=true", + "actual": "#ffffffff", + "expected": "#ffffffff", + "matches": true, + "enforced": true + }, + { + "name": "inputBgColor", + "scenario": "light/custom=true/enabled=true", + "actual": "#ff2e275b", + "expected": "#ff2e275b", + "matches": true, + "enforced": true + }, + { + "name": "inputBorderColor", + "scenario": "dark/custom=false/enabled=true", + "actual": "#ff5e5e5e", + "expected": "#ff383838", + "matches": false, + "enforced": false + }, + { + "name": "inputBorderColor", + "scenario": "dark/custom=true/enabled=true", + "actual": "#ff313070", + "expected": "#ff323377", + "matches": false, + "enforced": false + }, + { + "name": "inputBorderColor", + "scenario": "light/custom=false/enabled=true", + "actual": "#ffdcdcdc", + "expected": "#ffe8e8e8", + "matches": false, + "enforced": false + }, + { + "name": "inputBorderColor", + "scenario": "light/custom=true/enabled=true", + "actual": "#ff313070", + "expected": "#ff323377", + "matches": false, + "enforced": false + }, + { + "name": "inputDefaultTextColor", + "scenario": "dark/custom=false/enabled=true", + "actual": "#e6ffffff", + "expected": "#e6ffffff", + "matches": true, + "enforced": true + }, + { + "name": "inputDefaultTextColor", + "scenario": "dark/custom=true/enabled=true", + "actual": "#ff33367e", + "expected": "#ff33367e", + "matches": true, + "enforced": true + }, + { + "name": "inputDefaultTextColor", + "scenario": "light/custom=false/enabled=true", + "actual": "#e5000000", + "expected": "#e5000000", + "matches": true, + "enforced": true + }, + { + "name": "inputDefaultTextColor", + "scenario": "light/custom=true/enabled=true", + "actual": "#ff33367e", + "expected": "#ff33367e", + "matches": true, + "enforced": true + }, + { + "name": "inputDisabledTextColor", + "scenario": "dark/custom=false/enabled=false", + "actual": "#38ffffff", + "expected": "#38ffffff", + "matches": true, + "enforced": true + }, + { + "name": "inputDisabledTextColor", + "scenario": "dark/custom=false/enabled=false", + "actual": "#38ffffff", + "expected": "#38ffffff", + "matches": true, + "enforced": true + }, + { + "name": "inputDisabledTextColor", + "scenario": "dark/custom=true/enabled=false", + "actual": "#ff353c8c", + "expected": "#ff353c8c", + "matches": true, + "enforced": true + }, + { + "name": "inputDisabledTextColor", + "scenario": "dark/custom=true/enabled=false", + "actual": "#ff353c8c", + "expected": "#ff353c8c", + "matches": true, + "enforced": true + }, + { + "name": "inputDisabledTextColor", + "scenario": "light/custom=false/enabled=false", + "actual": "#42000000", + "expected": "#42000000", + "matches": true, + "enforced": true + }, + { + "name": "inputDisabledTextColor", + "scenario": "light/custom=false/enabled=false", + "actual": "#42000000", + "expected": "#42000000", + "matches": true, + "enforced": true + }, + { + "name": "inputDisabledTextColor", + "scenario": "light/custom=true/enabled=false", + "actual": "#ff353c8c", + "expected": "#ff353c8c", + "matches": true, + "enforced": true + }, + { + "name": "inputDisabledTextColor", + "scenario": "light/custom=true/enabled=false", + "actual": "#ff353c8c", + "expected": "#ff353c8c", + "matches": true, + "enforced": true + }, + { + "name": "inputPlaceholderTextColor", + "scenario": "dark/custom=false/enabled=true", + "actual": "#59ffffff", + "expected": "#59ffffff", + "matches": true, + "enforced": true + }, + { + "name": "inputPlaceholderTextColor", + "scenario": "dark/custom=true/enabled=true", + "actual": "#ff343985", + "expected": "#ff343985", + "matches": true, + "enforced": true + }, + { + "name": "inputPlaceholderTextColor", + "scenario": "light/custom=false/enabled=true", + "actual": "#66000000", + "expected": "#66000000", + "matches": true, + "enforced": true + }, + { + "name": "inputPlaceholderTextColor", + "scenario": "light/custom=true/enabled=true", + "actual": "#ff343985", + "expected": "#ff343985", + "matches": true, + "enforced": true + }, + { + "name": "inputPlaceholderTextFont", + "scenario": "dark/custom=false/enabled=true", + "actual": "16.0/24.0", + "expected": "16.0/24.0", + "matches": true, + "enforced": true + }, + { + "name": "inputPlaceholderTextFont", + "scenario": "dark/custom=true/enabled=true", + "actual": "20.0/28.0", + "expected": "20.0/28.0", + "matches": true, + "enforced": true + }, + { + "name": "inputPlaceholderTextFont", + "scenario": "light/custom=false/enabled=true", + "actual": "16.0/24.0", + "expected": "16.0/24.0", + "matches": true, + "enforced": true + }, + { + "name": "inputPlaceholderTextFont", + "scenario": "light/custom=true/enabled=true", + "actual": "20.0/28.0", + "expected": "20.0/28.0", + "matches": true, + "enforced": true + }, + { + "name": "inputPrefixIconColor", + "scenario": "dark/custom=false/enabled=true", + "actual": "#e6ffffff", + "expected": "#e6ffffff", + "matches": true, + "enforced": true + }, + { + "name": "inputPrefixIconColor", + "scenario": "dark/custom=true/enabled=true", + "actual": "#ff33367e", + "expected": "#ff33367e", + "matches": true, + "enforced": true + }, + { + "name": "inputPrefixIconColor", + "scenario": "light/custom=false/enabled=true", + "actual": "#e5000000", + "expected": "#e5000000", + "matches": true, + "enforced": true + }, + { + "name": "inputPrefixIconColor", + "scenario": "light/custom=true/enabled=true", + "actual": "#ff33367e", + "expected": "#ff33367e", + "matches": true, + "enforced": true + }, + { + "name": "inputSuffixIconColor", + "scenario": "dark/custom=false/enabled=true", + "actual": "#59ffffff", + "expected": "#59ffffff", + "matches": true, + "enforced": true + }, + { + "name": "inputSuffixIconColor", + "scenario": "dark/custom=true/enabled=true", + "actual": "#ff343985", + "expected": "#ff343985", + "matches": true, + "enforced": true + }, + { + "name": "inputSuffixIconColor", + "scenario": "light/custom=false/enabled=true", + "actual": "#66000000", + "expected": "#66000000", + "matches": true, + "enforced": true + }, + { + "name": "inputSuffixIconColor", + "scenario": "light/custom=true/enabled=true", + "actual": "#ff343985", + "expected": "#ff343985", + "matches": true, + "enforced": true + }, + { + "name": "inputVerticalPadding", + "scenario": "contract/dark/custom=false/enabled=true/standalone-padding", + "actual": 16, + "expected": 16, + "matches": true, + "enforced": true + }, + { + "name": "inputVerticalPadding", + "scenario": "contract/dark/custom=true/enabled=true/standalone-padding", + "actual": 16, + "expected": 16, + "matches": true, + "enforced": true + }, + { + "name": "inputVerticalPadding", + "scenario": "contract/light/custom=false/enabled=true/standalone-padding", + "actual": 16, + "expected": 16, + "matches": true, + "enforced": true + }, + { + "name": "inputVerticalPadding", + "scenario": "contract/light/custom=true/enabled=true/standalone-padding", + "actual": 16, + "expected": 16, + "matches": true, + "enforced": true + }, + { + "name": "inputVerticalPadding", + "scenario": "dark/custom=false/enabled=true", + "actual": 16, + "expected": 16, + "matches": true, + "enforced": true + }, + { + "name": "inputVerticalPadding", + "scenario": "dark/custom=true/enabled=true", + "actual": 16, + "expected": 19, + "matches": false, + "enforced": false + }, + { + "name": "inputVerticalPadding", + "scenario": "light/custom=false/enabled=true", + "actual": 16, + "expected": 16, + "matches": true, + "enforced": true + }, + { + "name": "inputVerticalPadding", + "scenario": "light/custom=true/enabled=true", + "actual": 16, + "expected": 19, + "matches": false, + "enforced": false + }, + { + "name": "linkDangerActiveColor", + "scenario": "dark/custom=false/pressed/icon", + "actual": "#ffa03f46", + "expected": "#ffa03f46", + "matches": true, + "enforced": true + }, + { + "name": "linkDangerActiveColor", + "scenario": "dark/custom=false/pressed/text", + "actual": "#ffa03f46", + "expected": "#ffa03f46", + "matches": true, + "enforced": true + }, + { + "name": "linkDangerActiveColor", + "scenario": "dark/custom=true/pressed/icon", + "actual": "#ff281531", + "expected": "#ff281531", + "matches": true, + "enforced": true + }, + { + "name": "linkDangerActiveColor", + "scenario": "dark/custom=true/pressed/text", + "actual": "#ff281531", + "expected": "#ff281531", + "matches": true, + "enforced": true + }, + { + "name": "linkDangerActiveColor", + "scenario": "light/custom=false/pressed/icon", + "actual": "#ffad352f", + "expected": "#ffad352f", + "matches": true, + "enforced": true + }, + { + "name": "linkDangerActiveColor", + "scenario": "light/custom=false/pressed/text", + "actual": "#ffad352f", + "expected": "#ffad352f", + "matches": true, + "enforced": true + }, + { + "name": "linkDangerActiveColor", + "scenario": "light/custom=true/pressed/icon", + "actual": "#ff281531", + "expected": "#ff281531", + "matches": true, + "enforced": true + }, + { + "name": "linkDangerActiveColor", + "scenario": "light/custom=true/pressed/text", + "actual": "#ff281531", + "expected": "#ff281531", + "matches": true, + "enforced": true + }, + { + "name": "linkDangerColor", + "scenario": "dark/custom=false/idle/icon", + "actual": "#ffc64751", + "expected": "#ffc64751", + "matches": true, + "enforced": true + }, + { + "name": "linkDangerColor", + "scenario": "dark/custom=false/idle/text", + "actual": "#ffc64751", + "expected": "#ffc64751", + "matches": true, + "enforced": true + }, + { + "name": "linkDangerColor", + "scenario": "dark/custom=true/idle/icon", + "actual": "#ff27122a", + "expected": "#ff27122a", + "matches": true, + "enforced": true + }, + { + "name": "linkDangerColor", + "scenario": "dark/custom=true/idle/text", + "actual": "#ff27122a", + "expected": "#ff27122a", + "matches": true, + "enforced": true + }, + { + "name": "linkDangerColor", + "scenario": "light/custom=false/idle/icon", + "actual": "#ffd54941", + "expected": "#ffd54941", + "matches": true, + "enforced": true + }, + { + "name": "linkDangerColor", + "scenario": "light/custom=false/idle/text", + "actual": "#ffd54941", + "expected": "#ffd54941", + "matches": true, + "enforced": true + }, + { + "name": "linkDangerColor", + "scenario": "light/custom=true/idle/icon", + "actual": "#ff27122a", + "expected": "#ff27122a", + "matches": true, + "enforced": true + }, + { + "name": "linkDangerColor", + "scenario": "light/custom=true/idle/text", + "actual": "#ff27122a", + "expected": "#ff27122a", + "matches": true, + "enforced": true + }, + { + "name": "linkDangerDisabledColor", + "scenario": "dark/custom=false/disabled/icon", + "actual": "#ff703439", + "expected": "#ff703439", + "matches": true, + "enforced": true + }, + { + "name": "linkDangerDisabledColor", + "scenario": "dark/custom=false/disabled/text", + "actual": "#ff703439", + "expected": "#ff703439", + "matches": true, + "enforced": true + }, + { + "name": "linkDangerDisabledColor", + "scenario": "dark/custom=true/disabled/icon", + "actual": "#ff291838", + "expected": "#ff291838", + "matches": true, + "enforced": true + }, + { + "name": "linkDangerDisabledColor", + "scenario": "dark/custom=true/disabled/text", + "actual": "#ff291838", + "expected": "#ff291838", + "matches": true, + "enforced": true + }, + { + "name": "linkDangerDisabledColor", + "scenario": "light/custom=false/disabled/icon", + "actual": "#ffffb9b0", + "expected": "#ffffb9b0", + "matches": true, + "enforced": true + }, + { + "name": "linkDangerDisabledColor", + "scenario": "light/custom=false/disabled/text", + "actual": "#ffffb9b0", + "expected": "#ffffb9b0", + "matches": true, + "enforced": true + }, + { + "name": "linkDangerDisabledColor", + "scenario": "light/custom=true/disabled/icon", + "actual": "#ff291838", + "expected": "#ff291838", + "matches": true, + "enforced": true + }, + { + "name": "linkDangerDisabledColor", + "scenario": "light/custom=true/disabled/text", + "actual": "#ff291838", + "expected": "#ff291838", + "matches": true, + "enforced": true + }, + { + "name": "linkDefaultActiveColor", + "scenario": "dark/custom=false/pressed/icon", + "actual": "#ff699ef5", + "expected": "#ff699ef5", + "matches": true, + "enforced": true + }, + { + "name": "linkDefaultActiveColor", + "scenario": "dark/custom=false/pressed/text", + "actual": "#ff699ef5", + "expected": "#ff699ef5", + "matches": true, + "enforced": true + }, + { + "name": "linkDefaultActiveColor", + "scenario": "dark/custom=true/pressed/icon", + "actual": "#ff23060e", + "expected": "#ff23060e", + "matches": true, + "enforced": true + }, + { + "name": "linkDefaultActiveColor", + "scenario": "dark/custom=true/pressed/text", + "actual": "#ff23060e", + "expected": "#ff23060e", + "matches": true, + "enforced": true + }, + { + "name": "linkDefaultActiveColor", + "scenario": "light/custom=false/pressed/icon", + "actual": "#ff003cab", + "expected": "#ff003cab", + "matches": true, + "enforced": true + }, + { + "name": "linkDefaultActiveColor", + "scenario": "light/custom=false/pressed/text", + "actual": "#ff003cab", + "expected": "#ff003cab", + "matches": true, + "enforced": true + }, + { + "name": "linkDefaultActiveColor", + "scenario": "light/custom=true/pressed/icon", + "actual": "#ff23060e", + "expected": "#ff23060e", + "matches": true, + "enforced": true + }, + { + "name": "linkDefaultActiveColor", + "scenario": "light/custom=true/pressed/text", + "actual": "#ff23060e", + "expected": "#ff23060e", + "matches": true, + "enforced": true + }, + { + "name": "linkDefaultColor", + "scenario": "dark/custom=false/idle/icon", + "actual": "#e6ffffff", + "expected": "#e6ffffff", + "matches": true, + "enforced": true + }, + { + "name": "linkDefaultColor", + "scenario": "dark/custom=false/idle/text", + "actual": "#e6ffffff", + "expected": "#e6ffffff", + "matches": true, + "enforced": true + }, + { + "name": "linkDefaultColor", + "scenario": "dark/custom=true/idle/icon", + "actual": "#ff33367e", + "expected": "#ff33367e", + "matches": true, + "enforced": true + }, + { + "name": "linkDefaultColor", + "scenario": "dark/custom=true/idle/text", + "actual": "#ff33367e", + "expected": "#ff33367e", + "matches": true, + "enforced": true + }, + { + "name": "linkDefaultColor", + "scenario": "light/custom=false/idle/icon", + "actual": "#e5000000", + "expected": "#e5000000", + "matches": true, + "enforced": true + }, + { + "name": "linkDefaultColor", + "scenario": "light/custom=false/idle/text", + "actual": "#e5000000", + "expected": "#e5000000", + "matches": true, + "enforced": true + }, + { + "name": "linkDefaultColor", + "scenario": "light/custom=true/idle/icon", + "actual": "#ff33367e", + "expected": "#ff33367e", + "matches": true, + "enforced": true + }, + { + "name": "linkDefaultColor", + "scenario": "light/custom=true/idle/text", + "actual": "#ff33367e", + "expected": "#ff33367e", + "matches": true, + "enforced": true + }, + { + "name": "linkDefaultDisabledColor", + "scenario": "dark/custom=false/disabled/icon", + "actual": "#38ffffff", + "expected": "#38ffffff", + "matches": true, + "enforced": true + }, + { + "name": "linkDefaultDisabledColor", + "scenario": "dark/custom=false/disabled/text", + "actual": "#38ffffff", + "expected": "#38ffffff", + "matches": true, + "enforced": true + }, + { + "name": "linkDefaultDisabledColor", + "scenario": "dark/custom=true/disabled/icon", + "actual": "#ff353c8c", + "expected": "#ff353c8c", + "matches": true, + "enforced": true + }, + { + "name": "linkDefaultDisabledColor", + "scenario": "dark/custom=true/disabled/text", + "actual": "#ff353c8c", + "expected": "#ff353c8c", + "matches": true, + "enforced": true + }, + { + "name": "linkDefaultDisabledColor", + "scenario": "light/custom=false/disabled/icon", + "actual": "#42000000", + "expected": "#42000000", + "matches": true, + "enforced": true + }, + { + "name": "linkDefaultDisabledColor", + "scenario": "light/custom=false/disabled/text", + "actual": "#42000000", + "expected": "#42000000", + "matches": true, + "enforced": true + }, + { + "name": "linkDefaultDisabledColor", + "scenario": "light/custom=true/disabled/icon", + "actual": "#ff353c8c", + "expected": "#ff353c8c", + "matches": true, + "enforced": true + }, + { + "name": "linkDefaultDisabledColor", + "scenario": "light/custom=true/disabled/text", + "actual": "#ff353c8c", + "expected": "#ff353c8c", + "matches": true, + "enforced": true + }, + { + "name": "linkPrimaryActiveColor", + "scenario": "dark/custom=false/pressed/icon", + "actual": "#ff699ef5", + "expected": "#ff699ef5", + "matches": true, + "enforced": true + }, + { + "name": "linkPrimaryActiveColor", + "scenario": "dark/custom=false/pressed/text", + "actual": "#ff699ef5", + "expected": "#ff699ef5", + "matches": true, + "enforced": true + }, + { + "name": "linkPrimaryActiveColor", + "scenario": "dark/custom=true/pressed/icon", + "actual": "#ff23060e", + "expected": "#ff23060e", + "matches": true, + "enforced": true + }, + { + "name": "linkPrimaryActiveColor", + "scenario": "dark/custom=true/pressed/text", + "actual": "#ff23060e", + "expected": "#ff23060e", + "matches": true, + "enforced": true + }, + { + "name": "linkPrimaryActiveColor", + "scenario": "light/custom=false/pressed/icon", + "actual": "#ff003cab", + "expected": "#ff003cab", + "matches": true, + "enforced": true + }, + { + "name": "linkPrimaryActiveColor", + "scenario": "light/custom=false/pressed/text", + "actual": "#ff003cab", + "expected": "#ff003cab", + "matches": true, + "enforced": true + }, + { + "name": "linkPrimaryActiveColor", + "scenario": "light/custom=true/pressed/icon", + "actual": "#ff23060e", + "expected": "#ff23060e", + "matches": true, + "enforced": true + }, + { + "name": "linkPrimaryActiveColor", + "scenario": "light/custom=true/pressed/text", + "actual": "#ff23060e", + "expected": "#ff23060e", + "matches": true, + "enforced": true + }, + { + "name": "linkPrimaryColor", + "scenario": "dark/custom=false/idle/icon", + "actual": "#ff4582e6", + "expected": "#ff4582e6", + "matches": true, + "enforced": true + }, + { + "name": "linkPrimaryColor", + "scenario": "dark/custom=false/idle/text", + "actual": "#ff4582e6", + "expected": "#ff4582e6", + "matches": true, + "enforced": true + }, + { + "name": "linkPrimaryColor", + "scenario": "dark/custom=true/idle/icon", + "actual": "#ff220307", + "expected": "#ff220307", + "matches": true, + "enforced": true + }, + { + "name": "linkPrimaryColor", + "scenario": "dark/custom=true/idle/text", + "actual": "#ff220307", + "expected": "#ff220307", + "matches": true, + "enforced": true + }, + { + "name": "linkPrimaryColor", + "scenario": "light/custom=false/idle/icon", + "actual": "#ff0052d9", + "expected": "#ff0052d9", + "matches": true, + "enforced": true + }, + { + "name": "linkPrimaryColor", + "scenario": "light/custom=false/idle/text", + "actual": "#ff0052d9", + "expected": "#ff0052d9", + "matches": true, + "enforced": true + }, + { + "name": "linkPrimaryColor", + "scenario": "light/custom=true/idle/icon", + "actual": "#ff220307", + "expected": "#ff220307", + "matches": true, + "enforced": true + }, + { + "name": "linkPrimaryColor", + "scenario": "light/custom=true/idle/text", + "actual": "#ff220307", + "expected": "#ff220307", + "matches": true, + "enforced": true + }, + { + "name": "linkPrimaryDisabledColor", + "scenario": "dark/custom=false/disabled/icon", + "actual": "#ff143975", + "expected": "#ff143975", + "matches": true, + "enforced": true + }, + { + "name": "linkPrimaryDisabledColor", + "scenario": "dark/custom=false/disabled/text", + "actual": "#ff143975", + "expected": "#ff143975", + "matches": true, + "enforced": true + }, + { + "name": "linkPrimaryDisabledColor", + "scenario": "dark/custom=true/disabled/icon", + "actual": "#ff240915", + "expected": "#ff240915", + "matches": true, + "enforced": true + }, + { + "name": "linkPrimaryDisabledColor", + "scenario": "dark/custom=true/disabled/text", + "actual": "#ff240915", + "expected": "#ff240915", + "matches": true, + "enforced": true + }, + { + "name": "linkPrimaryDisabledColor", + "scenario": "light/custom=false/disabled/icon", + "actual": "#ffb5c7ff", + "expected": "#ffb5c7ff", + "matches": true, + "enforced": true + }, + { + "name": "linkPrimaryDisabledColor", + "scenario": "light/custom=false/disabled/text", + "actual": "#ffb5c7ff", + "expected": "#ffb5c7ff", + "matches": true, + "enforced": true + }, + { + "name": "linkPrimaryDisabledColor", + "scenario": "light/custom=true/disabled/icon", + "actual": "#ff240915", + "expected": "#ff240915", + "matches": true, + "enforced": true + }, + { + "name": "linkPrimaryDisabledColor", + "scenario": "light/custom=true/disabled/text", + "actual": "#ff240915", + "expected": "#ff240915", + "matches": true, + "enforced": true + }, + { + "name": "linkSuccessActiveColor", + "scenario": "dark/custom=false/pressed/icon", + "actual": "#ff0d7a55", + "expected": "#ff0d7a55", + "matches": true, + "enforced": true + }, + { + "name": "linkSuccessActiveColor", + "scenario": "dark/custom=false/pressed/text", + "actual": "#ff0d7a55", + "expected": "#ff0d7a55", + "matches": true, + "enforced": true + }, + { + "name": "linkSuccessActiveColor", + "scenario": "dark/custom=true/pressed/icon", + "actual": "#ff3c51bd", + "expected": "#ff3c51bd", + "matches": true, + "enforced": true + }, + { + "name": "linkSuccessActiveColor", + "scenario": "dark/custom=true/pressed/text", + "actual": "#ff3c51bd", + "expected": "#ff3c51bd", + "matches": true, + "enforced": true + }, + { + "name": "linkSuccessActiveColor", + "scenario": "light/custom=false/pressed/icon", + "actual": "#ff008858", + "expected": "#ff008858", + "matches": true, + "enforced": true + }, + { + "name": "linkSuccessActiveColor", + "scenario": "light/custom=false/pressed/text", + "actual": "#ff008858", + "expected": "#ff008858", + "matches": true, + "enforced": true + }, + { + "name": "linkSuccessActiveColor", + "scenario": "light/custom=true/pressed/icon", + "actual": "#ff3c51bd", + "expected": "#ff3c51bd", + "matches": true, + "enforced": true + }, + { + "name": "linkSuccessActiveColor", + "scenario": "light/custom=true/pressed/text", + "actual": "#ff3c51bd", + "expected": "#ff3c51bd", + "matches": true, + "enforced": true + }, + { + "name": "linkSuccessColor", + "scenario": "dark/custom=false/idle/icon", + "actual": "#ff059465", + "expected": "#ff059465", + "matches": true, + "enforced": true + }, + { + "name": "linkSuccessColor", + "scenario": "dark/custom=false/idle/text", + "actual": "#ff059465", + "expected": "#ff059465", + "matches": true, + "enforced": true + }, + { + "name": "linkSuccessColor", + "scenario": "dark/custom=true/idle/icon", + "actual": "#ff3a4baf", + "expected": "#ff3a4baf", + "matches": true, + "enforced": true + }, + { + "name": "linkSuccessColor", + "scenario": "dark/custom=true/idle/text", + "actual": "#ff3a4baf", + "expected": "#ff3a4baf", + "matches": true, + "enforced": true + }, + { + "name": "linkSuccessColor", + "scenario": "light/custom=false/idle/icon", + "actual": "#ff2ba471", + "expected": "#ff2ba471", + "matches": true, + "enforced": true + }, + { + "name": "linkSuccessColor", + "scenario": "light/custom=false/idle/text", + "actual": "#ff2ba471", + "expected": "#ff2ba471", + "matches": true, + "enforced": true + }, + { + "name": "linkSuccessColor", + "scenario": "light/custom=true/idle/icon", + "actual": "#ff3a4baf", + "expected": "#ff3a4baf", + "matches": true, + "enforced": true + }, + { + "name": "linkSuccessColor", + "scenario": "light/custom=true/idle/text", + "actual": "#ff3a4baf", + "expected": "#ff3a4baf", + "matches": true, + "enforced": true + }, + { + "name": "linkSuccessDisabledColor", + "scenario": "dark/custom=false/disabled/icon", + "actual": "#ff17533d", + "expected": "#ff17533d", + "matches": true, + "enforced": true + }, + { + "name": "linkSuccessDisabledColor", + "scenario": "dark/custom=false/disabled/text", + "actual": "#ff17533d", + "expected": "#ff17533d", + "matches": true, + "enforced": true + }, + { + "name": "linkSuccessDisabledColor", + "scenario": "dark/custom=true/disabled/icon", + "actual": "#ff3d54c4", + "expected": "#ff3d54c4", + "matches": true, + "enforced": true + }, + { + "name": "linkSuccessDisabledColor", + "scenario": "dark/custom=true/disabled/text", + "actual": "#ff3d54c4", + "expected": "#ff3d54c4", + "matches": true, + "enforced": true + }, + { + "name": "linkSuccessDisabledColor", + "scenario": "light/custom=false/disabled/icon", + "actual": "#ff92dab2", + "expected": "#ff92dab2", + "matches": true, + "enforced": true + }, + { + "name": "linkSuccessDisabledColor", + "scenario": "light/custom=false/disabled/text", + "actual": "#ff92dab2", + "expected": "#ff92dab2", + "matches": true, + "enforced": true + }, + { + "name": "linkSuccessDisabledColor", + "scenario": "light/custom=true/disabled/icon", + "actual": "#ff3d54c4", + "expected": "#ff3d54c4", + "matches": true, + "enforced": true + }, + { + "name": "linkSuccessDisabledColor", + "scenario": "light/custom=true/disabled/text", + "actual": "#ff3d54c4", + "expected": "#ff3d54c4", + "matches": true, + "enforced": true + }, + { + "name": "linkWarningActiveColor", + "scenario": "dark/custom=false/pressed/icon", + "actual": "#ffa75d2b", + "expected": "#ffa75d2b", + "matches": true, + "enforced": true + }, + { + "name": "linkWarningActiveColor", + "scenario": "dark/custom=false/pressed/text", + "actual": "#ffa75d2b", + "expected": "#ffa75d2b", + "matches": true, + "enforced": true + }, + { + "name": "linkWarningActiveColor", + "scenario": "dark/custom=true/pressed/icon", + "actual": "#ff3e57cb", + "expected": "#ff3e57cb", + "matches": true, + "enforced": true + }, + { + "name": "linkWarningActiveColor", + "scenario": "dark/custom=true/pressed/text", + "actual": "#ff3e57cb", + "expected": "#ff3e57cb", + "matches": true, + "enforced": true + }, + { + "name": "linkWarningActiveColor", + "scenario": "light/custom=false/pressed/icon", + "actual": "#ffbe5a00", + "expected": "#ffbe5a00", + "matches": true, + "enforced": true + }, + { + "name": "linkWarningActiveColor", + "scenario": "light/custom=false/pressed/text", + "actual": "#ffbe5a00", + "expected": "#ffbe5a00", + "matches": true, + "enforced": true + }, + { + "name": "linkWarningActiveColor", + "scenario": "light/custom=true/pressed/icon", + "actual": "#ff3e57cb", + "expected": "#ff3e57cb", + "matches": true, + "enforced": true + }, + { + "name": "linkWarningActiveColor", + "scenario": "light/custom=true/pressed/text", + "actual": "#ff3e57cb", + "expected": "#ff3e57cb", + "matches": true, + "enforced": true + }, + { + "name": "linkWarningColor", + "scenario": "dark/custom=false/idle/icon", + "actual": "#ffcf6e2d", + "expected": "#ffcf6e2d", + "matches": true, + "enforced": true + }, + { + "name": "linkWarningColor", + "scenario": "dark/custom=false/idle/text", + "actual": "#ffcf6e2d", + "expected": "#ffcf6e2d", + "matches": true, + "enforced": true + }, + { + "name": "linkWarningColor", + "scenario": "dark/custom=true/idle/icon", + "actual": "#ff3b4eb6", + "expected": "#ff3b4eb6", + "matches": true, + "enforced": true + }, + { + "name": "linkWarningColor", + "scenario": "dark/custom=true/idle/text", + "actual": "#ff3b4eb6", + "expected": "#ff3b4eb6", + "matches": true, + "enforced": true + }, + { + "name": "linkWarningColor", + "scenario": "light/custom=false/idle/icon", + "actual": "#ffe37318", + "expected": "#ffe37318", + "matches": true, + "enforced": true + }, + { + "name": "linkWarningColor", + "scenario": "light/custom=false/idle/text", + "actual": "#ffe37318", + "expected": "#ffe37318", + "matches": true, + "enforced": true + }, + { + "name": "linkWarningColor", + "scenario": "light/custom=true/idle/icon", + "actual": "#ff3b4eb6", + "expected": "#ff3b4eb6", + "matches": true, + "enforced": true + }, + { + "name": "linkWarningColor", + "scenario": "light/custom=true/idle/text", + "actual": "#ff3b4eb6", + "expected": "#ff3b4eb6", + "matches": true, + "enforced": true + }, + { + "name": "linkWarningDisabledColor", + "scenario": "dark/custom=false/disabled/icon", + "actual": "#ff733c23", + "expected": "#ff733c23", + "matches": true, + "enforced": true + }, + { + "name": "linkWarningDisabledColor", + "scenario": "dark/custom=false/disabled/text", + "actual": "#ff733c23", + "expected": "#ff733c23", + "matches": true, + "enforced": true + }, + { + "name": "linkWarningDisabledColor", + "scenario": "dark/custom=true/disabled/icon", + "actual": "#ff3f5ad2", + "expected": "#ff3f5ad2", + "matches": true, + "enforced": true + }, + { + "name": "linkWarningDisabledColor", + "scenario": "dark/custom=true/disabled/text", + "actual": "#ff3f5ad2", + "expected": "#ff3f5ad2", + "matches": true, + "enforced": true + }, + { + "name": "linkWarningDisabledColor", + "scenario": "light/custom=false/disabled/icon", + "actual": "#ffffb98c", + "expected": "#ffffb98c", + "matches": true, + "enforced": true + }, + { + "name": "linkWarningDisabledColor", + "scenario": "light/custom=false/disabled/text", + "actual": "#ffffb98c", + "expected": "#ffffb98c", + "matches": true, + "enforced": true + }, + { + "name": "linkWarningDisabledColor", + "scenario": "light/custom=true/disabled/icon", + "actual": "#ff3f5ad2", + "expected": "#ff3f5ad2", + "matches": true, + "enforced": true + }, + { + "name": "linkWarningDisabledColor", + "scenario": "light/custom=true/disabled/text", + "actual": "#ff3f5ad2", + "expected": "#ff3f5ad2", + "matches": true, + "enforced": true + }, + { + "name": "progressCircleInnerBgColor", + "scenario": "dark/custom=false/circular", + "actual": "#00000000", + "expected": "#00000000", + "matches": true, + "enforced": true + }, + { + "name": "progressCircleInnerBgColor", + "scenario": "dark/custom=true/circular", + "actual": "#00000000", + "expected": "#00000000", + "matches": true, + "enforced": true + }, + { + "name": "progressCircleInnerBgColor", + "scenario": "light/custom=false/circular", + "actual": "#ffffffff", + "expected": "#ffffffff", + "matches": true, + "enforced": true + }, + { + "name": "progressCircleInnerBgColor", + "scenario": "light/custom=true/circular", + "actual": "#ff2e275b", + "expected": "#ff2e275b", + "matches": true, + "enforced": true + }, + { + "name": "progressCircleLabelFont", + "scenario": "dark/custom=false/circular", + "actual": "20.0/28.0/FontWeight.w600", + "expected": "20.0/28.0/FontWeight.w600", + "matches": true, + "enforced": true + }, + { + "name": "progressCircleLabelFont", + "scenario": "dark/custom=true/circular", + "actual": "23.0/31.0/FontWeight.w500", + "expected": "23.0/31.0/FontWeight.w500", + "matches": true, + "enforced": true + }, + { + "name": "progressCircleLabelFont", + "scenario": "light/custom=false/circular", + "actual": "20.0/28.0/FontWeight.w600", + "expected": "20.0/28.0/FontWeight.w600", + "matches": true, + "enforced": true + }, + { + "name": "progressCircleLabelFont", + "scenario": "light/custom=true/circular", + "actual": "23.0/31.0/FontWeight.w500", + "expected": "23.0/31.0/FontWeight.w500", + "matches": true, + "enforced": true + }, + { + "name": "progressCircleWidth", + "scenario": "dark/custom=false/circular", + "actual": 112, + "expected": 112, + "matches": true, + "enforced": true + }, + { + "name": "progressCircleWidth", + "scenario": "dark/custom=true/circular", + "actual": 112, + "expected": 112, + "matches": true, + "enforced": true + }, + { + "name": "progressCircleWidth", + "scenario": "light/custom=false/circular", + "actual": 112, + "expected": 112, + "matches": true, + "enforced": true + }, + { + "name": "progressCircleWidth", + "scenario": "light/custom=true/circular", + "actual": 112, + "expected": 112, + "matches": true, + "enforced": true + }, + { + "name": "progressInnerBgColor", + "scenario": "dark/custom=false/circular", + "actual": "#ff4582e6", + "expected": "#ff4582e6", + "matches": true, + "enforced": true + }, + { + "name": "progressInnerBgColor", + "scenario": "dark/custom=false/plump=false", + "actual": "#ff4582e6", + "expected": "#ff4582e6", + "matches": true, + "enforced": true + }, + { + "name": "progressInnerBgColor", + "scenario": "dark/custom=false/plump=true", + "actual": "#ff4582e6", + "expected": "#ff4582e6", + "matches": true, + "enforced": true + }, + { + "name": "progressInnerBgColor", + "scenario": "dark/custom=true/circular", + "actual": "#ff220307", + "expected": "#ff220307", + "matches": true, + "enforced": true + }, + { + "name": "progressInnerBgColor", + "scenario": "dark/custom=true/plump=false", + "actual": "#ff220307", + "expected": "#ff220307", + "matches": true, + "enforced": true + }, + { + "name": "progressInnerBgColor", + "scenario": "dark/custom=true/plump=true", + "actual": "#ff220307", + "expected": "#ff220307", + "matches": true, + "enforced": true + }, + { + "name": "progressInnerBgColor", + "scenario": "light/custom=false/circular", + "actual": "#ff0052d9", + "expected": "#ff0052d9", + "matches": true, + "enforced": true + }, + { + "name": "progressInnerBgColor", + "scenario": "light/custom=false/plump=false", + "actual": "#ff0052d9", + "expected": "#ff0052d9", + "matches": true, + "enforced": true + }, + { + "name": "progressInnerBgColor", + "scenario": "light/custom=false/plump=true", + "actual": "#ff0052d9", + "expected": "#ff0052d9", + "matches": true, + "enforced": true + }, + { + "name": "progressInnerBgColor", + "scenario": "light/custom=true/circular", + "actual": "#ff220307", + "expected": "#ff220307", + "matches": true, + "enforced": true + }, + { + "name": "progressInnerBgColor", + "scenario": "light/custom=true/plump=false", + "actual": "#ff220307", + "expected": "#ff220307", + "matches": true, + "enforced": true + }, + { + "name": "progressInnerBgColor", + "scenario": "light/custom=true/plump=true", + "actual": "#ff220307", + "expected": "#ff220307", + "matches": true, + "enforced": true + }, + { + "name": "progressLineStrokeWidth", + "scenario": "dark/custom=false/plump=false", + "actual": 6, + "expected": 6, + "matches": true, + "enforced": true + }, + { + "name": "progressLineStrokeWidth", + "scenario": "dark/custom=true/plump=false", + "actual": 6, + "expected": 6, + "matches": true, + "enforced": true + }, + { + "name": "progressLineStrokeWidth", + "scenario": "light/custom=false/plump=false", + "actual": 6, + "expected": 6, + "matches": true, + "enforced": true + }, + { + "name": "progressLineStrokeWidth", + "scenario": "light/custom=true/plump=false", + "actual": 6, + "expected": 6, + "matches": true, + "enforced": true + }, + { + "name": "progressStrokeCircleWidth", + "scenario": "dark/custom=false/circular", + "actual": 6, + "expected": 6, + "matches": true, + "enforced": true + }, + { + "name": "progressStrokeCircleWidth", + "scenario": "dark/custom=true/circular", + "actual": 6, + "expected": 6, + "matches": true, + "enforced": true + }, + { + "name": "progressStrokeCircleWidth", + "scenario": "light/custom=false/circular", + "actual": 6, + "expected": 6, + "matches": true, + "enforced": true + }, + { + "name": "progressStrokeCircleWidth", + "scenario": "light/custom=true/circular", + "actual": 6, + "expected": 6, + "matches": true, + "enforced": true + }, + { + "name": "progressStrokePlumpWidth", + "scenario": "dark/custom=false/plump=true", + "actual": 20, + "expected": 20, + "matches": true, + "enforced": true + }, + { + "name": "progressStrokePlumpWidth", + "scenario": "dark/custom=true/plump=true", + "actual": 20, + "expected": 20, + "matches": true, + "enforced": true + }, + { + "name": "progressStrokePlumpWidth", + "scenario": "light/custom=false/plump=true", + "actual": 20, + "expected": 20, + "matches": true, + "enforced": true + }, + { + "name": "progressStrokePlumpWidth", + "scenario": "light/custom=true/plump=true", + "actual": 20, + "expected": 20, + "matches": true, + "enforced": true + }, + { + "name": "progressTrackBgColor", + "scenario": "dark/custom=false/circular", + "actual": "#ff383838", + "expected": "#ff383838", + "matches": true, + "enforced": true + }, + { + "name": "progressTrackBgColor", + "scenario": "dark/custom=false/plump=false", + "actual": "#ff383838", + "expected": "#ff383838", + "matches": true, + "enforced": true + }, + { + "name": "progressTrackBgColor", + "scenario": "dark/custom=false/plump=true", + "actual": "#ff383838", + "expected": "#ff383838", + "matches": true, + "enforced": true + }, + { + "name": "progressTrackBgColor", + "scenario": "dark/custom=true/circular", + "actual": "#ff2b1e46", + "expected": "#ff2b1e46", + "matches": true, + "enforced": true + }, + { + "name": "progressTrackBgColor", + "scenario": "dark/custom=true/plump=false", + "actual": "#ff2b1e46", + "expected": "#ff2b1e46", + "matches": true, + "enforced": true + }, + { + "name": "progressTrackBgColor", + "scenario": "dark/custom=true/plump=true", + "actual": "#ff2b1e46", + "expected": "#ff2b1e46", + "matches": true, + "enforced": true + }, + { + "name": "progressTrackBgColor", + "scenario": "light/custom=false/circular", + "actual": "#ffe8e8e8", + "expected": "#ffe8e8e8", + "matches": true, + "enforced": true + }, + { + "name": "progressTrackBgColor", + "scenario": "light/custom=false/plump=false", + "actual": "#ffe8e8e8", + "expected": "#ffe8e8e8", + "matches": true, + "enforced": true + }, + { + "name": "progressTrackBgColor", + "scenario": "light/custom=false/plump=true", + "actual": "#ffe8e8e8", + "expected": "#ffe8e8e8", + "matches": true, + "enforced": true + }, + { + "name": "progressTrackBgColor", + "scenario": "light/custom=true/circular", + "actual": "#ff2b1e46", + "expected": "#ff2b1e46", + "matches": true, + "enforced": true + }, + { + "name": "progressTrackBgColor", + "scenario": "light/custom=true/plump=false", + "actual": "#ff2b1e46", + "expected": "#ff2b1e46", + "matches": true, + "enforced": true + }, + { + "name": "progressTrackBgColor", + "scenario": "light/custom=true/plump=true", + "actual": "#ff2b1e46", + "expected": "#ff2b1e46", + "matches": true, + "enforced": true + }, + { + "name": "switchCheckedColor", + "scenario": "dark/custom=false/enabled=true/value=false", + "actual": "#ff4582e6", + "expected": "#ff4582e6", + "matches": true, + "enforced": true + }, + { + "name": "switchCheckedColor", + "scenario": "dark/custom=false/enabled=true/value=true", + "actual": "#ff4582e6", + "expected": "#ff4582e6", + "matches": true, + "enforced": true + }, + { + "name": "switchCheckedColor", + "scenario": "dark/custom=true/enabled=true/value=false", + "actual": "#ff220307", + "expected": "#ff220307", + "matches": true, + "enforced": true + }, + { + "name": "switchCheckedColor", + "scenario": "dark/custom=true/enabled=true/value=true", + "actual": "#ff220307", + "expected": "#ff220307", + "matches": true, + "enforced": true + }, + { + "name": "switchCheckedColor", + "scenario": "light/custom=false/enabled=true/value=false", + "actual": "#ff0052d9", + "expected": "#ff0052d9", + "matches": true, + "enforced": true + }, + { + "name": "switchCheckedColor", + "scenario": "light/custom=false/enabled=true/value=true", + "actual": "#ff0052d9", + "expected": "#ff0052d9", + "matches": true, + "enforced": true + }, + { + "name": "switchCheckedColor", + "scenario": "light/custom=true/enabled=true/value=false", + "actual": "#ff220307", + "expected": "#ff220307", + "matches": true, + "enforced": true + }, + { + "name": "switchCheckedColor", + "scenario": "light/custom=true/enabled=true/value=true", + "actual": "#ff220307", + "expected": "#ff220307", + "matches": true, + "enforced": true + }, + { + "name": "switchCheckedDisabledColor", + "scenario": "dark/custom=false/enabled=false/value=false", + "actual": "#ff143975", + "expected": "#ff143975", + "matches": true, + "enforced": true + }, + { + "name": "switchCheckedDisabledColor", + "scenario": "dark/custom=false/enabled=false/value=true", + "actual": "#ff143975", + "expected": "#ff143975", + "matches": true, + "enforced": true + }, + { + "name": "switchCheckedDisabledColor", + "scenario": "dark/custom=true/enabled=false/value=false", + "actual": "#ff240915", + "expected": "#ff240915", + "matches": true, + "enforced": true + }, + { + "name": "switchCheckedDisabledColor", + "scenario": "dark/custom=true/enabled=false/value=true", + "actual": "#ff240915", + "expected": "#ff240915", + "matches": true, + "enforced": true + }, + { + "name": "switchCheckedDisabledColor", + "scenario": "light/custom=false/enabled=false/value=false", + "actual": "#ffb5c7ff", + "expected": "#ffb5c7ff", + "matches": true, + "enforced": true + }, + { + "name": "switchCheckedDisabledColor", + "scenario": "light/custom=false/enabled=false/value=true", + "actual": "#ffb5c7ff", + "expected": "#ffb5c7ff", + "matches": true, + "enforced": true + }, + { + "name": "switchCheckedDisabledColor", + "scenario": "light/custom=true/enabled=false/value=false", + "actual": "#ff240915", + "expected": "#ff240915", + "matches": true, + "enforced": true + }, + { + "name": "switchCheckedDisabledColor", + "scenario": "light/custom=true/enabled=false/value=true", + "actual": "#ff240915", + "expected": "#ff240915", + "matches": true, + "enforced": true + }, + { + "name": "switchDotDisabledColor", + "scenario": "dark/custom=false/enabled=false/value=false", + "actual": "#8cffffff", + "expected": "#8cffffff", + "matches": true, + "enforced": true + }, + { + "name": "switchDotDisabledColor", + "scenario": "dark/custom=false/enabled=false/value=true", + "actual": "#8cffffff", + "expected": "#8cffffff", + "matches": true, + "enforced": true + }, + { + "name": "switchDotDisabledColor", + "scenario": "dark/custom=true/enabled=false/value=false", + "actual": "#ff3845a1", + "expected": "#ff3845a1", + "matches": true, + "enforced": true + }, + { + "name": "switchDotDisabledColor", + "scenario": "dark/custom=true/enabled=false/value=true", + "actual": "#ff3845a1", + "expected": "#ff3845a1", + "matches": true, + "enforced": true + }, + { + "name": "switchDotDisabledColor", + "scenario": "light/custom=false/enabled=false/value=false", + "actual": "#ffffffff", + "expected": "#ffffffff", + "matches": true, + "enforced": true + }, + { + "name": "switchDotDisabledColor", + "scenario": "light/custom=false/enabled=false/value=true", + "actual": "#ffffffff", + "expected": "#ffffffff", + "matches": true, + "enforced": true + }, + { + "name": "switchDotDisabledColor", + "scenario": "light/custom=true/enabled=false/value=false", + "actual": "#ff37429a", + "expected": "#ff37429a", + "matches": true, + "enforced": true + }, + { + "name": "switchDotDisabledColor", + "scenario": "light/custom=true/enabled=false/value=true", + "actual": "#ff37429a", + "expected": "#ff37429a", + "matches": true, + "enforced": true + }, + { + "name": "switchDotLargeSize", + "scenario": "dark/large/value=false/icon", + "actual": 25.14285714, + "expected": 26, + "matches": false, + "enforced": false + }, + { + "name": "switchDotLargeSize", + "scenario": "dark/large/value=false/text", + "actual": 25.14285714, + "expected": 26, + "matches": false, + "enforced": false + }, + { + "name": "switchDotLargeSize", + "scenario": "dark/large/value=true/filled", + "actual": 25.14285714, + "expected": 26, + "matches": false, + "enforced": false + }, + { + "name": "switchDotLargeSize", + "scenario": "dark/large/value=true/icon", + "actual": 25.14285714, + "expected": 26, + "matches": false, + "enforced": false + }, + { + "name": "switchDotLargeSize", + "scenario": "dark/large/value=true/text", + "actual": 25.14285714, + "expected": 26, + "matches": false, + "enforced": false + }, + { + "name": "switchDotLargeSize", + "scenario": "light/large/value=false/icon", + "actual": 25.14285714, + "expected": 26, + "matches": false, + "enforced": false + }, + { + "name": "switchDotLargeSize", + "scenario": "light/large/value=false/text", + "actual": 25.14285714, + "expected": 26, + "matches": false, + "enforced": false + }, + { + "name": "switchDotLargeSize", + "scenario": "light/large/value=true/filled", + "actual": 25.14285714, + "expected": 26, + "matches": false, + "enforced": false + }, + { + "name": "switchDotLargeSize", + "scenario": "light/large/value=true/icon", + "actual": 25.14285714, + "expected": 26, + "matches": false, + "enforced": false + }, + { + "name": "switchDotLargeSize", + "scenario": "light/large/value=true/text", + "actual": 25.14285714, + "expected": 26, + "matches": false, + "enforced": false + }, + { + "name": "switchDotPlainLargeSize", + "scenario": "dark/large/value=false/filled", + "actual": 18.28571429, + "expected": 22, + "matches": false, + "enforced": false + }, + { + "name": "switchDotPlainLargeSize", + "scenario": "light/large/value=false/filled", + "actual": 18.28571429, + "expected": 22, + "matches": false, + "enforced": false + }, + { + "name": "switchDotPlainSize", + "scenario": "dark/medium/value=false/filled", + "actual": 16, + "expected": 18, + "matches": false, + "enforced": false + }, + { + "name": "switchDotPlainSize", + "scenario": "light/medium/value=false/filled", + "actual": 16, + "expected": 18, + "matches": false, + "enforced": false + }, + { + "name": "switchDotPlainSmallSize", + "scenario": "dark/small/value=false/filled", + "actual": 13.71428571, + "expected": 14, + "matches": false, + "enforced": false + }, + { + "name": "switchDotPlainSmallSize", + "scenario": "light/small/value=false/filled", + "actual": 13.71428571, + "expected": 14, + "matches": false, + "enforced": false + }, + { + "name": "switchDotSize", + "scenario": "dark/medium/value=false/icon", + "actual": 22, + "expected": 22, + "matches": true, + "enforced": true + }, + { + "name": "switchDotSize", + "scenario": "dark/medium/value=false/text", + "actual": 22, + "expected": 22, + "matches": true, + "enforced": true + }, + { + "name": "switchDotSize", + "scenario": "dark/medium/value=true/filled", + "actual": 22, + "expected": 22, + "matches": true, + "enforced": true + }, + { + "name": "switchDotSize", + "scenario": "dark/medium/value=true/icon", + "actual": 22, + "expected": 22, + "matches": true, + "enforced": true + }, + { + "name": "switchDotSize", + "scenario": "dark/medium/value=true/text", + "actual": 22, + "expected": 22, + "matches": true, + "enforced": true + }, + { + "name": "switchDotSize", + "scenario": "light/medium/value=false/icon", + "actual": 22, + "expected": 22, + "matches": true, + "enforced": true + }, + { + "name": "switchDotSize", + "scenario": "light/medium/value=false/text", + "actual": 22, + "expected": 22, + "matches": true, + "enforced": true + }, + { + "name": "switchDotSize", + "scenario": "light/medium/value=true/filled", + "actual": 22, + "expected": 22, + "matches": true, + "enforced": true + }, + { + "name": "switchDotSize", + "scenario": "light/medium/value=true/icon", + "actual": 22, + "expected": 22, + "matches": true, + "enforced": true + }, + { + "name": "switchDotSize", + "scenario": "light/medium/value=true/text", + "actual": 22, + "expected": 22, + "matches": true, + "enforced": true + }, + { + "name": "switchDotSmallSize", + "scenario": "dark/small/value=false/icon", + "actual": 18.85714286, + "expected": 18, + "matches": false, + "enforced": false + }, + { + "name": "switchDotSmallSize", + "scenario": "dark/small/value=false/text", + "actual": 18.85714286, + "expected": 18, + "matches": false, + "enforced": false + }, + { + "name": "switchDotSmallSize", + "scenario": "dark/small/value=true/filled", + "actual": 18.85714286, + "expected": 18, + "matches": false, + "enforced": false + }, + { + "name": "switchDotSmallSize", + "scenario": "dark/small/value=true/icon", + "actual": 18.85714286, + "expected": 18, + "matches": false, + "enforced": false + }, + { + "name": "switchDotSmallSize", + "scenario": "dark/small/value=true/text", + "actual": 18.85714286, + "expected": 18, + "matches": false, + "enforced": false + }, + { + "name": "switchDotSmallSize", + "scenario": "light/small/value=false/icon", + "actual": 18.85714286, + "expected": 18, + "matches": false, + "enforced": false + }, + { + "name": "switchDotSmallSize", + "scenario": "light/small/value=false/text", + "actual": 18.85714286, + "expected": 18, + "matches": false, + "enforced": false + }, + { + "name": "switchDotSmallSize", + "scenario": "light/small/value=true/filled", + "actual": 18.85714286, + "expected": 18, + "matches": false, + "enforced": false + }, + { + "name": "switchDotSmallSize", + "scenario": "light/small/value=true/icon", + "actual": 18.85714286, + "expected": 18, + "matches": false, + "enforced": false + }, + { + "name": "switchDotSmallSize", + "scenario": "light/small/value=true/text", + "actual": 18.85714286, + "expected": 18, + "matches": false, + "enforced": false + }, + { + "name": "switchHeight", + "scenario": "dark/medium/value=false/filled", + "actual": 28, + "expected": 28, + "matches": true, + "enforced": true + }, + { + "name": "switchHeight", + "scenario": "dark/medium/value=false/icon", + "actual": 28, + "expected": 28, + "matches": true, + "enforced": true + }, + { + "name": "switchHeight", + "scenario": "dark/medium/value=false/text", + "actual": 28, + "expected": 28, + "matches": true, + "enforced": true + }, + { + "name": "switchHeight", + "scenario": "dark/medium/value=true/filled", + "actual": 28, + "expected": 28, + "matches": true, + "enforced": true + }, + { + "name": "switchHeight", + "scenario": "dark/medium/value=true/icon", + "actual": 28, + "expected": 28, + "matches": true, + "enforced": true + }, + { + "name": "switchHeight", + "scenario": "dark/medium/value=true/text", + "actual": 28, + "expected": 28, + "matches": true, + "enforced": true + }, + { + "name": "switchHeight", + "scenario": "light/medium/value=false/filled", + "actual": 28, + "expected": 28, + "matches": true, + "enforced": true + }, + { + "name": "switchHeight", + "scenario": "light/medium/value=false/icon", + "actual": 28, + "expected": 28, + "matches": true, + "enforced": true + }, + { + "name": "switchHeight", + "scenario": "light/medium/value=false/text", + "actual": 28, + "expected": 28, + "matches": true, + "enforced": true + }, + { + "name": "switchHeight", + "scenario": "light/medium/value=true/filled", + "actual": 28, + "expected": 28, + "matches": true, + "enforced": true + }, + { + "name": "switchHeight", + "scenario": "light/medium/value=true/icon", + "actual": 28, + "expected": 28, + "matches": true, + "enforced": true + }, + { + "name": "switchHeight", + "scenario": "light/medium/value=true/text", + "actual": 28, + "expected": 28, + "matches": true, + "enforced": true + }, + { + "name": "switchIconLargeSize", + "scenario": "dark/large/value=false/icon", + "actual": 18.28571429, + "expected": 24, + "matches": false, + "enforced": false + }, + { + "name": "switchIconLargeSize", + "scenario": "dark/large/value=true/icon", + "actual": 18.28571429, + "expected": 24, + "matches": false, + "enforced": false + }, + { + "name": "switchIconLargeSize", + "scenario": "light/large/value=false/icon", + "actual": 18.28571429, + "expected": 24, + "matches": false, + "enforced": false + }, + { + "name": "switchIconLargeSize", + "scenario": "light/large/value=true/icon", + "actual": 18.28571429, + "expected": 24, + "matches": false, + "enforced": false + }, + { + "name": "switchIconSize", + "scenario": "dark/medium/value=false/icon", + "actual": 16, + "expected": 20, + "matches": false, + "enforced": false + }, + { + "name": "switchIconSize", + "scenario": "dark/medium/value=true/icon", + "actual": 16, + "expected": 20, + "matches": false, + "enforced": false + }, + { + "name": "switchIconSize", + "scenario": "light/medium/value=false/icon", + "actual": 16, + "expected": 20, + "matches": false, + "enforced": false + }, + { + "name": "switchIconSize", + "scenario": "light/medium/value=true/icon", + "actual": 16, + "expected": 20, + "matches": false, + "enforced": false + }, + { + "name": "switchIconSmallSize", + "scenario": "dark/small/value=false/icon", + "actual": 13.71428571, + "expected": 16, + "matches": false, + "enforced": false + }, + { + "name": "switchIconSmallSize", + "scenario": "dark/small/value=true/icon", + "actual": 13.71428571, + "expected": 16, + "matches": false, + "enforced": false + }, + { + "name": "switchIconSmallSize", + "scenario": "light/small/value=false/icon", + "actual": 13.71428571, + "expected": 16, + "matches": false, + "enforced": false + }, + { + "name": "switchIconSmallSize", + "scenario": "light/small/value=true/icon", + "actual": 13.71428571, + "expected": 16, + "matches": false, + "enforced": false + }, + { + "name": "switchLabelCheckedColor", + "scenario": "dark/custom=false/TSwitchVariant.icon/value=true", + "actual": "#ff4582e6", + "expected": "#ff4582e6", + "matches": true, + "enforced": true + }, + { + "name": "switchLabelCheckedColor", + "scenario": "dark/custom=false/TSwitchVariant.text/value=true", + "actual": "#ff4582e6", + "expected": "#ff4582e6", + "matches": true, + "enforced": true + }, + { + "name": "switchLabelCheckedColor", + "scenario": "dark/custom=true/TSwitchVariant.icon/value=true", + "actual": "#ff220307", + "expected": "#ff220307", + "matches": true, + "enforced": true + }, + { + "name": "switchLabelCheckedColor", + "scenario": "dark/custom=true/TSwitchVariant.text/value=true", + "actual": "#ff220307", + "expected": "#ff220307", + "matches": true, + "enforced": true + }, + { + "name": "switchLabelCheckedColor", + "scenario": "light/custom=false/TSwitchVariant.icon/value=true", + "actual": "#ff0052d9", + "expected": "#ff0052d9", + "matches": true, + "enforced": true + }, + { + "name": "switchLabelCheckedColor", + "scenario": "light/custom=false/TSwitchVariant.text/value=true", + "actual": "#ff0052d9", + "expected": "#ff0052d9", + "matches": true, + "enforced": true + }, + { + "name": "switchLabelCheckedColor", + "scenario": "light/custom=true/TSwitchVariant.icon/value=true", + "actual": "#ff220307", + "expected": "#ff220307", + "matches": true, + "enforced": true + }, + { + "name": "switchLabelCheckedColor", + "scenario": "light/custom=true/TSwitchVariant.text/value=true", + "actual": "#ff220307", + "expected": "#ff220307", + "matches": true, + "enforced": true + }, + { + "name": "switchLabelColor", + "scenario": "dark/custom=false/TSwitchVariant.icon/value=false", + "actual": "#38ffffff", + "expected": "#ff383838", + "matches": false, + "enforced": false + }, + { + "name": "switchLabelColor", + "scenario": "dark/custom=false/TSwitchVariant.text/value=false", + "actual": "#38ffffff", + "expected": "#ff383838", + "matches": false, + "enforced": false + }, + { + "name": "switchLabelColor", + "scenario": "dark/custom=true/TSwitchVariant.icon/value=false", + "actual": "#ff353c8c", + "expected": "#ff302d69", + "matches": false, + "enforced": false + }, + { + "name": "switchLabelColor", + "scenario": "dark/custom=true/TSwitchVariant.text/value=false", + "actual": "#ff353c8c", + "expected": "#ff302d69", + "matches": false, + "enforced": false + }, + { + "name": "switchLabelColor", + "scenario": "light/custom=false/TSwitchVariant.icon/value=false", + "actual": "#42000000", + "expected": "#ffdcdcdc", + "matches": false, + "enforced": false + }, + { + "name": "switchLabelColor", + "scenario": "light/custom=false/TSwitchVariant.text/value=false", + "actual": "#42000000", + "expected": "#ffdcdcdc", + "matches": false, + "enforced": false + }, + { + "name": "switchLabelColor", + "scenario": "light/custom=true/TSwitchVariant.icon/value=false", + "actual": "#ff353c8c", + "expected": "#ff302d69", + "matches": false, + "enforced": false + }, + { + "name": "switchLabelColor", + "scenario": "light/custom=true/TSwitchVariant.text/value=false", + "actual": "#ff353c8c", + "expected": "#ff302d69", + "matches": false, + "enforced": false + }, + { + "name": "switchLabelFontSize", + "scenario": "dark/medium/value=false/text", + "actual": 14, + "expected": 14, + "matches": true, + "enforced": true + }, + { + "name": "switchLabelFontSize", + "scenario": "dark/medium/value=true/text", + "actual": 14, + "expected": 14, + "matches": true, + "enforced": true + }, + { + "name": "switchLabelFontSize", + "scenario": "light/medium/value=false/text", + "actual": 14, + "expected": 14, + "matches": true, + "enforced": true + }, + { + "name": "switchLabelFontSize", + "scenario": "light/medium/value=true/text", + "actual": 14, + "expected": 14, + "matches": true, + "enforced": true + }, + { + "name": "switchLabelLargeFontSize", + "scenario": "dark/large/value=false/text", + "actual": 16, + "expected": 16, + "matches": true, + "enforced": true + }, + { + "name": "switchLabelLargeFontSize", + "scenario": "dark/large/value=true/text", + "actual": 16, + "expected": 16, + "matches": true, + "enforced": true + }, + { + "name": "switchLabelLargeFontSize", + "scenario": "light/large/value=false/text", + "actual": 16, + "expected": 16, + "matches": true, + "enforced": true + }, + { + "name": "switchLabelLargeFontSize", + "scenario": "light/large/value=true/text", + "actual": 16, + "expected": 16, + "matches": true, + "enforced": true + }, + { + "name": "switchLabelSmallFontSize", + "scenario": "dark/small/value=false/text", + "actual": 12, + "expected": 12, + "matches": true, + "enforced": true + }, + { + "name": "switchLabelSmallFontSize", + "scenario": "dark/small/value=true/text", + "actual": 12, + "expected": 12, + "matches": true, + "enforced": true + }, + { + "name": "switchLabelSmallFontSize", + "scenario": "light/small/value=false/text", + "actual": 12, + "expected": 12, + "matches": true, + "enforced": true + }, + { + "name": "switchLabelSmallFontSize", + "scenario": "light/small/value=true/text", + "actual": 12, + "expected": 12, + "matches": true, + "enforced": true + }, + { + "name": "switchLargeHeight", + "scenario": "dark/large/value=false/filled", + "actual": 32, + "expected": 32, + "matches": true, + "enforced": true + }, + { + "name": "switchLargeHeight", + "scenario": "dark/large/value=false/icon", + "actual": 32, + "expected": 32, + "matches": true, + "enforced": true + }, + { + "name": "switchLargeHeight", + "scenario": "dark/large/value=false/text", + "actual": 32, + "expected": 32, + "matches": true, + "enforced": true + }, + { + "name": "switchLargeHeight", + "scenario": "dark/large/value=true/filled", + "actual": 32, + "expected": 32, + "matches": true, + "enforced": true + }, + { + "name": "switchLargeHeight", + "scenario": "dark/large/value=true/icon", + "actual": 32, + "expected": 32, + "matches": true, + "enforced": true + }, + { + "name": "switchLargeHeight", + "scenario": "dark/large/value=true/text", + "actual": 32, + "expected": 32, + "matches": true, + "enforced": true + }, + { + "name": "switchLargeHeight", + "scenario": "light/large/value=false/filled", + "actual": 32, + "expected": 32, + "matches": true, + "enforced": true + }, + { + "name": "switchLargeHeight", + "scenario": "light/large/value=false/icon", + "actual": 32, + "expected": 32, + "matches": true, + "enforced": true + }, + { + "name": "switchLargeHeight", + "scenario": "light/large/value=false/text", + "actual": 32, + "expected": 32, + "matches": true, + "enforced": true + }, + { + "name": "switchLargeHeight", + "scenario": "light/large/value=true/filled", + "actual": 32, + "expected": 32, + "matches": true, + "enforced": true + }, + { + "name": "switchLargeHeight", + "scenario": "light/large/value=true/icon", + "actual": 32, + "expected": 32, + "matches": true, + "enforced": true + }, + { + "name": "switchLargeHeight", + "scenario": "light/large/value=true/text", + "actual": 32, + "expected": 32, + "matches": true, + "enforced": true + }, + { + "name": "switchLargeRadius", + "scenario": "dark/large/value=false/filled", + "actual": 16, + "expected": 16, + "matches": true, + "enforced": true + }, + { + "name": "switchLargeRadius", + "scenario": "dark/large/value=false/icon", + "actual": 16, + "expected": 16, + "matches": true, + "enforced": true + }, + { + "name": "switchLargeRadius", + "scenario": "dark/large/value=false/text", + "actual": 16, + "expected": 16, + "matches": true, + "enforced": true + }, + { + "name": "switchLargeRadius", + "scenario": "dark/large/value=true/filled", + "actual": 16, + "expected": 16, + "matches": true, + "enforced": true + }, + { + "name": "switchLargeRadius", + "scenario": "dark/large/value=true/icon", + "actual": 16, + "expected": 16, + "matches": true, + "enforced": true + }, + { + "name": "switchLargeRadius", + "scenario": "dark/large/value=true/text", + "actual": 16, + "expected": 16, + "matches": true, + "enforced": true + }, + { + "name": "switchLargeRadius", + "scenario": "light/large/value=false/filled", + "actual": 16, + "expected": 16, + "matches": true, + "enforced": true + }, + { + "name": "switchLargeRadius", + "scenario": "light/large/value=false/icon", + "actual": 16, + "expected": 16, + "matches": true, + "enforced": true + }, + { + "name": "switchLargeRadius", + "scenario": "light/large/value=false/text", + "actual": 16, + "expected": 16, + "matches": true, + "enforced": true + }, + { + "name": "switchLargeRadius", + "scenario": "light/large/value=true/filled", + "actual": 16, + "expected": 16, + "matches": true, + "enforced": true + }, + { + "name": "switchLargeRadius", + "scenario": "light/large/value=true/icon", + "actual": 16, + "expected": 16, + "matches": true, + "enforced": true + }, + { + "name": "switchLargeRadius", + "scenario": "light/large/value=true/text", + "actual": 16, + "expected": 16, + "matches": true, + "enforced": true + }, + { + "name": "switchLargeWidth", + "scenario": "dark/large/value=false/filled", + "actual": 51.42857143, + "expected": 52, + "matches": false, + "enforced": false + }, + { + "name": "switchLargeWidth", + "scenario": "dark/large/value=false/icon", + "actual": 51.42857143, + "expected": 52, + "matches": false, + "enforced": false + }, + { + "name": "switchLargeWidth", + "scenario": "dark/large/value=false/text", + "actual": 51.42857143, + "expected": 52, + "matches": false, + "enforced": false + }, + { + "name": "switchLargeWidth", + "scenario": "dark/large/value=true/filled", + "actual": 51.42857143, + "expected": 52, + "matches": false, + "enforced": false + }, + { + "name": "switchLargeWidth", + "scenario": "dark/large/value=true/icon", + "actual": 51.42857143, + "expected": 52, + "matches": false, + "enforced": false + }, + { + "name": "switchLargeWidth", + "scenario": "dark/large/value=true/text", + "actual": 51.42857143, + "expected": 52, + "matches": false, + "enforced": false + }, + { + "name": "switchLargeWidth", + "scenario": "light/large/value=false/filled", + "actual": 51.42857143, + "expected": 52, + "matches": false, + "enforced": false + }, + { + "name": "switchLargeWidth", + "scenario": "light/large/value=false/icon", + "actual": 51.42857143, + "expected": 52, + "matches": false, + "enforced": false + }, + { + "name": "switchLargeWidth", + "scenario": "light/large/value=false/text", + "actual": 51.42857143, + "expected": 52, + "matches": false, + "enforced": false + }, + { + "name": "switchLargeWidth", + "scenario": "light/large/value=true/filled", + "actual": 51.42857143, + "expected": 52, + "matches": false, + "enforced": false + }, + { + "name": "switchLargeWidth", + "scenario": "light/large/value=true/icon", + "actual": 51.42857143, + "expected": 52, + "matches": false, + "enforced": false + }, + { + "name": "switchLargeWidth", + "scenario": "light/large/value=true/text", + "actual": 51.42857143, + "expected": 52, + "matches": false, + "enforced": false + }, + { + "name": "switchLoadingColor", + "scenario": "dark/custom=false", + "actual": "#e6ffffff", + "expected": "#e6ffffff", + "matches": true, + "enforced": true + }, + { + "name": "switchLoadingColor", + "scenario": "dark/custom=true", + "actual": "#ff37429a", + "expected": "#ff37429a", + "matches": true, + "enforced": true + }, + { + "name": "switchLoadingColor", + "scenario": "light/custom=false", + "actual": "#ff0052d9", + "expected": "#ff0052d9", + "matches": true, + "enforced": true + }, + { + "name": "switchLoadingColor", + "scenario": "light/custom=true", + "actual": "#ff220307", + "expected": "#ff220307", + "matches": true, + "enforced": true + }, + { + "name": "switchRadius", + "scenario": "dark/medium/value=false/filled", + "actual": 14, + "expected": 14, + "matches": true, + "enforced": true + }, + { + "name": "switchRadius", + "scenario": "dark/medium/value=false/icon", + "actual": 14, + "expected": 14, + "matches": true, + "enforced": true + }, + { + "name": "switchRadius", + "scenario": "dark/medium/value=false/text", + "actual": 14, + "expected": 14, + "matches": true, + "enforced": true + }, + { + "name": "switchRadius", + "scenario": "dark/medium/value=true/filled", + "actual": 14, + "expected": 14, + "matches": true, + "enforced": true + }, + { + "name": "switchRadius", + "scenario": "dark/medium/value=true/icon", + "actual": 14, + "expected": 14, + "matches": true, + "enforced": true + }, + { + "name": "switchRadius", + "scenario": "dark/medium/value=true/text", + "actual": 14, + "expected": 14, + "matches": true, + "enforced": true + }, + { + "name": "switchRadius", + "scenario": "light/medium/value=false/filled", + "actual": 14, + "expected": 14, + "matches": true, + "enforced": true + }, + { + "name": "switchRadius", + "scenario": "light/medium/value=false/icon", + "actual": 14, + "expected": 14, + "matches": true, + "enforced": true + }, + { + "name": "switchRadius", + "scenario": "light/medium/value=false/text", + "actual": 14, + "expected": 14, + "matches": true, + "enforced": true + }, + { + "name": "switchRadius", + "scenario": "light/medium/value=true/filled", + "actual": 14, + "expected": 14, + "matches": true, + "enforced": true + }, + { + "name": "switchRadius", + "scenario": "light/medium/value=true/icon", + "actual": 14, + "expected": 14, + "matches": true, + "enforced": true + }, + { + "name": "switchRadius", + "scenario": "light/medium/value=true/text", + "actual": 14, + "expected": 14, + "matches": true, + "enforced": true + }, + { + "name": "switchSmallHeight", + "scenario": "dark/small/value=false/filled", + "actual": 24, + "expected": 24, + "matches": true, + "enforced": true + }, + { + "name": "switchSmallHeight", + "scenario": "dark/small/value=false/icon", + "actual": 24, + "expected": 24, + "matches": true, + "enforced": true + }, + { + "name": "switchSmallHeight", + "scenario": "dark/small/value=false/text", + "actual": 24, + "expected": 24, + "matches": true, + "enforced": true + }, + { + "name": "switchSmallHeight", + "scenario": "dark/small/value=true/filled", + "actual": 24, + "expected": 24, + "matches": true, + "enforced": true + }, + { + "name": "switchSmallHeight", + "scenario": "dark/small/value=true/icon", + "actual": 24, + "expected": 24, + "matches": true, + "enforced": true + }, + { + "name": "switchSmallHeight", + "scenario": "dark/small/value=true/text", + "actual": 24, + "expected": 24, + "matches": true, + "enforced": true + }, + { + "name": "switchSmallHeight", + "scenario": "light/small/value=false/filled", + "actual": 24, + "expected": 24, + "matches": true, + "enforced": true + }, + { + "name": "switchSmallHeight", + "scenario": "light/small/value=false/icon", + "actual": 24, + "expected": 24, + "matches": true, + "enforced": true + }, + { + "name": "switchSmallHeight", + "scenario": "light/small/value=false/text", + "actual": 24, + "expected": 24, + "matches": true, + "enforced": true + }, + { + "name": "switchSmallHeight", + "scenario": "light/small/value=true/filled", + "actual": 24, + "expected": 24, + "matches": true, + "enforced": true + }, + { + "name": "switchSmallHeight", + "scenario": "light/small/value=true/icon", + "actual": 24, + "expected": 24, + "matches": true, + "enforced": true + }, + { + "name": "switchSmallHeight", + "scenario": "light/small/value=true/text", + "actual": 24, + "expected": 24, + "matches": true, + "enforced": true + }, + { + "name": "switchSmallRadius", + "scenario": "dark/small/value=false/filled", + "actual": 12, + "expected": 12, + "matches": true, + "enforced": true + }, + { + "name": "switchSmallRadius", + "scenario": "dark/small/value=false/icon", + "actual": 12, + "expected": 12, + "matches": true, + "enforced": true + }, + { + "name": "switchSmallRadius", + "scenario": "dark/small/value=false/text", + "actual": 12, + "expected": 12, + "matches": true, + "enforced": true + }, + { + "name": "switchSmallRadius", + "scenario": "dark/small/value=true/filled", + "actual": 12, + "expected": 12, + "matches": true, + "enforced": true + }, + { + "name": "switchSmallRadius", + "scenario": "dark/small/value=true/icon", + "actual": 12, + "expected": 12, + "matches": true, + "enforced": true + }, + { + "name": "switchSmallRadius", + "scenario": "dark/small/value=true/text", + "actual": 12, + "expected": 12, + "matches": true, + "enforced": true + }, + { + "name": "switchSmallRadius", + "scenario": "light/small/value=false/filled", + "actual": 12, + "expected": 12, + "matches": true, + "enforced": true + }, + { + "name": "switchSmallRadius", + "scenario": "light/small/value=false/icon", + "actual": 12, + "expected": 12, + "matches": true, + "enforced": true + }, + { + "name": "switchSmallRadius", + "scenario": "light/small/value=false/text", + "actual": 12, + "expected": 12, + "matches": true, + "enforced": true + }, + { + "name": "switchSmallRadius", + "scenario": "light/small/value=true/filled", + "actual": 12, + "expected": 12, + "matches": true, + "enforced": true + }, + { + "name": "switchSmallRadius", + "scenario": "light/small/value=true/icon", + "actual": 12, + "expected": 12, + "matches": true, + "enforced": true + }, + { + "name": "switchSmallRadius", + "scenario": "light/small/value=true/text", + "actual": 12, + "expected": 12, + "matches": true, + "enforced": true + }, + { + "name": "switchSmallWidth", + "scenario": "dark/small/value=false/filled", + "actual": 38.57142857, + "expected": 39, + "matches": false, + "enforced": false + }, + { + "name": "switchSmallWidth", + "scenario": "dark/small/value=false/icon", + "actual": 38.57142857, + "expected": 39, + "matches": false, + "enforced": false + }, + { + "name": "switchSmallWidth", + "scenario": "dark/small/value=false/text", + "actual": 38.57142857, + "expected": 39, + "matches": false, + "enforced": false + }, + { + "name": "switchSmallWidth", + "scenario": "dark/small/value=true/filled", + "actual": 38.57142857, + "expected": 39, + "matches": false, + "enforced": false + }, + { + "name": "switchSmallWidth", + "scenario": "dark/small/value=true/icon", + "actual": 38.57142857, + "expected": 39, + "matches": false, + "enforced": false + }, + { + "name": "switchSmallWidth", + "scenario": "dark/small/value=true/text", + "actual": 38.57142857, + "expected": 39, + "matches": false, + "enforced": false + }, + { + "name": "switchSmallWidth", + "scenario": "light/small/value=false/filled", + "actual": 38.57142857, + "expected": 39, + "matches": false, + "enforced": false + }, + { + "name": "switchSmallWidth", + "scenario": "light/small/value=false/icon", + "actual": 38.57142857, + "expected": 39, + "matches": false, + "enforced": false + }, + { + "name": "switchSmallWidth", + "scenario": "light/small/value=false/text", + "actual": 38.57142857, + "expected": 39, + "matches": false, + "enforced": false + }, + { + "name": "switchSmallWidth", + "scenario": "light/small/value=true/filled", + "actual": 38.57142857, + "expected": 39, + "matches": false, + "enforced": false + }, + { + "name": "switchSmallWidth", + "scenario": "light/small/value=true/icon", + "actual": 38.57142857, + "expected": 39, + "matches": false, + "enforced": false + }, + { + "name": "switchSmallWidth", + "scenario": "light/small/value=true/text", + "actual": 38.57142857, + "expected": 39, + "matches": false, + "enforced": false + }, + { + "name": "switchUncheckedColor", + "scenario": "dark/custom=false/enabled=true/value=false", + "actual": "#ff383838", + "expected": "#ff383838", + "matches": true, + "enforced": true + }, + { + "name": "switchUncheckedColor", + "scenario": "dark/custom=false/enabled=true/value=true", + "actual": "#ff383838", + "expected": "#ff383838", + "matches": true, + "enforced": true + }, + { + "name": "switchUncheckedColor", + "scenario": "dark/custom=true/enabled=true/value=false", + "actual": "#ff302d69", + "expected": "#ff302d69", + "matches": true, + "enforced": true + }, + { + "name": "switchUncheckedColor", + "scenario": "dark/custom=true/enabled=true/value=true", + "actual": "#ff302d69", + "expected": "#ff302d69", + "matches": true, + "enforced": true + }, + { + "name": "switchUncheckedColor", + "scenario": "light/custom=false/enabled=true/value=false", + "actual": "#ffdcdcdc", + "expected": "#ffdcdcdc", + "matches": true, + "enforced": true + }, + { + "name": "switchUncheckedColor", + "scenario": "light/custom=false/enabled=true/value=true", + "actual": "#ffdcdcdc", + "expected": "#ffdcdcdc", + "matches": true, + "enforced": true + }, + { + "name": "switchUncheckedColor", + "scenario": "light/custom=true/enabled=true/value=false", + "actual": "#ff302d69", + "expected": "#ff302d69", + "matches": true, + "enforced": true + }, + { + "name": "switchUncheckedColor", + "scenario": "light/custom=true/enabled=true/value=true", + "actual": "#ff302d69", + "expected": "#ff302d69", + "matches": true, + "enforced": true + }, + { + "name": "switchUncheckedDisabledColor", + "scenario": "dark/custom=false/enabled=false/value=false", + "actual": "#ff2c2c2c", + "expected": "#ff2c2c2c", + "matches": true, + "enforced": true + }, + { + "name": "switchUncheckedDisabledColor", + "scenario": "dark/custom=false/enabled=false/value=true", + "actual": "#ff2c2c2c", + "expected": "#ff2c2c2c", + "matches": true, + "enforced": true + }, + { + "name": "switchUncheckedDisabledColor", + "scenario": "dark/custom=true/enabled=false/value=false", + "actual": "#ff2d2454", + "expected": "#ff2d2454", + "matches": true, + "enforced": true + }, + { + "name": "switchUncheckedDisabledColor", + "scenario": "dark/custom=true/enabled=false/value=true", + "actual": "#ff2d2454", + "expected": "#ff2d2454", + "matches": true, + "enforced": true + }, + { + "name": "switchUncheckedDisabledColor", + "scenario": "light/custom=false/enabled=false/value=false", + "actual": "#ffeeeeee", + "expected": "#ffeeeeee", + "matches": true, + "enforced": true + }, + { + "name": "switchUncheckedDisabledColor", + "scenario": "light/custom=false/enabled=false/value=true", + "actual": "#ffeeeeee", + "expected": "#ffeeeeee", + "matches": true, + "enforced": true + }, + { + "name": "switchUncheckedDisabledColor", + "scenario": "light/custom=true/enabled=false/value=false", + "actual": "#ff2d2454", + "expected": "#ff2d2454", + "matches": true, + "enforced": true + }, + { + "name": "switchUncheckedDisabledColor", + "scenario": "light/custom=true/enabled=false/value=true", + "actual": "#ff2d2454", + "expected": "#ff2d2454", + "matches": true, + "enforced": true + }, + { + "name": "switchWidth", + "scenario": "dark/medium/value=false/filled", + "actual": 45, + "expected": 45, + "matches": true, + "enforced": true + }, + { + "name": "switchWidth", + "scenario": "dark/medium/value=false/icon", + "actual": 45, + "expected": 45, + "matches": true, + "enforced": true + }, + { + "name": "switchWidth", + "scenario": "dark/medium/value=false/text", + "actual": 45, + "expected": 45, + "matches": true, + "enforced": true + }, + { + "name": "switchWidth", + "scenario": "dark/medium/value=true/filled", + "actual": 45, + "expected": 45, + "matches": true, + "enforced": true + }, + { + "name": "switchWidth", + "scenario": "dark/medium/value=true/icon", + "actual": 45, + "expected": 45, + "matches": true, + "enforced": true + }, + { + "name": "switchWidth", + "scenario": "dark/medium/value=true/text", + "actual": 45, + "expected": 45, + "matches": true, + "enforced": true + }, + { + "name": "switchWidth", + "scenario": "light/medium/value=false/filled", + "actual": 45, + "expected": 45, + "matches": true, + "enforced": true + }, + { + "name": "switchWidth", + "scenario": "light/medium/value=false/icon", + "actual": 45, + "expected": 45, + "matches": true, + "enforced": true + }, + { + "name": "switchWidth", + "scenario": "light/medium/value=false/text", + "actual": 45, + "expected": 45, + "matches": true, + "enforced": true + }, + { + "name": "switchWidth", + "scenario": "light/medium/value=true/filled", + "actual": 45, + "expected": 45, + "matches": true, + "enforced": true + }, + { + "name": "switchWidth", + "scenario": "light/medium/value=true/icon", + "actual": 45, + "expected": 45, + "matches": true, + "enforced": true + }, + { + "name": "switchWidth", + "scenario": "light/medium/value=true/text", + "actual": 45, + "expected": 45, + "matches": true, + "enforced": true + } + ] +} diff --git a/specs/060-token-difference-resolution/solutions.md b/specs/060-token-difference-resolution/solutions.md new file mode 100644 index 0000000000..fd59810cc4 --- /dev/null +++ b/specs/060-token-difference-resolution/solutions.md @@ -0,0 +1,343 @@ +# 32项差异处置结果 + +本记录保留Spec059的原始比较;按现有契约区分缺陷与已批准设计,未将所有差异强行改成旧小程序值。 + +| 处置 | 项数 | +|---|---:| +| 已有契约支持,运行通过,视觉待验收 | 8 | +| 平台几何方案待取证 | 1 | +| 具体实施方案待执行 | 21 | +| 已修复,运行通过,视觉待验收 | 2 | + +双SDK严格分析0问题,相关完整功能回归各440项、仓库外迁移consumer各21项通过;每组件覆盖率均≥95%。47项聚焦检查包含在440项中。 + +## 逐项方案 + +### avatarBorderColor + +**已有契约支持,运行通过,视觉待验收** + +保留当前Flutter契约,不按旧CSS变量默认或覆盖能力修改生产实现;补当前契约的实际Widget断言。 + +验证:保留旧目标原始比较;新增contract/场景必须enforce=true且匹配,并覆盖浅/暗及自定义全局Token。 + +- [已有契约](../../tdesign-component/lib/src/components/avatar/t_avatar_theme_data.dart#L84):头像组成员描边颜色;未设置时使用 `bgColorContainer` Token。 +- [已有契约](../../specs/034-avatar-design-alignment/acceptance.md#L33):明暗 Golden 中本次变更的头像组裁剪、边框与 `+5` 溢出文案符合设计稿 + +### avatarIconSmallFontSize + +**已有契约支持,运行通过,视觉待验收** + +保留当前Flutter契约,不按旧CSS变量默认或覆盖能力修改生产实现;补当前契约的实际Widget断言。 + +验证:保留旧目标原始比较;新增contract/场景必须enforce=true且匹配,并覆盖浅/暗及自定义全局Token。 + +- [已有契约](../../tdesign-component/lib/src/components/avatar/t_avatar_theme_data.dart#L62):默认图标大小;未设置时小、中、大尺寸分别为 20、24、32 逻辑像素。 + +### avatarTextLargeFontSize + +**已有契约支持,运行通过,视觉待验收** + +保留当前Flutter契约,不按旧CSS变量默认或覆盖能力修改生产实现;补当前契约的实际Widget断言。 + +验证:保留旧目标原始比较;新增contract/场景必须enforce=true且匹配,并覆盖浅/暗及自定义全局Token。 + +- [已有契约](../../specs/048-component-token-theme-ownership/spec.md#L51):字符头像仍按 `size` 使用内置字号与字重 +- [已有契约](../../specs/034-avatar-design-alignment/spec.md#L36):字符头像按大、中、小尺寸默认使用 20、16、14 字号和 Semibold 字重。 + +### avatarTextMediumFontSize + +**已有契约支持,运行通过,视觉待验收** + +保留当前Flutter契约,不按旧CSS变量默认或覆盖能力修改生产实现;补当前契约的实际Widget断言。 + +验证:保留旧目标原始比较;新增contract/场景必须enforce=true且匹配,并覆盖浅/暗及自定义全局Token。 + +- [已有契约](../../specs/048-component-token-theme-ownership/spec.md#L51):字符头像仍按 `size` 使用内置字号与字重 +- [已有契约](../../specs/034-avatar-design-alignment/spec.md#L36):字符头像按大、中、小尺寸默认使用 20、16、14 字号和 Semibold 字重。 + +### avatarTextSmallFontSize + +**已有契约支持,运行通过,视觉待验收** + +保留当前Flutter契约,不按旧CSS变量默认或覆盖能力修改生产实现;补当前契约的实际Widget断言。 + +验证:保留旧目标原始比较;新增contract/场景必须enforce=true且匹配,并覆盖浅/暗及自定义全局Token。 + +- [已有契约](../../specs/048-component-token-theme-ownership/spec.md#L51):字符头像仍按 `size` 使用内置字号与字重 +- [已有契约](../../specs/034-avatar-design-alignment/spec.md#L36):字符头像按大、中、小尺寸默认使用 20、16、14 字号和 Semibold 字重。 + +### buttonBorderWidth + +**平台几何方案待取证** + +先在375宽目标小程序宿主记录button及::after的有效width/height、border-width、transform和transform-origin;连同基础库/OS/DPR存档,再裁定Flutter 1dp是否等效。 + +影响与边界:若存在200%伪元素和scale(0.5),4rpx在375宽下为2dp再缩至1dp;这是条件推导,不是已取得的宿主事实。没有缩放时才应按2dp讨论。 + +验证:DPR2/3及浅/暗outline/ghost实际描边与边框盒;固定viewport和来源版本。不得由源码字面值直接改成2dp。 + +### buttonDangerDisabledBg + +**具体实施方案待执行** + +建议保留语义errorColorDisabled,并明确记录与直接errorColor3覆盖的区别;确认语义优先策略后登记为Flutter契约差异。 + +影响与边界:不改当前默认像素;单独设置调色板errorColor3与语义errorColorDisabled时的结果不同。 + +验证:同时测试只覆盖errorColor3、只覆盖errorColorDisabled、两者同时覆盖;已裁定语义优先后断言后者胜出。 + +### buttonDangerDisabledColor + +**具体实施方案待执行** + +建议填充危险按钮禁用前景使用fontWhite1,保留危险禁用背景errorColorDisabled;必须先核对危险填充按钮的浅/暗设计节点。 + +影响与边界:当前通用禁用字色会变为白色层级,属于可见默认变化;不能沿用primary深色fontWhite4裁定。 + +验证:核对危险背景上的对比及浅/暗最终颜色;显式实例disabled foreground仍优先,Linux定向Golden先无更新比对。 + +### buttonDangerOutlineDisabledColor + +**具体实施方案待执行** + +与危险填充禁用背景采用同一语义规则:建议前景和描边使用errorColorDisabled;不为旧CSS调色板引用新增独立入口。 + +影响与边界:默认主题不变;独立Token覆盖的优先级需要文档化。 + +验证:前景与描边必须同源;覆盖errorColor3/errorColorDisabled及实例ButtonStyle时分别断言。 + +### buttonDangerTextDisabledColor + +**具体实施方案待执行** + +建议文字危险按钮禁用前景使用errorColorDisabled;不机械复制冻结源码fontWhite1,以免浅色容器出现白底白字。取得设计裁定后再实施。 + +影响与边界:当前通用禁用字色会变成危险语义禁用色;需同时核对文字按钮背景和可读性。 + +验证:分别验证填充与文字分支;禁止复用同一disabled helper而把文字分支变成白字;实例状态样式优先。 + +### buttonDefaultActiveBgColor + +**具体实施方案待执行** + +拟将_resolveFillColors调用的_pressedBackgroundColor默认配色改为bgColorComponentActive;并让既有hasPressedBackground检测关闭重复pressed overlay。 + +影响与边界:普通与渐变/自定义背景必须按实际路径区分;默认填充按压视觉变化。 + +验证:真实指针按下保持、释放、取消、禁用切换;浅/暗下断言背景及overlay,P0 stateful背景不能被二次叠色。 + +### buttonGhostBorderColor + +**已修复,运行通过,视觉待验收** + +默认配色启用态前景/描边统一回退textColorAnti;禁用fontWhite4与实例ButtonStyle优先级不变。 + +验证:检查独立textColorAnti/fontWhite1,实际Text前景与Material边框一致;默认主题两Token相等,默认像素不变。 + +### buttonGhostColor + +**已修复,运行通过,视觉待验收** + +默认配色启用态前景/描边统一回退textColorAnti;禁用fontWhite4与实例ButtonStyle优先级不变。 + +验证:检查独立textColorAnti/fontWhite1,实际Text前景与Material边框一致;默认主题两Token相等,默认像素不变。 + +### buttonGhostDangerHoverColor + +**具体实施方案待执行** + +与ghost交互统一裁定;如按目标改变前景/描边,危险色按压取errorColorActive,避免只改文字遗漏边框。 + +影响与边界:须同时评估Ink层和透明容器上的实际视觉;不能把一次getter修正当作像素验收。 + +验证:独立覆盖errorColor/errorColorActive,按下/释放/禁用均检查前景、边框和实例优先级。 + +### buttonGhostHoverColor + +**具体实施方案待执行** + +建议先沿用Spec009的Flutter Ink状态层契约;取得目标按压设计后记录平台交互例外。若要求前景随按压变化,则默认ghost前景/边框用fontWhite2,并以已产生的前景/边框反馈抑制重复pressed overlay。 + +影响与边界:现有12%前景色状态层与冻结CSS前景变化不能只用字段相等判断视觉等价;必须检查实际合成结果。 + +验证:真实按下/释放/取消、hover/focus、透明背景及P0透明overlay;已产生反馈时不得重复叠加,禁用始终无反馈。 + +### buttonGhostPrimaryHoverColor + +**具体实施方案待执行** + +与默认ghost采用同一交互裁定;如按目标改变前景/描边,主色按压取brandColorActive,且与overlay反馈统一解析。 + +影响与边界:不新加activeColor入口;保持实例ButtonStyle拥有最终状态样式。 + +验证:独立覆盖brandColor与brandColorActive,检查真实按压的Text与Material边框及overlay组合。 + +### buttonLightActiveBgColor + +**具体实施方案待执行** + +拟将_pressedBackgroundColor浅色配色改为brandColorLightActive,避免使用brandColorFocus;沿同一resolve路径覆盖普通分支。 + +影响与边界:浅色填充按压色变化;焦点色不应被当作按压默认。 + +验证:独立设置brandColorFocus和brandColorLightActive,确认按压读取后者;复验焦点反馈和实例stateful ButtonStyle。 + +### emptyActionMarginTop + +**已有契约支持,运行通过,视觉待验收** + +保留当前Flutter契约,不按旧CSS变量默认或覆盖能力修改生产实现;补当前契约的实际Widget断言。 + +验证:保留旧目标原始比较;新增contract/场景必须enforce=true且匹配,并覆盖浅/暗及自定义全局Token。 + +- [已有契约](../../specs/031-empty-design-alignment/spec.md#L11):图片优先于图标,描述始终可选;操作 Widget 非空时以 32 间距展示。 + +### emptyDescriptionMarginTop + +**已有契约支持,运行通过,视觉待验收** + +保留当前Flutter契约,不按旧CSS变量默认或覆盖能力修改生产实现;补当前契约的实际Widget断言。 + +验证:保留旧目标原始比较;新增contract/场景必须enforce=true且匹配,并覆盖浅/暗及自定义全局Token。 + +- [已有契约](../../specs/031-empty-design-alignment/spec.md#L12):默认图标 96,图标/图片到描述间距分别为 22/16。 + +### inputBorderColor + +**具体实施方案待执行** + +拟仅将TInput._borderColor中normal分支由componentBorder改为componentStroke;保留focused/status和显式Theme边框策略,先核对Input分隔线设计。 + +影响与边界:浅色与暗色默认分隔线颜色均变化;FormItem外层分隔线与Input自身分隔线需避免双线。 + +验证:独立覆盖componentBorder/componentStroke;正常、聚焦、禁用、success/warning/error及borderless/FormItem组合均需Widget与定向Golden。 + +### inputVerticalPadding + +**已有契约支持,运行通过,视觉待验收** + +保留当前Flutter契约,不按旧CSS变量默认或覆盖能力修改生产实现;补当前契约的实际Widget断言。 + +验证:保留旧目标原始比较;新增contract/场景必须enforce=true且匹配,并覆盖浅/暗及自定义全局Token。 + +- [已有契约](../../tdesign-component/lib/src/components/input/t_input_theme_data.dart#L38):null 时在 TFormItem 作用域内为零,独立输入框为四周 16 逻辑像素 + +### switchDotLargeSize + +**具体实施方案待执行** + +在Switch内部建立按size解析的私有几何值,直接传到实际RenderBox/Painter以实现大号普通滑块直径26;去除整件FittedBox统一缩放。有图文/加载或开启态按26绘制。 + +影响与边界:这是同一几何修复批次,不逐项打补丁;不将私有几何表暴露为新的公开配置源。 + +验证:三尺寸×filled/text/icon×开/关×禁用/加载;测真实轨道、滑块、图标和字号。保留长文案、1/2/3倍字号、Theme插值、RTL手势;双SDK与Linux受影响Golden。 + +### switchDotPlainLargeSize + +**具体实施方案待执行** + +在Switch内部建立按size解析的私有几何值,直接传到实际RenderBox/Painter以实现大号无图文未选中滑块直径22;去除整件FittedBox统一缩放。plain条件同冻结WXML,开启态回到普通26。 + +影响与边界:这是同一几何修复批次,不逐项打补丁;不将私有几何表暴露为新的公开配置源。 + +验证:三尺寸×filled/text/icon×开/关×禁用/加载;测真实轨道、滑块、图标和字号。保留长文案、1/2/3倍字号、Theme插值、RTL手势;双SDK与Linux受影响Golden。 + +### switchDotPlainSize + +**具体实施方案待执行** + +在Switch内部建立按size解析的私有几何值,直接传到实际RenderBox/Painter以实现中号无图文未选中滑块直径18;去除整件FittedBox统一缩放。plain由无两项label、无两项icon且非loading决定,不能误用于图文/加载态。 + +影响与边界:这是同一几何修复批次,不逐项打补丁;不将私有几何表暴露为新的公开配置源。 + +验证:三尺寸×filled/text/icon×开/关×禁用/加载;测真实轨道、滑块、图标和字号。保留长文案、1/2/3倍字号、Theme插值、RTL手势;双SDK与Linux受影响Golden。 + +### switchDotPlainSmallSize + +**具体实施方案待执行** + +在Switch内部建立按size解析的私有几何值,直接传到实际RenderBox/Painter以实现小号无图文未选中滑块直径14;去除整件FittedBox统一缩放。plain条件同冻结WXML,开启态回到普通18。 + +影响与边界:这是同一几何修复批次,不逐项打补丁;不将私有几何表暴露为新的公开配置源。 + +验证:三尺寸×filled/text/icon×开/关×禁用/加载;测真实轨道、滑块、图标和字号。保留长文案、1/2/3倍字号、Theme插值、RTL手势;双SDK与Linux受影响Golden。 + +### switchDotSmallSize + +**具体实施方案待执行** + +在Switch内部建立按size解析的私有几何值,直接传到实际RenderBox/Painter以实现小号普通滑块直径18;去除整件FittedBox统一缩放。有图文/加载或开启态按18绘制。 + +影响与边界:这是同一几何修复批次,不逐项打补丁;不将私有几何表暴露为新的公开配置源。 + +验证:三尺寸×filled/text/icon×开/关×禁用/加载;测真实轨道、滑块、图标和字号。保留长文案、1/2/3倍字号、Theme插值、RTL手势;双SDK与Linux受影响Golden。 + +### switchIconLargeSize + +**具体实施方案待执行** + +在Switch内部建立按size解析的私有几何值,直接传到实际RenderBox/Painter以实现大号图标实际尺寸24;去除整件FittedBox统一缩放。图标和26dp滑块保留各自真实尺寸。 + +影响与边界:这是同一几何修复批次,不逐项打补丁;不将私有几何表暴露为新的公开配置源。 + +验证:三尺寸×filled/text/icon×开/关×禁用/加载;测真实轨道、滑块、图标和字号。保留长文案、1/2/3倍字号、Theme插值、RTL手势;双SDK与Linux受影响Golden。 + +### switchIconSize + +**具体实施方案待执行** + +在Switch内部建立按size解析的私有几何值,直接传到实际RenderBox/Painter以实现中号图标实际尺寸20;去除整件FittedBox统一缩放。独立图标尺寸不能随22dp滑块槽被缩成16。 + +影响与边界:这是同一几何修复批次,不逐项打补丁;不将私有几何表暴露为新的公开配置源。 + +验证:三尺寸×filled/text/icon×开/关×禁用/加载;测真实轨道、滑块、图标和字号。保留长文案、1/2/3倍字号、Theme插值、RTL手势;双SDK与Linux受影响Golden。 + +### switchIconSmallSize + +**具体实施方案待执行** + +在Switch内部建立按size解析的私有几何值,直接传到实际RenderBox/Painter以实现小号图标实际尺寸16;去除整件FittedBox统一缩放。图标和18dp滑块保留各自真实尺寸。 + +影响与边界:这是同一几何修复批次,不逐项打补丁;不将私有几何表暴露为新的公开配置源。 + +验证:三尺寸×filled/text/icon×开/关×禁用/加载;测真实轨道、滑块、图标和字号。保留长文案、1/2/3倍字号、Theme插值、RTL手势;双SDK与Linux受影响Golden。 + +### switchLabelColor + +**具体实施方案待执行** + +拟将TSwitchResolve.thumbContentOffColor默认回退改为bgColorSecondaryContainerActive,同步公开dartdoc;Theme显式值与禁用分支保留。 + +影响与边界:正常未选中文字/图标颜色变化;已记录的禁用/加载分层不变。 + +验证:分别验证text/icon、on/off、enabled/disabled/loading、浅/暗、全局Token与组件Theme独立覆盖;保留用户自定义前景。 + +### switchLargeWidth + +**具体实施方案待执行** + +在Switch内部建立按size解析的私有几何值,直接传到实际RenderBox/Painter以实现large轨道实际宽度52;去除整件FittedBox统一缩放。大号外框52×32,Painter轨道也应52×32。 + +影响与边界:这是同一几何修复批次,不逐项打补丁;不将私有几何表暴露为新的公开配置源。 + +验证:三尺寸×filled/text/icon×开/关×禁用/加载;测真实轨道、滑块、图标和字号。保留长文案、1/2/3倍字号、Theme插值、RTL手势;双SDK与Linux受影响Golden。 + +### switchSmallWidth + +**具体实施方案待执行** + +在Switch内部建立按size解析的私有几何值,直接传到实际RenderBox/Painter以实现small轨道实际宽度39;去除整件FittedBox统一缩放。小号外框39×24,Painter轨道也应39×24。 + +影响与边界:这是同一几何修复批次,不逐项打补丁;不将私有几何表暴露为新的公开配置源。 + +验证:三尺寸×filled/text/icon×开/关×禁用/加载;测真实轨道、滑块、图标和字号。保留长文案、1/2/3倍字号、Theme插值、RTL手势;双SDK与Linux受影响Golden。 + +## 可审查补丁 + +- [已实施的Ghost修复](implemented-fix.patch):一个语义回退源修正,覆盖文字/描边两个观察项。 +- [四项视觉修复候选补丁](proposed-visual-fixes.patch):未应用到主工作区;在隔离工程Flutter3.47.7的47项聚焦检查通过,20条目标观察全部匹配。仍需完整回归、低SDK、设计及Linux视觉验收。 + +## 全量边界 + +其余524项运行队列未减去。所有条目的finalPaintVerified仍为false;已修复或已有契约支持只关闭本次运行/契约问题,不等于最终像素验收。CI/工作流/测试清单、正式版本及Golden均未修改,未发布。 diff --git a/specs/060-token-difference-resolution/spec.md b/specs/060-token-difference-resolution/spec.md new file mode 100644 index 0000000000..1b7adf099b --- /dev/null +++ b/specs/060-token-difference-resolution/spec.md @@ -0,0 +1,17 @@ +# 首批Token差异处置 + +## 目标与范围 + +2026-10-15用户要求对不通过项继续推进或提供解决方案。本批逐项处置Spec059的31项运行差异及1项平台边框几何问题;保留677项整体审查和524项后续运行队列,不修改CI/工作流/测试清单或发布版本。 + +## 行为契约 + +- 先核对已有设计Spec和公开契约,不能把所有与旧小程序不同的值当作缺陷。保留原始比较目标及观察,不重写历史结果。 +- Empty沿Spec031:图标/图片描述间距22/16,操作间距固定32;Avatar字符字号沿Spec034/048,图标尺寸沿已发布TAvatarThemeData默认规格;头像组描边沿公开groupBorderColor默认bgColorContainer及已记录的设计验收。Input独立padding沿公开contentPadding契约固定16,Form作用域内仍为0。 +- Ghost默认配色在启用态使用语义textColorAnti作为前景与边框的共同默认源,不直接选用原始fontWhite1。禁用态仍用fontWhite4;实例ButtonStyle仍为唯一显式样式覆盖。默认主题下颜色不变,自定义textColorAnti能实际生效。 +- 涉及默认设计或尺寸策略且没有足够裁定依据的项目,给出具体改法、影响和测试门禁,不用未获依据的新值覆盖当前实现。 +- 双SDK严格分析、受影响功能/迁移消费者与覆盖率验证。需要Linux视觉复验的项目保持待验收;本机不录制或更新Golden。 + +## 完成条件 + +32项均有修复、既有契约支持或具体待执行方案;落实确定的Ghost语义回退修复,补充实际Widget断言和已有契约断言;产出新源码指纹上的双SDK记录及最新分层统计。最终像素和全量677项仍独立验收。 diff --git a/specs/060-token-difference-resolution/tasks.md b/specs/060-token-difference-resolution/tasks.md new file mode 100644 index 0000000000..3dea1a30a1 --- /dev/null +++ b/specs/060-token-difference-resolution/tasks.md @@ -0,0 +1,10 @@ +# 任务 + +- [x] 核对32项对应的现有设计Spec、公开契约及原始观察。 +- [x] 落实Ghost语义回退并补回归。 +- [x] 为8项已有契约支持的差异补当前契约断言,保留旧目标比较。 +- [x] 完成21项差异和1项平台几何的具体处置方案。 +- [x] 双SDK分析、完整相关功能回归、覆盖率及迁移消费验证。 +- [x] 更新发布前状态与仍缺的Linux/设计/设备证据。 + +- [ ] 取得适用设计/平台裁定并实施21项候选方案,执行Linux视觉验证;其余524项继续逐批补核。 diff --git a/specs/060-token-difference-resolution/validation-commands.json b/specs/060-token-difference-resolution/validation-commands.json new file mode 100644 index 0000000000..a84456a4bb --- /dev/null +++ b/specs/060-token-difference-resolution/validation-commands.json @@ -0,0 +1,165 @@ +{ + "workingDirectory": "tdesign-component (separate identical source checkouts for the two SDKs)", + "sdkVersions": [ + "3.32.0", + "3.47.7" + ], + "componentTests": [ + "test/components/button/t_button_test.dart", + "test/components/button/t_button_theme_priority_test.dart", + "test/components/button/t_button_theme_test.dart", + "test/components/button/t_button_widget_test.dart", + "test/components/switch/t_switch_test.dart", + "test/components/switch/t_switch_typography_test.dart", + "test/components/switch/t_cupertino_switch_test.dart", + "test/components/input/t_input_test.dart", + "test/components/input/t_input_theme_test.dart", + "test/components/link/t_link_resolve_test.dart", + "test/components/link/t_link_test.dart", + "test/components/link/t_link_theme_test.dart", + "test/components/link/t_link_widget_test.dart", + "test/components/avatar/t_avatar_test.dart", + "test/components/empty/t_empty_test.dart", + "test/components/progress/t_progress_test.dart" + ], + "analyze": [ + "flutter", + "analyze", + "--no-pub", + "--fatal-infos" + ], + "fullRegression": [ + "flutter", + "test", + "--no-pub", + "--exclude-tags", + "demo", + "--reporter", + "expanded", + "--coverage", + "test/components/button/t_button_test.dart", + "test/components/button/t_button_theme_priority_test.dart", + "test/components/button/t_button_theme_test.dart", + "test/components/button/t_button_widget_test.dart", + "test/components/switch/t_switch_test.dart", + "test/components/switch/t_switch_typography_test.dart", + "test/components/switch/t_cupertino_switch_test.dart", + "test/components/input/t_input_test.dart", + "test/components/input/t_input_theme_test.dart", + "test/components/link/t_link_resolve_test.dart", + "test/components/link/t_link_test.dart", + "test/components/link/t_link_theme_test.dart", + "test/components/link/t_link_widget_test.dart", + "test/components/avatar/t_avatar_test.dart", + "test/components/empty/t_empty_test.dart", + "test/components/progress/t_progress_test.dart" + ], + "coverageCommands": [ + [ + "dart", + "run", + "tool/check_component_coverage.dart", + "button" + ], + [ + "dart", + "run", + "tool/check_component_coverage.dart", + "switch" + ], + [ + "dart", + "run", + "tool/check_component_coverage.dart", + "input" + ], + [ + "dart", + "run", + "tool/check_component_coverage.dart", + "link" + ], + [ + "dart", + "run", + "tool/check_component_coverage.dart", + "avatar" + ], + [ + "dart", + "run", + "tool/check_component_coverage.dart", + "empty" + ], + [ + "dart", + "run", + "tool/check_component_coverage.dart", + "progress" + ] + ], + "focusEnvironment": { + "TDESIGN_TOKEN_EVIDENCE": "1" + }, + "focus": [ + "flutter", + "test", + "--no-pub", + "--reporter", + "expanded", + "--plain-name", + "token consumption", + "test/components/button/t_button_test.dart", + "test/components/switch/t_switch_test.dart", + "test/components/input/t_input_test.dart", + "test/components/link/t_link_test.dart", + "test/components/avatar/t_avatar_test.dart", + "test/components/empty/t_empty_test.dart", + "test/components/progress/t_progress_test.dart" + ], + "sdkMetadata": [ + "flutter", + "--version", + "--machine" + ], + "compileFrozenSource": [ + "node", + "tool/audit_compiled_token_consumption.mjs", + "" + ], + "summarize": [ + "node", + "tool/verify_token_difference_resolutions.mjs", + "" + ], + "explanation": "This verifies dispositions and current runtime contracts; 21 implementation proposals, one platform issue, applicable visual acceptance and the other524 runtime rows are still pending.", + "focusExpectedCount": 47, + "fullRegressionExpectedCount": 440, + "migration": [ + "dart", + "tool/run_migration_consumer.dart" + ], + "migrationExpectedCount": 21, + "snapshotFiles": [ + "source-low-before.json", + "source-low-after.json", + "source-high-before.json", + "source-high-after.json" + ], + "snapshotFormat": "Each snapshot has files:[{file:,sha256}], lockSha256. Include lib, assets, all16 manifest test files, test/support/token_consumption_evidence.dart, tool/component_test_manifest.dart, pubspec.yaml.", + "logs": "analyze-low/high.log, full-low/high.log, focus-low/high.log, coverage-low/high-.log, migration-low/high.log (migration-high-retry.log takes precedence), sdk-low/high.json.", + "isolatedProposal": { + "patch": "proposed-visual-fixes.patch", + "appliedToMainWorkspace": false, + "focusSdk": "3.47.7", + "focusExpectedCount": 47, + "log": "proposed-focus-high.log", + "snapshots": [ + "proposed-source-before.json", + "proposed-source-after.json" + ], + "sameDependencyLockAsHighSdk": true, + "fullRegressionRun": false, + "lowSdkRun": false + } +} diff --git a/specs/061-migration-documentation-design/acceptance.md b/specs/061-migration-documentation-design/acceptance.md new file mode 100644 index 0000000000..7c2da1fb0a --- /dev/null +++ b/specs/061-migration-documentation-design/acceptance.md @@ -0,0 +1,18 @@ +# 设计验收 + +日期:2026-10-15。结论:本次设计产物完成;生成接入和迁移内容补齐尚未实施,不表示发布准备完成。 + +## 已核对 + +- 读取仓库协作规范、现有迁移指南和57 项组件审计索引。 +- 核对现有 `site.config.mjs` 已有迁移路由。 +- 核对 `page-contract.mjs`:原始组件页只允许生成示例/API 入口,手写迁移段落被拒绝;因此选择渲染层自动注入摘要。 +- 核对 `plugin-tdoc/transforms.ts` 存在组件路径识别与 Markdown 预处理入口,方案可以接入该层。 +- 设计矩阵恰好57 项,目标组件文档全部存在,拟定锚点全部唯一;站点页面路由与拟定返回路径逐项核对。 +- `git diff --check` 通过。 + +## 尚未验证 + +拟定锚点尚未写入正式指南;站点尚未显示升级提示。未执行新的 Flutter、站点构建、浏览器或 Golden 验收,因为本次仅增加设计文件。后续实施验证按 plan.md 与 tasks.md 执行。 + +本次只新增本目录设计文件,保留此前工作区改动;未调整 CI、组件实现、生成 API、发布版本或 CHANGELOG。 diff --git a/specs/061-migration-documentation-design/component-entry-matrix.json b/specs/061-migration-documentation-design/component-entry-matrix.json new file mode 100644 index 0000000000..cbd60d6786 --- /dev/null +++ b/specs/061-migration-documentation-design/component-entry-matrix.json @@ -0,0 +1,633 @@ +{ + "status": "design-only", + "source": "specs/058-release-preparation/component-migration-index.json", + "entries": [ + { + "sourceSlug": "button", + "siteSlug": "button", + "old": "TDButton", + "current": "TButton", + "existingAuditNote": "text→child;onTap→onPressed;type→variant;theme→colorPreset;状态样式合并为 ButtonStyle。", + "componentDocument": "tdesign-site/docs/components/button/README.md", + "guideAnchor": "migration-button", + "proposedSiteTarget": "/flutter/migration-1-0#migration-button", + "implemented": false + }, + { + "sourceSlug": "divider", + "siteSlug": "divider", + "old": "TDDivider", + "current": "TDivider", + "existingAuditNote": "按当前构造及 TDividerThemeData 配置;方向/内容与具体视觉默认值分开。", + "componentDocument": "tdesign-site/docs/components/divider/README.md", + "guideAnchor": "migration-divider", + "proposedSiteTarget": "/flutter/migration-1-0#migration-divider", + "implemented": false + }, + { + "sourceSlug": "fab", + "siteSlug": "fab", + "old": "TDFab", + "current": "TFab", + "existingAuditNote": "重新核对尺寸/形态枚举、内容和事件;具体视觉从 TFabThemeData 配置。", + "componentDocument": "tdesign-site/docs/components/fab/README.md", + "guideAnchor": "migration-fab", + "proposedSiteTarget": "/flutter/migration-1-0#migration-fab", + "implemented": false + }, + { + "sourceSlug": "icon", + "siteSlug": "icon", + "old": "TDIcons / Icon", + "current": "TIcons / TIcon", + "existingAuditNote": "图标数据来自 tdesign_flutter_icons;TIcon 的默认视觉由 TD 控制,实例 size/color 可覆盖。", + "componentDocument": "tdesign-site/docs/components/icon/README.md", + "guideAnchor": "migration-icon", + "proposedSiteTarget": "/flutter/migration-1-0#migration-icon", + "implemented": false + }, + { + "sourceSlug": "text", + "siteSlug": "text", + "old": "TDText / TDTextSpan", + "current": "TText / TTextSpan", + "existingAuditNote": "删除分散字体、在线加载和 padding 入口;用 style、textScaler、显式父布局,见文字一节。", + "componentDocument": "tdesign-site/docs/components/text/README.md", + "guideAnchor": "migration-text", + "proposedSiteTarget": "/flutter/migration-1-0#migration-text", + "implemented": false + }, + { + "sourceSlug": "link", + "siteSlug": "link", + "old": "TDLink", + "current": "TLink", + "existingAuditNote": "内容改用 Widget child;内置规格与 colorPreset 留实例,具体视觉从 TLinkThemeData 配置。", + "componentDocument": "tdesign-site/docs/components/link/README.md", + "guideAnchor": "migration-link", + "proposedSiteTarget": "/flutter/migration-1-0#migration-link", + "implemented": false + }, + { + "sourceSlug": "backtop", + "siteSlug": "back-top", + "old": "TDBackTop", + "current": "TBackTop", + "existingAuditNote": "按当前滚动绑定与形态配置;仅提供滚动控制器时按组件契约回顶,不用空回调猜禁用。", + "componentDocument": "tdesign-site/docs/components/back-top/README.md", + "guideAnchor": "migration-back-top", + "proposedSiteTarget": "/flutter/migration-1-0#migration-back-top", + "implemented": false + }, + { + "sourceSlug": "drawer", + "siteSlug": "drawer", + "old": "TDDrawer / TDDrawerWidget", + "current": "TDrawer / showTDrawer", + "existingAuditNote": "内容与浮层打开分开;宽度/背景移入 TDrawerThemeData,旧内容实现类型不再直接构造。", + "componentDocument": "tdesign-site/docs/components/drawer/README.md", + "guideAnchor": "migration-drawer", + "proposedSiteTarget": "/flutter/migration-1-0#migration-drawer", + "implemented": false + }, + { + "sourceSlug": "indexes", + "siteSlug": "indexes", + "old": "TDIndexes", + "current": "TIndexes", + "existingAuditNote": "重新核对受控索引及滚动对象;字母列表最大高度在组件 Theme 配置。", + "componentDocument": "tdesign-site/docs/components/indexes/README.md", + "guideAnchor": "migration-indexes", + "proposedSiteTarget": "/flutter/migration-1-0#migration-indexes", + "implemented": false + }, + { + "sourceSlug": "navbar", + "siteSlug": "navbar", + "old": "TDNavBar", + "current": "TNavBar", + "existingAuditNote": "title/操作保留内容职责,背景、颜色、间距、边框和阴影迁入 TNavBarThemeData。", + "componentDocument": "tdesign-site/docs/components/navbar/README.md", + "guideAnchor": "migration-navbar", + "proposedSiteTarget": "/flutter/migration-1-0#migration-navbar", + "implemented": false + }, + { + "sourceSlug": "sidebar", + "siteSlug": "side-bar", + "old": "TDSideBar", + "current": "TSideBar", + "existingAuditNote": "选择交给 value/onChanged;去掉旧 Controller/数据项样式依赖,视觉使用 TSideBarThemeData。", + "componentDocument": "tdesign-site/docs/components/side-bar/README.md", + "guideAnchor": "migration-side-bar", + "proposedSiteTarget": "/flutter/migration-1-0#migration-side-bar", + "implemented": false + }, + { + "sourceSlug": "steps", + "siteSlug": "steps", + "old": "TDSteps", + "current": "TSteps.progress / selectable / display", + "existingAuditNote": "选择进度、可选择或纯展示模式;不把三种状态源混用。", + "componentDocument": "tdesign-site/docs/components/steps/README.md", + "guideAnchor": "migration-steps", + "proposedSiteTarget": "/flutter/migration-1-0#migration-steps", + "implemented": false + }, + { + "sourceSlug": "tab_bar", + "siteSlug": "tab-bar", + "old": "TDBottomTabBar", + "current": "TTabBar", + "existingAuditNote": "底部导航:显式 type、navigationTabs、value/onChanged;尺寸/颜色/分隔线迁 Theme。", + "componentDocument": "tdesign-site/docs/components/tab-bar/README.md", + "guideAnchor": "migration-tab-bar", + "proposedSiteTarget": "/flutter/migration-1-0#migration-tab-bar", + "implemented": false + }, + { + "sourceSlug": "tabs", + "siteSlug": "tabs", + "old": "TDTabBar / TDTabBarView", + "current": "TTabsBar / TTabsBarView", + "existingAuditNote": "顶部页签:共享 TabController 或 DefaultTabController;不是底部 TTabBar。", + "componentDocument": "tdesign-site/docs/components/tabs/README.md", + "guideAnchor": "migration-tabs", + "proposedSiteTarget": "/flutter/migration-1-0#migration-tabs", + "implemented": false + }, + { + "sourceSlug": "form", + "siteSlug": "form", + "old": "TDForm / FormController", + "current": "TForm / TFormField / TFormController", + "existingAuditNote": "从 items/rules/data 配置改为字段 Widget 树;value/onChanged、validator 与控制器职责分开。", + "componentDocument": "tdesign-site/docs/components/form/README.md", + "guideAnchor": "migration-form", + "proposedSiteTarget": "/flutter/migration-1-0#migration-form", + "implemented": false + }, + { + "sourceSlug": "input", + "siteSlug": "input", + "old": "TDInput", + "current": "TInput", + "existingAuditNote": "controller 与 initialValue 互斥;onChanged/hintText/prefix/suffix;不要把 initialValue 当持续受控值。", + "componentDocument": "tdesign-site/docs/components/input/README.md", + "guideAnchor": "migration-input", + "proposedSiteTarget": "/flutter/migration-1-0#migration-input", + "implemented": false + }, + { + "sourceSlug": "textarea", + "siteSlug": "textarea", + "old": "TDTextarea", + "current": "TTextarea", + "existingAuditNote": "多行输入独立组件;用 minLines/maxLines、controller 与字段回调,核对计数/字符限制。", + "componentDocument": "tdesign-site/docs/components/textarea/README.md", + "guideAnchor": "migration-textarea", + "proposedSiteTarget": "/flutter/migration-1-0#migration-textarea", + "implemented": false + }, + { + "sourceSlug": "search", + "siteSlug": "search", + "old": "TDSearchBar", + "current": "TSearchBar", + "existingAuditNote": "placeHolder→hintText、onTextChanged→onChanged、onActionClick→onActionPressed;不保留旧样式对象。", + "componentDocument": "tdesign-site/docs/components/search/README.md", + "guideAnchor": "migration-search", + "proposedSiteTarget": "/flutter/migration-1-0#migration-search", + "implemented": false + }, + { + "sourceSlug": "checkbox", + "siteSlug": "checkbox", + "old": "TDCheckbox / TDCheckboxGroup", + "current": "TCheckbox / TCheckboxGroup", + "existingAuditNote": "checked/id/controller 方案改为 value/onChanged;组提供 options 和受控选中集合,类型按当前 API。", + "componentDocument": "tdesign-site/docs/components/checkbox/README.md", + "guideAnchor": "migration-checkbox", + "proposedSiteTarget": "/flutter/migration-1-0#migration-checkbox", + "implemented": false + }, + { + "sourceSlug": "radio", + "siteSlug": "radio", + "old": "TDRadio / TDRadioGroup", + "current": "TRadio / TRadioGroup", + "existingAuditNote": "单项必须位于同类型组下;组持有 value/onChanged,不再为每项维护选中状态。", + "componentDocument": "tdesign-site/docs/components/radio/README.md", + "guideAnchor": "migration-radio", + "proposedSiteTarget": "/flutter/migration-1-0#migration-radio", + "implemented": false + }, + { + "sourceSlug": "switch", + "siteSlug": "switch", + "old": "TDSwitch", + "current": "TSwitch", + "existingAuditNote": "value/onChanged 管开关状态;空回调禁用;规格与具体配色分别从实例/Theme 设置。", + "componentDocument": "tdesign-site/docs/components/switch/README.md", + "guideAnchor": "migration-switch", + "proposedSiteTarget": "/flutter/migration-1-0#migration-switch", + "implemented": false + }, + { + "sourceSlug": "stepper", + "siteSlug": "stepper", + "old": "TDStepper", + "current": "TStepper", + "existingAuditNote": "required value;回调接受后重建;旧 defaultValue/eventController 不能作为迁移目标。", + "componentDocument": "tdesign-site/docs/components/stepper/README.md", + "guideAnchor": "migration-stepper", + "proposedSiteTarget": "/flutter/migration-1-0#migration-stepper", + "implemented": false + }, + { + "sourceSlug": "slider", + "siteSlug": "slider", + "old": "TDSlider / TDRangeSlider", + "current": "TSlider / TRangeSlider", + "existingAuditNote": "按当前值及回调类型迁移;旧 Thumb/Track/Painter 类型不再作为可继承公开入口。", + "componentDocument": "tdesign-site/docs/components/slider/README.md", + "guideAnchor": "migration-slider", + "proposedSiteTarget": "/flutter/migration-1-0#migration-slider", + "implemented": false + }, + { + "sourceSlug": "rate", + "siteSlug": "rate", + "old": "TDRate", + "current": "TRate", + "existingAuditNote": "按当前受控数值与回调迁移;重验半星、禁用、只读与自定义指示器。", + "componentDocument": "tdesign-site/docs/components/rate/README.md", + "guideAnchor": "migration-rate", + "proposedSiteTarget": "/flutter/migration-1-0#migration-rate", + "implemented": false + }, + { + "sourceSlug": "picker", + "siteSlug": "picker", + "old": "TDPicker / TDMultiPicker / TDMultiLinkedPicker", + "current": "TPicker + TPickerColumns / TPickerLinked", + "existingAuditNote": "列数据改不可变 option 树;选择面板不负责业务确认,使用 TPickerPopup 组合草稿/确认/取消。", + "componentDocument": "tdesign-site/docs/components/picker/README.md", + "guideAnchor": "migration-picker", + "proposedSiteTarget": "/flutter/migration-1-0#migration-picker", + "implemented": false + }, + { + "sourceSlug": "date_time_picker", + "siteSlug": "date-time-picker", + "old": "TDDatePicker", + "current": "TDateTimePicker", + "existingAuditNote": "DatePickerModel 改为 TDateTimePickerValue + DateTimePickerMode;上下界/步进显式传入,外部管理确认。", + "componentDocument": "tdesign-site/docs/components/date-time-picker/README.md", + "guideAnchor": "migration-date-time-picker", + "proposedSiteTarget": "/flutter/migration-1-0#migration-date-time-picker", + "implemented": false + }, + { + "sourceSlug": "cascader", + "siteSlug": "cascader", + "old": "TDCascader / TDMultiCascader", + "current": "TCascader", + "existingAuditNote": "使用 TCascaderOption 树与受控路径;旧自定义 Tab/Action/多选控制类型不能机械替换,按当前能力重组。", + "componentDocument": "tdesign-site/docs/components/cascader/README.md", + "guideAnchor": "migration-cascader", + "proposedSiteTarget": "/flutter/migration-1-0#migration-cascader", + "implemented": false + }, + { + "sourceSlug": "tree_select", + "siteSlug": "tree-select", + "old": "TDTreeSelect / TDSelectOption", + "current": "TTreeSelect / TTreeSelectOption", + "existingAuditNote": "树数据、选中集合与 multiple 明确配置;不再复用旧副作用控制器。", + "componentDocument": "tdesign-site/docs/components/tree-select/README.md", + "guideAnchor": "migration-tree-select", + "proposedSiteTarget": "/flutter/migration-1-0#migration-tree-select", + "implemented": false + }, + { + "sourceSlug": "calendar", + "siteSlug": "calendar", + "old": "TDCalendar", + "current": "TCalendar", + "existingAuditNote": "value 是 List;variant 决定单选/多选/区间;onChanged 回写,时间选择和弹层外部组合。", + "componentDocument": "tdesign-site/docs/components/calendar/README.md", + "guideAnchor": "migration-calendar", + "proposedSiteTarget": "/flutter/migration-1-0#migration-calendar", + "implemented": false + }, + { + "sourceSlug": "upload", + "siteSlug": "upload", + "old": "TDUpload", + "current": "TUpload", + "existingAuditNote": "files/onChanged 受控;单一 mediaType,maxFiles/maxFileSize、不可变结果;上传请求由业务执行。", + "componentDocument": "tdesign-site/docs/components/upload/README.md", + "guideAnchor": "migration-upload", + "proposedSiteTarget": "/flutter/migration-1-0#migration-upload", + "implemented": false + }, + { + "sourceSlug": "avatar", + "siteSlug": "avatar", + "old": "TDAvatar", + "current": "TAvatar", + "existingAuditNote": "形状用 shape,物理大小/颜色迁 TAvatarThemeData;特殊文字用 child: Text(style: ...)。", + "componentDocument": "tdesign-site/docs/components/avatar/README.md", + "guideAnchor": "migration-avatar", + "proposedSiteTarget": "/flutter/migration-1-0#migration-avatar", + "implemented": false + }, + { + "sourceSlug": "badge", + "siteSlug": "badge", + "old": "TDBadge", + "current": "TBadge", + "existingAuditNote": "统一 label/size 等当前入口;旧数字/红点/丝带类型按组件 API 重组,不复用旧 BadgeConfig。", + "componentDocument": "tdesign-site/docs/components/badge/README.md", + "guideAnchor": "migration-badge", + "proposedSiteTarget": "/flutter/migration-1-0#migration-badge", + "implemented": false + }, + { + "sourceSlug": "cell", + "siteSlug": "cell", + "old": "TDCell / TDCellGroup", + "current": "TCell / TCellGroup", + "existingAuditNote": "以内容槽组合;连续列表用 TCellGroup;统一背景/分隔线由组或 Theme 管理。", + "componentDocument": "tdesign-site/docs/components/cell/README.md", + "guideAnchor": "migration-cell", + "proposedSiteTarget": "/flutter/migration-1-0#migration-cell", + "implemented": false + }, + { + "sourceSlug": "collapse", + "siteSlug": "collapse", + "old": "TDCollapse / TDCollapsePanel", + "current": "TCollapse / TCollapsePanel", + "existingAuditNote": "受控展开值与内容分开;形态/动画属于实例,具体外观从 TCollapseThemeData 配置。", + "componentDocument": "tdesign-site/docs/components/collapse/README.md", + "guideAnchor": "migration-collapse", + "proposedSiteTarget": "/flutter/migration-1-0#migration-collapse", + "implemented": false + }, + { + "sourceSlug": "empty", + "siteSlug": "empty", + "old": "TDEmpty", + "current": "TEmpty", + "existingAuditNote": "旧 type 改为 icon/image/emptyText/operation 组合;不再查找 TDEmptyType,也不导入内部插图。", + "componentDocument": "tdesign-site/docs/components/empty/README.md", + "guideAnchor": "migration-empty", + "proposedSiteTarget": "/flutter/migration-1-0#migration-empty", + "implemented": false + }, + { + "sourceSlug": "footer", + "siteSlug": "footer", + "old": "TDFooter", + "current": "TFooter", + "existingAuditNote": "按当前内容/链接数据与组件 Theme 迁移,不继续使用旧 FooterType 作为类型。", + "componentDocument": "tdesign-site/docs/components/footer/README.md", + "guideAnchor": "migration-footer", + "proposedSiteTarget": "/flutter/migration-1-0#migration-footer", + "implemented": false + }, + { + "sourceSlug": "image", + "siteSlug": "image", + "old": "TDImage", + "current": "TImage", + "existingAuditNote": "重验加载/失败/裁剪;尺寸和占位以当前 API 为准,旧 TDImageType 不能仅改前缀。", + "componentDocument": "tdesign-site/docs/components/image/README.md", + "guideAnchor": "migration-image", + "proposedSiteTarget": "/flutter/migration-1-0#migration-image", + "implemented": false + }, + { + "sourceSlug": "image_viewer", + "siteSlug": "image-viewer", + "old": "TDImageViewer / TDImageDialog", + "current": "TImageViewer.show", + "existingAuditNote": "images 使用 ImageProvider 列表;initialIndex 与 onIndexChanged,内部 State/Dialog 类型不再直接实例化。", + "componentDocument": "tdesign-site/docs/components/image-viewer/README.md", + "guideAnchor": "migration-image-viewer", + "proposedSiteTarget": "/flutter/migration-1-0#migration-image-viewer", + "implemented": false + }, + { + "sourceSlug": "progress", + "siteSlug": "progress", + "old": "TDProgress", + "current": "TProgress", + "existingAuditNote": "variant/status 与主题分开;圆环 circleSize 表示外框边长,不能把旧半径语义套入。", + "componentDocument": "tdesign-site/docs/components/progress/README.md", + "guideAnchor": "migration-progress", + "proposedSiteTarget": "/flutter/migration-1-0#migration-progress", + "implemented": false + }, + { + "sourceSlug": "result", + "siteSlug": "result", + "old": "TDResult", + "current": "TResult", + "existingAuditNote": "重选当前语义状态与内容插槽,背景/文字视觉使用 TResultThemeData。", + "componentDocument": "tdesign-site/docs/components/result/README.md", + "guideAnchor": "migration-result", + "proposedSiteTarget": "/flutter/migration-1-0#migration-result", + "implemented": false + }, + { + "sourceSlug": "skeleton", + "siteSlug": "skeleton", + "old": "TDSkeleton / TDSkeletonRowCol*", + "current": "TSkeleton / TSkeleton.custom", + "existingAuditNote": "标准形态用 variant;自定义布局使用 TSkeletonLayout,不复用旧 RowCol 配置类型。", + "componentDocument": "tdesign-site/docs/components/skeleton/README.md", + "guideAnchor": "migration-skeleton", + "proposedSiteTarget": "/flutter/migration-1-0#migration-skeleton", + "implemented": false + }, + { + "sourceSlug": "swiper", + "siteSlug": "swiper", + "old": "Swiper + TDSwiperPagination", + "current": "TSwiper / TSwiperController", + "existingAuditNote": "不再用第三方 SwiperController/SwiperPlugin;迁移 children 或 itemBuilder、分页及自有控制器。", + "componentDocument": "tdesign-site/docs/components/swiper/README.md", + "guideAnchor": "migration-swiper", + "proposedSiteTarget": "/flutter/migration-1-0#migration-swiper", + "implemented": false + }, + { + "sourceSlug": "table", + "siteSlug": "table", + "old": "TDTable / TDTableCol", + "current": "TTable / TTableColumn", + "existingAuditNote": "列使用 id/header/cellBuilder,data 必填;排序和选择是受控值,旧列/行选择回调需要改写。", + "componentDocument": "tdesign-site/docs/components/table/README.md", + "guideAnchor": "migration-table", + "proposedSiteTarget": "/flutter/migration-1-0#migration-table", + "implemented": false + }, + { + "sourceSlug": "tag", + "siteSlug": "tag", + "old": "TDTag / TDSelectTag", + "current": "TTag / TSelectTag", + "existingAuditNote": "语义色用 colorPreset;选中/关闭遵循当前回调;具体字体和圆角从 Theme 设置。", + "componentDocument": "tdesign-site/docs/components/tag/README.md", + "guideAnchor": "migration-tag", + "proposedSiteTarget": "/flutter/migration-1-0#migration-tag", + "implemented": false + }, + { + "sourceSlug": "time_counter", + "siteSlug": "time-counter", + "old": "TDTimeCounter", + "current": "TTimeCounter", + "existingAuditNote": "time 和 onChanged 均使用毫秒整数;重验自动开始、方向与结束;自建 Controller 由业务释放。", + "componentDocument": "tdesign-site/docs/components/time-counter/README.md", + "guideAnchor": "migration-time-counter", + "proposedSiteTarget": "/flutter/migration-1-0#migration-time-counter", + "implemented": false + }, + { + "sourceSlug": "action_sheet", + "siteSlug": "action-sheet", + "old": "TDActionSheet", + "current": "TActionSheet", + "existingAuditNote": "按当前列表/宫格入口及 TActionSheetItem 组合;旧主题枚举不是新 Theme 类型。", + "componentDocument": "tdesign-site/docs/components/action-sheet/README.md", + "guideAnchor": "migration-action-sheet", + "proposedSiteTarget": "/flutter/migration-1-0#migration-action-sheet", + "implemented": false + }, + { + "sourceSlug": "dialog", + "siteSlug": "dialog", + "old": "TDAlertDialog / TDConfirmDialog / TDInputDialog", + "current": "TDialog / TConfirmDialog / TDialogAction", + "existingAuditNote": "单确认便捷弹窗与多操作槽分开;输入弹窗用 TDialog+TInput 组合,不恢复专用旧类。", + "componentDocument": "tdesign-site/docs/components/dialog/README.md", + "guideAnchor": "migration-dialog", + "proposedSiteTarget": "/flutter/migration-1-0#migration-dialog", + "implemented": false + }, + { + "sourceSlug": "dropdown_menu", + "siteSlug": "dropdown-menu", + "old": "TDDropdownMenu / TDDropdownItem", + "current": "TDropdownMenu / TDropdownMenuItem", + "existingAuditNote": "菜单项描述与 Single/MultiSelectPanel 组合;重验外部值更新、遮罩和 anchor,不直接改名前缀。", + "componentDocument": "tdesign-site/docs/components/dropdown-menu/README.md", + "guideAnchor": "migration-dropdown-menu", + "proposedSiteTarget": "/flutter/migration-1-0#migration-dropdown-menu", + "implemented": false + }, + { + "sourceSlug": "loading", + "siteSlug": "loading", + "old": "TDLoading", + "current": "TLoading", + "existingAuditNote": "按当前 icon/内容与 TLoadingController 使用;旧内部指示器/State 不作为公开继承点。", + "componentDocument": "tdesign-site/docs/components/loading/README.md", + "guideAnchor": "migration-loading", + "proposedSiteTarget": "/flutter/migration-1-0#migration-loading", + "implemented": false + }, + { + "sourceSlug": "message", + "siteSlug": "message", + "old": "TDMessage", + "current": "TMessage", + "existingAuditNote": "duration 使用 Duration;status 替代旧 theme;显示由 Widget 树或命令句柄管理,不保留 visible 开关。", + "componentDocument": "tdesign-site/docs/components/message/README.md", + "guideAnchor": "migration-message", + "proposedSiteTarget": "/flutter/migration-1-0#migration-message", + "implemented": false + }, + { + "sourceSlug": "notice_bar", + "siteSlug": "notice-bar", + "old": "TDNoticeBar", + "current": "TNoticeBar", + "existingAuditNote": "语义状态/滚动/多行用当前 API;重验循环、点击与关闭,不搬旧样式类。", + "componentDocument": "tdesign-site/docs/components/notice-bar/README.md", + "guideAnchor": "migration-notice-bar", + "proposedSiteTarget": "/flutter/migration-1-0#migration-notice-bar", + "implemented": false + }, + { + "sourceSlug": "popover", + "siteSlug": "popover", + "old": "TDPopover / TDPopoverWidget", + "current": "TPopover", + "existingAuditNote": "锚点和一次性命令按当前入口使用;offset/arrowSize/padding/背景/圆角从 TPopoverThemeData 设置。", + "componentDocument": "tdesign-site/docs/components/popover/README.md", + "guideAnchor": "migration-popover", + "proposedSiteTarget": "/flutter/migration-1-0#migration-popover", + "implemented": false + }, + { + "sourceSlug": "popup", + "siteSlug": "popup", + "old": "TDPopup*Panel / TDSlidePopupRoute", + "current": "TPopup.show + TPopupOptions + TPopupHandle", + "existingAuditNote": "面板、路由与控制统一;选择方向专属 Options/Inset,关闭结果从 handle.result 获取。", + "componentDocument": "tdesign-site/docs/components/popup/README.md", + "guideAnchor": "migration-popup", + "proposedSiteTarget": "/flutter/migration-1-0#migration-popup", + "implemented": false + }, + { + "sourceSlug": "refresh", + "siteSlug": "pull-down-refresh", + "old": "TDRefreshHeader", + "current": "TPullDownRefresh", + "existingAuditNote": "用 wrapper、受控回调和 TPullDownRefreshController 迁移;旧第三方 Header 不能仅改名。", + "componentDocument": "tdesign-site/docs/components/pull-down-refresh/README.md", + "guideAnchor": "migration-pull-down-refresh", + "proposedSiteTarget": "/flutter/migration-1-0#migration-pull-down-refresh", + "implemented": false + }, + { + "sourceSlug": "swipe_cell", + "siteSlug": "swipe-cell", + "old": "TDSwipeCell / TDSwipeCellAction", + "current": "TSwipeCell / TSwipeCellAction", + "existingAuditNote": "侧滑交互与逐项动作配置使用当前 API;不要依赖旧 Inherited/State,避免重复通知。", + "componentDocument": "tdesign-site/docs/components/swipe-cell/README.md", + "guideAnchor": "migration-swipe-cell", + "proposedSiteTarget": "/flutter/migration-1-0#migration-swipe-cell", + "implemented": false + }, + { + "sourceSlug": "toast", + "siteSlug": "toast", + "old": "TDToast", + "current": "TToast", + "existingAuditNote": "duration 为 Duration,加载默认也会超时;持续加载显式 Duration.zero,背景拦截放 TOverlayConfig。", + "componentDocument": "tdesign-site/docs/components/toast/README.md", + "guideAnchor": "migration-toast", + "proposedSiteTarget": "/flutter/migration-1-0#migration-toast", + "implemented": false + }, + { + "sourceSlug": "theme", + "siteSlug": "theme", + "old": "TDTheme / TDThemeData", + "current": "context.tTheme / TThemeData / TThemeBuilder", + "existingAuditNote": "全局 Token→TD 组件 Theme→支持的实例配置;Material 外观不再反向影响 TD 默认视觉。", + "componentDocument": "tdesign-site/docs/components/theme/README.md", + "guideAnchor": "migration-theme", + "proposedSiteTarget": "/flutter/migration-1-0#migration-theme", + "implemented": false + } + ] +} diff --git a/specs/061-migration-documentation-design/plan.md b/specs/061-migration-documentation-design/plan.md new file mode 100644 index 0000000000..f6651a6c08 --- /dev/null +++ b/specs/061-migration-documentation-design/plan.md @@ -0,0 +1,112 @@ +# 设计与实施方案 + +## 阅读路径 + +- 从站点“开始 → 0.2.7 → 1.0 迁移”进入:升级前准备 → 全局迁移 → 按组件迁移 → 业务验收。 +- 从组件页进入:简短升级提示 → 当前组件专章 → 当前组件 API。 +- 从旧类名进入:旧公开声明索引 → 对应组件章或公共能力说明 → 明确处置。 + +## 统一指南结构 + +保留一个物理文件,用目录、稳定锚点和章节组织,避免把383 项名称索引放在首次阅读的主体前方。 + +```text +从 0.2.7 升级到 1.0 +├─ 适用版本与升级前准备 +├─ 推荐升级顺序 +├─ 全局迁移:导入、主题、文字、样式、资源与平台要求 +├─ 组件速查表:组件 / 旧入口 / 新入口 / 迁移详情 +├─ 组件迁移详解:57 个独立章节 +│ └─ 每章使用下述统一模板 +├─ 业务验收清单 +├─ 常见迁移问题:简短回答,链接回详解 +└─ 附录:0.2.7 公开声明处置索引 +``` + +现有“受控值”“浮层确认”“主题优先级”等通用解释保留在全局说明或共同机制章节,组件专章链接引用,避免重复。现有九组可运行示例继续从 fixture 提取;覆盖到多个组件时,各章节链接到实际示例,不能把一组示例计作多个组件的完整验收。 + +## 组件页样稿:Button + +提示块位置:组件介绍之后、“代码演示”之前。使用站点现有排版、提示色和普通链接;窄屏顺序排列,链接可换行,代码名不撑破容器。无需新增第三个页签或持久关闭状态。 + +> **从 0.2.7 升级** +> `TDButton` → `TButton` +> • `text` 改为 `child`;`onTap` 改为 `onPressed`。 +> • `type/theme` 分别改为 `variant/colorPreset`。 +> • 状态样式使用 `ButtonStyle`;未传 `onPressed` 表示禁用。 +> 查看 Button 完整迁移说明 → `/flutter/migration-1-0#migration-button` + +此样稿是信息和文案设计,实际交付时由根指南摘要生成。当前组件页 README 不添加这段手写正文。 + +## 组件专章模板 + +```markdown + +### Button 按钮 + + +旧入口:`TDButton`;新入口:`TButton`。 +- `text` 改为 `child`,`onTap` 改为 `onPressed`。 +- `type/theme` 改为 `variant/colorPreset`。 +- 状态样式使用 `ButtonStyle`;未传 `onPressed` 表示禁用。 + + +#### API 与用法变化 +| 0.2.7 | 1.0 | 操作与语义变化 | +| ... | ... | ... | + +#### 迁移前后示例 +旧代码:注明0.2.7 验证环境;新代码:从已验证 fixture 同步。 + +#### 默认行为与视觉变化 +记录空回调、主题优先级、状态反馈等会影响业务的变化。 + +#### 已移除能力与替代方式 +写清原入口、替代组合、需要业务实现的部分;不暗示无等价能力可直接替换。 + +#### 迁移后检查 +- 普通、禁用、加载、连续点击与实例样式。 +- 明暗主题、局部主题和文字缩放。 + +查看当前 Button API:站点完整组件 URL。 +``` + +模板是拟采用格式,尚未写入正式指南。章节的实际 API、默认值和代码必须先核对源码和0.2.7 发布包;不能将模板示意内容当作已验证的对照。普通组件也需逐项审查,可以写“不适用:原因”,不能仅写“参照最新 API”。 + +## 接入现有生成链路 + +推荐在 `tdesign-site/site/plugin-tdoc/transforms.ts` 的 `before` 阶段,利用已有组件文件路径识别结果,注入从指南提取的提示块,再交给现有示例与 API 转换。 + +- 新增迁移摘要读取模块,输入规范化组件 slug 和站点指南副本;只允许白名单 slug。 +- 渲染时以组件文档路径判断,普通文档和迁移指南本身不注入。 +- 在正文“代码演示”之前注入一次;开发热更新重跑也不能累积提示。 +- 根指南中的摘要标记、章节锚点、目录与链接由同步步骤检查;缺失、重复、空内容、超出三条摘要均报错。 +- 摘要标记内容使用受控 Markdown 文本,不执行任意组件或代码。 +- `page-contract.mjs` 继续校验原始页面正文,不放宽其禁止手写迁移段落的约束。渲染测试另验一次提示及正确目标。 +- 当前 `scripts/sync-readme.mjs` 继续同步根指南到包内和站点;未来改动仅扩展摘要/锚点校验,不改 CI 配置。 +- 历史 `specs/058-release-preparation/component-migration-index.json` 是审计基线,不作为第二份长期维护正文。实施时以根指南章节产生运行期映射;本目录映射只供设计核对。 + +## 命名与链接规则 + +设计矩阵见 `component-entry-matrix.json`。其中 `guideAnchor` 为待创建目标,`implemented: false` 明确表示尚未上线。源 slug 的下划线通常变为连字符;`backtop → back-top`、`sidebar → side-bar`、`refresh → pull-down-refresh` 必须显式映射。尤其区分 `TDTabBar → TTabsBar` 与 `TDBottomTabBar → TTabBar`,不得机械改前缀。 + +站点入口使用站内路径,根指南和包内目录使用 `#migration-...`。返回当前 API 使用组件站点完整 URL,以便包内和 GitHub 阅读也能访问。实际站点基地址与浏览器路由需在构建后的预览验证,不能只检查字符串。 + +## 内容补齐顺序 + +1. 先完成全局主题/文字、Button、输入与受控组件、Form、Picker/日期、Popup/Dialog/Toast、Upload、两种 TabBar、Swiper:优先避免编译错误和行为变化。 +2. 补齐剩余组件的独立章节,对参数、枚举、回调、默认行为和移除类型逐项审查,复用已有证据但不复制不适用结论。 +3. 把383 项旧声明索引逐条链接至具体章节;原来的“按组件重写”等泛化说明必须补充实际方向,能力无等价时直说。 +4. 再接入自动摘要、站点往返链接与 FAQ;完成整体浏览和迁移验证。 + +## FAQ 设计 + +仅保留跨组件高频问题:为什么不能直接替换 TD 前缀;为什么编译通过但值不变化;为什么 Material Theme 不再改变 TD 默认样式;为什么找不到旧 DatePicker/Swiper/内部 State;加载 Toast 为什么需要明确持续时长。每题给简短答案并跳转对应章节,不再复制参数表和整段代码。 + +## 验证策略 + +文档结构校验覆盖57 章、唯一锚点、摘要与站点页面映射、旧声明处置链接、同步副本一致性。生成链路测试覆盖非组件页不注入、每页只注入一次、错误 slug 和缺失章节报错、现有手写正文仍被拒绝。执行现有站点示例/API 测试及生产构建。 + +新旧代码分别在0.2.7 和1.0 独立消费环境分析、运行,1.0 使用最低和当前稳定 SDK。按实际示例验证受控回写、确认/取消、禁用、异步退出和资源释放;已有九组及21 个消费测试是复用起点,不能声称覆盖57 个组件。 + +浏览器验证组件入口和指南目录的深链接、前进/后退、刷新定位、返回 API、桌面与375px 窄屏、键盘访问。纯文档结构设计无需执行 Flutter 全量回归;实施涉及组件或示例源码后按实际范围补充对应回归。视觉证据仍遵循原有 Linux Golden 约束。 diff --git a/specs/061-migration-documentation-design/spec.md b/specs/061-migration-documentation-design/spec.md new file mode 100644 index 0000000000..168943a5f0 --- /dev/null +++ b/specs/061-migration-documentation-design/spec.md @@ -0,0 +1,34 @@ +# 0.2.7 → 1.0 迁移文档设计 + +状态:设计完成,站点和指南结构改造尚未实施。日期:2026-10-15。 + +## 背景 + +现有根目录 `MIGRATION_1_0.md` 已有通用迁移说明、57 项组件入口索引和383 项旧公开声明处置索引,但还没有57 个可直接定位的组件专章。组件页面目前只保留生成示例和 API 入口;页面契约明确禁止手写迁移段落。 + +## 目标 + +采用“一份完整指南 + 组件页面自动生成的简短入口”。用户既能按升级顺序阅读,也能从当前组件页直接找到旧 API 的迁移方法。范围仅为0.2.7 到1.0,不包括 alpha 之间迁移。 + +## 范围与非目标 + +本次交付信息架构、页面文案样稿、57 项入口映射、维护方式与实施验收清单。后续实施才调整根指南、同步逻辑和站点渲染。组件实现、CI、测试调度清单、版本号与自动 CHANGELOG 不属于本设计改动范围。 + +## 行为契约 + +1. 根目录指南是迁移正文的唯一维护来源;包内和站点指南由现有同步脚本产生。 +2. 每个组件有稳定英文锚点 `migration-<站点组件slug>`,例如 `migration-tab-bar`。标题更名不改变链接。 +3. 组件页在“代码演示”之前展示“从 0.2.7 升级”普通提示块:旧入口、新入口、最多三条关键变化、完整指南链接。不使用弹窗,不阻塞首次访问。 +4. 摘要从指南中对应组件章节提取;不得在57 个 README 内复制迁移正文或代码。 +5. 迁移指南提供到当前组件页的返回链接。仓库和包内阅读使用指南内部锚点;站点入口使用 `/flutter/migration-1-0#...`,不能把站点绝对路由复制到离线说明的内部目录。 +6. FAQ 只解释常见困惑,并链接到具体迁移章节;不承担完整替换清单。 +7. 未完成证据、待确定的默认视觉或能力处置不得写成“已验证”或“无需调整”;文档完成也不表示1.0 发布验收完成。 + +## 验收标准 + +- 57 个现有索引项都有唯一组件章节、有效组件页面和往返链接;特殊命名有显式映射。 +- 全部旧公开声明都能定位到具体处置说明;无法自动替换的类型写清替代组合或能力边界。 +- 每个组件章包含迁移对照、示例、行为差异、移除能力及检查清单;不适用项有原因。 +- 组件页摘要与指南同步,重复锚点、缺失摘要、无效目标均阻断文档生成。 +- 旧代码在0.2.7 环境验证,新代码在最低和当前稳定 SDK 验证;新旧代码分环境,不混用依赖。 +- 站点构建、既有页面契约和示例/API 校验通过;桌面及窄屏真实跳转验证通过。 diff --git a/specs/061-migration-documentation-design/tasks.md b/specs/061-migration-documentation-design/tasks.md new file mode 100644 index 0000000000..1670969c9c --- /dev/null +++ b/specs/061-migration-documentation-design/tasks.md @@ -0,0 +1,20 @@ +# 工作清单 + +## 本次设计 + +- [x] 检查统一指南、同步脚本、站点路由、组件原始页面契约与渲染入口。 +- [x] 明确唯一正文来源、稳定锚点、生成摘要与FAQ 边界。 +- [x] 提供组件页样稿和组件专章模板。 +- [x] 核对57 项组件入口和站点文档路径,生成设计矩阵。 +- [x] 拆分内容补齐、生成接入与验收步骤。 + +## 后续实施 + +- [ ] 在根指南建立57 个独立章节、稳定锚点和可提取摘要。 +- [ ] 补齐每章参数/行为对照、移除能力和迁移检查。 +- [ ] 分离验证旧代码与新代码;新代码继续使用可运行 fixture 同步。 +- [ ] 为383 项旧公开声明补齐具体处置链接和能力边界。 +- [ ] 扩展同步校验,接入站点自动提示,保持原始页面契约。 +- [ ] 补齐 FAQ 和目录往返链接,同步包内与站点副本。 +- [ ] 完成站点测试、构建与真实浏览器深链接/窄屏验收。 +- [ ] 根据最终1.0 候选复核行为与版本说明;迁移文档的通过不替代发布门禁。 diff --git a/tdesign-component/MIGRATION_1_0.md b/tdesign-component/MIGRATION_1_0.md new file mode 100644 index 0000000000..be50528294 --- /dev/null +++ b/tdesign-component/MIGRATION_1_0.md @@ -0,0 +1,747 @@ +# 从 0.2.7 升级到 1.0 + +本文仅面向 `tdesign_flutter 0.2.7` 使用方。1.0 是不兼容升级,旧参数和旧行为不会通过兼容别名保留;不能对全项目执行一次 `TD` → `T` 替换后就认为迁移结束。 + +本文按 0.2.7 实际发布包与当前 1.0 候选编写。正式 1.0 发布后使用 `tdesign_flutter: ^1.0.0`;发布前不要把这个版本约束当作已经可从 pub.dev 安装的稳定版本。已有 alpha 的升级不在本文范围。 + +## 升级顺序 + +1. 保留当前依赖锁文件、主题 JSON 与关键页面截图;先在业务分支迁移。 +2. 升级到 Flutter ≥3.32.0、Dart ≥3.8.0。原生平台要求还受所解析的 Flutter/图片选择器实现包约束,按目标 SDK 构建验证。 +3. 先替换公共主题/文字与导入,再迁移基础组件,最后迁移选择器、表单、浮层和异步交互。 +4. 修复全部编译错误后,按本文的行为清单验证真实操作。默认视觉和回调行为变化不一定产生编译错误。 + +统一入口可同时提供 TD 与 Flutter Material 类型: + +```dart +import 'package:tdesign_flutter/tdesign_flutter.dart'; +``` + +仍可显式导入 Material;业务另有同名类型时用 import 前缀或 show/hide 解决。不要从 `package:tdesign_flutter/src/...` 导入旧 State、Painter 或内部适配类型。 + +## 主题、文字与样式 + +旧 `TDTheme.of(context)` 对应 `context.tTheme`;全局数据为 `TThemeData`,应用使用 `TThemeBuilder.light/dark`。让组件跟随局部主题时读取 `context.tTheme`,不要用固定默认值绕开子树 Theme。 + + +```dart +Widget migratedApp(Widget home) { + final tokens = TThemeData.defaultData(); + return MaterialApp( + theme: TThemeBuilder.light(tokens), + darkTheme: TThemeBuilder.dark(tokens), + home: home, + ); +} + +Widget migratedTextTheme(BuildContext context, Widget child) { + return Theme( + data: Theme.of( + context, + ).mergeExtension(const TTextThemeData(textStyle: TextStyle(fontSize: 18))), + child: child, + ); +} +``` + + +- TD 内置外观按全局 Token、TD 组件 Theme、受支持的显式实例配置解析。Material `textTheme`、按钮 Theme、`IconTheme`、visualDensity 等不再隐式改变 TD 内置视觉;原生 Material 和调用方自定义内容仍可使用自己的主题。 +- 使用 `mergeExtension` 合并子树组件主题,避免用 `copyWith(extensions: [...])` 意外丢弃其他 ThemeExtension。 +- `TText` 的单实例文字使用 `style: TextStyle(...)`;`TTextSpan` 也用 `style`。不要继续传旧 `fontWeight/fontFamily/textColor/isTextThrough/lineThroughColor`,删除线使用 `TextDecoration.lineThrough`。 +- `textScaleFactor` 改为 `textScaler`;未传时继承系统文字缩放。旧 `TDTextPaddingConfig` 改为父级 Padding/Align/Center,段落文字不要按单行居中规则强行裁切。 +- 在线字体先由业务调用 `TFontLoader.load` 并管理加载状态,之后通过文字 `style.fontFamily` 或 TD 文字 Theme 配置,不再在文字 build 时请求字体 URL。 +- 自定义主题 JSON 需要核对字段与最终默认值;旧按钮状态样式、组件形态、交互时长等不能一律塞进 Theme。具体视觉默认值与实例的状态/规格选择分开。 + +## 按钮与禁用语义 + +0.2.7:`TDButton(text: '保存', type: TDButtonType.fill, theme: TDButtonTheme.primary, onTap: save)`。 + +1.0 的对应写法: + + +```dart +Widget migratedButton(VoidCallback? onPressed) { + return TButton( + variant: TButtonVariant.fill, + colorPreset: TButtonColorPreset.primary, + onPressed: onPressed, + child: const Text('保存'), + ); +} +``` + + +`onPressed == null` 表示禁用;长按也要求按钮处于可点击状态。不要保留旧 `disabled: false` 却漏传回调。`icon` 使用 Widget,IconData 包在 `Icon(...)` 或 `TIcon(...)` 中。普通/按压/禁用的具体样式合并到 `ButtonStyle` 的状态属性;尺寸布局按 size、显式样式或外部约束表达,不搬旧 style/activeStyle/disableStyle 三套对象。 + +自定义反色主题时,默认配色的 `TButtonVariant.ghost` 文字与描边读取 `textColorAnti`,禁用时读取 `fontWhite4`;不要仅修改原始白色层级 `fontWhite1` 来控制这类按钮。单个按钮的前景、边框和交互状态仍通过 `ButtonStyle` 覆盖。 + +## 受控值、输入与选择 + +对于 `TCheckbox`、`TRadioGroup`、`TSwitch`、`TStepper`、Picker、Calendar 等,父级应接受回调并重建传回新值。只记录回调而不更新 value,会导致保持旧值或滚动结束回退;空回调的禁用规则以各组件 API 为准。 + + +```dart +Widget migratedCheckbox(bool value, ValueChanged? onChanged) { + return TCheckbox(value: value, onChanged: onChanged, title: '同意条款'); +} + +Widget migratedRadio(String value, ValueChanged? onChanged) { + return TRadioGroup.options( + value: value, + onChanged: onChanged, + options: const [ + TRadioOption(value: 'a', label: '方案 A'), + TRadioOption(value: 'b', label: '方案 B'), + ], + ); +} +``` + + +`TRadio` 必须在同类型 `TRadioGroup` 下,不能把 groupValue/onChanged 重新分散到每个 radio。复选框单项 value 为 bool?(null 表示不确定态),组的 value/options 以当前泛型 API 为准,旧 id、controller、passThrough 等不能原样套入。 + +输入框的 `controller` 与 `initialValue` 互斥;`initialValue` 仅初始化内部值。需要外部更新、表单重置或保留选区时使用 `TextEditingController`,由创建方释放。单行用 `TInput`,多行用 `TTextarea`;不要把旧 TDInput 的 maxLines 参数当成完整多行迁移方案。重验空内容粘贴、中文组合输入、清空按钮、焦点与键盘遮挡。 + +## 表单改为字段树 + +旧 `items/rules/data` 配置改为 `TForm + TFormField + TFormItem`。字段持有业务 value/onChanged,validator 返回错误文案;`TFormController.validate()` 用于主动校验,`required: true` 执行必填校验,单独设置表单项必填标记不等于校验。 + + +```dart +Widget migratedForm({ + required TFormController form, + required TextEditingController text, + required String value, + required ValueChanged onChanged, +}) { + return TForm( + controller: form, + child: TFormField( + name: 'name', + value: value, + onChanged: onChanged, + required: true, + requiredMessage: '请输入姓名', + builder: (context, current, change, error) => TFormItem( + label: '姓名', + errorText: error, + child: TInput(controller: text, onChanged: change), + ), + ), + ); +} +``` + + +示例中的 text/form 由页面持有,value 由父级在 onChanged 中更新;页面销毁时释放自建 TextEditingController。业务执行 reset 时,同时更新字段值与自己的文本控制器;不要指望 initialValue 覆盖现有编辑状态。 + +## Picker、日期与浮层确认分离 + +`TDPicker/TDMultiPicker/TDMultiLinkedPicker` 改为 `TPicker` 和不可变 `TPickerColumns/TPickerLinked` 数据。面板回调只是候选值变化,不是业务确认。 + + +```dart +TPopupHandle migratedPicker({ + required BuildContext context, + required String initialValue, + required ValueChanged onConfirmed, +}) { + var draft = initialValue; + return TPickerPopup.show( + context, + child: StatefulBuilder( + builder: (context, setPanelState) => TPicker( + items: const TPickerColumns([ + [ + TPickerOption(label: '选项 A', value: 'a'), + TPickerOption(label: '选项 B', value: 'b'), + ], + ]), + value: [draft], + onChanged: (next) => setPanelState(() { + draft = next.values.single! as String; + }), + ), + ), + headerBuilder: (context, close) => TPopupHeader( + title: const Text('请选择'), + cancelButton: TButton(onPressed: close, child: const Text('取消')), + confirmButton: TButton( + onPressed: () { + onConfirmed(draft); + close(); + }, + child: const Text('确认'), + ), + ), + ); +} +``` + + +调用方在 `onConfirmed` 中更新业务保存值,并确保对应业务 State 仍 mounted;取消只关闭、不提交草稿。重新打开时用保存值创建新草稿。`TPickerPopup` 会为标准头部和滚轮预留高度;自定义通用 Popup 时也须提供合理内容约束。 + +`TDDatePicker + DatePickerModel` 改为 `TDateTimePicker + TDateTimePickerValue + DateTimePickerMode`。默认年月日,按需组合时间列;start/end 与 steps 用当前模型,onChanged 实时回写。`TDCalendar` 的 value 改为 `List`,single/multiple/range 由 variant 表达,组件不再同时负责业务弹窗确认或时间选择。 + + +```dart +Widget migratedCalendar( + List value, + ValueChanged>? onChanged, +) { + return SizedBox( + height: 400, + child: TCalendar( + value: value, + variant: TCalendarVariant.single, + minDate: DateTime(2026, 1, 1), + maxDate: DateTime(2026, 12, 31), + onChanged: onChanged, + ), + ); +} + +Widget migratedDateTime( + TDateTimePickerValue value, + ValueChanged? onChanged, +) { + return TDateTimePicker(value: value, onChanged: onChanged); +} +``` + + +**重新验证边界**:最小/最大日期的时分、跨天、闰日、区间端点、数据源变更、连续滚动与惯性。不要用整数时间戳或旧通知器替代新受控值。 + +## Popup、Dialog、Toast + +旧 `TDPopup*Panel/TDSlidePopupRoute` 组合改为 `TPopup.show(context, options: ...)`。按方向选择 `TPopupOptions.bottom/center/left/right/top` 与对应 Inset;从返回的 `TPopupHandle` 关闭/重开并读取本次 `result`。用正确 Theme/Navigator 子树的 context 打开;handle 重开不会自动重新解析已经合并的主题选项,需要新配置时重新创建。 + +`TConfirmDialog` 是单确认便捷组件;多操作使用 `TDialog.actions + TDialogAction`,输入弹窗组合 `TDialog + TInput`,不要寻找被删除的 TDInputDialog。 + + +```dart +Future migratedDialog(BuildContext context) { + return TDialog.show( + context, + dialog: const TConfirmDialog( + title: '操作确认', + content: '确认继续?', + buttonText: '继续', + ), + ); +} +``` + + +Toast 时长用 `Duration`;加载提示默认也会自动关闭。持续任务显式设置 `Duration.zero`,任务结束后按返回 ID 关闭。可见遮罩与背景点击/滚动拦截是独立配置,不要把半透明遮罩等同于不可穿透。 + + +```dart +String migratedLoading(BuildContext context) { + return TToast.showLoading( + context: context, + text: '处理中', + duration: Duration.zero, + overlay: const TOverlayConfig(preventScrollThrough: true), + ); +} +``` + + +结束任务时调用 `TToast.dismissToast(id)`。匿名提示会复用匿名 ID;需要并存时提供不同 toastId。`TMessage.duration` 同样使用 Duration,显示由 Widget 树或其公开命令管理,不能继续用旧 visible 参数控制。 + +## Upload 与平台依赖 + +Upload 只负责选择及文件列表交互,不执行 HTTP 上传。旧 `max/sizeLimit/multiple/disabled/onChange` 不能仅改名:改为 `maxFiles/maxFileSize`、单一 mediaType、受控 files/onChanged;自定义业务 picker 使用 `Future>`。 + + +```dart +Widget migratedUpload({ + required List files, + required ValueChanged>? onChanged, + TUploadPicker? picker, +}) { + return TUpload( + files: files, + onChanged: onChanged, + maxFiles: 2, + maxFileSize: 5 * 1024 * 1024, + picker: picker, + ); +} +``` + + +回调列表不可变,接受时直接保存新列表,不原地 add/remove;上传进度和结果由业务创建新 TUploadFile/列表更新。`onChanged == null` 阻止新交互,但不会取消已经开始的选择;卸载后不通知。数量/大小错误、选择器异常和业务回调异常分别按当前回调契约处理。 + +相册权限、iOS Info.plist、文件持久化和 Android 进程回收后的恢复属于宿主集成。默认选择器底层是 image_picker;业务可用 picker 接入自己的权限、恢复和上传流程。升级后重新构建原生宿主,并检查实际解析的平台实现版本;Dart 编译通过不能证明权限与系统相册行为通过。 + +## 两种 TabBar 与 Swiper + +- **顶部页签**:旧 `TDTabBar/TDTabBarView` → `TTabsBar/TTabsBarView`,显式共享 TabController 或位于同一个 DefaultTabController。TTabsBarView 默认不可滑动,需要手势切页时显式配置 physics。 +- **底部导航**:旧 `TDBottomTabBar` → `TTabBar`,提供 type、navigationTabs、受控 value/onChanged;旧 `topBorder/showTopBorder/centerDistance` 没有等价开关恢复,按新的默认边线和内置图文布局验收。 +- **Swiper**:使用 `TSwiper` 的 children 或 itemBuilder/itemCount;自建 `TSwiperController` 并在页面 dispose 中释放。旧第三方 SwiperPlugin/SwiperController 和 TDSwiperPagination 不能直接传入;按当前分页、箭头与 pageEffect 能力重组。TSwiper 默认 loop/autoplay 均 false,业务需要时显式打开。 + +## 全部组件迁移索引 + +下表是入口与职责迁移索引,不承诺旧构造参数一一保留。每个组件的全部当前字段与默认值以 1.0 API 文档为准;旧名查找见文末导出索引。 + +| 组件 | 0.2.7 入口 | 1.0 入口 | 必须检查的迁移点 | +|---|---|---|---| +| button | `TDButton` | `TButton` | text→child;onTap→onPressed;type→variant;theme→colorPreset;状态样式合并为 ButtonStyle。 | +| divider | `TDDivider` | `TDivider` | 按当前构造及 TDividerThemeData 配置;方向/内容与具体视觉默认值分开。 | +| fab | `TDFab` | `TFab` | 重新核对尺寸/形态枚举、内容和事件;具体视觉从 TFabThemeData 配置。 | +| icon | `TDIcons / Icon` | `TIcons / TIcon` | 图标数据来自 tdesign_flutter_icons;TIcon 的默认视觉由 TD 控制,实例 size/color 可覆盖。 | +| text | `TDText / TDTextSpan` | `TText / TTextSpan` | 删除分散字体、在线加载和 padding 入口;用 style、textScaler、显式父布局,见文字一节。 | +| link | `TDLink` | `TLink` | 内容改用 Widget child;内置规格与 colorPreset 留实例,具体视觉从 TLinkThemeData 配置。 | +| backtop | `TDBackTop` | `TBackTop` | 按当前滚动绑定与形态配置;仅提供滚动控制器时按组件契约回顶,不用空回调猜禁用。 | +| drawer | `TDDrawer / TDDrawerWidget` | `TDrawer / showTDrawer` | 内容与浮层打开分开;宽度/背景移入 TDrawerThemeData,旧内容实现类型不再直接构造。 | +| indexes | `TDIndexes` | `TIndexes` | 重新核对受控索引及滚动对象;字母列表最大高度在组件 Theme 配置。 | +| navbar | `TDNavBar` | `TNavBar` | title/操作保留内容职责,背景、颜色、间距、边框和阴影迁入 TNavBarThemeData。 | +| sidebar | `TDSideBar` | `TSideBar` | 选择交给 value/onChanged;去掉旧 Controller/数据项样式依赖,视觉使用 TSideBarThemeData。 | +| steps | `TDSteps` | `TSteps.progress / selectable / display` | 选择进度、可选择或纯展示模式;不把三种状态源混用。 | +| tab_bar | `TDBottomTabBar` | `TTabBar` | 底部导航:显式 type、navigationTabs、value/onChanged;尺寸/颜色/分隔线迁 Theme。 | +| tabs | `TDTabBar / TDTabBarView` | `TTabsBar / TTabsBarView` | 顶部页签:共享 TabController 或 DefaultTabController;不是底部 TTabBar。 | +| form | `TDForm / FormController` | `TForm / TFormField / TFormController` | 从 items/rules/data 配置改为字段 Widget 树;value/onChanged、validator 与控制器职责分开。 | +| input | `TDInput` | `TInput` | controller 与 initialValue 互斥;onChanged/hintText/prefix/suffix;不要把 initialValue 当持续受控值。 | +| textarea | `TDTextarea` | `TTextarea` | 多行输入独立组件;用 minLines/maxLines、controller 与字段回调,核对计数/字符限制。 | +| search | `TDSearchBar` | `TSearchBar` | placeHolder→hintText、onTextChanged→onChanged、onActionClick→onActionPressed;不保留旧样式对象。 | +| checkbox | `TDCheckbox / TDCheckboxGroup` | `TCheckbox / TCheckboxGroup` | checked/id/controller 方案改为 value/onChanged;组提供 options 和受控选中集合,类型按当前 API。 | +| radio | `TDRadio / TDRadioGroup` | `TRadio / TRadioGroup` | 单项必须位于同类型组下;组持有 value/onChanged,不再为每项维护选中状态。 | +| switch | `TDSwitch` | `TSwitch` | value/onChanged 管开关状态;空回调禁用;规格与具体配色分别从实例/Theme 设置。 | +| stepper | `TDStepper` | `TStepper` | required value;回调接受后重建;旧 defaultValue/eventController 不能作为迁移目标。 | +| slider | `TDSlider / TDRangeSlider` | `TSlider / TRangeSlider` | 按当前值及回调类型迁移;旧 Thumb/Track/Painter 类型不再作为可继承公开入口。 | +| rate | `TDRate` | `TRate` | 按当前受控数值与回调迁移;重验半星、禁用、只读与自定义指示器。 | +| picker | `TDPicker / TDMultiPicker / TDMultiLinkedPicker` | `TPicker + TPickerColumns / TPickerLinked` | 列数据改不可变 option 树;选择面板不负责业务确认,使用 TPickerPopup 组合草稿/确认/取消。 | +| date_time_picker | `TDDatePicker` | `TDateTimePicker` | DatePickerModel 改为 TDateTimePickerValue + DateTimePickerMode;上下界/步进显式传入,外部管理确认。 | +| cascader | `TDCascader / TDMultiCascader` | `TCascader` | 使用 TCascaderOption 树与受控路径;旧自定义 Tab/Action/多选控制类型不能机械替换,按当前能力重组。 | +| tree_select | `TDTreeSelect / TDSelectOption` | `TTreeSelect / TTreeSelectOption` | 树数据、选中集合与 multiple 明确配置;不再复用旧副作用控制器。 | +| calendar | `TDCalendar` | `TCalendar` | value 是 List;variant 决定单选/多选/区间;onChanged 回写,时间选择和弹层外部组合。 | +| upload | `TDUpload` | `TUpload` | files/onChanged 受控;单一 mediaType,maxFiles/maxFileSize、不可变结果;上传请求由业务执行。 | +| avatar | `TDAvatar` | `TAvatar` | 形状用 shape,物理大小/颜色迁 TAvatarThemeData;特殊文字用 child: Text(style: ...)。 | +| badge | `TDBadge` | `TBadge` | 统一 label/size 等当前入口;旧数字/红点/丝带类型按组件 API 重组,不复用旧 BadgeConfig。 | +| cell | `TDCell / TDCellGroup` | `TCell / TCellGroup` | 以内容槽组合;连续列表用 TCellGroup;统一背景/分隔线由组或 Theme 管理。 | +| collapse | `TDCollapse / TDCollapsePanel` | `TCollapse / TCollapsePanel` | 受控展开值与内容分开;形态/动画属于实例,具体外观从 TCollapseThemeData 配置。 | +| empty | `TDEmpty` | `TEmpty` | 旧 type 改为 icon/image/emptyText/operation 组合;不再查找 TDEmptyType,也不导入内部插图。 | +| footer | `TDFooter` | `TFooter` | 按当前内容/链接数据与组件 Theme 迁移,不继续使用旧 FooterType 作为类型。 | +| image | `TDImage` | `TImage` | 重验加载/失败/裁剪;尺寸和占位以当前 API 为准,旧 TDImageType 不能仅改前缀。 | +| image_viewer | `TDImageViewer / TDImageDialog` | `TImageViewer.show` | images 使用 ImageProvider 列表;initialIndex 与 onIndexChanged,内部 State/Dialog 类型不再直接实例化。 | +| progress | `TDProgress` | `TProgress` | variant/status 与主题分开;圆环 circleSize 表示外框边长,不能把旧半径语义套入。 | +| result | `TDResult` | `TResult` | 重选当前语义状态与内容插槽,背景/文字视觉使用 TResultThemeData。 | +| skeleton | `TDSkeleton / TDSkeletonRowCol*` | `TSkeleton / TSkeleton.custom` | 标准形态用 variant;自定义布局使用 TSkeletonLayout,不复用旧 RowCol 配置类型。 | +| swiper | `Swiper + TDSwiperPagination` | `TSwiper / TSwiperController` | 不再用第三方 SwiperController/SwiperPlugin;迁移 children 或 itemBuilder、分页及自有控制器。 | +| table | `TDTable / TDTableCol` | `TTable / TTableColumn` | 列使用 id/header/cellBuilder,data 必填;排序和选择是受控值,旧列/行选择回调需要改写。 | +| tag | `TDTag / TDSelectTag` | `TTag / TSelectTag` | 语义色用 colorPreset;选中/关闭遵循当前回调;具体字体和圆角从 Theme 设置。 | +| time_counter | `TDTimeCounter` | `TTimeCounter` | time 和 onChanged 均使用毫秒整数;重验自动开始、方向与结束;自建 Controller 由业务释放。 | +| action_sheet | `TDActionSheet` | `TActionSheet` | 按当前列表/宫格入口及 TActionSheetItem 组合;旧主题枚举不是新 Theme 类型。 | +| dialog | `TDAlertDialog / TDConfirmDialog / TDInputDialog` | `TDialog / TConfirmDialog / TDialogAction` | 单确认便捷弹窗与多操作槽分开;输入弹窗用 TDialog+TInput 组合,不恢复专用旧类。 | +| dropdown_menu | `TDDropdownMenu / TDDropdownItem` | `TDropdownMenu / TDropdownMenuItem` | 菜单项描述与 Single/MultiSelectPanel 组合;重验外部值更新、遮罩和 anchor,不直接改名前缀。 | +| loading | `TDLoading` | `TLoading` | 按当前 icon/内容与 TLoadingController 使用;旧内部指示器/State 不作为公开继承点。 | +| message | `TDMessage` | `TMessage` | duration 使用 Duration;status 替代旧 theme;显示由 Widget 树或命令句柄管理,不保留 visible 开关。 | +| notice_bar | `TDNoticeBar` | `TNoticeBar` | 语义状态/滚动/多行用当前 API;重验循环、点击与关闭,不搬旧样式类。 | +| popover | `TDPopover / TDPopoverWidget` | `TPopover` | 锚点和一次性命令按当前入口使用;offset/arrowSize/padding/背景/圆角从 TPopoverThemeData 设置。 | +| popup | `TDPopup*Panel / TDSlidePopupRoute` | `TPopup.show + TPopupOptions + TPopupHandle` | 面板、路由与控制统一;选择方向专属 Options/Inset,关闭结果从 handle.result 获取。 | +| refresh | `TDRefreshHeader` | `TPullDownRefresh` | 用 wrapper、受控回调和 TPullDownRefreshController 迁移;旧第三方 Header 不能仅改名。 | +| swipe_cell | `TDSwipeCell / TDSwipeCellAction` | `TSwipeCell / TSwipeCellAction` | 侧滑交互与逐项动作配置使用当前 API;不要依赖旧 Inherited/State,避免重复通知。 | +| toast | `TDToast` | `TToast` | duration 为 Duration,加载默认也会超时;持续加载显式 Duration.zero,背景拦截放 TOverlayConfig。 | +| theme | `TDTheme / TDThemeData` | `context.tTheme / TThemeData / TThemeBuilder` | 全局 Token→TD 组件 Theme→支持的实例配置;Material 外观不再反向影响 TD 默认视觉。 | + +## 编译通过后仍要检查 + +- 控件禁用条件、受控回调回写、连续操作与异步完成后的状态。 +- 主题明暗切换、局部 Theme、系统字体和 1/1.5/2 倍字号;不要用旧截图作为当前默认值的唯一依据。 +- 键盘、复制粘贴、输入法组合区、选区及焦点;返回键、安全区和 Overlay 的关闭/释放。 +- 列表排序/选择、日期边界、滚轮惯性、Swiper 实际页码;上传取消、权限与页面退出。 +- 业务创建的文本/Tab/Swiper/刷新控制器按其实际类型生命周期释放;回调中 setState 前确认 State 存活。 + +不存在替代入口的旧公开 State、Painter、布局适配和静态辅助类,不应通过深层 src 导入恢复。若业务依赖其具体能力,应使用公开 Widget/Theme/Flutter 原语重新组合,或在业务中维护对应实现;这类代码需要人工迁移。 + +## 0.2.7 公开导出名称索引 + +以下覆盖 0.2.7 主入口追踪到的自有公开声明(不包括外部包导出)。它用于查找旧名和定位处置方向,**不是自动替换表**。即使目标同名,构造参数、回调、默认值或行为也可能变化。公开基类的继承成员与业务自行继承/深层导入需额外审查。当前入口还导出 Material;同名的 Flutter 类型不作为旧 TD 自有声明的兼容实现。 + +| 0.2.7 名称 | 当前入口或处置 | 范围 | +|---|---|---| +| `BadgeConfig` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `CalendarBuilder` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `CalendarFormat` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `CalendarTrigger` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `CalendarType` | `TCalendarVariant` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `CellBuilder` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `ChevronPainter` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `Chinese2Formatter` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `ContentBuilder` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `DatePickerCallback` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `DatePickerModel` | `TDateTimePickerValue` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `DateSelectType` | `DateSelectType` | 同名或前缀对应,仍需核对参数/默认行为 | +| `DateSelectTypeNotifier` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `DateTypeKey` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `DefaultMapFactory` | `DefaultMapFactory` | 同名或前缀对应,仍需核对参数/默认行为 | +| `DefaultStickyHeaderController` | `DefaultStickyHeaderController` | 同名或前缀对应,仍需核对参数/默认行为 | +| `Font` | `Font` | 同名或前缀对应,仍需核对参数/默认行为 | +| `FontExtensions` | `FontExtensions` | 同名或前缀对应,仍需核对参数/默认行为 | +| `FontFamily` | `FontFamily` | 同名或前缀对应,仍需核对参数/默认行为 | +| `FormController` | `TFormController` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `FormItemNotifier` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `HollowCircle` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `IconBuilder` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `IconTextDirection` | `IconTextDirection` | 同名或前缀对应,仍需核对参数/默认行为 | +| `ImageWidget` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `ItemBuilderType` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `ItemDistanceCalculator` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `LabelBuilder` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `LeftItemBuilder` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `LeftLinePainter` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `LeftLineWidget` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `LinkClick` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `MessageLink` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `MessageMarquee` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `MessageTheme` | `TMessageStatus` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `MultiCascaderCallback` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `MultiCascaderListModel` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `MultiLinkedPickerModel` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `MultiPickerCallback` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `OnCellTap` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `OnCheckBoxGroupChange` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `OnCheckValueChanged` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `OnClose` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `OnDelete` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `OnGroupChange` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `OnImageTap` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `OnIndexChange` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `OnLongPress` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `OnLongTap` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `OnRadioGroupChange` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `OnRowSelect` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `OnScroll` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `OnSelect` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `OnSliderThemeDataUpdate` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `OnSwitchChanged` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `OnTap` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `PanelWithDownArrow` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `PlacementEnum` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `PlatformUtil` | `PlatformUtil` | 同名或前缀对应,仍需核对参数/默认行为 | +| `PopRoute` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `PopUpMenuItem` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `PopupClick` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `PopupDialog` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `PopupDialogState` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `Position` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `ProgressIndicator` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `RadioCorner` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `RadioCornerIcon` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `RectClipper` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `RightItemBuilder` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `RowCheckFunc` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `ScaleFormatter` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `SelectableFunc` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `SideItemProps` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `SlideTransitionFrom` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `SliderMeasureData` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `SliverStickyHeader` | `SliverStickyHeader` | 同名或前缀对应,仍需核对参数/默认行为 | +| `SliverStickyHeaderRenderObjectElement` | `SliverStickyHeaderRenderObjectElement` | 同名或前缀对应,仍需核对参数/默认行为 | +| `SliverStickyHeaderState` | `SliverStickyHeaderState` | 同名或前缀对应,仍需核对参数/默认行为 | +| `SliverStickyHeaderWidgetBuilder` | `SliverStickyHeaderWidgetBuilder` | 同名或前缀对应,仍需核对参数/默认行为 | +| `StickyHeaderController` | `StickyHeaderController` | 同名或前缀对应,仍需核对参数/默认行为 | +| `SwipeMotion` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDActionSheet` | `TActionSheet` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDActionSheetAlign` | `TActionSheetAlign` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDActionSheetItem` | `TActionSheetItem` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDActionSheetItemCallback` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDActionSheetTheme` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDAlertDialog` | `TDialog` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDAvatar` | `TAvatar` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDAvatarShape` | `TAvatarShape` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDAvatarSize` | `TAvatarSize` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDAvatarType` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDBackTop` | `TBackTop` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDBackTopStyle` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDBackTopTheme` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDBadge` | `TBadge` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDBadgeBorder` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDBadgeSize` | `TBadgeSize` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDBadgeType` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDBarItemAction` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDBottomTabBar` | `TTabBar` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDBottomTabBarBasicType` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDBottomTabBarComponentType` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDBottomTabBarIndicatorAnimation` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDBottomTabBarItemWithBadge` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDBottomTabBarOutlineType` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDBottomTabBarPopUpBtnConfig` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDBottomTabBarPopUpShapeConfig` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDBottomTabBarTabConfig` | `TTabBarItemConfig` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDBoxShadows` | `TBoxShadows` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDButton` | `TButton` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDButtonEvent` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDButtonIconPosition` | `TButtonIconPosition` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDButtonShape` | `TButtonShape` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDButtonSize` | `TButtonSize` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDButtonStatus` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDButtonStyle` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDButtonTheme` | `TButtonColorPreset` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDButtonType` | `TButtonVariant` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDCalendar` | `TCalendar` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDCalendarBody` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDCalendarCell` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDCalendarHeader` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDCalendarInherited` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDCalendarPopup` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDCalendarStyle` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDCapsuleRangeSliderThumbShape` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDCapsuleRangeSliderTickMarkShape` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDCapsuleRectRangeSliderTrackShape` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDCapsuleRectSliderTrackShape` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDCapsuleRectThemeData` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDCapsuleSliderThumbShape` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDCapsuleSliderTickMarkShape` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDCardStyle` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDCascader` | `TCascader` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDCascaderAction` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDCell` | `TCell` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDCellAlign` | `TCellAlign` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDCellClick` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDCellGroup` | `TCellGroup` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDCellGroupTheme` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDCellStyle` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDCheckBoxSize` | `TCheckboxSize` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDCheckbox` | `TCheckbox` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDCheckboxGroup` | `TCheckboxGroup` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDCheckboxGroupContainer` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDCheckboxGroupContainerState` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDCheckboxGroupController` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDCheckboxGroupInherited` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDCheckboxGroupState` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDCheckboxState` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDCheckboxStyle` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDCircleIndicator` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDCollapse` | `TCollapse` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDCollapseIconTextBuilder` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDCollapsePanel` | `TCollapsePanel` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDCollapseStyle` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDColors` | `TColors` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDConfirmDialog` | `TConfirmDialog` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDContentDirection` | `TContentDirection` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDCustomTab` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDDatePicker` | `TDateTimePicker` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDDialogButtonOptions` | `TDialogAction` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDDialogButtonStyle` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDDialogImagePosition` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDDivider` | `TDivider` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDDrawer` | `TDrawer` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDDrawerItem` | `TDrawerItem` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDDrawerItemClickCallback` | `TDrawerItemClickCallback` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDDrawerPlacement` | `TDrawerPlacement` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDDrawerWidget` | `TDrawer` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDDropdownItem` | `TDropdownMenuItem` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDDropdownItemBuilder` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDDropdownItemContentBuilder` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDDropdownItemController` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDDropdownItemOption` | `TDropdownMenuOption` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDDropdownItemOptionsCallback` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDDropdownMenu` | `TDropdownMenu` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDDropdownMenuDirection` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDEmpty` | `TEmpty` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDEmptyType` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDExtraThemeData` | `TExtraThemeData` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDFab` | `TFab` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDFabShape` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDFabSize` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDFabTheme` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDFontFamilies` | `TFontFamilies` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDFontLoader` | `TFontLoader` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDFontLoaderWidget` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDFonts` | `TFonts` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDFooter` | `TFooter` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDFooterType` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDForm` | `TForm` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDFormItem` | `TFormItem` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDFormItemType` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDFormValidation` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDFractionPagination` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDIconLabel` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDIcons` | `TIcons` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDImage` | `TImage` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDImageDialog` | `TImageViewer` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDImageType` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDImageViewer` | `TImageViewer` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDImageViewerWidget` | `TImageViewer` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDIndexes` | `TIndexes` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDIndexesAnchor` | `TIndexesAnchor` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDIndexesList` | `TIndexesList` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDInput` | `TInput` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDInputDialog` | `TDialog` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDInputSize` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDInputSpacer` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDInputType` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDInputView` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDItemWidget` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDLabelWidget` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDLink` | `TLink` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDLinkConfiguration` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDLinkSize` | `TLinkSize` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDLinkState` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDLinkStyle` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDLinkType` | `TLinkColorPreset` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDLoading` | `TLoading` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDLoadingController` | `TLoadingController` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDLoadingIcon` | `TLoadingIcon` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDLoadingSize` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDMap` | `TMap` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDMessage` | `TMessage` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDMultiCascader` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDMultiLinkedPicker` | `TPicker` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDMultiPicker` | `TPicker` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDNavBar` | `TNavBar` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDNavBarItem` | `TNavBarItem` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDNavBarItemBorder` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDNoOverlayShape` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDNoneIndicator` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDNoticeBar` | `TNoticeBar` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDNoticeBarStyle` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDNoticeBarTheme` | `TNoticeBarStatus` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDNoticeBarType` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDPageTransformer` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDPicker` | `TPicker` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDPopover` | `TPopover` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDPopoverPlacement` | `TPopoverPlacement` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDPopoverTheme` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDPopoverWidget` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDPopupBasePanel` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDPopupBottomConfirmPanel` | `TPickerPopup` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDPopupBottomDisplayPanel` | `TPopupOptions` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDPopupCenterPanel` | `TPopupOptions` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDProgress` | `TProgress` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDProgressLabelPosition` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDProgressStatus` | `TProgressStatus` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDProgressType` | `TProgressVariant` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDRadio` | `TRadio` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDRadioGroup` | `TRadioGroup` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDRadioGroupState` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDRadioState` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDRadioStyle` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDRadius` | `TRadius` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDRangeSlider` | `TRangeSlider` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDRate` | `TRate` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDRefreshHeader` | `TPullDownRefresh` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDResourceDelegate` | `TResourceDelegate` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDResourceManager` | `TResourceManager` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDResult` | `TResult` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDResultTheme` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDRoundRangeSliderThumbShape` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDRoundRangeSliderTickMarkShape` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDRoundSliderThumbShape` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDRoundSliderTickMarkShape` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDRoundedRectRangeSliderTrackShape` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDRoundedRectSliderTrackShape` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDSearchAlignment` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDSearchBar` | `TSearchBar` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDSearchBarCallBack` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDSearchBarClearEvent` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDSearchBarEvent` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDSearchStyle` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDSelectOption` | `TTreeSelectOption` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDSelectTag` | `TSelectTag` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDSideBar` | `TSideBar` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDSideBarController` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDSideBarItem` | `TSideBarItem` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDSideBarStyle` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDSkeleton` | `TSkeleton` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDSkeletonAnimation` | `TSkeletonAnimation` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDSkeletonRowCol` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDSkeletonRowColObj` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDSkeletonRowColObjStyle` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDSkeletonRowColStyle` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDSkeletonTheme` | `TSkeletonVariant` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDSlidePopupRoute` | `TPopup` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDSlider` | `TSlider` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDSliderState` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDSliderThemeData` | `TSliderThemeData` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDSpacers` | `TSpacers` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDStepper` | `TStepper` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDStepperController` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDStepperEventType` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDStepperIconButton` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDStepperIconType` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDStepperOverlimitFunction` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDStepperOverlimitType` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDStepperSize` | `TStepperSize` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDStepperTheme` | `TStepperVariant` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDSteps` | `TSteps` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDStepsDirection` | `TStepsDirection` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDStepsItemData` | `TStepsItemData` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDStepsStatus` | `TStepsStatus` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDSwipeCell` | `TSwipeCell` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDSwipeCellAction` | `TSwipeCellAction` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDSwipeCellInherited` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDSwipeCellPanel` | `TSwipeCellPanel` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDSwipeDirection` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDSwiperArrowPagination` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDSwiperDotsPagination` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDSwiperPagination` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDSwitch` | `TSwitch` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDSwitchSize` | `TSwitchSize` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDSwitchState` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDSwitchType` | `TSwitchVariant` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDTDResourceBuilder` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDTab` | `TTab` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDTabBar` | `TTabsBar` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDTabBarIndicator` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDTabBarOutlineType` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDTabBarVerticalIndicator` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDTabBarView` | `TTabsBarView` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDTabOutlineType` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDTabSize` | `TTabsBarSize` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDTable` | `TTable` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDTableCol` | `TTableColumn` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDTableColAlign` | `TTableColumnAlign` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDTableColFixed` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDTableEmpty` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDTableState` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDTag` | `TTag` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDTagShape` | `TTagShape` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDTagSize` | `TTagSize` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDTagStyle` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDTagTheme` | `TTagColorPreset` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDTapEvent` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDTapFunction` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDText` | `TText` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDTextConfiguration` | `TTextThemeData` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDTextLabel` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDTextPaddingConfig` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDTextSpan` | `TTextSpan` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDTextarea` | `TTextarea` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDTextareaLayout` | `TTextareaLayout` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDTheme` | `TThemeData` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDThemeData` | `TThemeData` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDTimeCounter` | `TTimeCounter` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDTimeCounterController` | `TTimeCounterController` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDTimeCounterDirection` | `TTimeCounterDirection` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDTimeCounterSize` | `TTimeCounterSize` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDTimeCounterStatus` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDTimeCounterStyle` | `TTimeCounterVariant` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDTimeCounterTheme` | `TTimeCounterVariant` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDToast` | `TToast` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDToastConfig` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDTreeSelect` | `TTreeSelect` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDTreeSelectChangeEvent` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDTreeSelectStyle` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDUpload` | `TUpload` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDUploadBoxType` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDUploadClickEvent` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDUploadErrorEvent` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDUploadFile` | `TUploadFile` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDUploadFileStatus` | `TUploadFileStatus` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDUploadMediaType` | `TUploadMediaType` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDUploadType` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDUploadValidatorError` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDUploadValidatorEvent` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDUploadValueChangedEvent` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDate` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TGIconHeaderWidget` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TGIconHeaderWidgetState` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TapCallback` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TextAlignment` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TrapezoidPath` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `horizontalChild` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `slideTransitionFromToAlignment` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | diff --git a/tdesign-component/README.md b/tdesign-component/README.md index 589ca6020d..480aff035b 100644 --- a/tdesign-component/README.md +++ b/tdesign-component/README.md @@ -45,6 +45,8 @@ Download link: [tdesign-flutter-example.apk](https://tdesign.gtimg.com/flutter/t ## 🚀 Quick Start +Upgrading from 0.2.7? Read the [1.0 migration guide (Chinese)](./MIGRATION_1_0.md) before changing the dependency. Version 1.0 contains breaking API and behavior changes. + Requires Flutter ≥ 3.32.0 and Dart ≥ 3.8.0. ### Add Dependency diff --git a/tdesign-component/README_zh_CN.md b/tdesign-component/README_zh_CN.md index c8772e9acc..aa165c3c21 100644 --- a/tdesign-component/README_zh_CN.md +++ b/tdesign-component/README_zh_CN.md @@ -45,6 +45,8 @@ ## 🚀 快速开始 +从 0.2.7 升级时,请先阅读 [1.0 迁移指南](./MIGRATION_1_0.md)。1.0 包含不兼容的接口与默认行为变化,不能只替换组件前缀。 + 要求 Flutter ≥ 3.32.0、Dart ≥ 3.8.0。 ### 添加依赖 diff --git a/tdesign-component/example/ios/Podfile.lock b/tdesign-component/example/ios/Podfile.lock index 8571155ba1..5f08cc1101 100644 --- a/tdesign-component/example/ios/Podfile.lock +++ b/tdesign-component/example/ios/Podfile.lock @@ -2,28 +2,40 @@ PODS: - Flutter (1.0.0) - image_picker_ios (0.0.1): - Flutter + - integration_test (0.0.1): + - Flutter - shared_preferences_foundation (0.0.1): - Flutter - FlutterMacOS + - url_launcher_ios (0.0.1): + - Flutter DEPENDENCIES: - Flutter (from `Flutter`) - image_picker_ios (from `.symlinks/plugins/image_picker_ios/ios`) + - integration_test (from `.symlinks/plugins/integration_test/ios`) - shared_preferences_foundation (from `.symlinks/plugins/shared_preferences_foundation/darwin`) + - url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`) EXTERNAL SOURCES: Flutter: :path: Flutter image_picker_ios: :path: ".symlinks/plugins/image_picker_ios/ios" + integration_test: + :path: ".symlinks/plugins/integration_test/ios" shared_preferences_foundation: :path: ".symlinks/plugins/shared_preferences_foundation/darwin" + url_launcher_ios: + :path: ".symlinks/plugins/url_launcher_ios/ios" SPEC CHECKSUMS: Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7 image_picker_ios: 7fe1ff8e34c1790d6fff70a32484959f563a928a + integration_test: 4a889634ef21a45d28d50d622cf412dc6d9f586e shared_preferences_foundation: 9e1978ff2562383bd5676f64ec4e9aa8fa06a6f7 + url_launcher_ios: 694010445543906933d732453a59da0a173ae33d -PODFILE CHECKSUM: cf0c950f7e9a456b4e325f5b8fc0f98906a3705a +PODFILE CHECKSUM: 6bd7575e6f1dee8cfcd06767df9ce037d26b5998 COCOAPODS: 1.16.2 diff --git a/tdesign-component/lib/src/components/badge/t_badge.dart b/tdesign-component/lib/src/components/badge/t_badge.dart index 5835b34fe1..192a1e6e4f 100644 --- a/tdesign-component/lib/src/components/badge/t_badge.dart +++ b/tdesign-component/lib/src/components/badge/t_badge.dart @@ -2,10 +2,6 @@ import 'dart:math' as math; import 'package:flutter/material.dart'; -import '../../theme/t_colors.dart'; -import '../../theme/t_fonts.dart'; -import '../../theme/t_theme.dart'; -import '../text/t_text.dart'; import '../text/t_text_styled.dart'; import 't_badge_fallback.dart'; import 't_badge_label.dart'; diff --git a/tdesign-component/lib/src/components/button/t_button.dart b/tdesign-component/lib/src/components/button/t_button.dart index d9030c535c..33ab4d3724 100644 --- a/tdesign-component/lib/src/components/button/t_button.dart +++ b/tdesign-component/lib/src/components/button/t_button.dart @@ -4,7 +4,6 @@ import 'package:flutter/material.dart'; import 'package:flutter/rendering.dart'; import '../../theme/t_internal_material.dart'; -import '../../theme/t_radius.dart'; import '../../theme/t_theme.dart'; import '../icon/t_icon.dart'; import '../loading/t_loading_theme_data.dart'; diff --git a/tdesign-component/lib/src/components/button/t_button_resolve.dart b/tdesign-component/lib/src/components/button/t_button_resolve.dart index 374752c5e5..66b88277a5 100644 --- a/tdesign-component/lib/src/components/button/t_button_resolve.dart +++ b/tdesign-component/lib/src/components/button/t_button_resolve.dart @@ -387,7 +387,7 @@ class TButtonResolve { case TButtonColorPreset.light: fg = tTheme.brandColor; case TButtonColorPreset.defaultTheme: - fg = tTheme.fontWhite1; + fg = tTheme.textColorAnti; } return ButtonStyle( diff --git a/tdesign-component/lib/src/components/calendar/t_calendar_body.dart b/tdesign-component/lib/src/components/calendar/t_calendar_body.dart index e0da462659..ccef7cbff0 100644 --- a/tdesign-component/lib/src/components/calendar/t_calendar_body.dart +++ b/tdesign-component/lib/src/components/calendar/t_calendar_body.dart @@ -3,7 +3,6 @@ import 'package:flutter/material.dart'; import '../../theme/t_internal_material.dart'; import '../../util/context_extension.dart'; import '../../util/iterable_ext.dart'; -import '../text/t_text.dart'; import '../text/t_text_styled.dart'; import 't_calendar_cell.dart'; import 't_calendar_theme_data.dart'; diff --git a/tdesign-component/lib/src/components/calendar/t_calendar_header.dart b/tdesign-component/lib/src/components/calendar/t_calendar_header.dart index 36ee626bf1..02b025c2e8 100644 --- a/tdesign-component/lib/src/components/calendar/t_calendar_header.dart +++ b/tdesign-component/lib/src/components/calendar/t_calendar_header.dart @@ -1,6 +1,5 @@ import 'package:flutter/material.dart'; -import '../text/t_text.dart'; import '../text/t_text_styled.dart'; // --------------------------------------------------------------------------- diff --git a/tdesign-component/lib/src/components/date_time_picker/t_date_time_picker_model.dart b/tdesign-component/lib/src/components/date_time_picker/t_date_time_picker_model.dart index f629976fcc..d716d3f414 100644 --- a/tdesign-component/lib/src/components/date_time_picker/t_date_time_picker_model.dart +++ b/tdesign-component/lib/src/components/date_time_picker/t_date_time_picker_model.dart @@ -1,7 +1,6 @@ import 'package:flutter/foundation.dart'; import 't_date_time_picker_enums.dart'; -import 't_date_time_picker_internal.dart'; // ============================================================================= // 模式 diff --git a/tdesign-component/lib/src/components/dialog/t_confirm_dialog.dart b/tdesign-component/lib/src/components/dialog/t_confirm_dialog.dart index f60699ffd5..f0241e77d6 100644 --- a/tdesign-component/lib/src/components/dialog/t_confirm_dialog.dart +++ b/tdesign-component/lib/src/components/dialog/t_confirm_dialog.dart @@ -3,7 +3,6 @@ import 'package:flutter/material.dart'; import '../../theme/t_colors.dart'; import '../../theme/t_theme.dart'; import '../../util/context_extension.dart'; -import '../button/t_button_types.dart'; import 't_dialog.dart'; /// 单操作确认弹窗,是 [TDialog] 的便捷封装。 diff --git a/tdesign-component/lib/src/components/indexes/t_indexes_list.dart b/tdesign-component/lib/src/components/indexes/t_indexes_list.dart index 20b726cdda..d30d3b00c7 100644 --- a/tdesign-component/lib/src/components/indexes/t_indexes_list.dart +++ b/tdesign-component/lib/src/components/indexes/t_indexes_list.dart @@ -3,7 +3,6 @@ import 'dart:math'; import 'package:flutter/material.dart'; import 'package:flutter/rendering.dart'; -import 'package:flutter/scheduler.dart'; import '../../theme/basic.dart' show Font; import '../../theme/t_colors.dart'; @@ -11,10 +10,7 @@ import '../../theme/t_fonts.dart'; import '../../theme/t_internal_material.dart'; import '../../theme/t_spacers.dart'; import '../../theme/t_theme.dart'; -import '../../util/iterable_ext.dart'; import '../text/t_text_styled.dart'; -import 'sticky_header/sticky_header_widget.dart'; -import 't_indexes_anchor.dart'; import 't_indexes_theme_data.dart'; /// 索引 diff --git a/tdesign-component/lib/src/components/link/t_link_resolve.dart b/tdesign-component/lib/src/components/link/t_link_resolve.dart index e16342b249..9d7a79ffdc 100644 --- a/tdesign-component/lib/src/components/link/t_link_resolve.dart +++ b/tdesign-component/lib/src/components/link/t_link_resolve.dart @@ -3,7 +3,6 @@ import 'package:flutter/material.dart'; import '../../theme/basic.dart'; import '../../theme/t_colors.dart'; import '../../theme/t_fonts.dart'; -import '../../theme/t_spacers.dart'; import '../../theme/t_theme.dart'; import 't_link_theme_data.dart'; import 't_link_types.dart'; diff --git a/tdesign-component/lib/src/components/loading/t_activity_indicator.dart b/tdesign-component/lib/src/components/loading/t_activity_indicator.dart index 4ab3c2e15c..554bc05a5e 100644 --- a/tdesign-component/lib/src/components/loading/t_activity_indicator.dart +++ b/tdesign-component/lib/src/components/loading/t_activity_indicator.dart @@ -4,7 +4,6 @@ import 'package:flutter/widgets.dart'; import '../../theme/t_colors.dart'; import '../../theme/t_theme.dart'; -import '../../util/context_extension.dart'; const double _kDefaultIndicatorRadius = 10.0; diff --git a/tdesign-component/lib/src/components/loading/t_circle_indicator.dart b/tdesign-component/lib/src/components/loading/t_circle_indicator.dart index 8513b5b4fe..1725fba79d 100644 --- a/tdesign-component/lib/src/components/loading/t_circle_indicator.dart +++ b/tdesign-component/lib/src/components/loading/t_circle_indicator.dart @@ -10,7 +10,6 @@ import 'dart:ui' as ui; import 'package:flutter/material.dart'; import '../../theme/t_colors.dart'; import '../../theme/t_theme.dart'; -import '../../util/context_extension.dart'; /// 环形加载指示器。 class TCircleIndicator extends StatefulWidget { diff --git a/tdesign-component/lib/src/components/loading/t_loading.dart b/tdesign-component/lib/src/components/loading/t_loading.dart index 8a7655e9b2..1c1a69ee5a 100644 --- a/tdesign-component/lib/src/components/loading/t_loading.dart +++ b/tdesign-component/lib/src/components/loading/t_loading.dart @@ -10,7 +10,6 @@ import '../../theme/basic.dart'; import '../../theme/t_colors.dart'; import '../../theme/t_fonts.dart'; import '../../theme/t_theme.dart'; -import '../../util/context_extension.dart'; import '../text/t_text_styled.dart'; import 't_activity_indicator.dart'; import 't_circle_indicator.dart'; diff --git a/tdesign-component/lib/src/components/popup/t_popup.dart b/tdesign-component/lib/src/components/popup/t_popup.dart index 309a31a792..3a343f54aa 100644 --- a/tdesign-component/lib/src/components/popup/t_popup.dart +++ b/tdesign-component/lib/src/components/popup/t_popup.dart @@ -18,7 +18,6 @@ import '../../theme/t_fonts.dart'; import '../../theme/t_radius.dart'; import '../../theme/t_spacers.dart'; import '../../theme/t_theme.dart'; -import '../../util/context_extension.dart'; import '../text/t_text_style_scope.dart'; import 't_popup_theme_data.dart'; diff --git a/tdesign-component/lib/src/components/refresh/t_pull_down_refresh_texts.dart b/tdesign-component/lib/src/components/refresh/t_pull_down_refresh_texts.dart index 79b58fd0d6..cfaa779c54 100644 --- a/tdesign-component/lib/src/components/refresh/t_pull_down_refresh_texts.dart +++ b/tdesign-component/lib/src/components/refresh/t_pull_down_refresh_texts.dart @@ -1,4 +1,3 @@ -import 'package:flutter/widgets.dart'; /// 下拉刷新四态提示语。 /// diff --git a/tdesign-component/lib/src/components/swiper/t_swiper_theme_data.dart b/tdesign-component/lib/src/components/swiper/t_swiper_theme_data.dart index 1e588db820..bab56b382f 100644 --- a/tdesign-component/lib/src/components/swiper/t_swiper_theme_data.dart +++ b/tdesign-component/lib/src/components/swiper/t_swiper_theme_data.dart @@ -1,6 +1,5 @@ import 'package:flutter/material.dart'; -import 't_swiper_types.dart'; const _defaultDotSize = 6.0; const _defaultActiveDotExtent = 20.0; diff --git a/tdesign-component/lib/src/components/time_counter/t_time_counter.dart b/tdesign-component/lib/src/components/time_counter/t_time_counter.dart index 35b43e8e85..d57e290922 100644 --- a/tdesign-component/lib/src/components/time_counter/t_time_counter.dart +++ b/tdesign-component/lib/src/components/time_counter/t_time_counter.dart @@ -5,13 +5,11 @@ import 'package:flutter/scheduler.dart'; import '../../theme/basic.dart' show Font, FontFamily; import '../../theme/t_colors.dart'; -import '../../theme/t_font_family.dart'; import '../../theme/t_fonts.dart'; import '../../theme/t_radius.dart'; import '../../theme/t_theme.dart'; import '../../util/context_extension.dart'; import '../../util/list_ext.dart'; -import '../text/t_text.dart'; import '../text/t_text_styled.dart'; import 't_time_counter_theme_data.dart'; import 't_time_counter_types.dart'; diff --git a/tdesign-component/lib/src/util/auto_size.dart b/tdesign-component/lib/src/util/auto_size.dart index 61b57c0276..397ff2407f 100644 --- a/tdesign-component/lib/src/util/auto_size.dart +++ b/tdesign-component/lib/src/util/auto_size.dart @@ -6,7 +6,6 @@ import 'dart:ui'; -import 'package:flutter/widgets.dart'; /// 宽高屏幕自动适配,使用举例:100.as extension TIntScale on int { diff --git a/tdesign-component/lib/src/util/string_util.dart b/tdesign-component/lib/src/util/string_util.dart index 433a408bfc..39b7ad389d 100644 --- a/tdesign-component/lib/src/util/string_util.dart +++ b/tdesign-component/lib/src/util/string_util.dart @@ -1,6 +1,5 @@ import 'package:flutter/material.dart'; -import 'log.dart'; Color? toColor(String colorStr, {double alpha = 1}) { if (colorStr.trim().toLowerCase() == 'transparent') { diff --git a/tdesign-component/pubspec.yaml b/tdesign-component/pubspec.yaml index 15e8e37548..87b8daaf48 100644 --- a/tdesign-component/pubspec.yaml +++ b/tdesign-component/pubspec.yaml @@ -22,8 +22,7 @@ dependencies: # 滑动单元格组件 # 相册选择组件 - image_picker: 1.1.2 - image_picker_android: 0.8.12+23 + image_picker: ^1.1.2 dev_dependencies: analyzer: ^7.4.0 diff --git a/tdesign-component/test/components/avatar/t_avatar_test.dart b/tdesign-component/test/components/avatar/t_avatar_test.dart index 3eab423610..3f4eb25d33 100644 --- a/tdesign-component/test/components/avatar/t_avatar_test.dart +++ b/tdesign-component/test/components/avatar/t_avatar_test.dart @@ -6,7 +6,10 @@ import 'dart:typed_data'; import 'package:flutter_test/flutter_test.dart'; import 'package:tdesign_flutter/tdesign_flutter.dart'; +import '../../support/token_consumption_evidence.dart'; + void main() { + avatarTokenConsumptionTests(); Widget app( Widget child, { TAvatarThemeData? avatarTheme, @@ -902,3 +905,215 @@ void main() { }); }); } + +void avatarTokenConsumptionTests() { + for (final brightness in Brightness.values) { + for (final custom in [false, true]) { + testWidgets( + 'token consumption avatar ${brightness.name} custom=$custom', + (tester) async { + final token = evidenceTokens(brightness, custom: custom); + for (final entry in const [ + (TAvatarSize.large, 'Large', 64.0, 32.0, 20.0, 3.0), + (TAvatarSize.medium, 'Medium', 48.0, 24.0, 16.0, 2.0), + (TAvatarSize.small, 'Small', 40.0, 20.0, 14.0, 1.0), + ]) { + final scenario = + '${brightness.name}/custom=$custom/${entry.$1.name}'; + await tester.pumpWidget( + evidenceHost( + TAvatar(size: entry.$1), + brightness: brightness, + token: token, + ), + ); + await tester.pumpAndSettle(); + tokenObservation( + 'avatar${entry.$2}Width', + scenario: scenario, + actual: tester.getSize(find.byType(TAvatar)).width, + expected: entry.$3, + ); + final icon = tester.widget(find.byIcon(TIcons.user)); + tokenObservation( + 'avatarIcon${entry.$2}FontSize', + scenario: scenario, + actual: icon.size, + expected: custom && entry.$1 == TAvatarSize.small + ? token.fontSizeXl + : entry.$4, + enforce: !custom || entry.$1 != TAvatarSize.small, + ); + tokenObservation( + 'avatarIcon${entry.$2}FontSize', + scenario: 'contract/$scenario/icon-preset', + actual: icon.size, + expected: entry.$4, + ); + tokenObservation( + 'avatarContentColor', + scenario: scenario, + actual: icon.color, + expected: token.brandColor, + ); + tokenObservation( + 'avatarBgColor', + scenario: scenario, + actual: tester + .widget( + find + .descendant( + of: find.byType(TAvatar), + matching: find.byType(ColoredBox), + ) + .first, + ) + .color, + expected: token.brandColorLightActive, + ); + final clip = tester.widget( + find + .descendant( + of: find.byType(TAvatar), + matching: find.byType(ClipRRect), + ) + .first, + ); + tokenObservation( + 'avatarCircleBorderRadius', + scenario: scenario, + actual: clip.borderRadius.resolve(TextDirection.ltr).topLeft.x, + expected: token.radiusCircle, + ); + await tester.pumpWidget( + evidenceHost( + TAvatar( + size: entry.$1, + shape: TAvatarShape.square, + child: const Text('token avatar'), + ), + brightness: brightness, + token: token, + ), + ); + await tester.pumpAndSettle(); + tokenObservation( + 'avatarText${entry.$2}FontSize', + scenario: scenario, + actual: DefaultTextStyle.of( + tester.element(find.text('token avatar')), + ).style.fontSize, + expected: custom + ? switch (entry.$1) { + TAvatarSize.large => token.fontSizeXl, + TAvatarSize.medium => token.fontSizeM, + TAvatarSize.small => token.fontSizeBase, + } + : entry.$5, + enforce: !custom, + ); + tokenObservation( + 'avatarText${entry.$2}FontSize', + scenario: 'contract/$scenario/text-preset', + actual: DefaultTextStyle.of( + tester.element(find.text('token avatar')), + ).style.fontSize, + expected: entry.$5, + ); + final square = tester.widget( + find + .descendant( + of: find.byType(TAvatar), + matching: find.byType(ClipRRect), + ) + .first, + ); + tokenObservation( + 'avatarRoundBorderRadius', + scenario: scenario, + actual: square.borderRadius.resolve(TextDirection.ltr).topLeft.x, + expected: token.radiusDefault, + ); + await tester.pumpWidget( + evidenceHost( + TAvatarGroup( + children: [ + TAvatar(size: entry.$1), + TAvatar(size: entry.$1), + ], + ), + brightness: brightness, + token: token, + ), + ); + await tester.pumpAndSettle(); + final boxes = tester + .widgetList( + find.descendant( + of: find.byType(TAvatarGroup), + matching: find.byType(DecoratedBox), + ), + ) + .map((box) => box.decoration) + .whereType() + .where((box) => box.border != null) + .toList(); + expect(boxes, hasLength(2)); + for (final box in boxes) { + tokenObservation( + 'avatarBorderColor', + scenario: 'contract/$scenario/group-border', + actual: box.border!.top.color, + expected: token.bgColorContainer, + ); + tokenObservation( + 'avatarBorderWidth${entry.$2}', + scenario: scenario, + actual: box.border!.top.width, + expected: entry.$6, + ); + tokenObservation( + 'avatarBorderColor', + scenario: scenario, + actual: box.border!.top.color, + expected: Colors.white, + enforce: brightness == Brightness.light && !custom, + ); + } + } + await tester.pumpWidget( + evidenceHost( + const TAvatar(), + brightness: brightness, + token: token, + extensions: const [ + TAvatarThemeData( + backgroundColor: Colors.lime, + foregroundColor: Colors.purple, + ), + ], + ), + ); + await tester.pumpAndSettle(); + expect( + tester.widget(find.byIcon(TIcons.user)).color, + Colors.purple, + ); + expect( + tester + .widget( + find + .descendant( + of: find.byType(TAvatar), + matching: find.byType(ColoredBox), + ) + .first, + ) + .color, + Colors.lime, + ); + }, + ); + } + } +} diff --git a/tdesign-component/test/components/button/t_button_test.dart b/tdesign-component/test/components/button/t_button_test.dart index 872aef0bae..8beecc0a28 100644 --- a/tdesign-component/test/components/button/t_button_test.dart +++ b/tdesign-component/test/components/button/t_button_test.dart @@ -3,10 +3,14 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:tdesign_flutter/src/components/loading/t_circle_indicator.dart'; import 'package:tdesign_flutter/tdesign_flutter.dart'; +import '../../support/token_consumption_evidence.dart'; + /// TButton Widget 测试 /// /// 覆盖所有公开 API 和关键行为路径,目标覆盖率 95%+。 void main() { + buttonTokenConsumptionTests(); + ghostSemanticTokenTests(); gradientGeometryTests(); partialStateOwnershipTests(); nativeLayerThemeTests(); @@ -3052,3 +3056,446 @@ void gradientGeometryTests() { }); } } + +void buttonTokenConsumptionTests() { + for (final brightness in Brightness.values) { + for (final custom in [false, true]) { + for (final variant in TButtonVariant.values) { + testWidgets( + 'token consumption button ${brightness.name} custom=$custom ${variant.name}', + (tester) async { + final token = evidenceTokens(brightness, custom: custom); + final dark = brightness == Brightness.dark; + for (final preset in TButtonColorPreset.values) { + final prefix = switch (preset) { + TButtonColorPreset.defaultTheme => 'Default', + TButtonColorPreset.primary => 'Primary', + TButtonColorPreset.danger => 'Danger', + TButtonColorPreset.light => 'Light', + }; + final normal = switch (preset) { + TButtonColorPreset.defaultTheme => token.bgColorComponent, + TButtonColorPreset.primary => token.brandColor, + TButtonColorPreset.danger => token.errorColor, + TButtonColorPreset.light => token.brandColorLight, + }; + final active = switch (preset) { + TButtonColorPreset.defaultTheme => token.bgColorComponentActive, + TButtonColorPreset.primary => token.brandColorActive, + TButtonColorPreset.danger => token.errorColorActive, + TButtonColorPreset.light => token.brandColorLightActive, + }; + final disabled = switch (preset) { + TButtonColorPreset.defaultTheme => + token.bgColorComponentDisabled, + TButtonColorPreset.primary => token.brandColorDisabled, + TButtonColorPreset.danger => token.errorColorDisabled, + TButtonColorPreset.light => token.brandColorLight, + }; + final ink = switch (preset) { + TButtonColorPreset.defaultTheme => token.textColorPrimary, + TButtonColorPreset.primary || + TButtonColorPreset.light => token.brandColor, + TButtonColorPreset.danger => token.errorColor, + }; + final disabledInk = switch (preset) { + TButtonColorPreset.defaultTheme => token.componentBorder, + TButtonColorPreset.primary || + TButtonColorPreset.light => token.brandColorDisabled, + TButtonColorPreset.danger => token.errorColorDisabled, + }; + for (final state in ['idle', 'pressed', 'disabled']) { + await tester.pumpWidget( + evidenceHost( + TButton( + key: ValueKey('$preset-$state'), + colorPreset: preset, + variant: variant, + onPressed: state == 'disabled' ? null : () {}, + child: const Text('token button'), + ), + brightness: brightness, + token: token, + ), + ); + await tester.pumpAndSettle(); + final gesture = state == 'pressed' + ? await tester.startGesture( + tester.getCenter(find.byType(TButton)), + ) + : null; + await tester.pump(const Duration(milliseconds: 300)); + await tester.pump(const Duration(milliseconds: 300)); + final material = tester.widget( + find + .descendant( + of: find.byType(TButton), + matching: find.byType(Material), + ) + .first, + ); + final foreground = DefaultTextStyle.of( + tester.element(find.text('token button')), + ).style.color; + final scenario = + '${brightness.name}/custom=$custom/${variant.name}/${preset.name}/$state'; + void check( + String name, + Object? value, + Object? expected, { + bool enforce = true, + }) => tokenObservation( + name, + scenario: scenario, + actual: value, + expected: expected, + enforce: enforce, + ); + final pressed = state == 'pressed'; + final off = state == 'disabled'; + switch (variant) { + case TButtonVariant.fill: + check( + 'button${prefix}${off + ? 'DisabledBg' + : pressed + ? 'ActiveBgColor' + : 'BgColor'}', + material.color, + off + ? (preset == TButtonColorPreset.danger + ? token.errorColor3 + : disabled) + : pressed + ? active + : normal, + enforce: + !(off && preset == TButtonColorPreset.danger) && + (!pressed || + (preset != TButtonColorPreset.defaultTheme && + preset != TButtonColorPreset.light)), + ); + final expected = off + ? switch (preset) { + TButtonColorPreset.defaultTheme => + token.textColorDisabled, + TButtonColorPreset.light => + token.brandColorDisabled, + // Explicitly adjudicated in Spec048, not the old CSS alias. + TButtonColorPreset.primary => + dark ? token.fontWhite4 : token.textColorAnti, + TButtonColorPreset.danger => token.fontWhite1, + } + : (preset == TButtonColorPreset.defaultTheme || + preset == TButtonColorPreset.light) + ? ink + : token.textColorAnti; + check( + 'button${prefix}${off ? 'DisabledColor' : 'Color'}', + foreground, + expected, + enforce: !off || preset != TButtonColorPreset.danger, + ); + case TButtonVariant.outline: + if (pressed) { + check( + 'button${prefix}OutlineActiveBgColor', + material.color, + preset == TButtonColorPreset.light + ? token.brandColorLightActive + : token.bgColorContainerActive, + ); + } else if (!off && preset == TButtonColorPreset.light) { + check( + 'buttonLightOutlineBgColor', + material.color, + token.brandColorLight, + ); + } + final border = (material.shape! as OutlinedBorder).side; + final expectedBorder = off + ? (preset == TButtonColorPreset.danger + ? token.errorColor3 + : disabledInk) + : preset == TButtonColorPreset.defaultTheme + ? token.componentBorder + : pressed + ? (preset == TButtonColorPreset.danger + ? token.errorColorActive + : token.brandColorActive) + : ink; + check( + 'button${prefix}Outline${pressed + ? 'ActiveBorderColor' + : off + ? 'DisabledColor' + : 'BorderColor'}', + border.color, + expectedBorder, + enforce: !(off && preset == TButtonColorPreset.danger), + ); + check( + 'button${prefix}Outline${off ? 'DisabledColor' : 'Color'}', + foreground, + off + ? (preset == TButtonColorPreset.danger + ? token.errorColor3 + : disabledInk) + : pressed && preset != TButtonColorPreset.defaultTheme + ? expectedBorder + : ink, + enforce: !(off && preset == TButtonColorPreset.danger), + ); + check('buttonBorderWidth', border.width, 1.0); + case TButtonVariant.text: + if (pressed) { + check( + 'button${prefix}TextActiveBgColor', + material.color, + token.bgColorContainerActive, + ); + } + if (preset != TButtonColorPreset.defaultTheme) { + if (!off) { + check('button${prefix}TextColor', foreground, ink); + } + if (off && preset == TButtonColorPreset.primary) { + check( + 'buttonPrimaryTextDisabledColor', + foreground, + token.brandColorDisabled, + ); + } + if (off && preset == TButtonColorPreset.danger) { + // Report the frozen CSS target, without blessing the current discrepancy. + check( + 'buttonDangerTextDisabledColor', + foreground, + token.fontWhite1, + enforce: false, + ); + } + } + case TButtonVariant.ghost: + if (preset == TButtonColorPreset.light) { + break; + } + final name = preset == TButtonColorPreset.defaultTheme + ? 'buttonGhost' + : 'buttonGhost$prefix'; + final expected = off + ? token.fontWhite4 + : pressed + ? (preset == TButtonColorPreset.defaultTheme + ? token.fontWhite2 + : preset == TButtonColorPreset.primary + ? token.brandColorActive + : token.errorColorActive) + : preset == TButtonColorPreset.defaultTheme + ? token.textColorAnti + : ink; + check( + off + ? 'buttonGhostDisabledColor' + : '$name${pressed ? 'HoverColor' : 'Color'}', + foreground, + expected, + enforce: !pressed, + ); + if (!pressed && !off) { + check( + '${name}BorderColor', + (material.shape! as OutlinedBorder).side.color, + expected, + ); + } + } + await gesture?.up(); + await tester.pumpAndSettle(); + } + } + }, + ); + } + testWidgets( + 'token consumption button geometry ${brightness.name} custom=$custom', + (tester) async { + final token = evidenceTokens(brightness, custom: custom); + for (final entry in const [ + (TButtonSize.large, 'Large', 16.0, 24.0), + (TButtonSize.medium, 'Medium', 16.0, 24.0), + (TButtonSize.small, 'Small', 14.0, 22.0), + (TButtonSize.extraSmall, 'ExtraSmall', 14.0, 22.0), + ]) { + await tester.pumpWidget( + evidenceHost( + TButton( + size: entry.$1, + icon: const Icon(Icons.add), + onPressed: () {}, + child: const Text('geometry'), + ), + brightness: brightness, + token: token, + ), + ); + await tester.pumpAndSettle(); + final material = tester.widget( + find + .descendant( + of: find.byType(TButton), + matching: find.byType(Material), + ) + .first, + ); + final shape = material.shape! as RoundedRectangleBorder; + final text = DefaultTextStyle.of( + tester.element(find.text('geometry')), + ).style; + final scenario = + '${brightness.name}/custom=$custom/${entry.$1.name}'; + tokenObservation( + 'buttonBorderRadius', + scenario: scenario, + actual: shape.borderRadius.resolve(TextDirection.ltr).topLeft.x, + expected: token.radiusDefault, + ); + tokenObservation( + 'button${entry.$2}Font', + scenario: scenario, + actual: + '${text.fontSize}/${text.height! * text.fontSize!}/${text.fontWeight}', + expected: custom + ? (entry.$1 == TButtonSize.large || + entry.$1 == TButtonSize.medium + ? '19.0/27.0/${FontWeight.w700}' + : '17.0/25.0/${FontWeight.w700}') + : '${entry.$3}/${entry.$4}/${FontWeight.w600}', + ); + final iconRight = tester.getBottomRight(find.byIcon(Icons.add)).dx; + final textLeft = tester.getTopLeft(find.text('geometry')).dx; + tokenObservation( + 'buttonIconSpacer', + scenario: scenario, + actual: textLeft - iconRight, + expected: token.spacer, + enforce: false, + ); + } + await tester.pumpWidget( + evidenceHost( + TButton( + style: const ButtonStyle( + backgroundColor: WidgetStatePropertyAll(Colors.lime), + foregroundColor: WidgetStatePropertyAll(Colors.purple), + shape: WidgetStatePropertyAll( + RoundedRectangleBorder( + borderRadius: BorderRadius.all(Radius.circular(17)), + ), + ), + ), + onPressed: () {}, + child: const Text('instance'), + ), + brightness: brightness, + token: token, + ), + ); + await tester.pumpAndSettle(); + final material = tester.widget( + find + .descendant( + of: find.byType(TButton), + matching: find.byType(Material), + ) + .first, + ); + expect(material.color, Colors.lime); + expect( + (material.shape! as RoundedRectangleBorder).borderRadius, + const BorderRadius.all(Radius.circular(17)), + ); + expect( + DefaultTextStyle.of( + tester.element(find.text('instance')), + ).style.color, + Colors.purple, + ); + }, + ); + } + } +} + +void ghostSemanticTokenTests() { + testWidgets( + 'token consumption ghost semantic token and instance precedence', + (tester) async { + for (final brightness in Brightness.values) { + final base = TThemeData.defaultData(); + final defaults = brightness == Brightness.dark ? base.dark! : base; + // Prove there is no default-theme pixel change. + expect(defaults.textColorAnti, defaults.fontWhite1); + final token = defaults.copyWith( + colorMap: { + 'textColorAnti': Colors.teal, + 'fontWhite1': Colors.orange, + 'fontWhite4': Colors.grey, + }, + ); + for (final phase in ['enabled', 'disabled', 'instance']) { + await tester.pumpWidget( + evidenceHost( + TButton( + key: ValueKey('$brightness-$phase'), + variant: TButtonVariant.ghost, + onPressed: phase == 'disabled' ? null : () {}, + style: phase == 'instance' + ? const ButtonStyle( + foregroundColor: WidgetStatePropertyAll(Colors.purple), + side: WidgetStatePropertyAll( + BorderSide(color: Colors.cyan, width: 2), + ), + ) + : null, + child: const Text('semantic ghost'), + ), + brightness: brightness, + token: token, + ), + ); + await tester.pumpAndSettle(); + final material = tester.widget( + find + .descendant( + of: find.byType(TButton), + matching: find.byType(Material), + ) + .first, + ); + final foreground = DefaultTextStyle.of( + tester.element(find.text('semantic ghost')), + ).style.color; + final side = (material.shape! as OutlinedBorder).side; + expect( + foreground, + phase == 'instance' + ? Colors.purple + : phase == 'disabled' + ? Colors.grey + : Colors.teal, + ); + expect( + side.color, + phase == 'instance' + ? Colors.cyan + : phase == 'disabled' + ? Colors.grey + : Colors.teal, + ); + expect(side.width, phase == 'instance' ? 2 : 1); + } + } + }, + ); +} diff --git a/tdesign-component/test/components/empty/t_empty_test.dart b/tdesign-component/test/components/empty/t_empty_test.dart index da9271e30d..1e8d38a806 100644 --- a/tdesign-component/test/components/empty/t_empty_test.dart +++ b/tdesign-component/test/components/empty/t_empty_test.dart @@ -1,7 +1,10 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:tdesign_flutter/tdesign_flutter.dart'; +import '../../support/token_consumption_evidence.dart'; + void main() { + emptyTokenConsumptionTests(); Widget app(Widget child, {TEmptyThemeData? theme}) { var data = TThemeBuilder.light(TThemeData.defaultData()); if (theme != null) { @@ -14,10 +17,8 @@ void main() { } TText tText(WidgetTester tester, String data) => tester.widget( - find.byWidgetPredicate( - (widget) => widget is TText && widget.data == data, - ), - ); + find.byWidgetPredicate((widget) => widget is TText && widget.data == data), + ); testWidgets('renders the default icon and description', (tester) async { final token = TThemeData.defaultData(); @@ -102,3 +103,104 @@ void main() { expect(a.lerp(null, 0.5), same(a)); }); } + +void emptyTokenConsumptionTests() { + for (final brightness in Brightness.values) { + for (final custom in [false, true]) { + testWidgets('token consumption empty ${brightness.name} custom=$custom', ( + tester, + ) async { + final token = evidenceTokens(brightness, custom: custom); + for (final image in [false, true]) { + await tester.pumpWidget( + evidenceHost( + TEmpty( + image: image + ? const SizedBox( + key: ValueKey('token-image'), + width: 80, + height: 80, + ) + : null, + emptyText: 'token empty', + operation: const SizedBox( + key: ValueKey('token-operation'), + width: 60, + height: 20, + ), + ), + brightness: brightness, + token: token, + ), + ); + await tester.pumpAndSettle(); + final scenario = '${brightness.name}/custom=$custom/image=$image'; + final text = tester.widget(find.text('token empty')); + tokenObservation( + 'emptyDescriptionColor', + scenario: scenario, + actual: text.style?.color, + expected: token.textColorPlaceholder, + ); + tokenObservation( + 'emptyDescriptionFont', + scenario: scenario, + actual: + '${text.style?.fontSize}/${text.style!.height! * text.style!.fontSize!}', + expected: custom ? '19.0/27.0' : '14.0/22.0', + ); + if (!image) { + tokenObservation( + 'emptyIconColor', + scenario: scenario, + actual: tester + .widget(find.byIcon(TIcons.info_circle_filled)) + .color, + expected: token.textColorPlaceholder, + ); + } + final imageRect = tester.getRect( + image + ? find.byKey(const ValueKey('token-image')) + : find.byIcon(TIcons.info_circle_filled), + ); + final textRect = tester.getRect(find.text('token empty')); + tokenObservation( + 'emptyDescriptionMarginTop', + scenario: scenario, + actual: textRect.top - imageRect.bottom, + expected: token.spacer2, + enforce: image && !custom, + ); + tokenObservation( + 'emptyDescriptionMarginTop', + scenario: 'contract/$scenario/description-gap', + actual: textRect.top - imageRect.bottom, + expected: image ? 16.0 : 22.0, + ); + tokenObservation( + 'emptyActionMarginTop', + scenario: scenario, + actual: + tester + .getRect(find.byKey(const ValueKey('token-operation'))) + .top - + textRect.bottom, + expected: token.spacer4, + enforce: !custom, + ); + tokenObservation( + 'emptyActionMarginTop', + scenario: 'contract/$scenario/action-gap', + actual: + tester + .getRect(find.byKey(const ValueKey('token-operation'))) + .top - + textRect.bottom, + expected: 32.0, + ); + } + }); + } + } +} diff --git a/tdesign-component/test/components/input/t_input_test.dart b/tdesign-component/test/components/input/t_input_test.dart index 3bf3da39c4..6c28caef12 100644 --- a/tdesign-component/test/components/input/t_input_test.dart +++ b/tdesign-component/test/components/input/t_input_test.dart @@ -2,7 +2,10 @@ import 'package:flutter/services.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:tdesign_flutter/tdesign_flutter.dart'; +import '../../support/token_consumption_evidence.dart'; + void main() { + inputTokenConsumptionTests(); Widget wrap(Widget child, {TInputThemeData? inputTheme}) { var theme = TThemeBuilder.light(TThemeData.defaultData()); if (inputTheme != null) { @@ -90,7 +93,10 @@ void main() { matching: find.byType(TextField), ); expect(tester.getSize(editor).height, 24); - expect(Theme.of(tester.element(editor)).visualDensity, VisualDensity.standard); + expect( + Theme.of(tester.element(editor)).visualDensity, + VisualDensity.standard, + ); } expect( tester.getSize(find.byIcon(TIcons.close_circle_filled)), @@ -1009,3 +1015,162 @@ void main() { }); }); } + +void inputTokenConsumptionTests() { + for (final brightness in Brightness.values) { + for (final custom in [false, true]) { + testWidgets('token consumption input ${brightness.name} custom=$custom', ( + tester, + ) async { + final token = evidenceTokens(brightness, custom: custom); + for (final enabled in [true, false]) { + await tester.pumpWidget( + evidenceHost( + TInput( + key: ValueKey(enabled), + hintText: 'token hint', + enabled: enabled, + prefix: const Icon(Icons.add), + suffix: const Icon(Icons.close), + ), + brightness: brightness, + token: token, + ), + ); + await tester.pumpAndSettle(); + final editor = tester.widget(find.byType(EditableText)); + final hint = tester.widget(find.text('token hint')); + final scenario = '${brightness.name}/custom=$custom/enabled=$enabled'; + tokenObservation( + enabled ? 'inputDefaultTextColor' : 'inputDisabledTextColor', + scenario: scenario, + actual: editor.style.color, + expected: enabled + ? token.textColorPrimary + : token.textColorDisabled, + ); + tokenObservation( + enabled ? 'inputPlaceholderTextColor' : 'inputDisabledTextColor', + scenario: scenario, + actual: hint.style?.color, + expected: enabled + ? token.textColorPlaceholder + : token.textColorDisabled, + ); + if (enabled) { + tokenObservation( + 'inputPlaceholderTextFont', + scenario: scenario, + actual: + '${hint.style?.fontSize}/${hint.style!.height! * hint.style!.fontSize!}', + expected: custom ? '20.0/28.0' : '16.0/24.0', + ); + tokenObservation( + 'inputPrefixIconColor', + scenario: scenario, + actual: IconTheme.of( + tester.element(find.byIcon(Icons.add)), + ).color, + expected: token.textColorPrimary, + ); + tokenObservation( + 'inputSuffixIconColor', + scenario: scenario, + actual: IconTheme.of( + tester.element(find.byIcon(Icons.close)), + ).color, + expected: token.textColorPlaceholder, + ); + final shell = tester + .widgetList( + find.descendant( + of: find.byType(TInput), + matching: find.byType(DecoratedBox), + ), + ) + .map((box) => box.decoration) + .whereType() + .first; + tokenObservation( + 'inputBgColor', + scenario: scenario, + actual: shell.color, + expected: token.bgColorContainer, + ); + tokenObservation( + 'inputBorderColor', + scenario: scenario, + actual: (shell.border! as Border).bottom.color, + expected: token.componentStroke, + enforce: false, + ); + final outer = tester + .widgetList( + find.descendant( + of: find.byType(TInput), + matching: find.byType(DecoratedBox), + ), + ) + .first; + final padding = outer.child! as Padding; + tokenObservation( + 'inputVerticalPadding', + scenario: scenario, + actual: padding.padding.resolve(TextDirection.ltr).top, + expected: token.spacer2, + enforce: !custom, + ); + tokenObservation( + 'inputVerticalPadding', + scenario: 'contract/$scenario/standalone-padding', + actual: padding.padding.resolve(TextDirection.ltr).top, + expected: 16.0, + ); + } + } + await tester.pumpWidget( + evidenceHost( + const TInput( + hintText: 'overridden', + initialValue: 'explicit', + style: TextStyle(color: Colors.lime), + ), + brightness: brightness, + token: token, + extensions: const [ + TInputThemeData( + backgroundColor: Colors.cyan, + hintStyle: TextStyle(color: Colors.purple), + borderColor: Colors.orange, + ), + ], + ), + ); + await tester.pumpAndSettle(); + expect( + tester.widget(find.byType(EditableText)).style.color, + Colors.lime, + ); + expect( + tester + .widget(find.text('overridden', skipOffstage: false)) + .style + ?.color, + Colors.purple, + ); + final shell = tester + .widgetList( + find.descendant( + of: find.byType(TInput), + matching: find.byType(DecoratedBox), + ), + ) + .map((box) => box.decoration) + .whereType() + .first; + expect(shell.color, Colors.cyan); + expect((shell.border! as Border).bottom.color, Colors.orange); + }); + } + } +} diff --git a/tdesign-component/test/components/link/t_link_test.dart b/tdesign-component/test/components/link/t_link_test.dart index 72eb05ad27..40e99d2413 100644 --- a/tdesign-component/test/components/link/t_link_test.dart +++ b/tdesign-component/test/components/link/t_link_test.dart @@ -3,7 +3,10 @@ import 'package:flutter/services.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:tdesign_flutter/tdesign_flutter.dart'; +import '../../support/token_consumption_evidence.dart'; + void main() { + linkTokenConsumptionTests(); Widget wrap(Widget child, {TLinkThemeData? linkTheme}) { final token = TThemeData.defaultData(); var theme = TThemeBuilder.light(token); @@ -251,3 +254,122 @@ void main() { } void _noop() {} + +void linkTokenConsumptionTests() { + for (final brightness in Brightness.values) { + for (final custom in [false, true]) { + testWidgets('token consumption link ${brightness.name} custom=$custom', ( + tester, + ) async { + final token = evidenceTokens(brightness, custom: custom); + for (final entry in [ + ( + TLinkColorPreset.defaultTheme, + 'Default', + token.textColorPrimary, + token.brandColorActive, + token.textColorDisabled, + ), + ( + TLinkColorPreset.primary, + 'Primary', + token.brandColor, + token.brandColorActive, + token.brandColorDisabled, + ), + ( + TLinkColorPreset.danger, + 'Danger', + token.errorColor, + token.errorColorActive, + token.errorColorDisabled, + ), + ( + TLinkColorPreset.warning, + 'Warning', + token.warningColor, + token.warningColorActive, + token.warningColorDisabled, + ), + ( + TLinkColorPreset.success, + 'Success', + token.successColor, + token.successColorActive, + token.successColorDisabled, + ), + ]) { + for (final state in ['idle', 'pressed', 'disabled']) { + await tester.pumpWidget( + evidenceHost( + TLink( + key: ValueKey('$entry-$state'), + colorPreset: entry.$1, + onPressed: state == 'disabled' ? null : _noop, + prefixIcon: const Icon(Icons.link), + child: const Text('token link'), + ), + brightness: brightness, + token: token, + ), + ); + await tester.pumpAndSettle(); + final gesture = state == 'pressed' + ? await tester.startGesture( + tester.getCenter(find.byType(TLink)), + ) + : null; + await tester.pump(const Duration(milliseconds: 300)); + final expected = state == 'idle' + ? entry.$3 + : state == 'pressed' + ? entry.$4 + : entry.$5; + final name = + 'link${entry.$2}${state == 'idle' + ? 'Color' + : state == 'pressed' + ? 'ActiveColor' + : 'DisabledColor'}'; + final scenario = '${brightness.name}/custom=$custom/$state'; + tokenObservation( + name, + scenario: '$scenario/text', + actual: DefaultTextStyle.of( + tester.element(find.text('token link')), + ).style.color, + expected: expected, + ); + tokenObservation( + name, + scenario: '$scenario/icon', + actual: IconTheme.of( + tester.element(find.byIcon(Icons.link)), + ).color, + expected: expected, + ); + await gesture?.up(); + await tester.pumpAndSettle(); + } + } + await tester.pumpWidget( + evidenceHost( + const TLink(onPressed: _noop, child: Text('theme link')), + brightness: brightness, + token: token, + extensions: const [ + TLinkThemeData(textStyle: TextStyle(color: Colors.lime)), + ], + ), + ); + await tester.pumpAndSettle(); + expect( + DefaultTextStyle.of( + tester.element(find.text('theme link')), + ).style.color, + Colors.lime, + ); + }); + } + } +} diff --git a/tdesign-component/test/components/progress/t_progress_test.dart b/tdesign-component/test/components/progress/t_progress_test.dart index ddb6a2d7ad..bf427bee4b 100644 --- a/tdesign-component/test/components/progress/t_progress_test.dart +++ b/tdesign-component/test/components/progress/t_progress_test.dart @@ -2,11 +2,14 @@ import 'package:flutter/rendering.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:tdesign_flutter/tdesign_flutter.dart'; +import '../../support/token_consumption_evidence.dart'; + /// TProgress Widget 测试 /// /// 覆盖 variant 四档(linear/circular/micro/button)、value 边界、 /// label 位置、Theme 各字段、copyWith/lerp、边界情况。 void main() { + progressTokenConsumptionTests(); /// 用 TTheme 包裹以提供基础 Token Widget wrapWithTheme( Widget child, { @@ -1186,3 +1189,157 @@ void main() { }); }); } + +void progressTokenConsumptionTests() { + for (final brightness in Brightness.values) { + for (final custom in [false, true]) { + testWidgets( + 'token consumption progress ${brightness.name} custom=$custom', + (tester) async { + final token = evidenceTokens(brightness, custom: custom); + for (final plump in [false, true]) { + await tester.pumpWidget( + evidenceHost( + SizedBox( + width: 240, + child: plump + ? TProgress.plump(value: 0.5) + : TProgress.linear(value: 0.5), + ), + brightness: brightness, + token: token, + ), + ); + await tester.pumpAndSettle(); + final scenario = '${brightness.name}/custom=$custom/plump=$plump'; + tokenObservation( + plump ? 'progressStrokePlumpWidth' : 'progressLineStrokeWidth', + scenario: scenario, + actual: tester + .getSize(find.byKey(const ValueKey('progress-track'))) + .height, + expected: plump ? 20.0 : 6.0, + ); + final track = tester.widget( + find.byKey(const ValueKey('progress-track')), + ); + tokenObservation( + 'progressTrackBgColor', + scenario: scenario, + actual: (track.decoration! as BoxDecoration).color, + expected: token.bgColorComponent, + ); + final fill = tester.widget( + find.byKey(const ValueKey('progress-value')), + ); + tokenObservation( + 'progressInnerBgColor', + scenario: scenario, + actual: (fill.decoration! as BoxDecoration).color, + expected: token.brandColor, + ); + } + await tester.pumpWidget( + evidenceHost( + TProgress.circular(value: 0.5), + brightness: brightness, + token: token, + ), + ); + await tester.pumpAndSettle(); + final scenario = '${brightness.name}/custom=$custom/circular'; + final paintFinder = find.byWidgetPredicate( + (widget) => + widget is CustomPaint && + widget.painter.runtimeType.toString() == + '_TProgressCircularPainter', + ); + final dynamic painter = tester + .widget(paintFinder) + .painter; + tokenObservation( + 'progressStrokeCircleWidth', + scenario: scenario, + actual: painter.strokeWidth, + expected: 6.0, + ); + tokenObservation( + 'progressCircleWidth', + scenario: scenario, + actual: tester.getSize(paintFinder).width, + expected: 112.0, + ); + tokenObservation( + 'progressTrackBgColor', + scenario: scenario, + actual: painter.backgroundColor, + expected: token.bgColorComponent, + ); + tokenObservation( + 'progressInnerBgColor', + scenario: scenario, + actual: painter.valueColor.value, + expected: token.brandColor, + ); + final inner = find.byKey(const ValueKey('progress-circle-inner')); + final decoration = + tester + .widget( + find.descendant( + of: inner, + matching: find.byType(DecoratedBox), + ), + ) + .decoration + as BoxDecoration; + tokenObservation( + 'progressCircleInnerBgColor', + scenario: scenario, + actual: decoration.color, + expected: brightness == Brightness.dark + ? Colors.transparent + : token.bgColorContainer, + ); + final labelStyle = tester + .widget( + find.byKey(const ValueKey('progress-label-style')), + ) + .style; + tokenObservation( + 'progressCircleLabelFont', + scenario: scenario, + actual: + '${labelStyle.fontSize}/${labelStyle.height! * labelStyle.fontSize!}/${labelStyle.fontWeight}', + expected: custom + ? '23.0/31.0/${FontWeight.w500}' + : '20.0/28.0/${FontWeight.w600}', + ); + await tester.pumpWidget( + evidenceHost( + TProgress.circular(value: 0.5), + brightness: brightness, + token: token, + extensions: const [ + TProgressThemeData( + color: Colors.lime, + backgroundColor: Colors.purple, + circleInnerBgColor: Colors.cyan, + strokeWidth: 9, + circleSize: 140, + ), + ], + ), + ); + await tester.pumpAndSettle(); + final dynamic themed = tester + .widget(paintFinder) + .painter; + expect(themed.strokeWidth, 9); + expect(themed.backgroundColor, Colors.purple); + expect(themed.valueColor.value, Colors.lime); + expect(tester.getSize(paintFinder).width, 140); + }, + ); + } + } +} diff --git a/tdesign-component/test/components/switch/t_switch_test.dart b/tdesign-component/test/components/switch/t_switch_test.dart index f1235862c9..417e779720 100644 --- a/tdesign-component/test/components/switch/t_switch_test.dart +++ b/tdesign-component/test/components/switch/t_switch_test.dart @@ -5,7 +5,10 @@ import 'package:tdesign_flutter/src/components/switch/t_cupertino_switch.dart'; import 'package:tdesign_flutter/src/components/switch/t_switch_resolve.dart'; import 'package:tdesign_flutter/tdesign_flutter.dart'; +import '../../support/token_consumption_evidence.dart'; + void main() { + switchTokenConsumptionTests(); Widget wrap( Widget child, { TSwitchThemeData? switchTheme, @@ -658,3 +661,232 @@ void main() { } void _noop(bool _) {} + +void switchTokenConsumptionTests() { + for (final brightness in Brightness.values) { + for (final custom in [false, true]) { + testWidgets('token consumption switch ${brightness.name} custom=$custom', ( + tester, + ) async { + final token = evidenceTokens(brightness, custom: custom); + final dark = brightness == Brightness.dark; + for (final enabled in [true, false]) { + for (final value in [false, true]) { + await tester.pumpWidget( + evidenceHost( + TSwitch( + key: ValueKey('$enabled-$value'), + value: value, + onChanged: enabled ? _noop : null, + ), + brightness: brightness, + token: token, + ), + ); + await tester.pumpAndSettle(); + final control = tester.widget( + find.byType(TCupertinoSwitch), + ); + final scenario = + '${brightness.name}/custom=$custom/enabled=$enabled/value=$value'; + tokenObservation( + enabled ? 'switchCheckedColor' : 'switchCheckedDisabledColor', + scenario: scenario, + actual: control.activeColor, + expected: enabled ? token.brandColor : token.brandColorDisabled, + ); + tokenObservation( + enabled ? 'switchUncheckedColor' : 'switchUncheckedDisabledColor', + scenario: scenario, + actual: control.trackColor, + expected: enabled + ? token.bgColorSecondaryContainerActive + : token.bgColorComponentDisabled, + ); + if (!enabled) { + tokenObservation( + 'switchDotDisabledColor', + scenario: scenario, + actual: control.thumbColor, + expected: dark ? token.fontWhite2 : token.fontWhite1, + ); + } + expect(control.disabledOpacity, 1); + } + } + for (final variant in [TSwitchVariant.text, TSwitchVariant.icon]) { + for (final value in [false, true]) { + await tester.pumpWidget( + evidenceHost( + TSwitch(value: value, variant: variant, onChanged: _noop), + brightness: brightness, + token: token, + ), + ); + await tester.pumpAndSettle(); + final actual = variant == TSwitchVariant.text + ? tester.widget(find.text(value ? '开' : '关')).style?.color + : tester + .widget( + find.byIcon(value ? TIcons.check : TIcons.close), + ) + .color; + tokenObservation( + value ? 'switchLabelCheckedColor' : 'switchLabelColor', + scenario: + '${brightness.name}/custom=$custom/$variant/value=$value', + actual: actual, + expected: value + ? token.brandColor + : token.bgColorSecondaryContainerActive, + enforce: value, + ); + } + } + await tester.pumpWidget( + evidenceHost( + const TSwitch(value: true, loading: true), + brightness: brightness, + token: token, + ), + ); + await tester.pump(const Duration(milliseconds: 300)); + tokenObservation( + 'switchLoadingColor', + scenario: '${brightness.name}/custom=$custom', + actual: tester + .widget(find.byType(TCircleIndicator)) + .color, + expected: dark ? token.fontWhite1 : token.brandColor, + ); + await tester.pumpWidget( + evidenceHost( + const TSwitch( + value: true, + variant: TSwitchVariant.text, + onChanged: _noop, + ), + brightness: brightness, + token: token, + extensions: const [ + TSwitchThemeData( + trackOnColor: Colors.lime, + trackOffColor: Colors.purple, + thumbContentOnColor: Colors.cyan, + ), + ], + ), + ); + await tester.pumpAndSettle(); + final control = tester.widget( + find.byType(TCupertinoSwitch), + ); + expect(control.activeColor, Colors.lime); + expect(control.trackColor, Colors.purple); + expect(tester.widget(find.text('开')).style?.color, Colors.cyan); + }); + } + testWidgets('token consumption switch geometry ${brightness.name}', ( + tester, + ) async { + final token = evidenceTokens(brightness, custom: false); + for (final entry in const [ + (TSwitchSize.medium, '', 45.0, 28.0, 22.0, 18.0, 20.0, 14.0), + (TSwitchSize.large, 'Large', 52.0, 32.0, 26.0, 22.0, 24.0, 16.0), + (TSwitchSize.small, 'Small', 39.0, 24.0, 18.0, 14.0, 16.0, 12.0), + ]) { + for (final value in [false, true]) { + for (final variant in TSwitchVariant.values) { + await tester.pumpWidget( + evidenceHost( + TSwitch( + key: ValueKey('$entry-$value-$variant'), + value: value, + size: entry.$1, + variant: variant, + onChanged: _noop, + ), + brightness: brightness, + token: token, + ), + ); + await tester.pumpAndSettle(); + final finder = find.byWidgetPredicate( + (widget) => + widget.runtimeType.toString() == + '_TCupertinoSwitchRenderObjectWidget', + ); + final dynamic render = tester.renderObject(finder); + final scale = tester.getSize(find.byType(TSwitch)).height / 28; + final scenario = + '${brightness.name}/${entry.$1.name}/value=$value/${variant.name}'; + tokenObservation( + 'switch${entry.$2}Width', + scenario: scenario, + actual: tester.getRect(finder).width, + expected: entry.$3, + enforce: entry.$1 == TSwitchSize.medium, + ); + tokenObservation( + 'switch${entry.$2}Height', + scenario: scenario, + actual: tester.getSize(find.byType(TSwitch)).height, + expected: entry.$4, + ); + expect( + render, + paints..rrect( + rrect: RRect.fromRectAndRadius( + const Rect.fromLTWH(0, 0, 45, 28), + const Radius.circular(14), + ), + ), + ); + tokenObservation( + 'switch${entry.$2}Radius', + scenario: scenario, + actual: tester.getRect(finder).height / 2, + expected: entry.$4 / 2, + ); + // Reading the live RenderBox exposes the painted thumb radius, not a resolver copy. + final actualDot = (render.thumbRadius as double) * 2 * scale; + final plain = !value && variant == TSwitchVariant.filled; + tokenObservation( + 'switchDot${plain ? 'Plain' : ''}${entry.$2}Size', + scenario: scenario, + actual: actualDot, + expected: plain ? entry.$6 : entry.$5, + enforce: !plain && entry.$1 == TSwitchSize.medium, + ); + if (variant == TSwitchVariant.icon) { + final icon = find.byIcon(value ? TIcons.check : TIcons.close); + final actualSize = tester.getRect(icon).width; + tokenObservation( + 'switchIcon${entry.$2}Size', + scenario: scenario, + actual: actualSize, + expected: entry.$7, + enforce: false, + ); + } + if (variant == TSwitchVariant.text) { + final text = tester.widget(find.text(value ? '开' : '关')); + tokenObservation( + 'switchLabel${entry.$2}FontSize', + scenario: scenario, + actual: + text.style!.fontSize! * + tester.getRect(find.text(value ? '开' : '关')).height / + tester + .renderObject(find.text(value ? '开' : '关')) + .size + .height, + expected: entry.$8, + ); + } + } + } + } + }); + } +} diff --git a/tdesign-component/test/support/token_consumption_evidence.dart b/tdesign-component/test/support/token_consumption_evidence.dart new file mode 100644 index 0000000000..1fd09e0b12 --- /dev/null +++ b/tdesign-component/test/support/token_consumption_evidence.dart @@ -0,0 +1,123 @@ +import 'dart:convert'; +import 'dart:io'; + +import 'package:flutter_test/flutter_test.dart'; +import 'package:tdesign_flutter/tdesign_flutter.dart'; + +/// Diagnostic observations are opt-in; assertions run on every CI execution. +/// A rendered value is distinct from a completed cross-platform pixel review. +void tokenObservation( + String name, { + required String scenario, + required Object? actual, + required Object? expected, + bool enforce = true, +}) { + Object? encode(Object? value) => switch (value) { + Color color => '#${color.toARGB32().toRadixString(16).padLeft(8, '0')}', + double number => double.parse(number.toStringAsFixed(8)), + num number => number, + bool boolean => boolean, + null => null, + _ => value.toString(), + }; + final matches = actual is num && expected is num + ? (actual - expected).abs() <= 1e-8 + : actual == expected; + if (Platform.environment['TDESIGN_TOKEN_EVIDENCE'] == '1') { + // ignore: avoid_print + print( + 'TOKEN_EVIDENCE ${jsonEncode({'name': name, 'scenario': scenario, 'actual': encode(actual), 'expected': encode(expected), 'matches': matches, 'enforced': enforce})}', + ); + } + if (enforce) { + expect( + actual, + expected is num ? closeTo(expected, 1e-8) : expected, + reason: '$name ($scenario)', + ); + } +} + +TThemeData evidenceTokens(Brightness brightness, {required bool custom}) { + final defaults = TThemeData.defaultData(); + final base = brightness == Brightness.dark ? defaults.dark! : defaults; + if (!custom) { + return base; + } + const keys = [ + 'brandColor', + 'brandColorActive', + 'brandColorDisabled', + 'brandColorLight', + 'brandColorLightActive', + 'errorColor', + 'errorColorActive', + 'errorColorDisabled', + 'errorColor3', + 'bgColorComponent', + 'bgColorComponentActive', + 'bgColorComponentDisabled', + 'bgColorContainer', + 'bgColorContainerActive', + 'bgColorSecondaryContainerActive', + 'componentBorder', + 'componentStroke', + 'textColorPrimary', + 'textColorPlaceholder', + 'textColorDisabled', + 'textColorAnti', + 'fontWhite1', + 'fontWhite2', + 'fontWhite4', + 'successColor', + 'warningColor', + 'successColorActive', + 'successColorDisabled', + 'warningColorActive', + 'warningColorDisabled', + ]; + return base.copyWith( + colorMap: { + for (var index = 0; index < keys.length; index++) + keys[index]: Color(0xff210000 + (index + 1) * 0x010307), + }, + fontMetricMap: { + 'fontSizeXl': 31, + 'fontSizeM': 21, + 'fontSizeBase': 18, + 'fontSizeS': 15, + }, + fontMap: { + 'fontMarkLarge': Font( + size: 19, + lineHeight: 27, + fontWeight: FontWeight.w700, + ), + 'fontMarkMedium': Font( + size: 17, + lineHeight: 25, + fontWeight: FontWeight.w700, + ), + 'fontBodyLarge': Font(size: 20, lineHeight: 28), + 'fontBodyMedium': Font(size: 19, lineHeight: 27), + 'fontTitleExtraLarge': Font( + size: 23, + lineHeight: 31, + fontWeight: FontWeight.w500, + ), + }, + radiusMap: {'radiusDefault': 13, 'radiusCircle': 23}, + spacerMap: {'spacer': 11, 'spacer2': 19, 'spacer4': 37}, + ); +} + +Widget evidenceHost( + Widget child, { + required Brightness brightness, + required TThemeData token, + List> extensions = const [], +}) => MaterialApp( + theme: ThemeData(brightness: brightness, extensions: [token, ...extensions]), + home: Scaffold(body: Center(child: child)), +); diff --git a/tdesign-component/tool/fixtures/token_migration/test/migration_027_test.dart b/tdesign-component/tool/fixtures/token_migration/test/migration_027_test.dart new file mode 100644 index 0000000000..0699dd4253 --- /dev/null +++ b/tdesign-component/tool/fixtures/token_migration/test/migration_027_test.dart @@ -0,0 +1,253 @@ +import 'package:flutter_test/flutter_test.dart'; +import 'package:tdesign_flutter/tdesign_flutter.dart'; + +import 'support/migration_027_examples.dart'; + +Widget host(Widget child) => migratedApp(Scaffold(body: child)); + +void main() { + testWidgets('M01 button: content, renamed callback and null disables', ( + tester, + ) async { + var taps = 0; + await tester.pumpWidget(host(migratedButton(() => taps++))); + await tester.tap(find.text('保存')); + expect(taps, 1); + await tester.pumpWidget(host(migratedButton(null))); + await tester.tap(find.text('保存')); + expect(taps, 1); + }); + + testWidgets('M02 text: local TD theme and explicit instance override', ( + tester, + ) async { + await tester.pumpWidget( + host( + Builder( + builder: (context) => migratedTextTheme( + context, + const Column( + children: [ + TText('默认'), + TText('实例', style: TextStyle(fontSize: 23)), + ], + ), + ), + ), + ), + ); + final first = tester.widget( + find.descendant( + of: find.widgetWithText(TText, '默认'), + matching: find.byType(RichText), + ), + ); + final second = tester.widget( + find.descendant( + of: find.widgetWithText(TText, '实例'), + matching: find.byType(RichText), + ), + ); + expect(first.text.style?.fontSize, 18); + expect(second.text.style?.fontSize, 23); + }); + + testWidgets('M03 checkbox: parent accepts controlled value', (tester) async { + var value = false; + await tester.pumpWidget( + host( + StatefulBuilder( + builder: (context, setState) => migratedCheckbox( + value, + (next) => setState(() => value = next ?? false), + ), + ), + ), + ); + await tester.tap(find.text('同意条款')); + await tester.pump(); + expect(value, isTrue); + expect(tester.widget(find.byType(TCheckbox)).value, isTrue); + }); + + testWidgets('M04 radio: typed group owns selection', (tester) async { + var value = 'a'; + await tester.pumpWidget( + host( + StatefulBuilder( + builder: (context, setState) => + migratedRadio(value, (next) => setState(() => value = next)), + ), + ), + ); + await tester.tap(find.text('方案 B')); + await tester.pump(); + expect(value, 'b'); + }); + + testWidgets('M05 form: required validation and accepted input', ( + tester, + ) async { + final form = TFormController(); + final text = TextEditingController(); + addTearDown(text.dispose); + var value = ''; + await tester.pumpWidget( + host( + StatefulBuilder( + builder: (context, setState) => migratedForm( + form: form, + text: text, + value: value, + onChanged: (next) => setState(() => value = next), + ), + ), + ), + ); + expect(form.validate(), isFalse); + await tester.pump(); + expect(find.text('请输入姓名'), findsOneWidget); + await tester.enterText(find.byType(EditableText), 'Ada'); + await tester.pump(); + expect(value, 'Ada'); + expect(form.validate(), isTrue); + }); + + testWidgets( + 'M06 picker: cancellation never commits draft; confirmation commits', + (tester) async { + String? committed; + late BuildContext context; + await tester.pumpWidget( + host( + Builder( + builder: (c) { + context = c; + return const Text('宿主'); + }, + ), + ), + ); + final handle = migratedPicker( + context: context, + initialValue: 'a', + onConfirmed: (value) => committed = value, + ); + await tester.pumpAndSettle(); + expect(handle.isShowing, isTrue); + final picker = tester.widget(find.byType(TPicker)); + picker.onChanged!( + const TPickerValue( + selectedOptions: [TPickerOption(label: '选项 B', value: 'b')], + indexes: [1], + ), + ); + await tester.pumpAndSettle(); + await tester.tap(find.text('取消')); + await tester.pumpAndSettle(); + expect(committed, isNull); + migratedPicker( + context: context, + initialValue: 'a', + onConfirmed: (value) => committed = value, + ); + await tester.pumpAndSettle(); + tester.widget(find.byType(TPicker)).onChanged!( + const TPickerValue( + selectedOptions: [TPickerOption(label: '选项 B', value: 'b')], + indexes: [1], + ), + ); + await tester.pumpAndSettle(); + await tester.tap(find.text('确认')); + await tester.pumpAndSettle(); + expect(committed, 'b'); + expect(find.byType(TPicker), findsNothing); + }, + ); + + testWidgets('M07 dialog: result completes after confirmed close', ( + tester, + ) async { + late BuildContext context; + await tester.pumpWidget( + host( + Builder( + builder: (c) { + context = c; + return const SizedBox(); + }, + ), + ), + ); + final result = migratedDialog(context); + await tester.pumpAndSettle(); + await tester.tap(find.text('继续')); + await tester.pumpAndSettle(); + expect(await result, isTrue); + }); + + testWidgets('M08 upload: custom picker produces accepted immutable list', ( + tester, + ) async { + var files = []; + await tester.pumpWidget( + host( + StatefulBuilder( + builder: (context, setState) => migratedUpload( + files: files, + onChanged: (next) => setState(() => files = next), + picker: () async => const [ + TUploadFile(id: 'file', name: 'report.pdf', size: 12), + ], + ), + ), + ), + ); + await tester.tap(find.byKey(const ValueKey('upload-add'))); + await tester.pumpAndSettle(); + expect(files.single.id, 'file'); + expect(() => files.clear(), throwsUnsupportedError); + }); + + testWidgets('M09 calendar and date picker use public controlled types', ( + tester, + ) async { + await tester.pumpWidget( + host(migratedCalendar([DateTime(2026, 10, 15)], (_) {})), + ); + expect(tester.takeException(), isNull); + await tester.pumpWidget( + host( + migratedDateTime( + const TDateTimePickerValue(year: 2026, month: 10, day: 15), + (_) {}, + ), + ), + ); + await tester.pumpAndSettle(); + expect(tester.takeException(), isNull); + }); + + testWidgets('M10 toast: zero duration stays until explicitly dismissed', ( + tester, + ) async { + late BuildContext context; + await tester.pumpWidget( + host( + Builder( + builder: (c) { + context = c; + return const SizedBox(); + }, + ), + ), + ); + final id = migratedLoading(context); + await tester.pump(const Duration(seconds: 4)); + expect(find.text('处理中'), findsOneWidget); + TToast.dismissToast(id); + await tester.pump(const Duration(seconds: 1)); + expect(find.text('处理中'), findsNothing); + }); +} diff --git a/tdesign-component/tool/fixtures/token_migration/test/support/migration_027_examples.dart b/tdesign-component/tool/fixtures/token_migration/test/support/migration_027_examples.dart new file mode 100644 index 0000000000..34aad26bd6 --- /dev/null +++ b/tdesign-component/tool/fixtures/token_migration/test/support/migration_027_examples.dart @@ -0,0 +1,178 @@ +import 'package:tdesign_flutter/tdesign_flutter.dart'; + +// migration:button:start +Widget migratedButton(VoidCallback? onPressed) { + return TButton( + variant: TButtonVariant.fill, + colorPreset: TButtonColorPreset.primary, + onPressed: onPressed, + child: const Text('保存'), + ); +} +// migration:button:end + +// migration:theme:start +Widget migratedApp(Widget home) { + final tokens = TThemeData.defaultData(); + return MaterialApp( + theme: TThemeBuilder.light(tokens), + darkTheme: TThemeBuilder.dark(tokens), + home: home, + ); +} + +Widget migratedTextTheme(BuildContext context, Widget child) { + return Theme( + data: Theme.of( + context, + ).mergeExtension(const TTextThemeData(textStyle: TextStyle(fontSize: 18))), + child: child, + ); +} +// migration:theme:end + +// migration:choices:start +Widget migratedCheckbox(bool value, ValueChanged? onChanged) { + return TCheckbox(value: value, onChanged: onChanged, title: '同意条款'); +} + +Widget migratedRadio(String value, ValueChanged? onChanged) { + return TRadioGroup.options( + value: value, + onChanged: onChanged, + options: const [ + TRadioOption(value: 'a', label: '方案 A'), + TRadioOption(value: 'b', label: '方案 B'), + ], + ); +} +// migration:choices:end + +// migration:form:start +Widget migratedForm({ + required TFormController form, + required TextEditingController text, + required String value, + required ValueChanged onChanged, +}) { + return TForm( + controller: form, + child: TFormField( + name: 'name', + value: value, + onChanged: onChanged, + required: true, + requiredMessage: '请输入姓名', + builder: (context, current, change, error) => TFormItem( + label: '姓名', + errorText: error, + child: TInput(controller: text, onChanged: change), + ), + ), + ); +} +// migration:form:end + +// migration:calendar:start +Widget migratedCalendar( + List value, + ValueChanged>? onChanged, +) { + return SizedBox( + height: 400, + child: TCalendar( + value: value, + variant: TCalendarVariant.single, + minDate: DateTime(2026, 1, 1), + maxDate: DateTime(2026, 12, 31), + onChanged: onChanged, + ), + ); +} + +Widget migratedDateTime( + TDateTimePickerValue value, + ValueChanged? onChanged, +) { + return TDateTimePicker(value: value, onChanged: onChanged); +} +// migration:calendar:end + +// migration:picker:start +TPopupHandle migratedPicker({ + required BuildContext context, + required String initialValue, + required ValueChanged onConfirmed, +}) { + var draft = initialValue; + return TPickerPopup.show( + context, + child: StatefulBuilder( + builder: (context, setPanelState) => TPicker( + items: const TPickerColumns([ + [ + TPickerOption(label: '选项 A', value: 'a'), + TPickerOption(label: '选项 B', value: 'b'), + ], + ]), + value: [draft], + onChanged: (next) => setPanelState(() { + draft = next.values.single! as String; + }), + ), + ), + headerBuilder: (context, close) => TPopupHeader( + title: const Text('请选择'), + cancelButton: TButton(onPressed: close, child: const Text('取消')), + confirmButton: TButton( + onPressed: () { + onConfirmed(draft); + close(); + }, + child: const Text('确认'), + ), + ), + ); +} +// migration:picker:end + +// migration:dialog:start +Future migratedDialog(BuildContext context) { + return TDialog.show( + context, + dialog: const TConfirmDialog( + title: '操作确认', + content: '确认继续?', + buttonText: '继续', + ), + ); +} +// migration:dialog:end + +// migration:upload:start +Widget migratedUpload({ + required List files, + required ValueChanged>? onChanged, + TUploadPicker? picker, +}) { + return TUpload( + files: files, + onChanged: onChanged, + maxFiles: 2, + maxFileSize: 5 * 1024 * 1024, + picker: picker, + ); +} +// migration:upload:end + +// migration:toast:start +String migratedLoading(BuildContext context) { + return TToast.showLoading( + context: context, + text: '处理中', + duration: Duration.zero, + overlay: const TOverlayConfig(preventScrollThrough: true), + ); +} + +// migration:toast:end diff --git a/tdesign-site/site/docs/getting-started.md b/tdesign-site/site/docs/getting-started.md index 24384ba433..e65653f8d6 100644 --- a/tdesign-site/site/docs/getting-started.md +++ b/tdesign-site/site/docs/getting-started.md @@ -44,6 +44,8 @@ ## 🚀 快速开始 +从 0.2.7 升级时,请先阅读 [1.0 迁移指南](/flutter/migration-1-0)。1.0 包含不兼容的接口与默认行为变化,不能只替换组件前缀。 + 要求 Flutter ≥ 3.32.0、Dart ≥ 3.8.0。 ### 添加依赖 diff --git a/tdesign-site/site/docs/migration-1-0.md b/tdesign-site/site/docs/migration-1-0.md new file mode 100644 index 0000000000..be50528294 --- /dev/null +++ b/tdesign-site/site/docs/migration-1-0.md @@ -0,0 +1,747 @@ +# 从 0.2.7 升级到 1.0 + +本文仅面向 `tdesign_flutter 0.2.7` 使用方。1.0 是不兼容升级,旧参数和旧行为不会通过兼容别名保留;不能对全项目执行一次 `TD` → `T` 替换后就认为迁移结束。 + +本文按 0.2.7 实际发布包与当前 1.0 候选编写。正式 1.0 发布后使用 `tdesign_flutter: ^1.0.0`;发布前不要把这个版本约束当作已经可从 pub.dev 安装的稳定版本。已有 alpha 的升级不在本文范围。 + +## 升级顺序 + +1. 保留当前依赖锁文件、主题 JSON 与关键页面截图;先在业务分支迁移。 +2. 升级到 Flutter ≥3.32.0、Dart ≥3.8.0。原生平台要求还受所解析的 Flutter/图片选择器实现包约束,按目标 SDK 构建验证。 +3. 先替换公共主题/文字与导入,再迁移基础组件,最后迁移选择器、表单、浮层和异步交互。 +4. 修复全部编译错误后,按本文的行为清单验证真实操作。默认视觉和回调行为变化不一定产生编译错误。 + +统一入口可同时提供 TD 与 Flutter Material 类型: + +```dart +import 'package:tdesign_flutter/tdesign_flutter.dart'; +``` + +仍可显式导入 Material;业务另有同名类型时用 import 前缀或 show/hide 解决。不要从 `package:tdesign_flutter/src/...` 导入旧 State、Painter 或内部适配类型。 + +## 主题、文字与样式 + +旧 `TDTheme.of(context)` 对应 `context.tTheme`;全局数据为 `TThemeData`,应用使用 `TThemeBuilder.light/dark`。让组件跟随局部主题时读取 `context.tTheme`,不要用固定默认值绕开子树 Theme。 + + +```dart +Widget migratedApp(Widget home) { + final tokens = TThemeData.defaultData(); + return MaterialApp( + theme: TThemeBuilder.light(tokens), + darkTheme: TThemeBuilder.dark(tokens), + home: home, + ); +} + +Widget migratedTextTheme(BuildContext context, Widget child) { + return Theme( + data: Theme.of( + context, + ).mergeExtension(const TTextThemeData(textStyle: TextStyle(fontSize: 18))), + child: child, + ); +} +``` + + +- TD 内置外观按全局 Token、TD 组件 Theme、受支持的显式实例配置解析。Material `textTheme`、按钮 Theme、`IconTheme`、visualDensity 等不再隐式改变 TD 内置视觉;原生 Material 和调用方自定义内容仍可使用自己的主题。 +- 使用 `mergeExtension` 合并子树组件主题,避免用 `copyWith(extensions: [...])` 意外丢弃其他 ThemeExtension。 +- `TText` 的单实例文字使用 `style: TextStyle(...)`;`TTextSpan` 也用 `style`。不要继续传旧 `fontWeight/fontFamily/textColor/isTextThrough/lineThroughColor`,删除线使用 `TextDecoration.lineThrough`。 +- `textScaleFactor` 改为 `textScaler`;未传时继承系统文字缩放。旧 `TDTextPaddingConfig` 改为父级 Padding/Align/Center,段落文字不要按单行居中规则强行裁切。 +- 在线字体先由业务调用 `TFontLoader.load` 并管理加载状态,之后通过文字 `style.fontFamily` 或 TD 文字 Theme 配置,不再在文字 build 时请求字体 URL。 +- 自定义主题 JSON 需要核对字段与最终默认值;旧按钮状态样式、组件形态、交互时长等不能一律塞进 Theme。具体视觉默认值与实例的状态/规格选择分开。 + +## 按钮与禁用语义 + +0.2.7:`TDButton(text: '保存', type: TDButtonType.fill, theme: TDButtonTheme.primary, onTap: save)`。 + +1.0 的对应写法: + + +```dart +Widget migratedButton(VoidCallback? onPressed) { + return TButton( + variant: TButtonVariant.fill, + colorPreset: TButtonColorPreset.primary, + onPressed: onPressed, + child: const Text('保存'), + ); +} +``` + + +`onPressed == null` 表示禁用;长按也要求按钮处于可点击状态。不要保留旧 `disabled: false` 却漏传回调。`icon` 使用 Widget,IconData 包在 `Icon(...)` 或 `TIcon(...)` 中。普通/按压/禁用的具体样式合并到 `ButtonStyle` 的状态属性;尺寸布局按 size、显式样式或外部约束表达,不搬旧 style/activeStyle/disableStyle 三套对象。 + +自定义反色主题时,默认配色的 `TButtonVariant.ghost` 文字与描边读取 `textColorAnti`,禁用时读取 `fontWhite4`;不要仅修改原始白色层级 `fontWhite1` 来控制这类按钮。单个按钮的前景、边框和交互状态仍通过 `ButtonStyle` 覆盖。 + +## 受控值、输入与选择 + +对于 `TCheckbox`、`TRadioGroup`、`TSwitch`、`TStepper`、Picker、Calendar 等,父级应接受回调并重建传回新值。只记录回调而不更新 value,会导致保持旧值或滚动结束回退;空回调的禁用规则以各组件 API 为准。 + + +```dart +Widget migratedCheckbox(bool value, ValueChanged? onChanged) { + return TCheckbox(value: value, onChanged: onChanged, title: '同意条款'); +} + +Widget migratedRadio(String value, ValueChanged? onChanged) { + return TRadioGroup.options( + value: value, + onChanged: onChanged, + options: const [ + TRadioOption(value: 'a', label: '方案 A'), + TRadioOption(value: 'b', label: '方案 B'), + ], + ); +} +``` + + +`TRadio` 必须在同类型 `TRadioGroup` 下,不能把 groupValue/onChanged 重新分散到每个 radio。复选框单项 value 为 bool?(null 表示不确定态),组的 value/options 以当前泛型 API 为准,旧 id、controller、passThrough 等不能原样套入。 + +输入框的 `controller` 与 `initialValue` 互斥;`initialValue` 仅初始化内部值。需要外部更新、表单重置或保留选区时使用 `TextEditingController`,由创建方释放。单行用 `TInput`,多行用 `TTextarea`;不要把旧 TDInput 的 maxLines 参数当成完整多行迁移方案。重验空内容粘贴、中文组合输入、清空按钮、焦点与键盘遮挡。 + +## 表单改为字段树 + +旧 `items/rules/data` 配置改为 `TForm + TFormField + TFormItem`。字段持有业务 value/onChanged,validator 返回错误文案;`TFormController.validate()` 用于主动校验,`required: true` 执行必填校验,单独设置表单项必填标记不等于校验。 + + +```dart +Widget migratedForm({ + required TFormController form, + required TextEditingController text, + required String value, + required ValueChanged onChanged, +}) { + return TForm( + controller: form, + child: TFormField( + name: 'name', + value: value, + onChanged: onChanged, + required: true, + requiredMessage: '请输入姓名', + builder: (context, current, change, error) => TFormItem( + label: '姓名', + errorText: error, + child: TInput(controller: text, onChanged: change), + ), + ), + ); +} +``` + + +示例中的 text/form 由页面持有,value 由父级在 onChanged 中更新;页面销毁时释放自建 TextEditingController。业务执行 reset 时,同时更新字段值与自己的文本控制器;不要指望 initialValue 覆盖现有编辑状态。 + +## Picker、日期与浮层确认分离 + +`TDPicker/TDMultiPicker/TDMultiLinkedPicker` 改为 `TPicker` 和不可变 `TPickerColumns/TPickerLinked` 数据。面板回调只是候选值变化,不是业务确认。 + + +```dart +TPopupHandle migratedPicker({ + required BuildContext context, + required String initialValue, + required ValueChanged onConfirmed, +}) { + var draft = initialValue; + return TPickerPopup.show( + context, + child: StatefulBuilder( + builder: (context, setPanelState) => TPicker( + items: const TPickerColumns([ + [ + TPickerOption(label: '选项 A', value: 'a'), + TPickerOption(label: '选项 B', value: 'b'), + ], + ]), + value: [draft], + onChanged: (next) => setPanelState(() { + draft = next.values.single! as String; + }), + ), + ), + headerBuilder: (context, close) => TPopupHeader( + title: const Text('请选择'), + cancelButton: TButton(onPressed: close, child: const Text('取消')), + confirmButton: TButton( + onPressed: () { + onConfirmed(draft); + close(); + }, + child: const Text('确认'), + ), + ), + ); +} +``` + + +调用方在 `onConfirmed` 中更新业务保存值,并确保对应业务 State 仍 mounted;取消只关闭、不提交草稿。重新打开时用保存值创建新草稿。`TPickerPopup` 会为标准头部和滚轮预留高度;自定义通用 Popup 时也须提供合理内容约束。 + +`TDDatePicker + DatePickerModel` 改为 `TDateTimePicker + TDateTimePickerValue + DateTimePickerMode`。默认年月日,按需组合时间列;start/end 与 steps 用当前模型,onChanged 实时回写。`TDCalendar` 的 value 改为 `List`,single/multiple/range 由 variant 表达,组件不再同时负责业务弹窗确认或时间选择。 + + +```dart +Widget migratedCalendar( + List value, + ValueChanged>? onChanged, +) { + return SizedBox( + height: 400, + child: TCalendar( + value: value, + variant: TCalendarVariant.single, + minDate: DateTime(2026, 1, 1), + maxDate: DateTime(2026, 12, 31), + onChanged: onChanged, + ), + ); +} + +Widget migratedDateTime( + TDateTimePickerValue value, + ValueChanged? onChanged, +) { + return TDateTimePicker(value: value, onChanged: onChanged); +} +``` + + +**重新验证边界**:最小/最大日期的时分、跨天、闰日、区间端点、数据源变更、连续滚动与惯性。不要用整数时间戳或旧通知器替代新受控值。 + +## Popup、Dialog、Toast + +旧 `TDPopup*Panel/TDSlidePopupRoute` 组合改为 `TPopup.show(context, options: ...)`。按方向选择 `TPopupOptions.bottom/center/left/right/top` 与对应 Inset;从返回的 `TPopupHandle` 关闭/重开并读取本次 `result`。用正确 Theme/Navigator 子树的 context 打开;handle 重开不会自动重新解析已经合并的主题选项,需要新配置时重新创建。 + +`TConfirmDialog` 是单确认便捷组件;多操作使用 `TDialog.actions + TDialogAction`,输入弹窗组合 `TDialog + TInput`,不要寻找被删除的 TDInputDialog。 + + +```dart +Future migratedDialog(BuildContext context) { + return TDialog.show( + context, + dialog: const TConfirmDialog( + title: '操作确认', + content: '确认继续?', + buttonText: '继续', + ), + ); +} +``` + + +Toast 时长用 `Duration`;加载提示默认也会自动关闭。持续任务显式设置 `Duration.zero`,任务结束后按返回 ID 关闭。可见遮罩与背景点击/滚动拦截是独立配置,不要把半透明遮罩等同于不可穿透。 + + +```dart +String migratedLoading(BuildContext context) { + return TToast.showLoading( + context: context, + text: '处理中', + duration: Duration.zero, + overlay: const TOverlayConfig(preventScrollThrough: true), + ); +} +``` + + +结束任务时调用 `TToast.dismissToast(id)`。匿名提示会复用匿名 ID;需要并存时提供不同 toastId。`TMessage.duration` 同样使用 Duration,显示由 Widget 树或其公开命令管理,不能继续用旧 visible 参数控制。 + +## Upload 与平台依赖 + +Upload 只负责选择及文件列表交互,不执行 HTTP 上传。旧 `max/sizeLimit/multiple/disabled/onChange` 不能仅改名:改为 `maxFiles/maxFileSize`、单一 mediaType、受控 files/onChanged;自定义业务 picker 使用 `Future>`。 + + +```dart +Widget migratedUpload({ + required List files, + required ValueChanged>? onChanged, + TUploadPicker? picker, +}) { + return TUpload( + files: files, + onChanged: onChanged, + maxFiles: 2, + maxFileSize: 5 * 1024 * 1024, + picker: picker, + ); +} +``` + + +回调列表不可变,接受时直接保存新列表,不原地 add/remove;上传进度和结果由业务创建新 TUploadFile/列表更新。`onChanged == null` 阻止新交互,但不会取消已经开始的选择;卸载后不通知。数量/大小错误、选择器异常和业务回调异常分别按当前回调契约处理。 + +相册权限、iOS Info.plist、文件持久化和 Android 进程回收后的恢复属于宿主集成。默认选择器底层是 image_picker;业务可用 picker 接入自己的权限、恢复和上传流程。升级后重新构建原生宿主,并检查实际解析的平台实现版本;Dart 编译通过不能证明权限与系统相册行为通过。 + +## 两种 TabBar 与 Swiper + +- **顶部页签**:旧 `TDTabBar/TDTabBarView` → `TTabsBar/TTabsBarView`,显式共享 TabController 或位于同一个 DefaultTabController。TTabsBarView 默认不可滑动,需要手势切页时显式配置 physics。 +- **底部导航**:旧 `TDBottomTabBar` → `TTabBar`,提供 type、navigationTabs、受控 value/onChanged;旧 `topBorder/showTopBorder/centerDistance` 没有等价开关恢复,按新的默认边线和内置图文布局验收。 +- **Swiper**:使用 `TSwiper` 的 children 或 itemBuilder/itemCount;自建 `TSwiperController` 并在页面 dispose 中释放。旧第三方 SwiperPlugin/SwiperController 和 TDSwiperPagination 不能直接传入;按当前分页、箭头与 pageEffect 能力重组。TSwiper 默认 loop/autoplay 均 false,业务需要时显式打开。 + +## 全部组件迁移索引 + +下表是入口与职责迁移索引,不承诺旧构造参数一一保留。每个组件的全部当前字段与默认值以 1.0 API 文档为准;旧名查找见文末导出索引。 + +| 组件 | 0.2.7 入口 | 1.0 入口 | 必须检查的迁移点 | +|---|---|---|---| +| button | `TDButton` | `TButton` | text→child;onTap→onPressed;type→variant;theme→colorPreset;状态样式合并为 ButtonStyle。 | +| divider | `TDDivider` | `TDivider` | 按当前构造及 TDividerThemeData 配置;方向/内容与具体视觉默认值分开。 | +| fab | `TDFab` | `TFab` | 重新核对尺寸/形态枚举、内容和事件;具体视觉从 TFabThemeData 配置。 | +| icon | `TDIcons / Icon` | `TIcons / TIcon` | 图标数据来自 tdesign_flutter_icons;TIcon 的默认视觉由 TD 控制,实例 size/color 可覆盖。 | +| text | `TDText / TDTextSpan` | `TText / TTextSpan` | 删除分散字体、在线加载和 padding 入口;用 style、textScaler、显式父布局,见文字一节。 | +| link | `TDLink` | `TLink` | 内容改用 Widget child;内置规格与 colorPreset 留实例,具体视觉从 TLinkThemeData 配置。 | +| backtop | `TDBackTop` | `TBackTop` | 按当前滚动绑定与形态配置;仅提供滚动控制器时按组件契约回顶,不用空回调猜禁用。 | +| drawer | `TDDrawer / TDDrawerWidget` | `TDrawer / showTDrawer` | 内容与浮层打开分开;宽度/背景移入 TDrawerThemeData,旧内容实现类型不再直接构造。 | +| indexes | `TDIndexes` | `TIndexes` | 重新核对受控索引及滚动对象;字母列表最大高度在组件 Theme 配置。 | +| navbar | `TDNavBar` | `TNavBar` | title/操作保留内容职责,背景、颜色、间距、边框和阴影迁入 TNavBarThemeData。 | +| sidebar | `TDSideBar` | `TSideBar` | 选择交给 value/onChanged;去掉旧 Controller/数据项样式依赖,视觉使用 TSideBarThemeData。 | +| steps | `TDSteps` | `TSteps.progress / selectable / display` | 选择进度、可选择或纯展示模式;不把三种状态源混用。 | +| tab_bar | `TDBottomTabBar` | `TTabBar` | 底部导航:显式 type、navigationTabs、value/onChanged;尺寸/颜色/分隔线迁 Theme。 | +| tabs | `TDTabBar / TDTabBarView` | `TTabsBar / TTabsBarView` | 顶部页签:共享 TabController 或 DefaultTabController;不是底部 TTabBar。 | +| form | `TDForm / FormController` | `TForm / TFormField / TFormController` | 从 items/rules/data 配置改为字段 Widget 树;value/onChanged、validator 与控制器职责分开。 | +| input | `TDInput` | `TInput` | controller 与 initialValue 互斥;onChanged/hintText/prefix/suffix;不要把 initialValue 当持续受控值。 | +| textarea | `TDTextarea` | `TTextarea` | 多行输入独立组件;用 minLines/maxLines、controller 与字段回调,核对计数/字符限制。 | +| search | `TDSearchBar` | `TSearchBar` | placeHolder→hintText、onTextChanged→onChanged、onActionClick→onActionPressed;不保留旧样式对象。 | +| checkbox | `TDCheckbox / TDCheckboxGroup` | `TCheckbox / TCheckboxGroup` | checked/id/controller 方案改为 value/onChanged;组提供 options 和受控选中集合,类型按当前 API。 | +| radio | `TDRadio / TDRadioGroup` | `TRadio / TRadioGroup` | 单项必须位于同类型组下;组持有 value/onChanged,不再为每项维护选中状态。 | +| switch | `TDSwitch` | `TSwitch` | value/onChanged 管开关状态;空回调禁用;规格与具体配色分别从实例/Theme 设置。 | +| stepper | `TDStepper` | `TStepper` | required value;回调接受后重建;旧 defaultValue/eventController 不能作为迁移目标。 | +| slider | `TDSlider / TDRangeSlider` | `TSlider / TRangeSlider` | 按当前值及回调类型迁移;旧 Thumb/Track/Painter 类型不再作为可继承公开入口。 | +| rate | `TDRate` | `TRate` | 按当前受控数值与回调迁移;重验半星、禁用、只读与自定义指示器。 | +| picker | `TDPicker / TDMultiPicker / TDMultiLinkedPicker` | `TPicker + TPickerColumns / TPickerLinked` | 列数据改不可变 option 树;选择面板不负责业务确认,使用 TPickerPopup 组合草稿/确认/取消。 | +| date_time_picker | `TDDatePicker` | `TDateTimePicker` | DatePickerModel 改为 TDateTimePickerValue + DateTimePickerMode;上下界/步进显式传入,外部管理确认。 | +| cascader | `TDCascader / TDMultiCascader` | `TCascader` | 使用 TCascaderOption 树与受控路径;旧自定义 Tab/Action/多选控制类型不能机械替换,按当前能力重组。 | +| tree_select | `TDTreeSelect / TDSelectOption` | `TTreeSelect / TTreeSelectOption` | 树数据、选中集合与 multiple 明确配置;不再复用旧副作用控制器。 | +| calendar | `TDCalendar` | `TCalendar` | value 是 List;variant 决定单选/多选/区间;onChanged 回写,时间选择和弹层外部组合。 | +| upload | `TDUpload` | `TUpload` | files/onChanged 受控;单一 mediaType,maxFiles/maxFileSize、不可变结果;上传请求由业务执行。 | +| avatar | `TDAvatar` | `TAvatar` | 形状用 shape,物理大小/颜色迁 TAvatarThemeData;特殊文字用 child: Text(style: ...)。 | +| badge | `TDBadge` | `TBadge` | 统一 label/size 等当前入口;旧数字/红点/丝带类型按组件 API 重组,不复用旧 BadgeConfig。 | +| cell | `TDCell / TDCellGroup` | `TCell / TCellGroup` | 以内容槽组合;连续列表用 TCellGroup;统一背景/分隔线由组或 Theme 管理。 | +| collapse | `TDCollapse / TDCollapsePanel` | `TCollapse / TCollapsePanel` | 受控展开值与内容分开;形态/动画属于实例,具体外观从 TCollapseThemeData 配置。 | +| empty | `TDEmpty` | `TEmpty` | 旧 type 改为 icon/image/emptyText/operation 组合;不再查找 TDEmptyType,也不导入内部插图。 | +| footer | `TDFooter` | `TFooter` | 按当前内容/链接数据与组件 Theme 迁移,不继续使用旧 FooterType 作为类型。 | +| image | `TDImage` | `TImage` | 重验加载/失败/裁剪;尺寸和占位以当前 API 为准,旧 TDImageType 不能仅改前缀。 | +| image_viewer | `TDImageViewer / TDImageDialog` | `TImageViewer.show` | images 使用 ImageProvider 列表;initialIndex 与 onIndexChanged,内部 State/Dialog 类型不再直接实例化。 | +| progress | `TDProgress` | `TProgress` | variant/status 与主题分开;圆环 circleSize 表示外框边长,不能把旧半径语义套入。 | +| result | `TDResult` | `TResult` | 重选当前语义状态与内容插槽,背景/文字视觉使用 TResultThemeData。 | +| skeleton | `TDSkeleton / TDSkeletonRowCol*` | `TSkeleton / TSkeleton.custom` | 标准形态用 variant;自定义布局使用 TSkeletonLayout,不复用旧 RowCol 配置类型。 | +| swiper | `Swiper + TDSwiperPagination` | `TSwiper / TSwiperController` | 不再用第三方 SwiperController/SwiperPlugin;迁移 children 或 itemBuilder、分页及自有控制器。 | +| table | `TDTable / TDTableCol` | `TTable / TTableColumn` | 列使用 id/header/cellBuilder,data 必填;排序和选择是受控值,旧列/行选择回调需要改写。 | +| tag | `TDTag / TDSelectTag` | `TTag / TSelectTag` | 语义色用 colorPreset;选中/关闭遵循当前回调;具体字体和圆角从 Theme 设置。 | +| time_counter | `TDTimeCounter` | `TTimeCounter` | time 和 onChanged 均使用毫秒整数;重验自动开始、方向与结束;自建 Controller 由业务释放。 | +| action_sheet | `TDActionSheet` | `TActionSheet` | 按当前列表/宫格入口及 TActionSheetItem 组合;旧主题枚举不是新 Theme 类型。 | +| dialog | `TDAlertDialog / TDConfirmDialog / TDInputDialog` | `TDialog / TConfirmDialog / TDialogAction` | 单确认便捷弹窗与多操作槽分开;输入弹窗用 TDialog+TInput 组合,不恢复专用旧类。 | +| dropdown_menu | `TDDropdownMenu / TDDropdownItem` | `TDropdownMenu / TDropdownMenuItem` | 菜单项描述与 Single/MultiSelectPanel 组合;重验外部值更新、遮罩和 anchor,不直接改名前缀。 | +| loading | `TDLoading` | `TLoading` | 按当前 icon/内容与 TLoadingController 使用;旧内部指示器/State 不作为公开继承点。 | +| message | `TDMessage` | `TMessage` | duration 使用 Duration;status 替代旧 theme;显示由 Widget 树或命令句柄管理,不保留 visible 开关。 | +| notice_bar | `TDNoticeBar` | `TNoticeBar` | 语义状态/滚动/多行用当前 API;重验循环、点击与关闭,不搬旧样式类。 | +| popover | `TDPopover / TDPopoverWidget` | `TPopover` | 锚点和一次性命令按当前入口使用;offset/arrowSize/padding/背景/圆角从 TPopoverThemeData 设置。 | +| popup | `TDPopup*Panel / TDSlidePopupRoute` | `TPopup.show + TPopupOptions + TPopupHandle` | 面板、路由与控制统一;选择方向专属 Options/Inset,关闭结果从 handle.result 获取。 | +| refresh | `TDRefreshHeader` | `TPullDownRefresh` | 用 wrapper、受控回调和 TPullDownRefreshController 迁移;旧第三方 Header 不能仅改名。 | +| swipe_cell | `TDSwipeCell / TDSwipeCellAction` | `TSwipeCell / TSwipeCellAction` | 侧滑交互与逐项动作配置使用当前 API;不要依赖旧 Inherited/State,避免重复通知。 | +| toast | `TDToast` | `TToast` | duration 为 Duration,加载默认也会超时;持续加载显式 Duration.zero,背景拦截放 TOverlayConfig。 | +| theme | `TDTheme / TDThemeData` | `context.tTheme / TThemeData / TThemeBuilder` | 全局 Token→TD 组件 Theme→支持的实例配置;Material 外观不再反向影响 TD 默认视觉。 | + +## 编译通过后仍要检查 + +- 控件禁用条件、受控回调回写、连续操作与异步完成后的状态。 +- 主题明暗切换、局部 Theme、系统字体和 1/1.5/2 倍字号;不要用旧截图作为当前默认值的唯一依据。 +- 键盘、复制粘贴、输入法组合区、选区及焦点;返回键、安全区和 Overlay 的关闭/释放。 +- 列表排序/选择、日期边界、滚轮惯性、Swiper 实际页码;上传取消、权限与页面退出。 +- 业务创建的文本/Tab/Swiper/刷新控制器按其实际类型生命周期释放;回调中 setState 前确认 State 存活。 + +不存在替代入口的旧公开 State、Painter、布局适配和静态辅助类,不应通过深层 src 导入恢复。若业务依赖其具体能力,应使用公开 Widget/Theme/Flutter 原语重新组合,或在业务中维护对应实现;这类代码需要人工迁移。 + +## 0.2.7 公开导出名称索引 + +以下覆盖 0.2.7 主入口追踪到的自有公开声明(不包括外部包导出)。它用于查找旧名和定位处置方向,**不是自动替换表**。即使目标同名,构造参数、回调、默认值或行为也可能变化。公开基类的继承成员与业务自行继承/深层导入需额外审查。当前入口还导出 Material;同名的 Flutter 类型不作为旧 TD 自有声明的兼容实现。 + +| 0.2.7 名称 | 当前入口或处置 | 范围 | +|---|---|---| +| `BadgeConfig` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `CalendarBuilder` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `CalendarFormat` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `CalendarTrigger` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `CalendarType` | `TCalendarVariant` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `CellBuilder` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `ChevronPainter` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `Chinese2Formatter` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `ContentBuilder` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `DatePickerCallback` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `DatePickerModel` | `TDateTimePickerValue` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `DateSelectType` | `DateSelectType` | 同名或前缀对应,仍需核对参数/默认行为 | +| `DateSelectTypeNotifier` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `DateTypeKey` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `DefaultMapFactory` | `DefaultMapFactory` | 同名或前缀对应,仍需核对参数/默认行为 | +| `DefaultStickyHeaderController` | `DefaultStickyHeaderController` | 同名或前缀对应,仍需核对参数/默认行为 | +| `Font` | `Font` | 同名或前缀对应,仍需核对参数/默认行为 | +| `FontExtensions` | `FontExtensions` | 同名或前缀对应,仍需核对参数/默认行为 | +| `FontFamily` | `FontFamily` | 同名或前缀对应,仍需核对参数/默认行为 | +| `FormController` | `TFormController` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `FormItemNotifier` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `HollowCircle` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `IconBuilder` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `IconTextDirection` | `IconTextDirection` | 同名或前缀对应,仍需核对参数/默认行为 | +| `ImageWidget` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `ItemBuilderType` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `ItemDistanceCalculator` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `LabelBuilder` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `LeftItemBuilder` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `LeftLinePainter` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `LeftLineWidget` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `LinkClick` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `MessageLink` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `MessageMarquee` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `MessageTheme` | `TMessageStatus` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `MultiCascaderCallback` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `MultiCascaderListModel` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `MultiLinkedPickerModel` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `MultiPickerCallback` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `OnCellTap` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `OnCheckBoxGroupChange` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `OnCheckValueChanged` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `OnClose` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `OnDelete` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `OnGroupChange` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `OnImageTap` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `OnIndexChange` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `OnLongPress` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `OnLongTap` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `OnRadioGroupChange` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `OnRowSelect` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `OnScroll` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `OnSelect` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `OnSliderThemeDataUpdate` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `OnSwitchChanged` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `OnTap` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `PanelWithDownArrow` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `PlacementEnum` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `PlatformUtil` | `PlatformUtil` | 同名或前缀对应,仍需核对参数/默认行为 | +| `PopRoute` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `PopUpMenuItem` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `PopupClick` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `PopupDialog` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `PopupDialogState` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `Position` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `ProgressIndicator` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `RadioCorner` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `RadioCornerIcon` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `RectClipper` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `RightItemBuilder` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `RowCheckFunc` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `ScaleFormatter` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `SelectableFunc` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `SideItemProps` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `SlideTransitionFrom` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `SliderMeasureData` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `SliverStickyHeader` | `SliverStickyHeader` | 同名或前缀对应,仍需核对参数/默认行为 | +| `SliverStickyHeaderRenderObjectElement` | `SliverStickyHeaderRenderObjectElement` | 同名或前缀对应,仍需核对参数/默认行为 | +| `SliverStickyHeaderState` | `SliverStickyHeaderState` | 同名或前缀对应,仍需核对参数/默认行为 | +| `SliverStickyHeaderWidgetBuilder` | `SliverStickyHeaderWidgetBuilder` | 同名或前缀对应,仍需核对参数/默认行为 | +| `StickyHeaderController` | `StickyHeaderController` | 同名或前缀对应,仍需核对参数/默认行为 | +| `SwipeMotion` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDActionSheet` | `TActionSheet` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDActionSheetAlign` | `TActionSheetAlign` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDActionSheetItem` | `TActionSheetItem` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDActionSheetItemCallback` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDActionSheetTheme` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDAlertDialog` | `TDialog` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDAvatar` | `TAvatar` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDAvatarShape` | `TAvatarShape` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDAvatarSize` | `TAvatarSize` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDAvatarType` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDBackTop` | `TBackTop` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDBackTopStyle` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDBackTopTheme` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDBadge` | `TBadge` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDBadgeBorder` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDBadgeSize` | `TBadgeSize` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDBadgeType` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDBarItemAction` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDBottomTabBar` | `TTabBar` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDBottomTabBarBasicType` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDBottomTabBarComponentType` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDBottomTabBarIndicatorAnimation` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDBottomTabBarItemWithBadge` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDBottomTabBarOutlineType` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDBottomTabBarPopUpBtnConfig` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDBottomTabBarPopUpShapeConfig` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDBottomTabBarTabConfig` | `TTabBarItemConfig` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDBoxShadows` | `TBoxShadows` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDButton` | `TButton` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDButtonEvent` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDButtonIconPosition` | `TButtonIconPosition` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDButtonShape` | `TButtonShape` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDButtonSize` | `TButtonSize` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDButtonStatus` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDButtonStyle` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDButtonTheme` | `TButtonColorPreset` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDButtonType` | `TButtonVariant` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDCalendar` | `TCalendar` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDCalendarBody` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDCalendarCell` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDCalendarHeader` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDCalendarInherited` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDCalendarPopup` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDCalendarStyle` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDCapsuleRangeSliderThumbShape` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDCapsuleRangeSliderTickMarkShape` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDCapsuleRectRangeSliderTrackShape` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDCapsuleRectSliderTrackShape` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDCapsuleRectThemeData` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDCapsuleSliderThumbShape` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDCapsuleSliderTickMarkShape` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDCardStyle` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDCascader` | `TCascader` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDCascaderAction` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDCell` | `TCell` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDCellAlign` | `TCellAlign` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDCellClick` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDCellGroup` | `TCellGroup` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDCellGroupTheme` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDCellStyle` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDCheckBoxSize` | `TCheckboxSize` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDCheckbox` | `TCheckbox` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDCheckboxGroup` | `TCheckboxGroup` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDCheckboxGroupContainer` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDCheckboxGroupContainerState` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDCheckboxGroupController` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDCheckboxGroupInherited` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDCheckboxGroupState` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDCheckboxState` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDCheckboxStyle` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDCircleIndicator` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDCollapse` | `TCollapse` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDCollapseIconTextBuilder` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDCollapsePanel` | `TCollapsePanel` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDCollapseStyle` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDColors` | `TColors` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDConfirmDialog` | `TConfirmDialog` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDContentDirection` | `TContentDirection` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDCustomTab` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDDatePicker` | `TDateTimePicker` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDDialogButtonOptions` | `TDialogAction` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDDialogButtonStyle` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDDialogImagePosition` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDDivider` | `TDivider` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDDrawer` | `TDrawer` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDDrawerItem` | `TDrawerItem` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDDrawerItemClickCallback` | `TDrawerItemClickCallback` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDDrawerPlacement` | `TDrawerPlacement` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDDrawerWidget` | `TDrawer` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDDropdownItem` | `TDropdownMenuItem` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDDropdownItemBuilder` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDDropdownItemContentBuilder` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDDropdownItemController` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDDropdownItemOption` | `TDropdownMenuOption` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDDropdownItemOptionsCallback` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDDropdownMenu` | `TDropdownMenu` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDDropdownMenuDirection` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDEmpty` | `TEmpty` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDEmptyType` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDExtraThemeData` | `TExtraThemeData` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDFab` | `TFab` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDFabShape` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDFabSize` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDFabTheme` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDFontFamilies` | `TFontFamilies` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDFontLoader` | `TFontLoader` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDFontLoaderWidget` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDFonts` | `TFonts` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDFooter` | `TFooter` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDFooterType` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDForm` | `TForm` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDFormItem` | `TFormItem` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDFormItemType` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDFormValidation` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDFractionPagination` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDIconLabel` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDIcons` | `TIcons` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDImage` | `TImage` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDImageDialog` | `TImageViewer` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDImageType` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDImageViewer` | `TImageViewer` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDImageViewerWidget` | `TImageViewer` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDIndexes` | `TIndexes` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDIndexesAnchor` | `TIndexesAnchor` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDIndexesList` | `TIndexesList` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDInput` | `TInput` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDInputDialog` | `TDialog` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDInputSize` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDInputSpacer` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDInputType` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDInputView` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDItemWidget` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDLabelWidget` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDLink` | `TLink` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDLinkConfiguration` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDLinkSize` | `TLinkSize` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDLinkState` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDLinkStyle` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDLinkType` | `TLinkColorPreset` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDLoading` | `TLoading` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDLoadingController` | `TLoadingController` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDLoadingIcon` | `TLoadingIcon` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDLoadingSize` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDMap` | `TMap` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDMessage` | `TMessage` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDMultiCascader` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDMultiLinkedPicker` | `TPicker` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDMultiPicker` | `TPicker` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDNavBar` | `TNavBar` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDNavBarItem` | `TNavBarItem` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDNavBarItemBorder` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDNoOverlayShape` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDNoneIndicator` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDNoticeBar` | `TNoticeBar` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDNoticeBarStyle` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDNoticeBarTheme` | `TNoticeBarStatus` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDNoticeBarType` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDPageTransformer` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDPicker` | `TPicker` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDPopover` | `TPopover` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDPopoverPlacement` | `TPopoverPlacement` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDPopoverTheme` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDPopoverWidget` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDPopupBasePanel` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDPopupBottomConfirmPanel` | `TPickerPopup` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDPopupBottomDisplayPanel` | `TPopupOptions` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDPopupCenterPanel` | `TPopupOptions` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDProgress` | `TProgress` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDProgressLabelPosition` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDProgressStatus` | `TProgressStatus` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDProgressType` | `TProgressVariant` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDRadio` | `TRadio` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDRadioGroup` | `TRadioGroup` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDRadioGroupState` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDRadioState` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDRadioStyle` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDRadius` | `TRadius` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDRangeSlider` | `TRangeSlider` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDRate` | `TRate` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDRefreshHeader` | `TPullDownRefresh` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDResourceDelegate` | `TResourceDelegate` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDResourceManager` | `TResourceManager` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDResult` | `TResult` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDResultTheme` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDRoundRangeSliderThumbShape` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDRoundRangeSliderTickMarkShape` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDRoundSliderThumbShape` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDRoundSliderTickMarkShape` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDRoundedRectRangeSliderTrackShape` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDRoundedRectSliderTrackShape` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDSearchAlignment` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDSearchBar` | `TSearchBar` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDSearchBarCallBack` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDSearchBarClearEvent` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDSearchBarEvent` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDSearchStyle` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDSelectOption` | `TTreeSelectOption` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDSelectTag` | `TSelectTag` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDSideBar` | `TSideBar` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDSideBarController` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDSideBarItem` | `TSideBarItem` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDSideBarStyle` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDSkeleton` | `TSkeleton` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDSkeletonAnimation` | `TSkeletonAnimation` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDSkeletonRowCol` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDSkeletonRowColObj` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDSkeletonRowColObjStyle` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDSkeletonRowColStyle` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDSkeletonTheme` | `TSkeletonVariant` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDSlidePopupRoute` | `TPopup` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDSlider` | `TSlider` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDSliderState` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDSliderThemeData` | `TSliderThemeData` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDSpacers` | `TSpacers` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDStepper` | `TStepper` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDStepperController` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDStepperEventType` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDStepperIconButton` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDStepperIconType` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDStepperOverlimitFunction` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDStepperOverlimitType` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDStepperSize` | `TStepperSize` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDStepperTheme` | `TStepperVariant` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDSteps` | `TSteps` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDStepsDirection` | `TStepsDirection` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDStepsItemData` | `TStepsItemData` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDStepsStatus` | `TStepsStatus` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDSwipeCell` | `TSwipeCell` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDSwipeCellAction` | `TSwipeCellAction` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDSwipeCellInherited` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDSwipeCellPanel` | `TSwipeCellPanel` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDSwipeDirection` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDSwiperArrowPagination` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDSwiperDotsPagination` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDSwiperPagination` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDSwitch` | `TSwitch` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDSwitchSize` | `TSwitchSize` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDSwitchState` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDSwitchType` | `TSwitchVariant` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDTDResourceBuilder` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDTab` | `TTab` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDTabBar` | `TTabsBar` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDTabBarIndicator` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDTabBarOutlineType` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDTabBarVerticalIndicator` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDTabBarView` | `TTabsBarView` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDTabOutlineType` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDTabSize` | `TTabsBarSize` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDTable` | `TTable` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDTableCol` | `TTableColumn` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDTableColAlign` | `TTableColumnAlign` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDTableColFixed` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDTableEmpty` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDTableState` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDTag` | `TTag` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDTagShape` | `TTagShape` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDTagSize` | `TTagSize` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDTagStyle` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDTagTheme` | `TTagColorPreset` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDTapEvent` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDTapFunction` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDText` | `TText` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDTextConfiguration` | `TTextThemeData` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDTextLabel` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDTextPaddingConfig` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDTextSpan` | `TTextSpan` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDTextarea` | `TTextarea` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDTextareaLayout` | `TTextareaLayout` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDTheme` | `TThemeData` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDThemeData` | `TThemeData` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDTimeCounter` | `TTimeCounter` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDTimeCounterController` | `TTimeCounterController` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDTimeCounterDirection` | `TTimeCounterDirection` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDTimeCounterSize` | `TTimeCounterSize` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDTimeCounterStatus` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDTimeCounterStyle` | `TTimeCounterVariant` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDTimeCounterTheme` | `TTimeCounterVariant` | 入口重组,见对应组件;不保证参数/行为兼容 | +| `TDToast` | `TToast` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDToastConfig` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDTreeSelect` | `TTreeSelect` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDTreeSelectChangeEvent` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDTreeSelectStyle` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDUpload` | `TUpload` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDUploadBoxType` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDUploadClickEvent` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDUploadErrorEvent` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDUploadFile` | `TUploadFile` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDUploadFileStatus` | `TUploadFileStatus` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDUploadMediaType` | `TUploadMediaType` | 同名或前缀对应,仍需核对参数/默认行为 | +| `TDUploadType` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDUploadValidatorError` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDUploadValidatorEvent` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDUploadValueChangedEvent` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TDate` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TGIconHeaderWidget` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TGIconHeaderWidgetState` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TapCallback` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TextAlignment` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `TrapezoidPath` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `horizontalChild` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | +| `slideTransitionFromToAlignment` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | diff --git a/tdesign-site/site/site.config.mjs b/tdesign-site/site/site.config.mjs index b6954112e9..1ed1cf3124 100644 --- a/tdesign-site/site/site.config.mjs +++ b/tdesign-site/site/site.config.mjs @@ -11,6 +11,13 @@ export default { path: '/flutter/getting-started', component: () => import('@docs/getting-started.md'), }, + { + title: '0.2.7 → 1.0 迁移', + name: 'migration-1-0', + meta: { docType: 'explain' }, + path: '/flutter/migration-1-0', + component: () => import('@docs/migration-1-0.md'), + }, { title: '贡献指南', name: 'develop', diff --git a/tool/audit_compiled_token_consumption.mjs b/tool/audit_compiled_token_consumption.mjs new file mode 100644 index 0000000000..71c36c495c --- /dev/null +++ b/tool/audit_compiled_token_consumption.mjs @@ -0,0 +1,71 @@ +import { readFileSync, readdirSync, writeFileSync } from 'node:fs'; +import { createHash } from 'node:crypto'; +import { createRequire } from 'node:module'; +import { dirname, join, relative, resolve } from 'node:path'; +import { fileURLToPath } from 'node:url'; + +// Compile frozen Less so @@ lookups are resolved instead of treating every +// declaration in a component containing @@ as a possible dynamic consumer. +const repo = resolve(dirname(fileURLToPath(import.meta.url)), '..'); +const miniRoot = process.argv[2]; +if (!miniRoot) throw new Error('Usage: node tool/audit_compiled_token_consumption.mjs '); +const require = createRequire(join(repo, 'tdesign-site/package.json')); +const less = require('less'); +const audit = JSON.parse(readFileSync(join(repo, 'specs/048-component-token-theme-ownership/component-consumption-audit.json'))); +const source = join(miniRoot, 'packages/components'); +function files(path) { + return readdirSync(path, { withFileTypes: true }).sort((a, b) => a.name.localeCompare(b.name)) + .flatMap(entry => entry.isDirectory() ? files(join(path, entry.name)) : [join(path, entry.name)]); +} +const inputs = files(source); +const uses = new Map(); +const failures = []; +const compiled = []; +const byHash = new Map(); +for (const file of inputs.filter(file => file.endsWith('.less'))) { + const text = readFileSync(file, 'utf8'); + const path = relative(miniRoot, file); + try { + const result = await less.render(text, { filename: file, javascriptEnabled: false }); + compiled.push({ file: path, sha256: createHash('sha256').update(text).digest('hex'), cssSha256: createHash('sha256').update(result.css).digest('hex') }); + for (const block of result.css.matchAll(/([^{}]+)\{([^{}]*)\}/g)) { + const selector = block[1].trim(); + for (const declaration of block[2].split(';')) { + const match = declaration.trim().match(/^([\w-]+)\s*:\s*([\s\S]+)$/); + if (!match) continue; + for (const variable of match[2].matchAll(/var\(\s*(--td-[\w-]+)/g)) { + const record = { file: path, selector, property: match[1], kind: match[1].startsWith('--') ? 'custom-property-forward' : 'render-property', value: match[2].trim() }; + const key = `${variable[1]}:${JSON.stringify(record)}`; + if (byHash.has(key)) continue; + byHash.set(key, true); + const list = uses.get(variable[1]) ?? []; + list.push(record); uses.set(variable[1], list); + } + } + } + } catch (error) { + failures.push({ file: path, error: String(error) }); + } +} +const external = inputs.filter(file => /\.(?:wxss|wxml|wxs|js|ts)$/.test(file)).map(file => ({ file: relative(miniRoot, file), lines: readFileSync(file, 'utf8').split('\n') })); +const rows = audit.rows.map(row => { + const nonLessReferences = external.flatMap(({ file, lines }) => lines.flatMap((line, index) => line.includes(row.miniCssName) ? [{ file, line: index + 1, text: line.trim() }] : [])); + const compiledUses = uses.get(row.miniCssName) ?? []; + const relatedFailures = failures.filter(failure => failure.file.startsWith(`packages/components/${row.miniComponent}/`) || failure.file.startsWith('packages/components/common/')); + return { name: row.name, miniComponent: row.miniComponent, cssName: row.miniCssName, + previousDecision: row.reviewDecision, compiledUses, nonLessReferences, relatedFailures, + conclusion: compiledUses.length ? 'compiled-css-consumer-found' + : nonLessReferences.length ? 'non-less-reference-needs-review' + : relatedFailures.length ? 'compilation-incomplete' + : 'no-consumer-in-compiled-css-or-other-source', + // Absence is limited to this frozen archive; not a promise about all hosts. + finalPaintVerified: false, + }; +}); +const counts = {}; +for (const row of rows) counts[row.conclusion] = (counts[row.conclusion] ?? 0) + 1; +const output = { miniprogramCommit: audit.miniprogramCommit, lessVersion: less.version.join('.'), + caveat: 'Compilation proves selector/property consumption, not browser runtime, CSS host overrides, Flutter parity or design pixels. Source root must be the recorded frozen archive.', + compiled, failures, counts, rows }; +writeFileSync(join(repo, 'specs/059-component-token-runtime-evidence/compiled-consumption.json'), `${JSON.stringify(output, null, 2)}\n`); +console.log(JSON.stringify({ compiledFiles: compiled.length, failures: failures.length, counts })); diff --git a/tool/summarize_component_token_evidence.mjs b/tool/summarize_component_token_evidence.mjs new file mode 100644 index 0000000000..48e76fe96d --- /dev/null +++ b/tool/summarize_component_token_evidence.mjs @@ -0,0 +1,198 @@ +import { createHash } from 'node:crypto'; +import { existsSync, readFileSync, readdirSync, writeFileSync } from 'node:fs'; +import { dirname, join, relative, resolve } from 'node:path'; +import { fileURLToPath } from 'node:url'; +import { execFileSync } from 'node:child_process'; + +// Usage: node tool/summarize_component_token_evidence.mjs +// Stage results do not mean that visual acceptance or all 677 rows are complete. +const repo = resolve(dirname(fileURLToPath(import.meta.url)), '..'); +const logs = process.argv[2]; +if (!logs) throw new Error('Provide the validation log directory'); +const target = join(repo, 'specs/059-component-token-runtime-evidence'); +const read = file => JSON.parse(readFileSync(file, 'utf8')); +const sha = data => createHash('sha256').update(data).digest('hex'); +const audit = read(join(repo, 'specs/048-component-token-theme-ownership/component-consumption-audit.json')); +const compiled = read(join(target, 'compiled-consumption.json')); +if (compiled.miniprogramCommit !== audit.miniprogramCommit || compiled.failures.length) { + throw new Error('Frozen compilation evidence is incomplete or from a different revision'); +} +function observations(sdk) { + const text = readFileSync(join(logs, `focus-${sdk}.log`), 'utf8'); + if (!/\+46: All tests passed!/.test(text)) throw new Error(`${sdk} focus suite did not pass 46 tests`); + return text.split('\n').flatMap(line => { + const offset = line.indexOf('TOKEN_EVIDENCE '); + return offset < 0 ? [] : [JSON.parse(line.slice(offset + 15))]; + }).sort((a, b) => JSON.stringify(a).localeCompare(JSON.stringify(b))); +} +const low = observations('low'); +const high = observations('high'); +if (JSON.stringify(low) !== JSON.stringify(high)) throw new Error('SDK observations differ; review before summarizing'); +if (low.some(row => row.enforced && !row.matches)) throw new Error('An enforced contract failed'); +const byName = new Map(); +for (const row of low) { + const list = byName.get(row.name) ?? []; + list.push(row); byName.set(row.name, list); +} +const sourceLocators = read(join(repo, 'specs/058-release-preparation/current-token-verification.json')); +const globals = read(join(repo, 'specs/047-miniprogram-token-alignment/token-audit.json')); +const approved = globals.allowedGlobalValueExceptions; +const notes = { + buttonBorderWidth: 'Flutter outline/ghost width is 1dp. Frozen Less declares 4rpx on a WeChat button pseudo-element. Native pseudo-element geometry/design evidence is still required; do not infer a 2dp Flutter border from the raw declaration.', + buttonPrimaryDisabledColor: 'Dark primary fill foreground is an existing explicit Spec048 adjudication (fontWhite4), overriding the older frozen CSS default. This audit does not reverse it.', + avatarCircleBorderRadius: 'Existing approved radiusCircle exception: CSS 50% versus Flutter 9999dp; custom radius forwarding is exercised.', + avatarBorderColor: 'Frozen avatar border default is literal white; Flutter avatar groups use bgColorContainer. Light default matches, dark/custom differ. Needs recorded design disposition.', + inputVerticalPadding: 'Standalone Flutter padding is documented as a fixed 16dp; frozen Less falls back to spacer2. Default matches, custom spacing does not. Decide the supported fallback contract before changing behavior.', + buttonIconSpacer: 'The declaration has no consumer in compiled frozen CSS or other frozen source. The observed Flutter 4dp gap versus declared 8dp alone is not a defect; inspect actual upstream markup/global spacer use before making a visual change.', + progressCircleInnerBgColor: 'Dark frozen CSS forwards undefined --bg-color-page; transparent without host definition is the existing documented adjudication. Host CSS overrides are outside this Flutter default test.', +}; +const rows = audit.rows.filter(row => row.reviewDecision === 'pending').map(row => { + const mini = compiled.rows.find(item => item.name === row.name); + const samples = byName.get(row.name) ?? []; + const locators = sourceLocators.components.find(item => item.name === row.name); + let stage; + if (mini.conclusion === 'no-consumer-in-compiled-css-or-other-source') stage = 'no-frozen-source-consumer-found'; + else if (!samples.length) stage = 'runtime-evidence-pending'; + else if (row.name === 'buttonBorderWidth') stage = 'platform-geometry-review-pending'; + else if (samples.some(sample => !sample.matches)) stage = 'runtime-difference-needs-resolution'; + else stage = 'runtime-default-verified-visual-pending'; + const requiredEvidence = []; + if (stage === 'runtime-evidence-pending') requiredEvidence.push('Mount the matching supported public scenario and assert its final Widget/layout/Painter value, not only a getter.'); + if (stage === 'runtime-difference-needs-resolution') requiredEvidence.push('Resolve recorded target/runtime differences through an implementation fix or documented design/contract adjudication.'); + if (stage === 'platform-geometry-review-pending') requiredEvidence.push(notes.buttonBorderWidth); + if (stage !== 'no-frozen-source-consumer-found') { + if (!samples.some(sample => sample.scenario.includes('custom=true'))) requiredEvidence.push('Exercise applicable custom global Token and existing public override paths; do not invent a new Theme API.'); + requiredEvidence.push('Check applicable existing Theme/instance override paths per slot; a custom observation is not proof of every public branch.'); + requiredEvidence.push('Complete applicable Linux 3.32 Golden/design/state review and device evidence; no final pixel approval is asserted here.'); + } + const directory = row.flutterDirectory?.split('/').at(-1); + const candidateDirectory = directory ? join(repo, 'tdesign-component/test/components', directory) : null; + const candidateExistingTests = []; + if (candidateDirectory && existsSync(candidateDirectory) && !samples.length) { + const getter = row.globalFallbackGetter; + if (getter) { + const pattern = new RegExp(`\\.\\s*${getter}\\b`); + for (const file of files(candidateDirectory).filter(file => file.endsWith('.dart'))) { + readFileSync(file, 'utf8').split('\n').forEach((line, index) => { + if (candidateExistingTests.length < 6 && pattern.test(line)) { + candidateExistingTests.push({ file: `${relative(repo, file)}:${index + 1}`, text: line.trim(), candidateOnly: true }); + } + }); + } + } + } + if (row.name.includes('Dashed')) requiredEvidence.unshift('Current TButtonVariant has no dashed case: resolve the supported capability/migration contract, then test the chosen behavior. Outline is not equivalent evidence.'); + if (/^input(?:Label|.*Tips)/.test(row.name)) requiredEvidence.unshift('Review TFormItem + TInput composition and the standalone Input contract before deciding which owner supplies this slot.'); + if (/^button.*BorderColor$/.test(row.name) && !samples.length) requiredEvidence.unshift('Check whether the frozen fill border is visually represented by the Flutter fill; color equality alone does not prove border geometry.'); + const component = samples.length ? directory : null; + const testFile = component ? `tdesign-component/test/components/${component}/t_${component}_test.dart` : null; + const testLine = testFile ? readFileSync(join(repo, testFile), 'utf8').split('\n').findIndex(line => line.startsWith(`void ${component}TokenConsumptionTests()`)) + 1 : null; + return { name: row.name, component: row.miniComponent, previousDecision: row.reviewDecision, + frozenTarget: { light: row.miniLightDefault, dark: row.miniDarkDefault, expressions: row.fallbackExpressions, source: row.sourceLocations }, + compiledSource: { conclusion: mini.conclusion, selectors: mini.compiledUses, nonLessReferences: mini.nonLessReferences }, + flutterNameLocators: locators?.currentNameLocators ?? {}, + approvedGlobalException: approved[row.globalFallbackGetter] ?? null, + stage, runtimeDefaultVerified: stage === 'runtime-default-verified-visual-pending', + testEntry: testFile ? `${testFile}:${testLine}` : null, + observedScenariosPerSdk: samples.length, + hasCustomTokenObservation: samples.some(sample => sample.scenario.includes('custom=true')), + observationsFile: samples.length ? 'runtime-observations.json' : null, + notes: notes[row.name] ?? null, candidateExistingTests, requiredEvidence, + finalPaintVerified: false, + }; +}); +if (rows.length !== 677) throw new Error(`Expected the frozen 677 pending rows, got ${rows.length}`); +const counts = {}; +for (const row of rows) counts[row.stage] = (counts[row.stage] ?? 0) + 1; +function files(path) { + return readdirSync(path, { withFileTypes: true }).sort((a, b) => a.name.localeCompare(b.name)) + .flatMap(entry => entry.isDirectory() ? files(join(path, entry.name)) : [join(path, entry.name)]); +} +const relevantTests = readFileSync(join(logs, 'manifest-files.txt'), 'utf8').trim().split('\n').map(file => `tdesign-component/${file}`); +const fingerprintFiles = [ + ...files(join(repo, 'tdesign-component/lib')), + ...files(join(repo, 'tdesign-component/assets')), + ...relevantTests.map(file => join(repo, file)), + join(repo, 'tdesign-component/test/support/token_consumption_evidence.dart'), + join(repo, 'tdesign-component/tool/component_test_manifest.dart'), + join(repo, 'tdesign-component/pubspec.yaml'), +]; +const fingerprints = fingerprintFiles.map(file => ({ file: relative(repo, file), sha256: sha(readFileSync(file)) })); +const checkpoints = ['low', 'high'].map(sdk => { + const regression = readFileSync(join(logs, `full-${sdk}.log`), 'utf8'); + const analysis = readFileSync(join(logs, `analyze-${sdk}.log`), 'utf8'); + if (!/All tests passed!/.test(regression) || !/No issues found!/.test(analysis)) throw new Error(`${sdk} final validation failed`); + const coverage = ['button', 'switch', 'input', 'link', 'avatar', 'empty', 'progress'].map(component => { + const text = readFileSync(join(logs, `coverage-${sdk}-${component}.log`), 'utf8'); + const match = text.match(/production LH\/LF = (\d+)\/(\d+) = ([\d.]+)%/); + if (!match || text.includes('ERROR:') || Number(match[3]) < 95) throw new Error(`${sdk} ${component} coverage failed`); + return { component, hit: Number(match[1]), found: Number(match[2]), percent: Number(match[3]), logSha256: sha(text) }; + }); + return { sdk: read(join(logs, `sdk-${sdk}.json`)), + lockSha256: sha(readFileSync(sdk === 'low' ? join(repo, 'tdesign-component/pubspec.lock') : join(logs, 'pubspec-high.lock'))), + regressionCount: Number(regression.match(/\+(\d+): All tests passed!/)[1]), + regressionLogSha256: sha(regression), analysisLogSha256: sha(analysis), + focusCount: 46, focusLogSha256: sha(readFileSync(join(logs, `focus-${sdk}.log`))), coverage }; +}); +const summary = { date: '2026-10-15', baseline: execFileSync('git', ['rev-parse', 'HEAD'], { cwd: repo, encoding: 'utf8' }).trim(), + miniprogramCommit: audit.miniprogramCommit, frozenArchive: { + url: `https://codeload.github.com/Tencent/tdesign-miniprogram/tar.gz/${audit.miniprogramCommit}`, + sha256: sha(readFileSync(join(logs, 'frozen-source.tar.gz'))), + }, scope: '677 historical pending rows; runtime default evidence and frozen source applicability are separate from final visual acceptance.', + counts, observationNames: byName.size, observationsPerSdk: low.length, identicalAcrossSdks: true, + checkpoints, evidenceTools: ['tool/audit_compiled_token_consumption.mjs', 'tool/summarize_component_token_evidence.mjs'].map(file => ({ file, sha256: sha(readFileSync(join(repo, file))) })), sourceFingerprintSha256: sha(JSON.stringify(fingerprints)), fingerprints, rows }; +writeFileSync(join(target, 'runtime-observations.json'), `${JSON.stringify({ lowSdk: checkpoints[0].sdk.frameworkVersion, highSdk: checkpoints[1].sdk.frameworkVersion, identicalAcrossSdks: true, observations: low }, null, 2)}\n`); +writeFileSync(join(target, 'runtime-review.json'), `${JSON.stringify(summary, null, 2)}\n`); +console.log(JSON.stringify({ counts, observationNames: byName.size, observationsPerSdk: low.length, regressions: checkpoints.map(item => item.regressionCount) })); + +const labels = { + 'runtime-evidence-pending': '待补运行证据', + 'runtime-default-verified-visual-pending': '默认运行已验证,视觉待验收', + 'runtime-difference-needs-resolution': '运行差异待处理', + 'platform-geometry-review-pending': '平台几何待裁定', + 'no-frozen-source-consumer-found': '冻结源码未找到消费者', +}; +const totals = new Map(); +for (const row of rows) { + const item = totals.get(row.component) ?? {}; + item[row.stage] = (item[row.stage] ?? 0) + 1; + totals.set(row.component, item); +} +const output = [ + '# 677项组件消费队列:当前阶段记录', '', + '这是阶段验收,不是正式1.0发布批准。原始静态盘点保留为基线,当前进展以本记录及runtime-review.json为准。', '', + '| 状态 | 项数 |', '|---|---:|', + ...Object.entries(counts).map(([key, value]) => `| ${labels[key]} | ${value} |`), '', + `两套SDK各46项新增检查,逐SDK采集${low.length}条观察,涉及${byName.size}个变量名(含1项既有已审变量);两套观察逐条相同。46项是各439项完整相关功能回归的子集,不重复相加。`, '', + '## 证据解释', '', + '- 默认运行已验证只关闭该层证据;不表示每个公开覆盖路径、所有状态、设计像素或真机已通过。', + '- enforce=false是差异诊断,不是通过断言;这些观察进入差异队列,不冒充绿色对齐用例。既有及新增已确认契约的assert仍由普通测试执行。', + '- 31项是变量级差异,可能共用根因,不等于31个独立缺陷。固定规格、语义Token别名与设计例外需要契约裁定。', + '- 已批准的grayColor3/radiusCircle等全局差异沿用Spec047,主色填充按钮深色禁用文字沿用Spec048;不反向覆盖已批准决策。', + '- 5项只关闭冻结版本的消费者查找,不删除公开CSS变量,也不推定未来版本无消费者。', + '- 未验证或发现差异的条目没有修改finalPaintVerified。当前未改生产行为、CI、测试清单、版本号或Golden。', '', + '## 实测差异', '', + '| 变量 | 代表场景 | 实际值 | 比较目标 |', '|---|---|---|---|', +]; +for (const row of rows.filter(row => row.stage === 'runtime-difference-needs-resolution')) { + const sample = byName.get(row.name).find(sample => !sample.matches && sample.scenario.includes('custom=false')) ?? byName.get(row.name).find(sample => !sample.matches); + output.push(`| ${row.name} | ${sample.scenario} | ${sample.actual} | ${sample.expected} |`); +} +output.push('', '完整浅/暗、正常/按压/禁用、默认/自定义观察见[runtime-observations.json](runtime-observations.json),目标源码、现有测试候选和每项缺口见[runtime-review.json](runtime-review.json)。', '', '## 逐组件分布', '', '| 组件 | 默认运行已验证 | 差异待处理 | 平台几何 | 无消费者 | 待补运行 |', '|---|---:|---:|---:|---:|---:|'); +for (const [component, item] of [...totals].sort(([a], [b]) => a.localeCompare(b))) { + output.push(`| ${component} | ${item['runtime-default-verified-visual-pending'] ?? 0} | ${item['runtime-difference-needs-resolution'] ?? 0} | ${item['platform-geometry-review-pending'] ?? 0} | ${item['no-frozen-source-consumer-found'] ?? 0} | ${item['runtime-evidence-pending'] ?? 0} |`); +} +output.push('', '## 本批默认运行通过清单', '', '| 变量 | 测试入口 | 观察数/SDK |', '|---|---|---:|'); +for (const row of rows.filter(row => row.runtimeDefaultVerified)) { + const [file, line] = row.testEntry.split(':'); + output.push(`| ${row.name} | [测试函数](../../${file}#L${line}) | ${row.observedScenariosPerSdk} |`); +} +output.push('', '## 冻结源码无消费者', '', ...rows.filter(row => row.stage === 'no-frozen-source-consumer-found').map(row => `- ${row.name}:声明存在,但本次冻结源码的编译CSS和其他源文件均未找到消费;保留声明,后续源版本变化重审。`), ''); +writeFileSync(join(target, 'runtime-review.md'), output.join('\n')); +if (process.argv.includes('--require-complete')) { + const unresolved = rows.filter(row => row.stage !== 'no-frozen-source-consumer-found' && !row.finalPaintVerified).length; + if (unresolved) { + console.error(`NOT COMPLETE: ${unresolved} rows still need applicable runtime/contract/visual acceptance.`); + process.exitCode = 1; + } +} diff --git a/tool/verify_token_difference_resolutions.mjs b/tool/verify_token_difference_resolutions.mjs new file mode 100644 index 0000000000..be67ad13a3 --- /dev/null +++ b/tool/verify_token_difference_resolutions.mjs @@ -0,0 +1,129 @@ +import { createHash } from 'node:crypto'; +import { existsSync, readFileSync, writeFileSync } from 'node:fs'; +import { dirname, join, resolve } from 'node:path'; +import { fileURLToPath } from 'node:url'; +import { execFileSync } from 'node:child_process'; + +// Verifies this resolution batch while preserving the original Spec059 target. +const root = resolve(dirname(fileURLToPath(import.meta.url)), '..'); +const logs = process.argv[2]; +if (!logs) throw new Error('Usage: node tool/verify_token_difference_resolutions.mjs '); +const output = join(root, 'specs/060-token-difference-resolution'); +const read = path => JSON.parse(readFileSync(path, 'utf8')); +const sha = bytes => createHash('sha256').update(bytes).digest('hex'); +const baselinePath = join(root, 'specs/059-component-token-runtime-evidence/runtime-review.json'); +const baseline = read(baselinePath); +const rules = read(join(output, 'resolution-rules.json')); +const expectedNames = baseline.rows.filter(row => ['runtime-difference-needs-resolution', 'platform-geometry-review-pending'].includes(row.stage)).map(row => row.name).sort(); +if (JSON.stringify(rules.rows.map(row => row.name).sort()) !== JSON.stringify(expectedNames)) throw new Error('Every one of the 32 original items must have exactly one disposition'); +function observations(text) { + return text.split('\n').flatMap(line => { + const offset = line.indexOf('TOKEN_EVIDENCE '); + return offset < 0 ? [] : [JSON.parse(line.slice(offset + 15))]; + }).sort((a, b) => JSON.stringify(a).localeCompare(JSON.stringify(b))); +} +const envs = ['low', 'high'].map(sdk => { + const before = read(join(logs, `source-${sdk}-before.json`)); + const after = read(join(logs, `source-${sdk}-after.json`)); + if (JSON.stringify(before) !== JSON.stringify(after)) throw new Error(`${sdk} source or lock changed during validation`); + for (const file of after.files) { + if (sha(readFileSync(join(root, 'tdesign-component', file.file))) !== file.sha256) throw new Error(`Current source differs from ${sdk} test snapshot: ${file.file}`); + } + const focusText = readFileSync(join(logs, `focus-${sdk}.log`), 'utf8'); + const fullText = readFileSync(join(logs, `full-${sdk}.log`), 'utf8'); + const analysisText = readFileSync(join(logs, `analyze-${sdk}.log`), 'utf8'); + const migrationFile = sdk === 'high' && existsSync(join(logs, 'migration-high-retry.log')) ? 'migration-high-retry.log' : `migration-${sdk}.log`; + const migrationText = readFileSync(join(logs, migrationFile), 'utf8'); + if (!/\+47: All tests passed!/.test(focusText) || !/\+440: All tests passed!/.test(fullText) || !/No issues found!/.test(analysisText) || !/\+21: All tests passed!/.test(migrationText) || !/No issues found!/.test(migrationText)) throw new Error(`${sdk} validation did not complete`); + const coverage = ['button', 'switch', 'input', 'link', 'avatar', 'empty', 'progress'].map(component => { + const text = readFileSync(join(logs, `coverage-${sdk}-${component}.log`), 'utf8'); + const match = text.match(/production LH\/LF = (\d+)\/(\d+) = ([\d.]+)%/); + if (!match || text.includes('ERROR:') || Number(match[3]) < 95) throw new Error(`${sdk} ${component} coverage failed`); + return { component, hit: Number(match[1]), found: Number(match[2]), percent: Number(match[3]), logSha256: sha(text) }; + }); + const samples = observations(focusText); + if (samples.some(sample => sample.enforced && !sample.matches)) throw new Error(`${sdk} enforced contract failed`); + return { sdk: read(join(logs, `sdk-${sdk}.json`)), snapshot: after, + focusCount: 47, regressionCount: 440, migrationCount: 21, coverage, + migrationRetryUsed: sdk === 'high' && migrationFile.includes('retry'), + logHashes: { focus: sha(focusText), full: sha(fullText), analysis: sha(analysisText), migration: sha(migrationText) }, samples }; +}); +if (JSON.stringify(envs[0].snapshot.files) !== JSON.stringify(envs[1].snapshot.files) || JSON.stringify(envs[0].samples) !== JSON.stringify(envs[1].samples)) throw new Error('The two SDKs did not verify identical source/observations'); +const samples = envs[0].samples; +const byName = new Map(); +for (const sample of samples) { + const list = byName.get(sample.name) ?? []; + list.push(sample); byName.set(sample.name, list); +} +const originalObservations = read(join(root, 'specs/059-component-token-runtime-evidence/runtime-observations.json')).observations; +const rows = rules.rows.map(rule => { + const all = byName.get(rule.name) ?? []; + const raw = all.filter(sample => !sample.scenario.startsWith('contract/')); + const contract = all.filter(sample => sample.scenario.startsWith('contract/')); + if (rule.disposition.startsWith('fixed-') && (!raw.length || raw.some(sample => !sample.matches || !sample.enforced))) throw new Error(`${rule.name} fix is not fully asserted`); + if (rule.disposition.startsWith('existing-contract-') && (!contract.length || contract.some(sample => !sample.matches || !sample.enforced))) throw new Error(`${rule.name} contract has no enforced live witness`); + const references = (rule.contractReferences ?? []).map(reference => { + const text = readFileSync(join(root, reference.file), 'utf8'); + const line = text.split('\n').findIndex(line => line.includes(reference.quote)) + 1; + if (!line) throw new Error(`${rule.name} cited contract no longer exists`); + return { ...reference, line, sha256: sha(text) }; + }); + return { ...rule, contractReferences: references, + beforeExamples: originalObservations.filter(sample => sample.name === rule.name && !sample.matches), + afterRawComparisons: raw, currentContractWitnesses: contract, + runtimeResolved: rule.disposition.startsWith('fixed-') || rule.disposition.startsWith('existing-contract-'), + finalPaintVerified: false }; +}); +const counts = {}; +for (const row of rows) counts[row.disposition] = (counts[row.disposition] ?? 0) + 1; +if (counts['fixed-runtime-verified-visual-pending'] !== 2 || counts['existing-contract-verified-visual-pending'] !== 8 || counts['implementation-plan-pending'] !== 21 || counts['platform-geometry-plan-pending'] !== 1) throw new Error('Unexpected resolution counts'); +const patch = join(output, 'proposed-visual-fixes.patch'); +execFileSync('git', ['apply', '--check', patch], { cwd: root }); +const prototypeBefore = read(join(logs, 'proposed-source-before.json')); +const prototypeAfter = read(join(logs, 'proposed-source-after.json')); +if (JSON.stringify(prototypeBefore) !== JSON.stringify(prototypeAfter)) throw new Error('Prototype source or lock changed during testing'); +const patchedFiles = new Set(['lib/src/components/button/t_button_resolve.dart', 'lib/src/components/switch/t_switch_resolve.dart', 'lib/src/components/switch/t_switch_theme_data.dart', 'lib/src/components/input/t_input.dart']); +for (const file of prototypeAfter.files) { + if (!patchedFiles.has(file.file) && envs[1].snapshot.files.find(other => other.file === file.file)?.sha256 !== file.sha256) throw new Error(`Unexpected prototype change: ${file.file}`); +} +if (prototypeAfter.lockSha256 !== envs[1].snapshot.lockSha256) throw new Error('Prototype dependency lock differs from the high SDK checkpoint'); +const prototypeText = readFileSync(join(logs, 'proposed-focus-high.log'), 'utf8'); +if (!/\+47: All tests passed!/.test(prototypeText)) throw new Error('The isolated prototype did not pass'); +const prototype = observations(prototypeText); +const targets = ['buttonDefaultActiveBgColor', 'buttonLightActiveBgColor', 'switchLabelColor', 'inputBorderColor']; +for (const name of targets) { + const evidence = prototype.filter(sample => sample.name === name); + if (!evidence.length || evidence.some(sample => !sample.matches)) throw new Error(`Prototype did not resolve ${name}`); +} +const report = { + date: '2026-10-15', baselineCommit: baseline.baseline, baselineEvidenceSha256: sha(readFileSync(baselinePath)), + counts, unchangedRuntimePending: 524, + globalStages: { 'runtime-evidence-pending': 524, 'runtime-default-verified-visual-pending': 116, + 'fixed-runtime-verified-visual-pending': 2, 'existing-contract-verified-visual-pending': 8, + 'implementation-plan-pending': 21, 'platform-geometry-plan-pending': 1, 'no-frozen-source-consumer-found': 5 }, + scope: '32 previously disputed rows; contract support is not final visual acceptance. No claim that the remaining 524 rows are verified.', + sourceFilesSha256: sha(JSON.stringify(envs[0].snapshot.files)), fingerprints: envs[0].snapshot.files, + evidenceTools: [{ file: 'tool/verify_token_difference_resolutions.mjs', sha256: sha(readFileSync(fileURLToPath(import.meta.url))) }], + checkpoints: envs.map(({ samples, snapshot, ...metadata }) => ({ ...metadata, lockSha256: snapshot.lockSha256 })), + proposal: { appliedToMainWorkspace: false, patchSha256: sha(readFileSync(patch)), appliesCleanly: true, + isolatedFunctionalSdk: envs[1].sdk.frameworkVersion, isolatedFocusCount: 47, + isolatedLogSha256: sha(prototypeText), isolatedSourceSnapshot: prototypeAfter, targetObservations: prototype.filter(sample => targets.includes(sample.name)), + limitations: ['Not a full regression of the prototype', 'Low SDK prototype not run', 'Linux Golden and design/host verification remain pending'] }, + rows, +}; +if (Object.values(report.globalStages).reduce((a, b) => a + b, 0) !== 677) throw new Error('677 row totals are inconsistent'); +writeFileSync(join(output, 'resolution-report.json'), `${JSON.stringify(report, null, 2)}\n`); +writeFileSync(join(output, 'runtime-observations.json'), `${JSON.stringify({ identicalAcrossSdks: true, observations: samples }, null, 2)}\n`); +const implemented = execFileSync('git', ['diff', '--', 'tdesign-component/lib/src/components/button/t_button_resolve.dart'], { cwd: root, encoding: 'utf8' }); +writeFileSync(join(output, 'implemented-fix.patch'), implemented); +const labels = { 'fixed-runtime-verified-visual-pending': '已修复,运行通过,视觉待验收', 'existing-contract-verified-visual-pending': '已有契约支持,运行通过,视觉待验收', 'implementation-plan-pending': '具体实施方案待执行', 'platform-geometry-plan-pending': '平台几何方案待取证' }; +const text = ['# 32项差异处置结果', '', '本记录保留Spec059的原始比较;按现有契约区分缺陷与已批准设计,未将所有差异强行改成旧小程序值。', '', '| 处置 | 项数 |', '|---|---:|', ...Object.entries(counts).map(([key, value]) => `| ${labels[key]} | ${value} |`), '', '双SDK严格分析0问题,相关完整功能回归各440项、仓库外迁移consumer各21项通过;每组件覆盖率均≥95%。47项聚焦检查包含在440项中。', '', '## 逐项方案', '']; +for (const row of rows) { + text.push(`### ${row.name}`, '', `**${labels[row.disposition]}**`, '', row.action, ''); + if (row.risk) text.push(`影响与边界:${row.risk}`, ''); + text.push(`验证:${row.validation}`, ''); + if (row.contractReferences.length) text.push(...row.contractReferences.map(ref => `- [已有契约](../../${ref.file}#L${ref.line}):${ref.quote}`), ''); +} +text.push('## 可审查补丁', '', '- [已实施的Ghost修复](implemented-fix.patch):一个语义回退源修正,覆盖文字/描边两个观察项。', '- [四项视觉修复候选补丁](proposed-visual-fixes.patch):未应用到主工作区;在隔离工程Flutter3.47.7的47项聚焦检查通过,20条目标观察全部匹配。仍需完整回归、低SDK、设计及Linux视觉验收。', '', '## 全量边界', '', '其余524项运行队列未减去。所有条目的finalPaintVerified仍为false;已修复或已有契约支持只关闭本次运行/契约问题,不等于最终像素验收。CI/工作流/测试清单、正式版本及Golden均未修改,未发布。', ''); +writeFileSync(join(output, 'solutions.md'), text.join('\n')); +console.log(JSON.stringify({ counts, regression: [440, 440], migration: [21, 21], observationsPerSdk: samples.length, prototypeTargetsMatched: 20 })); From 3ceb634346169902fa9dcd692c6f3e5217feb470 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=98=BF=20Cai?= Date: Thu, 15 Oct 2026 15:19:18 +0800 Subject: [PATCH 02/13] docs: consolidate user guides and generated package documentation --- .../skills/tdesign-flutter-general/SKILL.md | 2 +- AGENTS.md | 2 +- CONTRIBUTING.md | 66 +- PUBLISH.md | 6 +- README.md | 182 +---- README_zh_CN.md | 182 +---- scripts/documentation.mjs | 82 ++ scripts/sync-readme.mjs | 113 +-- .../tasks.md | 2 +- specs/058-release-preparation/acceptance.md | 4 +- specs/058-release-preparation/plan.md | 2 + .../release-notes-draft.md | 2 +- .../acceptance.md | 2 + .../plan.md | 2 + .../spec.md | 2 + .../acceptance.md | 39 + .../plan.md | 10 + .../spec.md | 22 + .../tasks.md | 8 + .../MIGRATION.md | 2 + tdesign-component/README.md | 186 +---- tdesign-component/README_zh_CN.md | 184 +---- tdesign-site/CONTRIBUTING.md | 194 ----- tdesign-site/README.md | 50 +- tdesign-site/site/README.md | 20 +- tdesign-site/site/docs/custom-theme.md | 70 +- tdesign-site/site/docs/dark-mode.md | 2 +- tdesign-site/{FAQ.md => site/docs/faq.md} | 2 +- tdesign-site/site/docs/getting-started.md | 250 +----- .../site/docs/internationalization.md | 55 ++ .../site/docs/migration-0.2.7-to-1.0.md | 6 + tdesign-site/site/docs/migration-1-0.md | 747 ------------------ .../documentation.test.mjs | 76 ++ .../repository-document.mjs | 22 + tdesign-site/site/plugin-tdoc/transforms.ts | 3 + tdesign-site/site/site.config.mjs | 27 +- 36 files changed, 578 insertions(+), 2048 deletions(-) create mode 100644 scripts/documentation.mjs create mode 100644 specs/062-documentation-source-consolidation/acceptance.md create mode 100644 specs/062-documentation-source-consolidation/plan.md create mode 100644 specs/062-documentation-source-consolidation/spec.md create mode 100644 specs/062-documentation-source-consolidation/tasks.md rename MIGRATION_1_0.md => tdesign-component/MIGRATION.md (99%) delete mode 100644 tdesign-site/CONTRIBUTING.md rename tdesign-site/{FAQ.md => site/docs/faq.md} (97%) create mode 100644 tdesign-site/site/docs/internationalization.md rename tdesign-component/MIGRATION_1_0.md => tdesign-site/site/docs/migration-0.2.7-to-1.0.md (99%) delete mode 100644 tdesign-site/site/docs/migration-1-0.md create mode 100644 tdesign-site/site/flutter-example-docs/documentation.test.mjs create mode 100644 tdesign-site/site/flutter-example-docs/repository-document.mjs diff --git a/.agents/skills/tdesign-flutter-general/SKILL.md b/.agents/skills/tdesign-flutter-general/SKILL.md index 7f312ca97b..34f09844ee 100644 --- a/.agents/skills/tdesign-flutter-general/SKILL.md +++ b/.agents/skills/tdesign-flutter-general/SKILL.md @@ -76,7 +76,7 @@ Skills 按职责补充规范:本 skill 管通用协作与 CI 登记;[`tdesig 1. **API 文档**:`sh ./demo_tool/all_build.sh`(等价 `node tool/generate_api.mjs`,manifest 驱动),从组件 API 生成 `example/assets/api/_api.md`;新增 / 迁移组件时先更新 `tool/components.json`。改动设计 / 组件 API 时该产物会随之变化。 2. **示例代码片段**:`dart run tool/generate_example_code.dart`,从带 `@ExampleCode` 注解的示例方法生成 `example/assets/code/*.txt`;CI 用 `--check` 校验片段与源码同步。改动示例方法时该产物会随之变化。 -3. **README 副本**:`node scripts/sync-readme.mjs`,把根目录 `README.md` / `README_zh_CN.md` 同步到 `tdesign-component/README*.md` 与 `tdesign-site/site/docs/getting-started.md`。改动根目录 README 时副本会随之同步。 +3. **README 副本**:`node scripts/sync-readme.mjs`,把根目录 `README.md` / `README_zh_CN.md` 同步到 `tdesign-component/README*.md`;站点 `site/docs/migration-0.2.7-to-1.0.md` 是迁移正文源,生成包内 `MIGRATION.md`。站点快速开始独立维护,不再由 README 生成;`--check` 只检查同步状态,不写文件。 自动生成与本地验收不是同一件事:贡献者无需手工维护产物;组件对齐任务需要核对示例时,按 Review skill 校验生成片段,变化只能来自源文件,不能直接修改产物。 diff --git a/AGENTS.md b/AGENTS.md index 0ffb937299..2d9ed8023c 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -23,7 +23,7 @@ 4. **Spec 规范对齐**:组件 API 变更 / 重构 / 跨目录改动按 [`specs/README.md`](./specs/README.md) 创建 Spec,提交代码须与 Spec 行为契约一致并同步更新。注意**「是否需要 Spec」与「是否需要更新日志」是两件独立的事**:Spec 看改动复杂度 / 是否碰公共契约,更新日志看用户是否感知。**最容易出错**:行为不变的纯内部重构**要 Spec**(属于重构)但**不写更新日志**。四种情况详见 `.agents/skills/tdesign-flutter-general/SKILL.md`「何时创建 Spec / 何时写更新日志」一节。 5. **Flutter 双版本兼容**:同时兼容 `flutter@3.32.0` 与 `flutter@latest`。 6. **breaking change 分析**:组件改动时判断是否改变公开 API 签名 / 默认行为 / 删除能力。 -7. **脚本生成的产物(供 AI 理解,贡献者无需关注)**:`API 文档`(`sh ./demo_tool/all_build.sh` → `example/assets/api/*.md`)、`示例代码片段`(`dart run tool/generate_example_code.dart` → `example/assets/code/*.txt`)、`README 副本`(`node scripts/sync-readme.mjs` → `tdesign-component/README*.md` 与 `tdesign-site/site/docs/getting-started.md`)均由脚本从源码生成,`.github/workflows/autofix.yml` 会在 PR 时自动运行并修正,**贡献者无需关注**;AI 需理解这些脚本做什么,改动相关源文件后产物会由 CI 自动重新生成,必要时可手动运行并一并提交(详见 `.agents/skills/tdesign-flutter-general/SKILL.md`「脚本生成的产物」一节)。 +7. **脚本生成的产物(供 AI 理解,贡献者无需关注)**:`API 文档`(`sh ./demo_tool/all_build.sh` → `example/assets/api/*.md`)、`示例代码片段`(`dart run tool/generate_example_code.dart` → `example/assets/code/*.txt`)、`README 副本`(`node scripts/sync-readme.mjs` → `tdesign-component/README*.md` 和 `tdesign-component/MIGRATION.md`(用户指南源在 `tdesign-site/site/docs/`))均由脚本从源码生成,`.github/workflows/autofix.yml` 会在 PR 时自动运行并修正,**贡献者无需关注**;AI 需理解这些脚本做什么,改动相关源文件后产物会由 CI 自动重新生成,必要时可手动运行并一并提交(详见 `.agents/skills/tdesign-flutter-general/SKILL.md`「脚本生成的产物」一节)。 8. **文档与注释**:组件公开 API 的 `///` dartdoc 注释就是用户文档,改动公开 API 时须随代码同步更新注释;复杂需求 / 重构按 Spec 记录设计;PR「更新日志」只写用户可感知的变更;`CHANGELOG.md` 由 CLI 生成勿手动编辑(详见 `.agents/skills/tdesign-flutter-general/SKILL.md`「文档来源与注释规范」一节)。 9. **代码质量 / lint 零告警**:提交前须过 `flutter analyze`(0 error / 0 warning),能用 `const`/`final` 的地方必须用、避免 lambda 替代 tear-off、遵循 `directives_ordering` 等,全部对齐 `analysis_options.yaml`;CI 的 `.cnb.yml` 已加 analyze 兜底(详见 `.agents/skills/tdesign-flutter-general/SKILL.md`「代码质量 / lint 零告警」一节)。 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index daa444c286..33363a8f0d 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -16,6 +16,20 @@ tdesign-component/ tdesign-site/ // tdesign flutter 站点 ``` +## 本地开发 + +同时兼容 Flutter 3.32.0 与当前稳定版本。先安装目标 SDK,在仓库根目录执行: + +```bash +cd tdesign-component +flutter pub get +cd example +flutter pub get +flutter run +``` + +在目标 Android/iOS 设备、模拟器或适用的 Web 环境运行。站点开发与右侧 Flutter Web 预览统一见[站点开发说明](./tdesign-site/README.md),避免在此重复维护命令和端口配置。 + ## 开发规范 - TD 内置视觉和行为只接受受支持的组件实例配置、TD ThemeExtension 与 Token;外部 Material/M2/M3 默认及显式主题不作为隐式入口。内部原生能力可以使用,但其视觉、反馈、触发和选择配置由 TD 明确。保留 TD 显式定制、调用方自定义内容的主题、文本选择和原生编辑、反馈、触发、焦点、键盘与无障碍能力。内部原生控件局部隔离视觉,不重置用户内容树,不因防范样式干扰删除原生能力。 @@ -41,6 +55,27 @@ tdesign-site/ // tdesign flutter 站点 即 PR 正文形态为「完整模板 + 打勾 + 填写」,与模板逐行对应、无删减、无缺漏。 +## 领取 Issue + +### 一个 Issue 的完整流程 + +- 用户发现功能不满足,查看 API 文档确认不支持,然后提 Issue。[常见问题](https://tdesign.tencent.com/flutter/faq) +- 提了 Issue 后,在群里发出 Issue 链接,方便后续直接沟通,确认详细需求。然后将最终确认结果贴到 GitHub 的 Issue 上。 +- 负责人评估开发工作量,打 `help want` 和 `issueShoot` 标签。 +- 贡献者确认要领取,在 Issue 下评论领取,并通知负责人。负责人打上 `Received` 标签,讨论确认实现方案。 +- 贡献者参考开发规范开发完功能,按照文档自检,然后提 PR,并同步负责人验收。 +- PR 自动构建测试包。【自动构建流水线】 +- 负责人拉设计一起视觉走查(如果需要的话),走查完成后,合并 PR。Issue 打上下一个版本的标签。 +- 版本发布后,Issue 关闭。 + +### 标签管理 + +- 无标签:未评估 +- `issueShoot`:已评工作量,可领取 +- `Received`:已领取 +- `pre_x.x.x`:预计某个版本发布 +- `x.x.x`:某个版本已发布 + ## PR 关联 Issue Issue 的**主阵地是 GitHub**。CNB 是镜像平台,其 Issue 与 GitHub Issue 是两套体系、编号 / 状态不同步,因此: @@ -122,12 +157,6 @@ dart run tool/run_visual_regression.dart 调度器自测会检查组件名唯一、各类测试能力完整、登记文件存在,以及 GitHub/CNB 使用公共 runner。CI job 成功仅代表数组中已登记的测试通过;测试文件存在、Golden 已提交或本地单独运行通过,均不能替代 CI 回归登记。 -## 贡献指南 - -请参考:[贡献指南](https://tdesign.tencent.com/flutter/develop) - -复杂需求、公共 API 变更、组件重构和跨目录改动请先阅读并创建对应的 [Spec](./specs/README.md);是否可以不创建 Spec,由 Review 根据实际改动判断。 - ## Spec 贡献流程 复杂需求、公共 API 变更、组件重构和跨目录改动,请按 [`specs/README.md`](./specs/README.md) 的完整流程创建并维护 Spec: @@ -138,3 +167,28 @@ dart run tool/run_visual_regression.dart 4. 提交 PR 时,在正文附上 Spec 目录链接;PR 描述「更新日志」须与 Spec 描述一致(格式见上文「PR 更新日志规范」)。 简单文案、格式调整和单文件局部修改不要求创建完整 Spec。Spec 只描述设计和验收,不替代代码、测试或生成文档。 + +## 人工验收与合并 + +- 检查真实操作、布局溢出、明暗主题、英文环境、文字缩放和适用的焦点/键盘/无障碍能力。 +- 在 Example App 检查对应API和代码查看入口;文档有误时修复源码注释、组件清单或示例源码,再重新生成,勿手工修改产物。 +- 测试包或预览构建成功后,根据PR中的构建结果完成适用的Android/iOS验收;构建失败应先检查实际日志。 +- 视觉改动由负责人协调设计走查,并附目标、状态、平台与版本证据。Golden要求见[组件Review规范](./.agents/skills/tdesign-component-align-review/SKILL.md)。 +- Issue验收完成后由负责人合并PR;更新发布版本标签,正式发布后关闭对应Issue。 + +## 文档维护 + +| 内容 | 唯一来源 | 使用与生成方式 | +|---|---|---| +| 项目介绍和最短示例 | 根README.md、README_zh_CN.md | 中英文分别维护,包内副本生成 | +| 安装、主题、深色模式、国际化、FAQ、迁移 | tdesign-site/site/docs/ | 站点直接读取,迁移另生成包内MIGRATION.md | +| 贡献规范 | 本文件 | 站点直接读取并适配页面元信息与相对链接 | +| 站点开发方式 | [tdesign-site/README.md](./tdesign-site/README.md) | 其他说明链接到此处 | +| API | lib中的公开dartdoc注释 | 生成example/assets/api,站点和示例App共用 | +| 示例 | example/lib中的标注源码 | 生成example/assets/code,站点和示例App共用 | +| 设计决策与验收 | specs/ | 保留历史证据,现行用户用法写入用户指南 | +| 发布流程与记录 | PUBLISH.md及既有CHANGELOG生成入口 | 发布步骤与历史记录分开维护 | + +执行 `node scripts/sync-readme.mjs` 更新指南中的可运行迁移片段和包内副本;执行 `node scripts/sync-readme.mjs --check` 只检查,不改文件。包内副本顶部标注来源,不手工修改。站点普通指南使用小写连字符命名,迁移文件名写清起止版本。 + +新增指南后在站点导航登记;内部文档链接使用相对路径,站点渲染时转换为既有路由,包内副本转换为可访问的线上入口。完整文档来源和边界见[整理记录](./specs/062-documentation-source-consolidation/spec.md)。 diff --git a/PUBLISH.md b/PUBLISH.md index 8b4ff0b3ed..eabef096e6 100644 --- a/PUBLISH.md +++ b/PUBLISH.md @@ -3,7 +3,7 @@ ## 1.0 发布前准备 1. 固定发布候选提交,记录完整 SHA、目标版本及 Flutter/Dart 版本;统一组件 pubspec、示例 pubspec 与 example/assets/version 的版本展示及构建号。本轮准备不等于已经发布 1.0。 -2. 从 `0.2.7` 升级的说明统一维护在 [MIGRATION_1_0.md](./MIGRATION_1_0.md)。执行 `node scripts/sync-readme.mjs` 同步包、站点和示例代码;不直接改副本。 +2. 从 `0.2.7` 升级的说明统一维护在 [迁移指南](./tdesign-site/site/docs/migration-0.2.7-to-1.0.md)。执行 `node scripts/sync-readme.mjs` 更新指南内可运行片段并同步包内副本,随后用 `--check` 确认;站点直接读取源文件,不直接改包内副本。 3. 在 Flutter 3.32.0 和当前 stable 的隔离环境解析依赖并执行严格分析、Upload 回归、独立迁移消费测试;记录图片选择器及平台实现包的实际版本。最低版本、正常升级、业务同时依赖较新图片选择器三个场景分别留证。 4. 运行 `dart run tool/run_component_regression.dart`、共享 Demo 功能及工具自测。Linux Flutter 3.32.0 的视觉回归先无更新运行;未登记场景单独验证。不能以批量更新 Golden 或更改容差消除未知差异。 5. 验证 Android/iOS/Web 构建;依照实际解析的插件最低要求检查宿主平台配置。iOS 无签名构建只证明构建链,不等于真机运行或 App Store 交付。 @@ -32,3 +32,7 @@ - 发布后新建业务宿主,只声明 pub.dev 的 `tdesign_flutter: ^1.0.0`,重新获取依赖并验证本文迁移示例。准备阶段的 path 依赖和运行时文件副本验证不能替代该步骤。 - 检查正式站点资源和缓存;从二维码/下载链接实际下载 APK,核对包版本、安装和主要页面。CDN 链接能访问不代表文件就是目标版本。 - 交付失败时停止传播有问题的版本,记录受影响产物;按 pub.dev 的实际机制处理撤回或后续修复版本。不要移动已对外发布的 tag 或悄悄替换相同版本内容。 + +## 更新日志一致性 + +现有站点和组件包CHANGELOG由各自发布工具维护,发布前对照同一候选版本逐项确认发布说明一致并保留历史记录。文档同步器不生成或互相覆盖CHANGELOG;两条发布生成链路的收敛另行实施。 diff --git a/README.md b/README.md index 480aff035b..00a23bef7c 100644 --- a/README.md +++ b/README.md @@ -45,32 +45,11 @@ Download link: [tdesign-flutter-example.apk](https://tdesign.gtimg.com/flutter/t ## 🚀 Quick Start -Upgrading from 0.2.7? Read the [1.0 migration guide (Chinese)](./MIGRATION_1_0.md) before changing the dependency. Version 1.0 contains breaking API and behavior changes. +Upgrading from 0.2.7? Read the [1.0 migration guide (Chinese)](./tdesign-site/site/docs/migration-0.2.7-to-1.0.md) before changing the dependency. Version 1.0 contains breaking API and behavior changes. Requires Flutter ≥ 3.32.0 and Dart ≥ 3.8.0. -### Add Dependency - -The single-import feature has not been published to pub.dev yet. Before release, add this source dependency pinned to a specific commit to `pubspec.yaml`: - -```yaml -dependencies: - flutter: - sdk: flutter - tdesign_flutter: - git: - url: https://github.com/Tencent/tdesign-flutter.git - ref: 86c37e563039c57cf6c3f9b52fead418fd3c03bd - path: tdesign-component -``` - -Once a stable `1.0.0` release containing this feature is published, replace the source dependency with `tdesign_flutter: ^1.0.0`. This allows compatible 1.x updates without editing the version for every release; `1.0.0` without `^` allows only that exact version. Until then, use the source configuration above. - -Install the dependency: - -```bash -flutter pub get -``` +Version 1.0 is being prepared for release. Follow [Getting started](./tdesign-site/site/docs/getting-started.md) for the pinned source dependency and switch to the stable version after publication. ### Minimal Import @@ -90,157 +69,16 @@ const TButton(child: Text('Button')) No additional initialization or theme configuration is required. Omitting `onPressed` leaves the button disabled. -## 📖 Usage - -### Theme Configuration - -Configure theme styles (colors, font sizes, font styles, corner radius, shadows) through JSON files. Retrieve theme data using `context.tTheme` or `TThemeData.defaultData()`. - -> **Recommendation**: Use `context.tTheme` for components that should follow the local theme. Only use `TThemeData.defaultData()` for components that don't need to follow local themes. - -```dart -// Colors -context.tTheme.brandColor - -// Fonts -TThemeData.defaultData().fontBodyLarge -``` - -### Icons - -TDesign icons are in TTF format and do not follow the theme: - -```dart -Icon(TIcons.activity) -``` - -## 🎨 Custom Theme - -TDesign Flutter provides two flexible theming approaches: - -### Method 1: JSON Configuration - -Define theme properties directly in JSON format: - -```dart -String themeConfig = ''' -{ - "myTheme": { - "color": { - "brandColor": "#D7B386" - }, - "font": { - "fontBodyMedium": { - "size": 40, - "lineHeight": 55 - } - } - } -} -'''; - -MaterialApp( - theme: TThemeBuilder.light(TThemeData.fromJson('myTheme', themeConfig)!), - // ... -) -``` - -> For all available theme keys, see [t_default_theme.dart](https://github.com/Tencent/tdesign-flutter/blob/develop/tdesign-component/lib/src/theme/t_default_theme.dart) - -### Method 2: Theme Generator (Recommended) +## 📚 Documentation -If you don't want to customize too many colors but still want a beautiful custom theme, the "Theme Generator" is a great choice. - -The Theme Generator supports light and dark configurations. See [Dark Mode](https://tdesign.tencent.com/flutter/dark-mode). - - - -1. **Generate**: Visit [TDesign Theme Generator](https://tdesign.tencent.com/vue/custom-theme), click the theme generator below, select your desired colors in the generator on the right, and click download. - -2. **Convert**: You will get a `theme.css` file. Place it in `tdesign-component/example/shell/theme/`, modify `css2_json_theme.dart` with your file name, theme name, and output path to generate a `theme.json` file. - -3. **Apply**: Load the theme JSON with `TThemeData.fromJson`, and your beautiful custom theme is ready. - -```dart -var jsonString = await rootBundle.loadString('assets/theme.json'); -final _themeData = TThemeData.fromJson('green', jsonString, darkName: 'greenDark') ?? - TThemeData.defaultData(); -// ... -MaterialApp( - title: 'TDesign Flutter Example', - theme: TThemeBuilder.light(_themeData), - home: MyHomePage(title: 'TDesign Flutter Components'), -); -``` - -### Dark Mode Support - -Theme configurations generated by the Theme Generator support dark mode colors by default. - -```dart -// ... -// Set three properties in MaterialApp as follows. If you have custom theme properties, you can modify them using the copyWith() method. -// Note: Theme switching needs to be implemented by the business side, e.g., using Provider. See tdesign-flutter/tdesign-component/example/lib/component_test/dark_test.dart for reference. -MaterialApp( - theme: TThemeBuilder.light(_themeData), - darkTheme: TThemeBuilder.dark(_themeData), - themeMode: themeModeProvider.themeMode, - // ... -) -``` - -## 🌍 Internationalization - -TDesign Flutter does not have built-in internationalization, but supports integration with Flutter's i18n capabilities. You can extend the `TResourceDelegate` class, which abstracts all text resources inside the components, override the methods to get text for internationalization, and inject it via `setTResourceBuilder`. - -### Quick Setup - -1. **Override `TResourceDelegate` class:** - -```dart -/// Internationalization resource delegate -class IntlResourceDelegate extends TResourceDelegate { - IntlResourceDelegate(this.context); - - BuildContext context; - - /// Internationalization requires updating context each time - updateContext(BuildContext context) { - this.context = context; - } - - @override - String get cancel => AppLocalizations.of(context)!.cancel; - - @override - String get confirm => AppLocalizations.of(context)!.confirm; -} -``` - -2. **Inject `TResourceDelegate` class:** - -```dart -var delegate = IntlResourceDelegate(context); -return MaterialApp( - home: Builder( - builder: (context) { - // Set the text delegate. Internationalization only takes effect after MaterialApp is initialized, and context needs to be updated each time. - setTResourceBuilder((context) => delegate..updateContext(context), needAlwaysBuild: true); - return MyHomePage( - title: AppLocalizations.of(context)?.components ?? '', - ); - }, - ), - // Set internationalization - locale: locale, - supportedLocales: AppLocalizations.supportedLocales, - localizationsDelegates: AppLocalizations.localizationsDelegates, -); -``` +The detailed guides below are currently in Chinese. -3. For Flutter internationalization configuration, please refer to the official documentation: [Internationalizing Flutter apps](https://docs.flutter.dev/ui/accessibility-and-internationalization/internationalization) +- [Getting started](./tdesign-site/site/docs/getting-started.md) +- [Custom themes](./tdesign-site/site/docs/custom-theme.md) +- [Dark mode](./tdesign-site/site/docs/dark-mode.md) +- [Internationalization](./tdesign-site/site/docs/internationalization.md) +- [FAQ](./tdesign-site/site/docs/faq.md) +- [Component documentation](https://tdesign.tencent.com/flutter/overview) ## 🔗 More Examples diff --git a/README_zh_CN.md b/README_zh_CN.md index aa165c3c21..4e10784247 100644 --- a/README_zh_CN.md +++ b/README_zh_CN.md @@ -45,32 +45,11 @@ ## 🚀 快速开始 -从 0.2.7 升级时,请先阅读 [1.0 迁移指南](./MIGRATION_1_0.md)。1.0 包含不兼容的接口与默认行为变化,不能只替换组件前缀。 +从 0.2.7 升级时,请先阅读 [1.0 迁移指南](./tdesign-site/site/docs/migration-0.2.7-to-1.0.md)。1.0 包含不兼容的接口与默认行为变化,不能只替换组件前缀。 要求 Flutter ≥ 3.32.0、Dart ≥ 3.8.0。 -### 添加依赖 - -当前单入口功能尚未发布到 pub.dev。发布前,在 `pubspec.yaml` 中添加以下锁定提交的源码依赖: - -```yaml -dependencies: - flutter: - sdk: flutter - tdesign_flutter: - git: - url: https://github.com/Tencent/tdesign-flutter.git - ref: 86c37e563039c57cf6c3f9b52fead418fd3c03bd - path: tdesign-component -``` - -包含上述能力的 `1.0.0` 稳定版发布后,可将源码依赖替换为 `tdesign_flutter: ^1.0.0`,允许兼容的 1.x 更新,无需每次发布都修改版本号;`1.0.0` 不带 `^` 则只允许该精确版本。发布前请使用上面的源码配置。 - -安装依赖: - -```bash -flutter pub get -``` +1.0 仍处于发布准备阶段。安装方式和锁定源码依赖见[快速开始](./tdesign-site/site/docs/getting-started.md);正式发布后按指南切换稳定版本。 ### 最小导入 @@ -90,157 +69,14 @@ const TButton(child: Text('按钮')) 无需额外初始化或主题配置。不传 `onPressed` 时,按钮处于禁用状态。 -## 📖 使用方法 - -### 主题配置 - -可通过 JSON 文件配置主题样式(颜色、字体尺寸、字体样式、圆角、阴影)。通过 `context.tTheme` 或 `TThemeData.defaultData()` 获取主题数据。 - -> **建议**:组件都使用 `context.tTheme`。不需要跟随局部主题的组件,才可以使用 `TThemeData.defaultData()`。 - -```dart -// 颜色 -context.tTheme.brandColor - -// 字体 -TThemeData.defaultData().fontBodyLarge -``` - -### 图标 - -TDesign 图标为 TTF 格式,不跟随主题: - -```dart -Icon(TIcons.activity) -``` - -## 🎨 自定义主题 - -TDesign Flutter 提供两种灵活的主题定制方式: - -### 方式一:JSON 配置 - -直接使用 JSON 格式定义主题属性: - -```dart -String themeConfig = ''' -{ - "myTheme": { - "color": { - "brandColor": "#D7B386" - }, - "font": { - "fontBodyMedium": { - "size": 40, - "lineHeight": 55 - } - } - } -} -'''; - -MaterialApp( - theme: TThemeBuilder.light(TThemeData.fromJson('myTheme', themeConfig)!), - // ... -) -``` - -> 所有可用的主题键值请参考 [t_default_theme.dart](https://github.com/Tencent/tdesign-flutter/blob/develop/tdesign-component/lib/src/theme/t_default_theme.dart) - -### 方式二:主题生成器(推荐) - -如果你不想自定义太多颜色,但是想要拥有好看的自定义主题,"主题生成器"是个不错的选择。 - -主题生成器支持浅色和深色配置,具体可参考[深色模式](https://tdesign.tencent.com/flutter/dark-mode)。 - - - -1. **生成**:进入 [TDesign 主题生成器](https://tdesign.tencent.com/vue/custom-theme),点击下方的主题生成器,在右边生成器里选择想要的颜色,点击下载。 - -2. **转换**:此时你得到一个 `theme.css` 文件,将该文件放到 `tdesign-component/example/shell/theme/` 文件夹下,修改该文件夹下的 `css2_json_theme.dart` 为你自己的文件名、主题名和输出路径,即可得到一个 `theme.json` 文件。 - -3. **应用**:通过 `TThemeData.fromJson` 加载主题 JSON,美观的自定义主题就设置完成了。 - -```dart -var jsonString = await rootBundle.loadString('assets/theme.json'); -final _themeData = TThemeData.fromJson('green', jsonString, darkName: 'greenDark') ?? - TThemeData.defaultData(); -// ... -MaterialApp( - title: 'TDesign Flutter Example', - theme: TThemeBuilder.light(_themeData), - home: MyHomePage(title: 'TDesign Flutter 组件库'), -); -``` - -### 深色模式 - -通过"主题生成器"生成的主题配置文件,默认支持暗色模式相关色值。 - -```dart -// ... -// MaterialApp 中设置三个属性如下,如果有自定义主题属性,可以通过 copyWith() 方法修改。 -// 注:主题切换需要业务自己实现,比如使用 Provider,具体可参考 tdesign-flutter/tdesign-component/example/lib/component_test/dark_test.dart -MaterialApp( - theme: TThemeBuilder.light(_themeData), - darkTheme: TThemeBuilder.dark(_themeData), - themeMode: themeModeProvider.themeMode, - // ... -) -``` - -## 🌍 国际化 - -TDesign Flutter 组件库内部不内置国际化语言,但支持与 Flutter 的国际化能力搭配使用。可以继承 `TResourceDelegate` 类,该类抽离了组件内部所有文字资源,重写获取文字的方法进行国际化处理,并通过 `setTResourceBuilder` 注入。 - -### 快速配置 - -1. **重写 `TResourceDelegate` 类:** - -```dart -/// 国际化资源代理 -class IntlResourceDelegate extends TResourceDelegate { - IntlResourceDelegate(this.context); - - BuildContext context; - - /// 国际化需要每次更新 context - updateContext(BuildContext context) { - this.context = context; - } - - @override - String get cancel => AppLocalizations.of(context)!.cancel; - - @override - String get confirm => AppLocalizations.of(context)!.confirm; -} -``` - -2. **注入 `TResourceDelegate` 类:** - -```dart -var delegate = IntlResourceDelegate(context); -return MaterialApp( - home: Builder( - builder: (context) { - // 设置文案代理,国际化需要在 MaterialApp 初始化完成之后才生效,而且需要每次更新 context - setTResourceBuilder((context) => delegate..updateContext(context), needAlwaysBuild: true); - return MyHomePage( - title: AppLocalizations.of(context)?.components ?? '', - ); - }, - ), - // 设置国际化处理 - locale: locale, - supportedLocales: AppLocalizations.supportedLocales, - localizationsDelegates: AppLocalizations.localizationsDelegates, -); -``` +## 📚 文档 -3. Flutter 国际化配置方法,请参阅官方文档:[Flutter 应用里的国际化](https://docs.flutter.cn/ui/accessibility-and-internationalization/internationalization) +- [快速开始](./tdesign-site/site/docs/getting-started.md) +- [自定义主题](./tdesign-site/site/docs/custom-theme.md) +- [深色模式](./tdesign-site/site/docs/dark-mode.md) +- [国际化](./tdesign-site/site/docs/internationalization.md) +- [常见问题](./tdesign-site/site/docs/faq.md) +- [在线组件文档](https://tdesign.tencent.com/flutter/overview) ## 🔗 更多示例 diff --git a/scripts/documentation.mjs b/scripts/documentation.mjs new file mode 100644 index 0000000000..b8f88b6ea3 --- /dev/null +++ b/scripts/documentation.mjs @@ -0,0 +1,82 @@ +import { readFileSync, writeFileSync } from 'node:fs'; +import { dirname, resolve } from 'node:path'; +import { fileURLToPath } from 'node:url'; + +export const repositoryRoot = resolve(dirname(fileURLToPath(import.meta.url)), '..'); +export const migrationSource = 'tdesign-site/site/docs/migration-0.2.7-to-1.0.md'; +const exampleSource = 'tdesign-component/tool/fixtures/token_migration/test/support/migration_027_examples.dart'; +const github = 'https://github.com/Tencent/tdesign-flutter/blob/develop/'; +const site = 'https://tdesign.tencent.com/flutter/'; + +// The existing public migration URL remains stable after the source rename. +function guideRoute(slug) { + return slug === 'migration-0.2.7-to-1.0' ? 'migration-1-0' : slug; +} + +export function guideLinks(content, { absolute = false } = {}) { + return content.replace(/\]\(\.\/([a-z0-9.-]+)\.md(#[^)]*)?\)/g, (_, slug, fragment = '') => + `](${absolute ? site : '/flutter/'}${guideRoute(slug)}${fragment})`); +} + +// Package readers cannot resolve repository-only relative paths. +export function packageLinks(content) { + return content.replace(/\]\(([^)]+)\)/g, (link, target) => { + if (/^(?:[a-z][a-z0-9+.-]*:|#|\/)/i.test(target)) return link; + const clean = target.replace(/^\.\//, ''); + if (clean.split('#')[0] === migrationSource) return `](./MIGRATION.md${clean.includes('#') ? `#${clean.split('#')[1]}` : ''})`; + if (/^README(?:_zh_CN)?\.md(?:#.*)?$/.test(clean)) return link; + if (clean.startsWith('tdesign-site/site/docs/')) { + const [file, fragment] = clean.slice('tdesign-site/site/docs/'.length).split('#'); + return `](${site}${guideRoute(file.replace(/\.md$/, ''))}${fragment ? `#${fragment}` : ''})`; + } + return `](${github}${clean})`; + }); +} + +export function renderMigrationExamples(guide, examples) { + const seen = new Set(); + const rendered = guide.replace( + /[\s\S]*?/g, + (_, name) => { + if (seen.has(name)) throw new Error(`Duplicate migration example: ${name}`); + seen.add(name); + const start = `// migration:${name}:start`; + const end = `// migration:${name}:end`; + if (examples.split(start).length !== 2 || examples.split(end).length !== 2) { + throw new Error(`Missing or duplicate migration example: ${name}`); + } + const offset = examples.indexOf(start) + start.length; + const endOffset = examples.indexOf(end, offset); + if (endOffset < 0) throw new Error(`Invalid migration example order: ${name}`); + return `\n\`\`\`dart\n${examples.slice(offset, endOffset).trim()}\n\`\`\`\n`; + }, + ); + const markers = [...rendered.matchAll(//g)]; + if (markers.length !== seen.size * 2 || seen.size === 0) throw new Error('Unmatched migration example markers'); + return rendered; +} + +export function generatedDocument(source, body) { + return `\n\n${body}`; +} + +// Compute every output before writing; --check never changes any source or copy. +export function syncDocuments({ root = repositoryRoot, check = false } = {}) { + const read = file => readFileSync(resolve(root, file), 'utf8'); + const guide = renderMigrationExamples(read(migrationSource), read(exampleSource)); + const outputs = new Map([[migrationSource, guide]]); + for (const source of ['README.md', 'README_zh_CN.md']) { + outputs.set(`tdesign-component/${source}`, generatedDocument(source, packageLinks(read(source)))); + } + const portableGuide = guide.replace(/^---\r?\n[\s\S]*?\r?\n---\r?\n\s*/, ''); + outputs.set('tdesign-component/MIGRATION.md', generatedDocument(migrationSource, guideLinks(portableGuide, { absolute: true }))); + const stale = [...outputs].filter(([file, expected]) => { + try { return read(file) !== expected; } catch (error) { + if (error.code === 'ENOENT') return true; + throw error; + } + }); + if (check && stale.length) throw new Error(`Stale documentation: ${stale.map(([file]) => file).join(', ')}. Run node scripts/sync-readme.mjs`); + if (!check) for (const [file, content] of stale) writeFileSync(resolve(root, file), content); + console.log(`[documentation] ${check ? 'checked' : 'synchronized'} ${outputs.size} documents; ${stale.length} ${check ? 'stale' : 'updated'}`); +} diff --git a/scripts/sync-readme.mjs b/scripts/sync-readme.mjs index 38314ef809..e0ec1dfd77 100644 --- a/scripts/sync-readme.mjs +++ b/scripts/sync-readme.mjs @@ -1,104 +1,11 @@ -import { readFileSync, writeFileSync, existsSync } from 'fs'; -import { dirname } from 'path'; -import { fileURLToPath } from 'url'; - -const __dirname = dirname(fileURLToPath(import.meta.url)); -const rootDir = `${__dirname}/..`; - -// ============================================================ -// 同步配置 -// ============================================================ -// source: 被监听的源文件 -// targets: 同步目标列表 -// - path: 目标文件路径 -// - transform: 可选,内容转换函数名 -// ============================================================ - -const transforms = { - // 移除语言切换链接: [English](./README.md) | 简体中文 - removeLangLink: (content) => { - return content.replaceAll('./MIGRATION_1_0.md', '/flutter/migration-1-0').replace(/\[English\]\(\.\/README\.md\) \| 简体中文\n?/g, '') - .replace('https://raw.githubusercontent.com/Tencent/tdesign-flutter/develop/tdesign-site/site/public/assets/qrcode/t_apk_qrcode.png', `data:image/png;base64,${readFileSync(`${rootDir}/tdesign-site/site/public/assets/qrcode/t_apk_qrcode.png`).toString('base64')}`); - }, -}; - -const syncConfig = [ - { - source: 'MIGRATION_1_0.md', - targets: [ - { path: 'tdesign-component/MIGRATION_1_0.md' }, - { path: 'tdesign-site/site/docs/migration-1-0.md' }, - ], - }, - { - source: 'README.md', - targets: [ - { path: 'tdesign-component/README.md' }, - ], - }, - { - source: 'README_zh_CN.md', - targets: [ - { path: 'tdesign-component/README_zh_CN.md' }, - { path: 'tdesign-site/site/docs/getting-started.md', transform: 'removeLangLink' }, - ], - }, -]; - -// ============================================================ -// 同步逻辑 -// ============================================================ - -function sync() { - const guidePath = `${rootDir}/MIGRATION_1_0.md`; - if (existsSync(guidePath)) { - const examples = readFileSync(`${rootDir}/tdesign-component/tool/fixtures/token_migration/test/support/migration_027_examples.dart`, 'utf-8'); - const guide = readFileSync(guidePath, 'utf-8').replace( - /[\s\S]*?/g, - (_, name) => { - const start = `// migration:${name}:start`; - const end = `// migration:${name}:end`; - const offset = examples.indexOf(start); - const endOffset = examples.indexOf(end, offset + start.length); - if (offset < 0 || endOffset < 0) { - throw new Error(`Missing migration example: ${name}`); - } - const source = examples.slice(offset + start.length, endOffset).trim(); - return `\n\`\`\`dart\n${source}\n\`\`\`\n`; - }, - ); - writeFileSync(guidePath, guide, 'utf-8'); - } - for (const { source, targets } of syncConfig) { - const sourcePath = `${rootDir}/${source}`; - - if (!existsSync(sourcePath)) { - console.log(`[Skip] Source not found: ${source}`); - continue; - } - - const sourceContent = readFileSync(sourcePath, 'utf-8'); - console.log(`[Read] ${source}`); - - for (const { path, transform } of targets) { - let content = sourceContent; - - if (transform) { - const transformFn = transforms[transform]; - if (transformFn) { - content = transformFn(content); - console.log(` [Transform: ${transform}]`); - } else { - console.log(` [Warn] Unknown transform: ${transform}`); - } - } - - writeFileSync(`${rootDir}/${path}`, content, 'utf-8'); - console.log(` [Sync] -> ${path}`); - } - } - - console.log('\nDone!'); +// Compatibility entry used by the existing repository and site workflows. +import { syncDocuments } from './documentation.mjs'; + +const args = process.argv.slice(2); +if (args.some(arg => arg !== '--check')) throw new Error('Usage: node scripts/sync-readme.mjs [--check]'); +try { + syncDocuments({ check: args.includes('--check') }); +} catch (error) { + console.error(error.message); + process.exitCode = 1; } - -sync(); diff --git a/specs/048-component-token-theme-ownership/tasks.md b/specs/048-component-token-theme-ownership/tasks.md index 7f0ce2a4cd..6e860c5c0e 100644 --- a/specs/048-component-token-theme-ownership/tasks.md +++ b/specs/048-component-token-theme-ownership/tasks.md @@ -20,7 +20,7 @@ - [x] 实例保留 `TText.font` 作为 TDesign 字体预设,移除 `fontWeight/fontFamily/textColor/isTextThrough/lineThroughColor` 分散便利字段,迁移仓内调用与测试;独立消费包已验证实例 style、富文本与组件 Theme 的公开替代调用。 - [x] 既有 Button/Input 层级规则和 outline 状态回退完成测试;本轮进一步移除与完整实例 `style` 重复的组件 Theme 字段,测试需按新的单入口契约复核,旧规则不再作为验收标准。 - [x] DONE 当前基线 dartdoc 审计、Demo/组件自动回归已通过,见 Spec 057。 -- [x] 仅面向 0.2.7 → 1.0 的迁移指南已落地,覆盖组件入口、行为和删除能力;独立消费用例双版本通过,见根 MIGRATION_1_0.md 与 Spec 058。此项不代表677项消费审查或全部业务迁移完成。 +- [x] 仅面向 0.2.7 → 1.0 的迁移指南已落地,覆盖组件入口、行为和删除能力;独立消费用例双版本通过,见[迁移指南](../../tdesign-site/site/docs/migration-0.2.7-to-1.0.md)与 Spec 058。此项不代表677项消费审查或全部业务迁移完成。 - [x] DONE 当前基线双版本分析、组件和 Demo 功能、独立消费包迁移检查及 Linux 3.32.0 登记 Golden 全部通过;消费包 CI 步骤实际成功,不再等待推送。历史检查点保留于 `acceptance.md`,当前证据见 Spec 057。 - [ ] DOING 804 项组件变量已按冻结源码逐项建静态证据;纠正 Less 动态消费误判后,10 项未见静态消费者、81 项属于尚无 Flutter 对应组件的已消费变量;Button 12 项、Tag 12 项默认 Widget 值,Tag 7 项及 Switch/Fab/Form/PullDownRefresh/DropdownItem 各 1 项回退路径已裁定,Progress 9 项已另做默认 Widget/Painter 消费链复核(不等于跨端视觉完成),历史基线为677项待核;最新分层结果见Spec059,116项默认运行证据已补,不直接扣减最终视觉待审数。 - [x] 按 2026-10-03 用户裁定修正 Button 深色禁用字色、Switch 禁用/加载分层状态色与 Slider 浅色禁用滑块描边;Button/Switch 依冻结小程序,Slider 依直接选取的 Figma 图层。双版本聚焦测试与严格分析通过,生成 API 已更新;隔离 Linux 逐张检查、仅更新 10 张受影响 Golden 并无更新复跑通过。PR head CI 与整页 Figma 像素验收仍属总任务门禁,不以本项完成代替。 diff --git a/specs/058-release-preparation/acceptance.md b/specs/058-release-preparation/acceptance.md index cf4fee9338..28250c3658 100644 --- a/specs/058-release-preparation/acceptance.md +++ b/specs/058-release-preparation/acceptance.md @@ -1,3 +1,5 @@ +> 文档路径和维护来源已由[Spec062](../062-documentation-source-consolidation/spec.md)调整;下文保留本阶段历史记录,未完成迁移内容和验收仍以原清单为准。 + > 最新处置(2026-10-15,Spec060):已实修Ghost语义回退的2个观察项,8项由既有Flutter契约及运行断言支持;21项差异与1项平台几何已有具体方案,524项仍待补运行。当前代码为30767a55上的未提交工作区,本地新指纹验证见 [Spec060](../060-token-difference-resolution/acceptance.md),不沿用旧远端CI作为本次修复通过证据。 # 2026-10-15 发布准备实施记录 @@ -6,7 +8,7 @@ 本轮实施第1~4项;保留上一轮Spec核销,新增0.2.7 → 1.0唯一迁移指南、包/站点入口、消费测试、依赖兼容调整和发布验收材料。没有修改CI/工作流、测试调度清单、远端规则或正式发布版本,未上传、打tag、提交或推送。 -- [迁移指南](../../MIGRATION_1_0.md):57个组件/主题入口、383个旧公开声明处置索引、主要改写示例。 +- [迁移指南](../../tdesign-site/site/docs/migration-0.2.7-to-1.0.md):57个组件/主题入口、383个旧公开声明处置索引、主要改写示例。 - [公开声明盘点](public-api-diff.json):由0.2.7真实发布包与当前公开入口提取;声明形状和名称候选不自动证明语义等价。 - [组件迁移索引](component-migration-index.json):与当前57个API页的组件集合核对一致。 - [Token现状](token-status.md)与[源码定位证据](current-token-verification.json)。 diff --git a/specs/058-release-preparation/plan.md b/specs/058-release-preparation/plan.md index ae7461eb28..48450de6ab 100644 --- a/specs/058-release-preparation/plan.md +++ b/specs/058-release-preparation/plan.md @@ -1,3 +1,5 @@ +> 文档来源更新:根迁移正文及站点副本方案已由[Spec062](../062-documentation-source-consolidation/spec.md)取代;迁移正文现维护在站点docs,包内仅保留生成副本。本记录其他未完成项不因此关闭。 + # 计划 1. 复核 0.2.7 发布包与 tag,盘点公开导出、构造/成员差异和复杂组件替代方向。 diff --git a/specs/058-release-preparation/release-notes-draft.md b/specs/058-release-preparation/release-notes-draft.md index 5b26894c8f..7742ebf431 100644 --- a/specs/058-release-preparation/release-notes-draft.md +++ b/specs/058-release-preparation/release-notes-draft.md @@ -4,7 +4,7 @@ ## Breaking Changes -- 最低环境调整为 Flutter 3.32.0、Dart 3.8.0。组件统一迁移至 T 前缀,删除旧参数/样式/辅助类型的兼容入口;按 [0.2.7 → 1.0 迁移指南](../../MIGRATION_1_0.md) 迁移,不能批量替换前缀后直接上线。 +- 最低环境调整为 Flutter 3.32.0、Dart 3.8.0。组件统一迁移至 T 前缀,删除旧参数/样式/辅助类型的兼容入口;按 [0.2.7 → 1.0 迁移指南](../../tdesign-site/site/docs/migration-0.2.7-to-1.0.md) 迁移,不能批量替换前缀后直接上线。 - 全局 Token、TD 组件 Theme 与显式实例配置分层;TD 默认视觉不再反向读取外部 Material/M2/M3 配置。文字使用 style/textScaler 与显式布局,自定义内容仍保留自己的主题及原生编辑能力。 - 表单改为声明式字段树,选择与输入组件按当前受控值契约回写;父级创建的 Controller 按其类型负责释放。 - Picker/DateTimePicker/Calendar 的选择与业务确认分开;Popup 采用 Options/Handle,Dialog 使用内容槽与 Action,底部导航和顶部页签分别为 TTabBar 与 TTabsBar。 diff --git a/specs/061-migration-documentation-design/acceptance.md b/specs/061-migration-documentation-design/acceptance.md index 7c2da1fb0a..bd1b0ebb26 100644 --- a/specs/061-migration-documentation-design/acceptance.md +++ b/specs/061-migration-documentation-design/acceptance.md @@ -1,3 +1,5 @@ +> 文档路径和维护来源已由[Spec062](../062-documentation-source-consolidation/spec.md)调整;下文保留本阶段历史记录,未完成迁移内容和验收仍以原清单为准。 + # 设计验收 日期:2026-10-15。结论:本次设计产物完成;生成接入和迁移内容补齐尚未实施,不表示发布准备完成。 diff --git a/specs/061-migration-documentation-design/plan.md b/specs/061-migration-documentation-design/plan.md index f6651a6c08..4c33aec99d 100644 --- a/specs/061-migration-documentation-design/plan.md +++ b/specs/061-migration-documentation-design/plan.md @@ -1,3 +1,5 @@ +> 文档来源更新:根迁移正文及站点副本方案已由[Spec062](../062-documentation-source-consolidation/spec.md)取代;迁移正文现维护在站点docs,包内仅保留生成副本。本记录其他未完成项不因此关闭。 + # 设计与实施方案 ## 阅读路径 diff --git a/specs/061-migration-documentation-design/spec.md b/specs/061-migration-documentation-design/spec.md index 168943a5f0..5a35616e81 100644 --- a/specs/061-migration-documentation-design/spec.md +++ b/specs/061-migration-documentation-design/spec.md @@ -1,3 +1,5 @@ +> 文档路径和维护来源已由[Spec062](../062-documentation-source-consolidation/spec.md)调整;下文保留本阶段历史记录,未完成迁移内容和验收仍以原清单为准。 + # 0.2.7 → 1.0 迁移文档设计 状态:设计完成,站点和指南结构改造尚未实施。日期:2026-10-15。 diff --git a/specs/062-documentation-source-consolidation/acceptance.md b/specs/062-documentation-source-consolidation/acceptance.md new file mode 100644 index 0000000000..5ac1847060 --- /dev/null +++ b/specs/062-documentation-source-consolidation/acceptance.md @@ -0,0 +1,39 @@ +# 文档整理验收 + +日期:2026-10-15。 + +## 已实施 + +- 迁移正文迁至 `tdesign-site/site/docs/migration-0.2.7-to-1.0.md`,站点直接读取;原站点访问地址 `/flutter/migration-1-0` 保持不变。正文与搬迁前根指南逐字节相同,9组已验证示例保留。 +- 原根完整迁移文件和站点生成副本不再保留;组件包使用带来源标记的 `MIGRATION.md`,去除站点元信息并适配指南链接。 +- 根中英文README去掉长教程和重复的源码依赖版本配置,保留简介、预览、最小使用和指南入口。快速开始、主题和国际化内容归入站点独立源文件;英文README注明详细指南目前为中文。 +- FAQ归入站点docs;自定义主题和国际化接入站点导航,快速开始保留旧“自定义主题”章节入口并链接新页。 +- 根CONTRIBUTING合并原站点指南的本地运行、Issue流程、标签及人工验收内容;站点直接读取根文件并适配页面元信息及仓库相对链接,删除站点重复规范。 +- 站点README只维护开发方式,内部site/README仅链接该入口。更新AGENTS、通用skill和发布文档中的来源约定;历史Spec保留原阶段记录,添加新来源说明并修复迁移Markdown链接。 +- 保留既有sync-readme和copy-readme调用入口;同步逻辑集中,新增--check检查模式、源缺失和陈旧产物诊断、重复/不完整示例标记检查。 + +## 验证结果 + +| 检查 | 结果 | +|---|---| +| 站点主题测试 | 6项通过 | +| 文档/示例/API测试 | 21项通过,含6项新增文档回归 | +| 组件页面与示例映射 | 57页、360个生成示例通过 | +| 组件路由/源码/Example/API契约 | 57项通过 | +| 站点生产构建 | 通过,包含根贡献页、新主题/国际化/迁移页 | +| 同步与只读检查 | 二次同步0更新;--check通过 | +| 当前维护文档及包副本的相对链接 | 50处存在性检查通过 | +| 同步失败分支 | 临时工程验证陈旧副本、缺失源、不完整示例标记;检查模式不写文件 | +| 发布包链接 | README仓库路径转换为线上页面,迁移为包内链接;迁移指南的相对指南链接转换为完整站点URL | +| 运行验证输入 | Spec060的270个源码/资源/测试/清单/pubspec指纹不变 | +| 脚本语法与差异空白 | 通过 | + +完整构建命令:`npm run site --prefix tdesign-site`。复核同步命令:`node scripts/sync-readme.mjs --check`。现有站点测试通配入口包含新增文档回归,未改CI配置或调度清单。 + +## 边界 + +构建保留既有输出目录、上游PURE注解、历史二维码引用和大体积chunk警告。没有执行新的浏览器交互/窄屏人工验收,也没有声称站点已部署;相对链接检查验证仓库目标存在和路由转换,不代表外部URL在线可用。 + +本轮没有修改生产Dart、组件运行测试、集中测试清单、版本、CI/工作流和两份CHANGELOG,也没有重新运行Flutter或Golden。历史运行证据及其工具指纹保持不变;Spec058/061的旧维护来源被本Spec取代,不改写其历史运行结论。 + +Spec目录/历史证据工具整理、两份CHANGELOG生成链路收敛、57个完整迁移专章和组件页自动摘要不属于本次已实施内容,仍保留原任务。 diff --git a/specs/062-documentation-source-consolidation/plan.md b/specs/062-documentation-source-consolidation/plan.md new file mode 100644 index 0000000000..e2c1214cca --- /dev/null +++ b/specs/062-documentation-source-consolidation/plan.md @@ -0,0 +1,10 @@ +# 实施方案 + +1. 迁移正文移到站点docs,保留已有公开路由;FAQ同样归入docs。 +2. 根README保留简介/预览/最短接入/链接;完整快速开始、主题和国际化内容保存在站点源文件。 +3. 贡献规范合并有效运行、Issue和人工验收流程;站点路由直接import根CONTRIBUTING,通过渲染适配补元信息并转绝对仓库链接。 +4. 保留scripts/sync-readme.mjs和copy-readme.js兼容入口,由集中模块定义同步映射、可运行迁移片段、包内链接转换和--check。 +5. 为检查模式/目标过期/源缺失/生成链接和站点适配编写有意义回归,纳入现有站点测试通配入口,不改CI。 +6. 更新维护说明与现行文档链接;历史Spec只修复Markdown链接并说明来源已被本Spec取代。 + +CHANGELOG暂不合并:现有两个生成链路会写不同文件,单纯覆盖将丢失历史。发布流程增加两份版本说明一致性复核;后续单独改造生成入口。 diff --git a/specs/062-documentation-source-consolidation/spec.md b/specs/062-documentation-source-consolidation/spec.md new file mode 100644 index 0000000000..671dad7c10 --- /dev/null +++ b/specs/062-documentation-source-consolidation/spec.md @@ -0,0 +1,22 @@ +# 文档来源收敛 + +## 目标与范围 + +用户指南统一由站点docs维护,根README保留简介和最短接入路径;根CONTRIBUTING保留唯一贡献规范,站点直接读取;包内README和迁移说明由同一个兼容入口生成。迁移范围仅0.2.7到1.0。 + +## 行为契约 + +- 迁移源为tdesign-site/site/docs/migration-0.2.7-to-1.0.md,站点原访问路由保持不变,包内副本为MIGRATION.md。 +- getting-started、custom-theme、dark-mode、internationalization、faq为独立用户指南;移除README重复长教程,但保留已有内容。 +- 站点直接展示根贡献规范,补页面元信息、解析相对链接;合并原站点贡献指南的有效工作流程,不复制规范正文。 +- 同步器只维护包内副本及指南中已验证代码片段,支持--check;检查模式不写任何文件,源文件缺失或内容过期返回非零。 +- 文档源码Markdown使用小写连字符;README/CONTRIBUTING等工程入口保留惯例。组件页面/API生成链路不变。 +- 更新文档来源约定和当前链接。保留历史Spec证据与原始JSON指纹,不以本次搬迁改写历史验证结果。 + +## 非目标 + +不调整CI/工作流、CHANGELOG发布链路、组件实现或版本;不宣称57个详细迁移章节/自动摘要或未完成视觉验收已经实现。Spec历史目录与取证工具迁移另行处理。 + +## 验收 + +同步及--check幂等、缺失/陈旧检查有效;贡献指南适配链接正确;现有组件契约、主题测试、站点生产构建通过;当前文档相对链接和发布包链接有效。不需要重跑无变化的Flutter生产源码测试。 diff --git a/specs/062-documentation-source-consolidation/tasks.md b/specs/062-documentation-source-consolidation/tasks.md new file mode 100644 index 0000000000..82a17d5983 --- /dev/null +++ b/specs/062-documentation-source-consolidation/tasks.md @@ -0,0 +1,8 @@ +# 工作清单 + +- [x] 用户指南、迁移与FAQ归位,根README精简。 +- [x] 贡献规范合并,站点直接读取并适配链接。 +- [x] 包内副本统一同步,增加只读检查与失败诊断。 +- [x] 更新来源规则、链接和维护入口。 +- [x] 回归测试、构建、幂等/链接及范围检查。 +- [x] 更新PR与验收记录。 diff --git a/MIGRATION_1_0.md b/tdesign-component/MIGRATION.md similarity index 99% rename from MIGRATION_1_0.md rename to tdesign-component/MIGRATION.md index be50528294..7c1f85298f 100644 --- a/MIGRATION_1_0.md +++ b/tdesign-component/MIGRATION.md @@ -1,3 +1,5 @@ + + # 从 0.2.7 升级到 1.0 本文仅面向 `tdesign_flutter 0.2.7` 使用方。1.0 是不兼容升级,旧参数和旧行为不会通过兼容别名保留;不能对全项目执行一次 `TD` → `T` 替换后就认为迁移结束。 diff --git a/tdesign-component/README.md b/tdesign-component/README.md index 480aff035b..6236e1e9f3 100644 --- a/tdesign-component/README.md +++ b/tdesign-component/README.md @@ -1,3 +1,5 @@ + +

TDesign Logo @@ -45,32 +47,11 @@ Download link: [tdesign-flutter-example.apk](https://tdesign.gtimg.com/flutter/t ## 🚀 Quick Start -Upgrading from 0.2.7? Read the [1.0 migration guide (Chinese)](./MIGRATION_1_0.md) before changing the dependency. Version 1.0 contains breaking API and behavior changes. +Upgrading from 0.2.7? Read the [1.0 migration guide (Chinese)](./MIGRATION.md) before changing the dependency. Version 1.0 contains breaking API and behavior changes. Requires Flutter ≥ 3.32.0 and Dart ≥ 3.8.0. -### Add Dependency - -The single-import feature has not been published to pub.dev yet. Before release, add this source dependency pinned to a specific commit to `pubspec.yaml`: - -```yaml -dependencies: - flutter: - sdk: flutter - tdesign_flutter: - git: - url: https://github.com/Tencent/tdesign-flutter.git - ref: 86c37e563039c57cf6c3f9b52fead418fd3c03bd - path: tdesign-component -``` - -Once a stable `1.0.0` release containing this feature is published, replace the source dependency with `tdesign_flutter: ^1.0.0`. This allows compatible 1.x updates without editing the version for every release; `1.0.0` without `^` allows only that exact version. Until then, use the source configuration above. - -Install the dependency: - -```bash -flutter pub get -``` +Version 1.0 is being prepared for release. Follow [Getting started](https://tdesign.tencent.com/flutter/getting-started) for the pinned source dependency and switch to the stable version after publication. ### Minimal Import @@ -90,157 +71,16 @@ const TButton(child: Text('Button')) No additional initialization or theme configuration is required. Omitting `onPressed` leaves the button disabled. -## 📖 Usage - -### Theme Configuration - -Configure theme styles (colors, font sizes, font styles, corner radius, shadows) through JSON files. Retrieve theme data using `context.tTheme` or `TThemeData.defaultData()`. - -> **Recommendation**: Use `context.tTheme` for components that should follow the local theme. Only use `TThemeData.defaultData()` for components that don't need to follow local themes. - -```dart -// Colors -context.tTheme.brandColor - -// Fonts -TThemeData.defaultData().fontBodyLarge -``` - -### Icons - -TDesign icons are in TTF format and do not follow the theme: - -```dart -Icon(TIcons.activity) -``` - -## 🎨 Custom Theme - -TDesign Flutter provides two flexible theming approaches: - -### Method 1: JSON Configuration - -Define theme properties directly in JSON format: - -```dart -String themeConfig = ''' -{ - "myTheme": { - "color": { - "brandColor": "#D7B386" - }, - "font": { - "fontBodyMedium": { - "size": 40, - "lineHeight": 55 - } - } - } -} -'''; - -MaterialApp( - theme: TThemeBuilder.light(TThemeData.fromJson('myTheme', themeConfig)!), - // ... -) -``` - -> For all available theme keys, see [t_default_theme.dart](https://github.com/Tencent/tdesign-flutter/blob/develop/tdesign-component/lib/src/theme/t_default_theme.dart) - -### Method 2: Theme Generator (Recommended) +## 📚 Documentation -If you don't want to customize too many colors but still want a beautiful custom theme, the "Theme Generator" is a great choice. - -The Theme Generator supports light and dark configurations. See [Dark Mode](https://tdesign.tencent.com/flutter/dark-mode). - - - -1. **Generate**: Visit [TDesign Theme Generator](https://tdesign.tencent.com/vue/custom-theme), click the theme generator below, select your desired colors in the generator on the right, and click download. - -2. **Convert**: You will get a `theme.css` file. Place it in `tdesign-component/example/shell/theme/`, modify `css2_json_theme.dart` with your file name, theme name, and output path to generate a `theme.json` file. - -3. **Apply**: Load the theme JSON with `TThemeData.fromJson`, and your beautiful custom theme is ready. - -```dart -var jsonString = await rootBundle.loadString('assets/theme.json'); -final _themeData = TThemeData.fromJson('green', jsonString, darkName: 'greenDark') ?? - TThemeData.defaultData(); -// ... -MaterialApp( - title: 'TDesign Flutter Example', - theme: TThemeBuilder.light(_themeData), - home: MyHomePage(title: 'TDesign Flutter Components'), -); -``` - -### Dark Mode Support - -Theme configurations generated by the Theme Generator support dark mode colors by default. - -```dart -// ... -// Set three properties in MaterialApp as follows. If you have custom theme properties, you can modify them using the copyWith() method. -// Note: Theme switching needs to be implemented by the business side, e.g., using Provider. See tdesign-flutter/tdesign-component/example/lib/component_test/dark_test.dart for reference. -MaterialApp( - theme: TThemeBuilder.light(_themeData), - darkTheme: TThemeBuilder.dark(_themeData), - themeMode: themeModeProvider.themeMode, - // ... -) -``` - -## 🌍 Internationalization - -TDesign Flutter does not have built-in internationalization, but supports integration with Flutter's i18n capabilities. You can extend the `TResourceDelegate` class, which abstracts all text resources inside the components, override the methods to get text for internationalization, and inject it via `setTResourceBuilder`. - -### Quick Setup - -1. **Override `TResourceDelegate` class:** - -```dart -/// Internationalization resource delegate -class IntlResourceDelegate extends TResourceDelegate { - IntlResourceDelegate(this.context); - - BuildContext context; - - /// Internationalization requires updating context each time - updateContext(BuildContext context) { - this.context = context; - } - - @override - String get cancel => AppLocalizations.of(context)!.cancel; - - @override - String get confirm => AppLocalizations.of(context)!.confirm; -} -``` - -2. **Inject `TResourceDelegate` class:** - -```dart -var delegate = IntlResourceDelegate(context); -return MaterialApp( - home: Builder( - builder: (context) { - // Set the text delegate. Internationalization only takes effect after MaterialApp is initialized, and context needs to be updated each time. - setTResourceBuilder((context) => delegate..updateContext(context), needAlwaysBuild: true); - return MyHomePage( - title: AppLocalizations.of(context)?.components ?? '', - ); - }, - ), - // Set internationalization - locale: locale, - supportedLocales: AppLocalizations.supportedLocales, - localizationsDelegates: AppLocalizations.localizationsDelegates, -); -``` +The detailed guides below are currently in Chinese. -3. For Flutter internationalization configuration, please refer to the official documentation: [Internationalizing Flutter apps](https://docs.flutter.dev/ui/accessibility-and-internationalization/internationalization) +- [Getting started](https://tdesign.tencent.com/flutter/getting-started) +- [Custom themes](https://tdesign.tencent.com/flutter/custom-theme) +- [Dark mode](https://tdesign.tencent.com/flutter/dark-mode) +- [Internationalization](https://tdesign.tencent.com/flutter/internationalization) +- [FAQ](https://tdesign.tencent.com/flutter/faq) +- [Component documentation](https://tdesign.tencent.com/flutter/overview) ## 🔗 More Examples @@ -261,7 +101,7 @@ TDesign provides component libraries for other platforms and frameworks: ## 🤝 Contributing -Contributions are welcome! Please read the [contributing guidelines](CONTRIBUTING.md) before submitting your [Pull Request](https://github.com/Tencent/tdesign-flutter/pulls). +Contributions are welcome! Please read the [contributing guidelines](https://github.com/Tencent/tdesign-flutter/blob/develop/CONTRIBUTING.md) before submitting your [Pull Request](https://github.com/Tencent/tdesign-flutter/pulls). diff --git a/tdesign-component/README_zh_CN.md b/tdesign-component/README_zh_CN.md index aa165c3c21..86b8bc28e8 100644 --- a/tdesign-component/README_zh_CN.md +++ b/tdesign-component/README_zh_CN.md @@ -1,3 +1,5 @@ + +

TDesign Logo @@ -45,32 +47,11 @@ ## 🚀 快速开始 -从 0.2.7 升级时,请先阅读 [1.0 迁移指南](./MIGRATION_1_0.md)。1.0 包含不兼容的接口与默认行为变化,不能只替换组件前缀。 +从 0.2.7 升级时,请先阅读 [1.0 迁移指南](./MIGRATION.md)。1.0 包含不兼容的接口与默认行为变化,不能只替换组件前缀。 要求 Flutter ≥ 3.32.0、Dart ≥ 3.8.0。 -### 添加依赖 - -当前单入口功能尚未发布到 pub.dev。发布前,在 `pubspec.yaml` 中添加以下锁定提交的源码依赖: - -```yaml -dependencies: - flutter: - sdk: flutter - tdesign_flutter: - git: - url: https://github.com/Tencent/tdesign-flutter.git - ref: 86c37e563039c57cf6c3f9b52fead418fd3c03bd - path: tdesign-component -``` - -包含上述能力的 `1.0.0` 稳定版发布后,可将源码依赖替换为 `tdesign_flutter: ^1.0.0`,允许兼容的 1.x 更新,无需每次发布都修改版本号;`1.0.0` 不带 `^` 则只允许该精确版本。发布前请使用上面的源码配置。 - -安装依赖: - -```bash -flutter pub get -``` +1.0 仍处于发布准备阶段。安装方式和锁定源码依赖见[快速开始](https://tdesign.tencent.com/flutter/getting-started);正式发布后按指南切换稳定版本。 ### 最小导入 @@ -90,157 +71,14 @@ const TButton(child: Text('按钮')) 无需额外初始化或主题配置。不传 `onPressed` 时,按钮处于禁用状态。 -## 📖 使用方法 - -### 主题配置 - -可通过 JSON 文件配置主题样式(颜色、字体尺寸、字体样式、圆角、阴影)。通过 `context.tTheme` 或 `TThemeData.defaultData()` 获取主题数据。 - -> **建议**:组件都使用 `context.tTheme`。不需要跟随局部主题的组件,才可以使用 `TThemeData.defaultData()`。 - -```dart -// 颜色 -context.tTheme.brandColor - -// 字体 -TThemeData.defaultData().fontBodyLarge -``` - -### 图标 - -TDesign 图标为 TTF 格式,不跟随主题: - -```dart -Icon(TIcons.activity) -``` - -## 🎨 自定义主题 - -TDesign Flutter 提供两种灵活的主题定制方式: - -### 方式一:JSON 配置 - -直接使用 JSON 格式定义主题属性: - -```dart -String themeConfig = ''' -{ - "myTheme": { - "color": { - "brandColor": "#D7B386" - }, - "font": { - "fontBodyMedium": { - "size": 40, - "lineHeight": 55 - } - } - } -} -'''; - -MaterialApp( - theme: TThemeBuilder.light(TThemeData.fromJson('myTheme', themeConfig)!), - // ... -) -``` - -> 所有可用的主题键值请参考 [t_default_theme.dart](https://github.com/Tencent/tdesign-flutter/blob/develop/tdesign-component/lib/src/theme/t_default_theme.dart) - -### 方式二:主题生成器(推荐) - -如果你不想自定义太多颜色,但是想要拥有好看的自定义主题,"主题生成器"是个不错的选择。 - -主题生成器支持浅色和深色配置,具体可参考[深色模式](https://tdesign.tencent.com/flutter/dark-mode)。 - - - -1. **生成**:进入 [TDesign 主题生成器](https://tdesign.tencent.com/vue/custom-theme),点击下方的主题生成器,在右边生成器里选择想要的颜色,点击下载。 - -2. **转换**:此时你得到一个 `theme.css` 文件,将该文件放到 `tdesign-component/example/shell/theme/` 文件夹下,修改该文件夹下的 `css2_json_theme.dart` 为你自己的文件名、主题名和输出路径,即可得到一个 `theme.json` 文件。 - -3. **应用**:通过 `TThemeData.fromJson` 加载主题 JSON,美观的自定义主题就设置完成了。 - -```dart -var jsonString = await rootBundle.loadString('assets/theme.json'); -final _themeData = TThemeData.fromJson('green', jsonString, darkName: 'greenDark') ?? - TThemeData.defaultData(); -// ... -MaterialApp( - title: 'TDesign Flutter Example', - theme: TThemeBuilder.light(_themeData), - home: MyHomePage(title: 'TDesign Flutter 组件库'), -); -``` - -### 深色模式 - -通过"主题生成器"生成的主题配置文件,默认支持暗色模式相关色值。 - -```dart -// ... -// MaterialApp 中设置三个属性如下,如果有自定义主题属性,可以通过 copyWith() 方法修改。 -// 注:主题切换需要业务自己实现,比如使用 Provider,具体可参考 tdesign-flutter/tdesign-component/example/lib/component_test/dark_test.dart -MaterialApp( - theme: TThemeBuilder.light(_themeData), - darkTheme: TThemeBuilder.dark(_themeData), - themeMode: themeModeProvider.themeMode, - // ... -) -``` - -## 🌍 国际化 - -TDesign Flutter 组件库内部不内置国际化语言,但支持与 Flutter 的国际化能力搭配使用。可以继承 `TResourceDelegate` 类,该类抽离了组件内部所有文字资源,重写获取文字的方法进行国际化处理,并通过 `setTResourceBuilder` 注入。 - -### 快速配置 - -1. **重写 `TResourceDelegate` 类:** - -```dart -/// 国际化资源代理 -class IntlResourceDelegate extends TResourceDelegate { - IntlResourceDelegate(this.context); - - BuildContext context; - - /// 国际化需要每次更新 context - updateContext(BuildContext context) { - this.context = context; - } - - @override - String get cancel => AppLocalizations.of(context)!.cancel; - - @override - String get confirm => AppLocalizations.of(context)!.confirm; -} -``` - -2. **注入 `TResourceDelegate` 类:** - -```dart -var delegate = IntlResourceDelegate(context); -return MaterialApp( - home: Builder( - builder: (context) { - // 设置文案代理,国际化需要在 MaterialApp 初始化完成之后才生效,而且需要每次更新 context - setTResourceBuilder((context) => delegate..updateContext(context), needAlwaysBuild: true); - return MyHomePage( - title: AppLocalizations.of(context)?.components ?? '', - ); - }, - ), - // 设置国际化处理 - locale: locale, - supportedLocales: AppLocalizations.supportedLocales, - localizationsDelegates: AppLocalizations.localizationsDelegates, -); -``` +## 📚 文档 -3. Flutter 国际化配置方法,请参阅官方文档:[Flutter 应用里的国际化](https://docs.flutter.cn/ui/accessibility-and-internationalization/internationalization) +- [快速开始](https://tdesign.tencent.com/flutter/getting-started) +- [自定义主题](https://tdesign.tencent.com/flutter/custom-theme) +- [深色模式](https://tdesign.tencent.com/flutter/dark-mode) +- [国际化](https://tdesign.tencent.com/flutter/internationalization) +- [常见问题](https://tdesign.tencent.com/flutter/faq) +- [在线组件文档](https://tdesign.tencent.com/flutter/overview) ## 🔗 更多示例 diff --git a/tdesign-site/CONTRIBUTING.md b/tdesign-site/CONTRIBUTING.md deleted file mode 100644 index ba6e5bd420..0000000000 --- a/tdesign-site/CONTRIBUTING.md +++ /dev/null @@ -1,194 +0,0 @@ ---- -title: 贡献指南 -description: TDesign Flutter 贡献指南 -spline: explain ---- - - -## 1. 项目地址 - - - -### 目录结构 - -```txt -tdesign-component/ -├── demo_tool // API 和演示代码工具 -├── example // 组件使用示例 -├── lib // 组件库 -└── test // 组件测试 - -tdesign-site/ // TDesign Flutter 站点 -``` - -## 2. 如何运行 - -### 2.1 Flutter 基础知识 - -- Flutter 基础介绍:[https://book.flutterchina.club/chapter1/flutter_intro.html](https://book.flutterchina.club/chapter1/flutter_intro.html) -- Dart 语言介绍:[https://book.flutterchina.club/chapter1/dart.html](https://book.flutterchina.club/chapter1/dart.html) -- 搭建 Flutter 开发环境:[https://book.flutterchina.club/chapter1/install_flutter.html](https://book.flutterchina.club/chapter1/install_flutter.html) -- 计数器应用示例:[https://book.flutterchina.club/chapter2/first_flutter_app.html](https://book.flutterchina.club/chapter2/first_flutter_app.html) - -### 2.2 开发环境要求 - -Flutter SDK 版本: `>= 3.32.0` - -### 2.3 克隆项目 - -```bash -# 克隆项目 -git clone -``` - -### 2.4 运行 Flutter 项目 - -下面是命令行运行方法,正常也可以不使用命令行,而在 IDE 直接运行,推荐使用 Android Studio 进行开发。运行时请选择 Android 设备和 iOS 模拟器,不要直接在浏览器运行。 - -```bash -# 运行 Flutter 组件项目 -cd tdesign-flutter/tdesign-component/ - -# 拉取依赖 -flutter pub get - -# 进入示例项目 -cd example/ - -# 运行项目,最好在运行前先确认设备已连接 -flutter run -``` - -### 2.5 运行前端官网项目 - -```bash -# 进入官网项目 -cd tdesign-flutter/tdesign-site/ - -# 安装依赖(仓库使用 pnpm) -pnpm install --frozen-lockfile - -# 运行项目 -pnpm dev -``` - -`pnpm dev` 同时启动文档站点(19000)和 Flutter Web 示例(19001),本地也可以查看右侧组件示例。请先确保 Flutter SDK 已安装,示例依赖已通过 `flutter pub get` 安装;如果预览未显示,检查终端中的 Flutter Web 启动日志和端口占用。 - - -## 3. 如何领取 Issue - -### 3.1 一个 Issue 的完整流程 - -- 用户发现功能不满足,查看 API 文档确认不支持,然后提 Issue。[常见问题](https://github.com/Tencent/tdesign-flutter/blob/main/tdesign-site/FAQ.md) -- 提了 Issue 后,在群里发出 Issue 链接,方便后续直接沟通,确认详细需求。然后将最终确认结果贴到 GitHub 的 Issue 上。 -- 负责人评估开发工作量,打 `help want` 和 `issueShoot` 标签。 -- 贡献者确认要领取,在 Issue 下评论领取,并通知负责人。负责人打上 `Received` 标签,讨论确认实现方案。 -- 贡献者参考开发规范开发完功能,按照文档自检,然后提 PR,并同步负责人验收。 -- PR 自动构建测试包。【自动构建流水线】 -- 负责人拉设计一起视觉走查(如果需要的话),走查完成后,合并 PR。Issue 打上下一个版本的标签。 -- 版本发布后,Issue 关闭。 - -### 3.2 标签管理 - -- 无标签:未评估 -- `issueShoot`:已评工作量,可领取 -- `Received`:已领取 -- `pre_x.x.x`:预计某个版本发布 -- `x.x.x`:某个版本已发布 - -## 4. 开发规范 - -- 组件命名规范:以 `T` 为前缀,组件名称、API 名称参考 TDesign 现有组件和 API 命名,可以根据 Flutter 原生 Widget 的特点进行修改。组件 API 以满足设计要求和使用为准,可根据 Flutter 特点做精简或定制。 -- 组件库用到的所有色值、圆角、字体字号等样式属性需全部定义在主题中。 -- 代码规范遵循腾讯 Dart 代码规范。 -- 对于系统原有组件,如 `Text`、`Image` 等,应兼容系统原组件功能,只能扩展,不能阉割,以免业务需要使用系统功能时,必须放弃 TDesign 控件。 -- 示例页面尽量使用 `ExamplePage` + `ExampleModule` + `ExampleItem` 组合,按照示例稿的布局实现。 -- 组件 API 和演示代码,请参考 `demo_tool/README.md` 文件。 -- 组件内部的固定文案,都应该抽离到 `TResourceDelegate` 中统一管理,方便业务进行国际化适配。 -- 如果已有 TDesign 组件封装,尽量使用现有 T 组件,而非直接使用系统组件。 - -## 5. 验收标准 - -### 5.1 PR 规则 - -- PR 标题遵循 Conventional Commits 格式:`type(scope): 修改描述`。`scope` 可填写组件、文档或 CI 模块;常用 `type` 包括 `feat`、`fix`、`docs`、`refactor`、`test`、`ci` 和 `chore`。例如:`fix(TBottomTabBar): 修复 iconText 模式底部溢出`、`docs(contributing): 更新 PR 提交流程`。 -- 复杂需求、公共 API 变更、组件重构和跨目录改动应附带 [Spec](https://github.com/Tencent/tdesign-flutter/tree/develop/specs) 目录链接;是否可以不创建 Spec,由 Review 根据实际改动判断。 -- 勾选规则: - > 1. 只要有新增参数,就勾选"新特性提交"。 - > - > 2. 只修改内部 bug,未新增参数,才勾选"日常 bug 修复"。 - > - > 3. 其他选项视具体改动判断。 -- “相关 Issue” 处带上修复的 Issue 链接。 -- 其他内容视情况可选填。 - -### 5.2 代码 Review 自检【欢迎大家补充】 - -- 尽量使用 TD 已有组件,而非系统组件。比如有直接使用 `Text` 组件的,请换成 `TText` 组件。 -- 检测边界条件,比如参数为 `null` 是否会导致代码异常? -- 是否提供验收用例?用例是否 `ExamplePage` 放在 `test` 字段里? -- 是否提供完善文档? - -### 5.3 文档自检 - -#### 5.3.1 API 文档 - -- `tdesign-component/demo_tool/all_build.sh` 文件中是否包含对应组件 API 的脚本,若未包含,请参考 `tdesign-component/demo_tool/README.md` 及其他组件示例添加脚本。请确保提交的 `all_build.sh` 中触发的是 `./bin/api_tool_linux`,因为 GitHub 自动打包的环境是 Linux 系统。 -- 检测组件属性的注释是否完善。 -- 如果组件有对应的系统组件,检测是否有系统组件支持的参数 TD 组件不支持。 -- 检测组件与 [https://tdesign.tencent.com/mobile-vue/overview](https://tdesign.tencent.com/mobile-vue/overview) 是否有含义相同但命名不同的组件,如果有,尽量保持命名一致。 -- `tdesign-component/demo_tool/all_build.sh` 中的名字与 `tdesign-component/example/lib/config.dart` 的名字需保持一致。 - -![API 名称示例](https://tdesign.tencent.com/flutter/assets/contributing_api_name.png) - -#### 5.3.2 新增组件 - -- `tdesign-site/site/site.config.mjs` - -> 菜单栏是否放开了注释?如果没有被注释组件,则参考其他组件添加。 -> `name` 与 `tdesign-component/example/lib/config.dart` 的 `ExamplePageModel` 的 `name` 参数是否一致。 - -![组件名称示例](https://tdesign.tencent.com/flutter/assets/contributing_component_name.png) - -- `tdesign-site/site/docs/overview.md`:检查组件预览是否已添加、分组组件数量是否正确。 - -![概览示例](https://tdesign.tencent.com/flutter/assets/contributing_overview.png) - -#### 5.3.3 Spec 文档 - -复杂需求、公共 API 变更、组件重构和跨目录改动通常需要创建 Spec。请从仓库根目录的 `specs/_template/` 复制模板,创建 `specs/<编号>-<短名称>/` 目录,并在 PR 中附上目录链接;是否可以例外,由 Review 根据实际改动判断。 - -- `spec.md`:记录背景、目标、范围、非目标、行为契约和验收标准。 -- `plan.md`:记录技术方案、影响范围、API 变化、风险和验证策略。 -- `tasks.md`:拆分实现、测试、示例和文档任务,并更新任务状态。 -- `acceptance.md`:记录实际验证命令、结果、人工验收项和未覆盖风险。 - -实现或验收标准发生变化时,应先同步更新 Spec,再继续修改代码。简单文案、格式调整和单文件局部修改不要求创建完整 Spec。 - -### 5.4 Demo 自测 - -提交 PR 后,会触发流水线自动打包。打包完成会添加评论如下: - -![APK 示例](https://tdesign.tencent.com/flutter/assets/contributing_apk.png) - -点击 “体验 apk” 后面链接,即可跳转打包完成的 apk 下载地址,可以安装自测。 - -**注意:** 该 demo 使用 CI 配置的 Flutter 版本打包;如果评论打包失败,请检查流水线日志确认原因。 - -#### 自测内容 - -- 组件改动后,整体是否有明显的布局溢出等展示异常。 -- 新增功能是否在"单元测试"栏目下?(需把示例放在 `ExamplePage` 的 `test` 字段里)。 -- 验证功能是否符合预期。 -- 点击右上角"i"图标,查看 API 文档是否正确。(若不正确,检测 `all_build.sh` 是否配置了对应组件的脚本)。 -- 点击右上角""图标,检测示例代码是否生成。(若未生成,参考其他有生成的模块修改)。 -- 如涉及视觉改动,请联系负责人拉取设计同学进行视觉走查。 -- 英文环境、切换主题后是否展示正常。 - -### 5.5 视觉走查 - -PR 打包完成后,通知负责人拉设计同学进群,将 PR 链接发到群里。设计同学根据“设计走查流水线地址”的链接,替换内网域名后,下载 ipa 包进行走查。 - -## 6. 合并 PR - -Issue 验收完成后,由负责人合并 PR,并将 Issue 的标签改为 `pre_x.x.x`。 diff --git a/tdesign-site/README.md b/tdesign-site/README.md index 6f4e0b2415..9bab02607c 100644 --- a/tdesign-site/README.md +++ b/tdesign-site/README.md @@ -1,42 +1,38 @@ +# TDesign Flutter 文档站点开发 -[TDesign](https://github.com/Tencent/tdesign) 适配Flutter的组件库。 +组件使用方法见[快速开始](./site/docs/getting-started.md),开发贡献规则见[仓库贡献指南](../CONTRIBUTING.md)。本文件只维护站点运行方式。 -## 预览 +## 安装 -
-Android请扫码下载预览 ↓ -
- -
-iOS请运行项目预览 ↓ -
-https://github.com/Tencent/tdesign-flutter/tree/main/tdesign-component +先按[贡献指南](../CONTRIBUTING.md#本地开发)安装Flutter并解析组件及示例依赖,再在本目录执行: -## 使用组件 +```bash +pnpm install --frozen-lockfile +``` -### yaml引入依赖 +## 开发与构建 -```yaml - dependencies: - tdesign_flutter: 1.0.0-alpha.1 -``` +- `pnpm dev`:同时运行站点(19000)和右侧Flutter Web预览(19001)。 +- `pnpm dev:site`:只运行站点。 +- `pnpm site`:运行主题和文档契约测试,再构建生产站点。 +- `pnpm test:example-code`:检查所有组件页面、生成资产及文档同步契约。 +## 文档来源 -### 引入组件代码 +用户指南直接维护在 `site/docs/`。贡献页直接读取根 `CONTRIBUTING.md`,不维护站点副本。根README只负责项目入口,站点快速开始不再由README覆盖生成。 -```dart -import 'package:tdesign_flutter/tdesign_flutter.dart'; -``` +组件页面位于 `docs/components/`,保留生成示例和API入口;修改API应改dartdoc,修改示例应改Example源码。生成和检查方式见[API工具说明](../tdesign-component/demo_tool/README.md)。 -## 本地运行官网示例代码 +每个组件使用组指令展示全部已生成示例: -- 在 `tdesign-site` 目录执行 `pnpm install --frozen-lockfile` 安装依赖 -- 在 `tdesign-site` 目录运行 `pnpm dev`,同时启动文档站点和 Flutter Web 预览 +```markdown +{{ flutter-example-group table }} -## 组件库版本 +{{ flutter-api table }} +``` -当前文档对应组件库版本 `1.0.0-alpha.1`,Flutter SDK 最低要求为 `3.32.0`。 +`pnpm test:example-code` 验证全部57份组件文档及对应资产;组件页禁止手写代码块、API参数表和迁移正文。迁移摘要的后续接入见[设计方案](../specs/061-migration-documentation-design/plan.md)。 -## 开源协议 +包内README和迁移副本统一执行 `node ../scripts/sync-readme.mjs` 生成,或加 `--check` 只读检查。`script/copy-readme.js` 仅保留兼容入口。 -TDesign 遵循 [MIT 协议](https://github.com/Tencent/tdesign-flutter/blob/main/tdesign-component/LICENSE)。 +更新日志保留现有发布工具入口,不在文档构建时生成或覆盖;版本发布步骤见[PUBLISH.md](../PUBLISH.md)。 diff --git a/tdesign-site/site/README.md b/tdesign-site/site/README.md index 455021944e..a175ffee87 100644 --- a/tdesign-site/site/README.md +++ b/tdesign-site/site/README.md @@ -1,19 +1,3 @@ +# 文档站点 -## Flutter官网运行调试文档 - -- 在 `tdesign-site` 目录执行 `pnpm install --frozen-lockfile` 安装依赖 -- 运行 `pnpm dev` 同时启动本地文档站点(19000)和右侧 Flutter Web 预览(19001) -- 仅调试文档、不需要 Flutter Web 预览时可运行 `pnpm dev:site` -- 运行 `pnpm site` 执行示例映射测试并构建生产站点 - -入门文档由仓库根目录的 `README_zh_CN.md` 同步生成,组件文档由组件 API 和示例构建流程生成。 - -每个组件 Markdown 使用组件级指令展示该组件的全部 Example App 生成代码: - -```markdown -{{ flutter-example-group table }} -``` - -指令按组映射到 `tdesign-component/example/assets/code/..txt`。单个片段仍可使用 `{{ flutter-example table.TableBasicExample }}` 调试,但组件正式文档必须使用组映射,确保该组件所有生成示例都被展示。 - -`pnpm test:example-code` 会验证全部 57 份组件文档、映射组和生成资产,组件页正文只允许生成的代码演示和 API 入口,禁止手写代码块、API 表格、迁移章节和重复说明。资产键非法、文件不存在、组件缺少映射或仍有旧副本时,站点构建都会失败。 +安装、开发、构建和文档维护方式统一见[站点开发说明](../README.md)。 diff --git a/tdesign-site/site/docs/custom-theme.md b/tdesign-site/site/docs/custom-theme.md index 09e820c251..0453b3d254 100644 --- a/tdesign-site/site/docs/custom-theme.md +++ b/tdesign-site/site/docs/custom-theme.md @@ -1,24 +1,72 @@ --- title: 自定义主题 -description: 使用 TThemeData 和组件 ThemeExtension 自定义 Flutter 主题。 +description: 全局 Token、主题 JSON 和组件 ThemeExtension 的配置方式。 spline: explain --- -## 全局主题 -`TThemeData` 保存全局设计 Token;`TThemeBuilder` 将其转换为 Flutter 的 `ThemeData`。 +TDesign Flutter 提供两种灵活的主题定制方式: + +## 方式一:JSON 配置 + +直接使用 JSON 格式定义主题属性: + +```dart +String themeConfig = ''' +{ + "myTheme": { + "color": { + "brandColor": "#D7B386" + }, + "font": { + "fontBodyMedium": { + "size": 40, + "lineHeight": 55 + } + } + } +} +'''; + +MaterialApp( + theme: TThemeBuilder.light(TThemeData.fromJson('myTheme', themeConfig)!), + // ... +) +``` + +> 所有可用的主题键值请参考 [t_default_theme.dart](https://github.com/Tencent/tdesign-flutter/blob/develop/tdesign-component/lib/src/theme/t_default_theme.dart) + +## 方式二:主题生成器(推荐) + +如果你不想自定义太多颜色,但是想要拥有好看的自定义主题,"主题生成器"是个不错的选择。 + +主题生成器支持浅色和深色配置,具体可参考[深色模式](https://tdesign.tencent.com/flutter/dark-mode)。 + + + +1. **生成**:进入 [TDesign 主题生成器](https://tdesign.tencent.com/vue/custom-theme),点击下方的主题生成器,在右边生成器里选择想要的颜色,点击下载。 + +2. **转换**:此时你得到一个 `theme.css` 文件,将该文件放到 `tdesign-component/example/shell/theme/` 文件夹下,修改该文件夹下的 `css2_json_theme.dart` 为你自己的文件名、主题名和输出路径,即可得到一个 `theme.json` 文件。 + +3. **应用**:通过 `TThemeData.fromJson` 加载主题 JSON,美观的自定义主题就设置完成了。 ```dart -final tokens = TThemeData.defaultData(); +var jsonString = await rootBundle.loadString('assets/theme.json'); +final _themeData = TThemeData.fromJson('green', jsonString, darkName: 'greenDark') ?? + TThemeData.defaultData(); +// ... MaterialApp( - theme: TThemeBuilder.light(tokens), - darkTheme: TThemeBuilder.dark(tokens), - themeMode: ThemeMode.system, - home: const MyHomePage(), + title: 'TDesign Flutter Example', + theme: TThemeBuilder.light(_themeData), + home: MyHomePage(title: 'TDesign Flutter 组件库'), ); ``` -通过 `context.tTheme` 读取当前子树的 Token。JSON 配置方式见 [快速开始](https://tdesign.tencent.com/flutter/getting-started#自定义主题)。 +## 读取当前主题 + +组件通过 `context.tTheme` 读取当前子树 Token;`TThemeData.defaultData()` 仅用于不需要继承局部主题的场景。实例规格、状态与具体视觉配置分别遵循组件公开 API。 ## 组件局部样式 @@ -34,3 +82,7 @@ Theme( ``` 全局 Token 与组件 ThemeExtension 分别负责全局配色和组件样式;组件可用配置见各组件文档末尾的 Theme 表。 + +## 明暗模式 + +主题的 `theme`、`darkTheme`、`themeMode` 和运行时切换见[深色模式](./dark-mode.md)。 diff --git a/tdesign-site/site/docs/dark-mode.md b/tdesign-site/site/docs/dark-mode.md index a8e6d9dbfa..db129e8bea 100644 --- a/tdesign-site/site/docs/dark-mode.md +++ b/tdesign-site/site/docs/dark-mode.md @@ -71,4 +71,4 @@ final tokens = TThemeData.fromJson( 组件通过 `context.tTheme` 读取当前子树的 Token。全局配色由 `TThemeData` 管理,组件局部样式通过对应的 `T*ThemeData` 配置。 -完整示例见 [深色模式示例源码](https://github.com/Tencent/tdesign-flutter/blob/develop/tdesign-component/example/lib/component_test/dark_test.dart),配色配置见 [自定义主题](https://tdesign.tencent.com/flutter/getting-started#自定义主题)。 +完整示例见 [深色模式示例源码](https://github.com/Tencent/tdesign-flutter/blob/develop/tdesign-component/example/lib/component_test/dark_test.dart),配色配置见 [自定义主题](https://tdesign.tencent.com/flutter/custom-theme)。 diff --git a/tdesign-site/FAQ.md b/tdesign-site/site/docs/faq.md similarity index 97% rename from tdesign-site/FAQ.md rename to tdesign-site/site/docs/faq.md index 2ac3950fe4..47dd730b96 100644 --- a/tdesign-site/FAQ.md +++ b/tdesign-site/site/docs/faq.md @@ -9,7 +9,7 @@ spline: explain 1.0 当前处于预发布阶段,版本按功能完成和验证进度发布,不承诺固定的月度发布日期。已发布版本见 [Releases](https://github.com/Tencent/tdesign-flutter/releases),后续计划以 [Issues](https://github.com/Tencent/tdesign-flutter/issues) 和对应里程碑为准。 ## 自定义主题 -- 自定义主题用法请参考:https://tdesign.tencent.com/flutter/getting-started#%E8%87%AA%E5%AE%9A%E4%B9%89%E4%B8%BB%E9%A2%98 +- 自定义主题用法请参考:https://tdesign.tencent.com/flutter/custom-theme - 在启动即修改主题颜色,完整示例代码请参考:https://github.com/Tencent/tdesign-flutter/blob/develop/tdesign-component/example/lib/component_test/test_app.dart - 在应用使用中切换主题颜色,示例代码请参考 example 的 `main.dart` 和 `home.dart`:https://github.com/Tencent/tdesign-flutter/blob/develop/tdesign-component/example/lib/main.dart - 转换完整代码:https://github.com/Tencent/tdesign-flutter/blob/develop/tdesign-component/example/shell/theme/css2_json_theme.dart diff --git a/tdesign-site/site/docs/getting-started.md b/tdesign-site/site/docs/getting-started.md index e65653f8d6..3bd541e603 100644 --- a/tdesign-site/site/docs/getting-started.md +++ b/tdesign-site/site/docs/getting-started.md @@ -1,50 +1,13 @@ -

- - TDesign Logo - -

+--- +title: 快速开始 +description: 安装 TDesign Flutter 并在已有页面中使用组件。 +spline: explain +--- -

- - License - - - Version - - - Downloads - - - Ask DeepWiki - -

+## 接入 -**TDesign Flutter** 是基于腾讯设计体系的跨平台 UI 组件库,使用 Flutter 框架开发,可快速构建美观、一致的移动端/Web 应用,提供丰富的预制组件和主题定制能力,支持 iOS、Android、Web 多端运行。 - -## 🎉 特性 - -- 提供遵循 TDesign 设计规范的 Flutter UI 组件库 -- 支持根据 App 设计风格自定义主题 -- 提供常用图标库,支持自定义替换 -- 根据 TDesign 规范定义颜色组(可在 `TColors` 中查看) -- 通过颜色值声明类实时预览默认颜色效果 - -## 📱 预览 - -**Android**:扫描二维码下载预览应用 - - - -下载链接:[tdesign-flutter-example.apk](https://tdesign.gtimg.com/flutter/tdesign_flutter_example.apk) - -**iOS**:运行项目预览 - -[https://github.com/Tencent/tdesign-flutter/tree/main/tdesign-component](https://github.com/Tencent/tdesign-flutter/tree/main/tdesign-component) - -## 🚀 快速开始 - -从 0.2.7 升级时,请先阅读 [1.0 迁移指南](/flutter/migration-1-0)。1.0 包含不兼容的接口与默认行为变化,不能只替换组件前缀。 +从 0.2.7 升级时,请先阅读 [1.0 迁移指南](./migration-0.2.7-to-1.0.md)。1.0 包含不兼容的接口与默认行为变化,不能只替换组件前缀。 要求 Flutter ≥ 3.32.0、Dart ≥ 3.8.0。 @@ -89,197 +52,14 @@ const TButton(child: Text('按钮')) 无需额外初始化或主题配置。不传 `onPressed` 时,按钮处于禁用状态。 -## 📖 使用方法 - -### 主题配置 - -可通过 JSON 文件配置主题样式(颜色、字体尺寸、字体样式、圆角、阴影)。通过 `context.tTheme` 或 `TThemeData.defaultData()` 获取主题数据。 - -> **建议**:组件都使用 `context.tTheme`。不需要跟随局部主题的组件,才可以使用 `TThemeData.defaultData()`。 - -```dart -// 颜色 -context.tTheme.brandColor - -// 字体 -TThemeData.defaultData().fontBodyLarge -``` - -### 图标 - -TDesign 图标为 TTF 格式,不跟随主题: - -```dart -Icon(TIcons.activity) -``` - -## 🎨 自定义主题 - -TDesign Flutter 提供两种灵活的主题定制方式: - -### 方式一:JSON 配置 - -直接使用 JSON 格式定义主题属性: - -```dart -String themeConfig = ''' -{ - "myTheme": { - "color": { - "brandColor": "#D7B386" - }, - "font": { - "fontBodyMedium": { - "size": 40, - "lineHeight": 55 - } - } - } -} -'''; - -MaterialApp( - theme: TThemeBuilder.light(TThemeData.fromJson('myTheme', themeConfig)!), - // ... -) -``` - -> 所有可用的主题键值请参考 [t_default_theme.dart](https://github.com/Tencent/tdesign-flutter/blob/develop/tdesign-component/lib/src/theme/t_default_theme.dart) - -### 方式二:主题生成器(推荐) - -如果你不想自定义太多颜色,但是想要拥有好看的自定义主题,"主题生成器"是个不错的选择。 - -主题生成器支持浅色和深色配置,具体可参考[深色模式](https://tdesign.tencent.com/flutter/dark-mode)。 - - - -1. **生成**:进入 [TDesign 主题生成器](https://tdesign.tencent.com/vue/custom-theme),点击下方的主题生成器,在右边生成器里选择想要的颜色,点击下载。 - -2. **转换**:此时你得到一个 `theme.css` 文件,将该文件放到 `tdesign-component/example/shell/theme/` 文件夹下,修改该文件夹下的 `css2_json_theme.dart` 为你自己的文件名、主题名和输出路径,即可得到一个 `theme.json` 文件。 - -3. **应用**:通过 `TThemeData.fromJson` 加载主题 JSON,美观的自定义主题就设置完成了。 - -```dart -var jsonString = await rootBundle.loadString('assets/theme.json'); -final _themeData = TThemeData.fromJson('green', jsonString, darkName: 'greenDark') ?? - TThemeData.defaultData(); -// ... -MaterialApp( - title: 'TDesign Flutter Example', - theme: TThemeBuilder.light(_themeData), - home: MyHomePage(title: 'TDesign Flutter 组件库'), -); -``` - -### 深色模式 - -通过"主题生成器"生成的主题配置文件,默认支持暗色模式相关色值。 - -```dart -// ... -// MaterialApp 中设置三个属性如下,如果有自定义主题属性,可以通过 copyWith() 方法修改。 -// 注:主题切换需要业务自己实现,比如使用 Provider,具体可参考 tdesign-flutter/tdesign-component/example/lib/component_test/dark_test.dart -MaterialApp( - theme: TThemeBuilder.light(_themeData), - darkTheme: TThemeBuilder.dark(_themeData), - themeMode: themeModeProvider.themeMode, - // ... -) -``` - -## 🌍 国际化 - -TDesign Flutter 组件库内部不内置国际化语言,但支持与 Flutter 的国际化能力搭配使用。可以继承 `TResourceDelegate` 类,该类抽离了组件内部所有文字资源,重写获取文字的方法进行国际化处理,并通过 `setTResourceBuilder` 注入。 - -### 快速配置 - -1. **重写 `TResourceDelegate` 类:** - -```dart -/// 国际化资源代理 -class IntlResourceDelegate extends TResourceDelegate { - IntlResourceDelegate(this.context); - - BuildContext context; - - /// 国际化需要每次更新 context - updateContext(BuildContext context) { - this.context = context; - } - - @override - String get cancel => AppLocalizations.of(context)!.cancel; - - @override - String get confirm => AppLocalizations.of(context)!.confirm; -} -``` - -2. **注入 `TResourceDelegate` 类:** - -```dart -var delegate = IntlResourceDelegate(context); -return MaterialApp( - home: Builder( - builder: (context) { - // 设置文案代理,国际化需要在 MaterialApp 初始化完成之后才生效,而且需要每次更新 context - setTResourceBuilder((context) => delegate..updateContext(context), needAlwaysBuild: true); - return MyHomePage( - title: AppLocalizations.of(context)?.components ?? '', - ); - }, - ), - // 设置国际化处理 - locale: locale, - supportedLocales: AppLocalizations.supportedLocales, - localizationsDelegates: AppLocalizations.localizationsDelegates, -); -``` - -3. Flutter 国际化配置方法,请参阅官方文档:[Flutter 应用里的国际化](https://docs.flutter.cn/ui/accessibility-and-internationalization/internationalization) - -## 🔗 更多示例 - -更多使用示例请参考 [example/lib/page/](https://github.com/Tencent/tdesign-flutter/tree/develop/tdesign-component/example/lib/page) - -## 🌐 TDesign 组件库 - -TDesign 还提供其他平台和框架的组件库: - -| 平台 | 仓库 | -|------|------| -| Vue 2.x | [tdesign-vue](https://github.com/Tencent/tdesign-vue) | -| Vue 3.x | [tdesign-vue-next](https://github.com/Tencent/tdesign-vue-next) | -| React | [tdesign-react](https://github.com/Tencent/tdesign-react) | -| Vue 3.x 移动端 | [tdesign-mobile-vue](https://github.com/Tencent/tdesign-mobile-vue) | -| React 移动端 | [tdesign-mobile-react](https://github.com/Tencent/tdesign-mobile-react) | -| 微信小程序 | [tdesign-miniprogram](https://github.com/Tencent/tdesign-miniprogram) | - -## 🤝 参与贡献 - -欢迎贡献代码!请在提交 [Pull Request](https://github.com/Tencent/tdesign-flutter/pulls) 前阅读[贡献指南](https://github.com/Tencent/tdesign-flutter/blob/develop/CONTRIBUTING.md)。 - - - - - -## 💬 交流反馈 - -创建 [GitHub Issues](https://github.com/Tencent/tdesign-flutter/issues) 或扫描二维码加入用户群: - - - -## 🙏 致谢 - -TDesign Flutter 依赖以下组件库,感谢作者的开源贡献: +## 下一步 -- [easy_refresh](https://pub.dev/packages/easy_refresh) -- [flutter_slidable](https://pub.dev/packages/flutter_slidable) -- [image_picker](https://pub.dev/packages/image_picker) +- [自定义主题](./custom-theme.md) +- [深色模式](./dark-mode.md) +- [国际化](./internationalization.md) +- [组件概览](./overview.md) +- [常见问题](./faq.md) -## 📄 开源协议 +## 自定义主题 -TDesign Flutter 遵循 [MIT 协议](https://github.com/Tencent/tdesign-flutter/blob/develop/LICENSE)。 +主题JSON、主题生成器和局部覆盖统一见[自定义主题](./custom-theme.md)。本节保留旧快速开始的章节入口。 diff --git a/tdesign-site/site/docs/internationalization.md b/tdesign-site/site/docs/internationalization.md new file mode 100644 index 0000000000..841cbe6b0a --- /dev/null +++ b/tdesign-site/site/docs/internationalization.md @@ -0,0 +1,55 @@ +--- +title: 国际化 +description: 通过 TResourceDelegate 对接应用的 Flutter 国际化资源。 +spline: explain +--- + + +TDesign Flutter 组件库内部不内置国际化语言,但支持与 Flutter 的国际化能力搭配使用。可以继承 `TResourceDelegate` 类,该类抽离了组件内部所有文字资源,重写获取文字的方法进行国际化处理,并通过 `setTResourceBuilder` 注入。 + +### 快速配置 + +1. **重写 `TResourceDelegate` 类:** + +```dart +/// 国际化资源代理 +class IntlResourceDelegate extends TResourceDelegate { + IntlResourceDelegate(this.context); + + BuildContext context; + + /// 国际化需要每次更新 context + updateContext(BuildContext context) { + this.context = context; + } + + @override + String get cancel => AppLocalizations.of(context)!.cancel; + + @override + String get confirm => AppLocalizations.of(context)!.confirm; +} +``` + +2. **注入 `TResourceDelegate` 类:** + +```dart +var delegate = IntlResourceDelegate(context); +return MaterialApp( + home: Builder( + builder: (context) { + // 设置文案代理,国际化需要在 MaterialApp 初始化完成之后才生效,而且需要每次更新 context + setTResourceBuilder((context) => delegate..updateContext(context), needAlwaysBuild: true); + return MyHomePage( + title: AppLocalizations.of(context)?.components ?? '', + ); + }, + ), + // 设置国际化处理 + locale: locale, + supportedLocales: AppLocalizations.supportedLocales, + localizationsDelegates: AppLocalizations.localizationsDelegates, +); +``` + +3. Flutter 国际化配置方法,请参阅官方文档:[Flutter 应用里的国际化](https://docs.flutter.cn/ui/accessibility-and-internationalization/internationalization) diff --git a/tdesign-component/MIGRATION_1_0.md b/tdesign-site/site/docs/migration-0.2.7-to-1.0.md similarity index 99% rename from tdesign-component/MIGRATION_1_0.md rename to tdesign-site/site/docs/migration-0.2.7-to-1.0.md index be50528294..ff66a502be 100644 --- a/tdesign-component/MIGRATION_1_0.md +++ b/tdesign-site/site/docs/migration-0.2.7-to-1.0.md @@ -1,3 +1,9 @@ +--- +title: 从 0.2.7 升级到 1.0 +description: 0.2.7 使用方升级到 1.0 的接口与行为迁移说明。 +spline: explain +--- + # 从 0.2.7 升级到 1.0 本文仅面向 `tdesign_flutter 0.2.7` 使用方。1.0 是不兼容升级,旧参数和旧行为不会通过兼容别名保留;不能对全项目执行一次 `TD` → `T` 替换后就认为迁移结束。 diff --git a/tdesign-site/site/docs/migration-1-0.md b/tdesign-site/site/docs/migration-1-0.md deleted file mode 100644 index be50528294..0000000000 --- a/tdesign-site/site/docs/migration-1-0.md +++ /dev/null @@ -1,747 +0,0 @@ -# 从 0.2.7 升级到 1.0 - -本文仅面向 `tdesign_flutter 0.2.7` 使用方。1.0 是不兼容升级,旧参数和旧行为不会通过兼容别名保留;不能对全项目执行一次 `TD` → `T` 替换后就认为迁移结束。 - -本文按 0.2.7 实际发布包与当前 1.0 候选编写。正式 1.0 发布后使用 `tdesign_flutter: ^1.0.0`;发布前不要把这个版本约束当作已经可从 pub.dev 安装的稳定版本。已有 alpha 的升级不在本文范围。 - -## 升级顺序 - -1. 保留当前依赖锁文件、主题 JSON 与关键页面截图;先在业务分支迁移。 -2. 升级到 Flutter ≥3.32.0、Dart ≥3.8.0。原生平台要求还受所解析的 Flutter/图片选择器实现包约束,按目标 SDK 构建验证。 -3. 先替换公共主题/文字与导入,再迁移基础组件,最后迁移选择器、表单、浮层和异步交互。 -4. 修复全部编译错误后,按本文的行为清单验证真实操作。默认视觉和回调行为变化不一定产生编译错误。 - -统一入口可同时提供 TD 与 Flutter Material 类型: - -```dart -import 'package:tdesign_flutter/tdesign_flutter.dart'; -``` - -仍可显式导入 Material;业务另有同名类型时用 import 前缀或 show/hide 解决。不要从 `package:tdesign_flutter/src/...` 导入旧 State、Painter 或内部适配类型。 - -## 主题、文字与样式 - -旧 `TDTheme.of(context)` 对应 `context.tTheme`;全局数据为 `TThemeData`,应用使用 `TThemeBuilder.light/dark`。让组件跟随局部主题时读取 `context.tTheme`,不要用固定默认值绕开子树 Theme。 - - -```dart -Widget migratedApp(Widget home) { - final tokens = TThemeData.defaultData(); - return MaterialApp( - theme: TThemeBuilder.light(tokens), - darkTheme: TThemeBuilder.dark(tokens), - home: home, - ); -} - -Widget migratedTextTheme(BuildContext context, Widget child) { - return Theme( - data: Theme.of( - context, - ).mergeExtension(const TTextThemeData(textStyle: TextStyle(fontSize: 18))), - child: child, - ); -} -``` - - -- TD 内置外观按全局 Token、TD 组件 Theme、受支持的显式实例配置解析。Material `textTheme`、按钮 Theme、`IconTheme`、visualDensity 等不再隐式改变 TD 内置视觉;原生 Material 和调用方自定义内容仍可使用自己的主题。 -- 使用 `mergeExtension` 合并子树组件主题,避免用 `copyWith(extensions: [...])` 意外丢弃其他 ThemeExtension。 -- `TText` 的单实例文字使用 `style: TextStyle(...)`;`TTextSpan` 也用 `style`。不要继续传旧 `fontWeight/fontFamily/textColor/isTextThrough/lineThroughColor`,删除线使用 `TextDecoration.lineThrough`。 -- `textScaleFactor` 改为 `textScaler`;未传时继承系统文字缩放。旧 `TDTextPaddingConfig` 改为父级 Padding/Align/Center,段落文字不要按单行居中规则强行裁切。 -- 在线字体先由业务调用 `TFontLoader.load` 并管理加载状态,之后通过文字 `style.fontFamily` 或 TD 文字 Theme 配置,不再在文字 build 时请求字体 URL。 -- 自定义主题 JSON 需要核对字段与最终默认值;旧按钮状态样式、组件形态、交互时长等不能一律塞进 Theme。具体视觉默认值与实例的状态/规格选择分开。 - -## 按钮与禁用语义 - -0.2.7:`TDButton(text: '保存', type: TDButtonType.fill, theme: TDButtonTheme.primary, onTap: save)`。 - -1.0 的对应写法: - - -```dart -Widget migratedButton(VoidCallback? onPressed) { - return TButton( - variant: TButtonVariant.fill, - colorPreset: TButtonColorPreset.primary, - onPressed: onPressed, - child: const Text('保存'), - ); -} -``` - - -`onPressed == null` 表示禁用;长按也要求按钮处于可点击状态。不要保留旧 `disabled: false` 却漏传回调。`icon` 使用 Widget,IconData 包在 `Icon(...)` 或 `TIcon(...)` 中。普通/按压/禁用的具体样式合并到 `ButtonStyle` 的状态属性;尺寸布局按 size、显式样式或外部约束表达,不搬旧 style/activeStyle/disableStyle 三套对象。 - -自定义反色主题时,默认配色的 `TButtonVariant.ghost` 文字与描边读取 `textColorAnti`,禁用时读取 `fontWhite4`;不要仅修改原始白色层级 `fontWhite1` 来控制这类按钮。单个按钮的前景、边框和交互状态仍通过 `ButtonStyle` 覆盖。 - -## 受控值、输入与选择 - -对于 `TCheckbox`、`TRadioGroup`、`TSwitch`、`TStepper`、Picker、Calendar 等,父级应接受回调并重建传回新值。只记录回调而不更新 value,会导致保持旧值或滚动结束回退;空回调的禁用规则以各组件 API 为准。 - - -```dart -Widget migratedCheckbox(bool value, ValueChanged? onChanged) { - return TCheckbox(value: value, onChanged: onChanged, title: '同意条款'); -} - -Widget migratedRadio(String value, ValueChanged? onChanged) { - return TRadioGroup.options( - value: value, - onChanged: onChanged, - options: const [ - TRadioOption(value: 'a', label: '方案 A'), - TRadioOption(value: 'b', label: '方案 B'), - ], - ); -} -``` - - -`TRadio` 必须在同类型 `TRadioGroup` 下,不能把 groupValue/onChanged 重新分散到每个 radio。复选框单项 value 为 bool?(null 表示不确定态),组的 value/options 以当前泛型 API 为准,旧 id、controller、passThrough 等不能原样套入。 - -输入框的 `controller` 与 `initialValue` 互斥;`initialValue` 仅初始化内部值。需要外部更新、表单重置或保留选区时使用 `TextEditingController`,由创建方释放。单行用 `TInput`,多行用 `TTextarea`;不要把旧 TDInput 的 maxLines 参数当成完整多行迁移方案。重验空内容粘贴、中文组合输入、清空按钮、焦点与键盘遮挡。 - -## 表单改为字段树 - -旧 `items/rules/data` 配置改为 `TForm + TFormField + TFormItem`。字段持有业务 value/onChanged,validator 返回错误文案;`TFormController.validate()` 用于主动校验,`required: true` 执行必填校验,单独设置表单项必填标记不等于校验。 - - -```dart -Widget migratedForm({ - required TFormController form, - required TextEditingController text, - required String value, - required ValueChanged onChanged, -}) { - return TForm( - controller: form, - child: TFormField( - name: 'name', - value: value, - onChanged: onChanged, - required: true, - requiredMessage: '请输入姓名', - builder: (context, current, change, error) => TFormItem( - label: '姓名', - errorText: error, - child: TInput(controller: text, onChanged: change), - ), - ), - ); -} -``` - - -示例中的 text/form 由页面持有,value 由父级在 onChanged 中更新;页面销毁时释放自建 TextEditingController。业务执行 reset 时,同时更新字段值与自己的文本控制器;不要指望 initialValue 覆盖现有编辑状态。 - -## Picker、日期与浮层确认分离 - -`TDPicker/TDMultiPicker/TDMultiLinkedPicker` 改为 `TPicker` 和不可变 `TPickerColumns/TPickerLinked` 数据。面板回调只是候选值变化,不是业务确认。 - - -```dart -TPopupHandle migratedPicker({ - required BuildContext context, - required String initialValue, - required ValueChanged onConfirmed, -}) { - var draft = initialValue; - return TPickerPopup.show( - context, - child: StatefulBuilder( - builder: (context, setPanelState) => TPicker( - items: const TPickerColumns([ - [ - TPickerOption(label: '选项 A', value: 'a'), - TPickerOption(label: '选项 B', value: 'b'), - ], - ]), - value: [draft], - onChanged: (next) => setPanelState(() { - draft = next.values.single! as String; - }), - ), - ), - headerBuilder: (context, close) => TPopupHeader( - title: const Text('请选择'), - cancelButton: TButton(onPressed: close, child: const Text('取消')), - confirmButton: TButton( - onPressed: () { - onConfirmed(draft); - close(); - }, - child: const Text('确认'), - ), - ), - ); -} -``` - - -调用方在 `onConfirmed` 中更新业务保存值,并确保对应业务 State 仍 mounted;取消只关闭、不提交草稿。重新打开时用保存值创建新草稿。`TPickerPopup` 会为标准头部和滚轮预留高度;自定义通用 Popup 时也须提供合理内容约束。 - -`TDDatePicker + DatePickerModel` 改为 `TDateTimePicker + TDateTimePickerValue + DateTimePickerMode`。默认年月日,按需组合时间列;start/end 与 steps 用当前模型,onChanged 实时回写。`TDCalendar` 的 value 改为 `List`,single/multiple/range 由 variant 表达,组件不再同时负责业务弹窗确认或时间选择。 - - -```dart -Widget migratedCalendar( - List value, - ValueChanged>? onChanged, -) { - return SizedBox( - height: 400, - child: TCalendar( - value: value, - variant: TCalendarVariant.single, - minDate: DateTime(2026, 1, 1), - maxDate: DateTime(2026, 12, 31), - onChanged: onChanged, - ), - ); -} - -Widget migratedDateTime( - TDateTimePickerValue value, - ValueChanged? onChanged, -) { - return TDateTimePicker(value: value, onChanged: onChanged); -} -``` - - -**重新验证边界**:最小/最大日期的时分、跨天、闰日、区间端点、数据源变更、连续滚动与惯性。不要用整数时间戳或旧通知器替代新受控值。 - -## Popup、Dialog、Toast - -旧 `TDPopup*Panel/TDSlidePopupRoute` 组合改为 `TPopup.show(context, options: ...)`。按方向选择 `TPopupOptions.bottom/center/left/right/top` 与对应 Inset;从返回的 `TPopupHandle` 关闭/重开并读取本次 `result`。用正确 Theme/Navigator 子树的 context 打开;handle 重开不会自动重新解析已经合并的主题选项,需要新配置时重新创建。 - -`TConfirmDialog` 是单确认便捷组件;多操作使用 `TDialog.actions + TDialogAction`,输入弹窗组合 `TDialog + TInput`,不要寻找被删除的 TDInputDialog。 - - -```dart -Future migratedDialog(BuildContext context) { - return TDialog.show( - context, - dialog: const TConfirmDialog( - title: '操作确认', - content: '确认继续?', - buttonText: '继续', - ), - ); -} -``` - - -Toast 时长用 `Duration`;加载提示默认也会自动关闭。持续任务显式设置 `Duration.zero`,任务结束后按返回 ID 关闭。可见遮罩与背景点击/滚动拦截是独立配置,不要把半透明遮罩等同于不可穿透。 - - -```dart -String migratedLoading(BuildContext context) { - return TToast.showLoading( - context: context, - text: '处理中', - duration: Duration.zero, - overlay: const TOverlayConfig(preventScrollThrough: true), - ); -} -``` - - -结束任务时调用 `TToast.dismissToast(id)`。匿名提示会复用匿名 ID;需要并存时提供不同 toastId。`TMessage.duration` 同样使用 Duration,显示由 Widget 树或其公开命令管理,不能继续用旧 visible 参数控制。 - -## Upload 与平台依赖 - -Upload 只负责选择及文件列表交互,不执行 HTTP 上传。旧 `max/sizeLimit/multiple/disabled/onChange` 不能仅改名:改为 `maxFiles/maxFileSize`、单一 mediaType、受控 files/onChanged;自定义业务 picker 使用 `Future>`。 - - -```dart -Widget migratedUpload({ - required List files, - required ValueChanged>? onChanged, - TUploadPicker? picker, -}) { - return TUpload( - files: files, - onChanged: onChanged, - maxFiles: 2, - maxFileSize: 5 * 1024 * 1024, - picker: picker, - ); -} -``` - - -回调列表不可变,接受时直接保存新列表,不原地 add/remove;上传进度和结果由业务创建新 TUploadFile/列表更新。`onChanged == null` 阻止新交互,但不会取消已经开始的选择;卸载后不通知。数量/大小错误、选择器异常和业务回调异常分别按当前回调契约处理。 - -相册权限、iOS Info.plist、文件持久化和 Android 进程回收后的恢复属于宿主集成。默认选择器底层是 image_picker;业务可用 picker 接入自己的权限、恢复和上传流程。升级后重新构建原生宿主,并检查实际解析的平台实现版本;Dart 编译通过不能证明权限与系统相册行为通过。 - -## 两种 TabBar 与 Swiper - -- **顶部页签**:旧 `TDTabBar/TDTabBarView` → `TTabsBar/TTabsBarView`,显式共享 TabController 或位于同一个 DefaultTabController。TTabsBarView 默认不可滑动,需要手势切页时显式配置 physics。 -- **底部导航**:旧 `TDBottomTabBar` → `TTabBar`,提供 type、navigationTabs、受控 value/onChanged;旧 `topBorder/showTopBorder/centerDistance` 没有等价开关恢复,按新的默认边线和内置图文布局验收。 -- **Swiper**:使用 `TSwiper` 的 children 或 itemBuilder/itemCount;自建 `TSwiperController` 并在页面 dispose 中释放。旧第三方 SwiperPlugin/SwiperController 和 TDSwiperPagination 不能直接传入;按当前分页、箭头与 pageEffect 能力重组。TSwiper 默认 loop/autoplay 均 false,业务需要时显式打开。 - -## 全部组件迁移索引 - -下表是入口与职责迁移索引,不承诺旧构造参数一一保留。每个组件的全部当前字段与默认值以 1.0 API 文档为准;旧名查找见文末导出索引。 - -| 组件 | 0.2.7 入口 | 1.0 入口 | 必须检查的迁移点 | -|---|---|---|---| -| button | `TDButton` | `TButton` | text→child;onTap→onPressed;type→variant;theme→colorPreset;状态样式合并为 ButtonStyle。 | -| divider | `TDDivider` | `TDivider` | 按当前构造及 TDividerThemeData 配置;方向/内容与具体视觉默认值分开。 | -| fab | `TDFab` | `TFab` | 重新核对尺寸/形态枚举、内容和事件;具体视觉从 TFabThemeData 配置。 | -| icon | `TDIcons / Icon` | `TIcons / TIcon` | 图标数据来自 tdesign_flutter_icons;TIcon 的默认视觉由 TD 控制,实例 size/color 可覆盖。 | -| text | `TDText / TDTextSpan` | `TText / TTextSpan` | 删除分散字体、在线加载和 padding 入口;用 style、textScaler、显式父布局,见文字一节。 | -| link | `TDLink` | `TLink` | 内容改用 Widget child;内置规格与 colorPreset 留实例,具体视觉从 TLinkThemeData 配置。 | -| backtop | `TDBackTop` | `TBackTop` | 按当前滚动绑定与形态配置;仅提供滚动控制器时按组件契约回顶,不用空回调猜禁用。 | -| drawer | `TDDrawer / TDDrawerWidget` | `TDrawer / showTDrawer` | 内容与浮层打开分开;宽度/背景移入 TDrawerThemeData,旧内容实现类型不再直接构造。 | -| indexes | `TDIndexes` | `TIndexes` | 重新核对受控索引及滚动对象;字母列表最大高度在组件 Theme 配置。 | -| navbar | `TDNavBar` | `TNavBar` | title/操作保留内容职责,背景、颜色、间距、边框和阴影迁入 TNavBarThemeData。 | -| sidebar | `TDSideBar` | `TSideBar` | 选择交给 value/onChanged;去掉旧 Controller/数据项样式依赖,视觉使用 TSideBarThemeData。 | -| steps | `TDSteps` | `TSteps.progress / selectable / display` | 选择进度、可选择或纯展示模式;不把三种状态源混用。 | -| tab_bar | `TDBottomTabBar` | `TTabBar` | 底部导航:显式 type、navigationTabs、value/onChanged;尺寸/颜色/分隔线迁 Theme。 | -| tabs | `TDTabBar / TDTabBarView` | `TTabsBar / TTabsBarView` | 顶部页签:共享 TabController 或 DefaultTabController;不是底部 TTabBar。 | -| form | `TDForm / FormController` | `TForm / TFormField / TFormController` | 从 items/rules/data 配置改为字段 Widget 树;value/onChanged、validator 与控制器职责分开。 | -| input | `TDInput` | `TInput` | controller 与 initialValue 互斥;onChanged/hintText/prefix/suffix;不要把 initialValue 当持续受控值。 | -| textarea | `TDTextarea` | `TTextarea` | 多行输入独立组件;用 minLines/maxLines、controller 与字段回调,核对计数/字符限制。 | -| search | `TDSearchBar` | `TSearchBar` | placeHolder→hintText、onTextChanged→onChanged、onActionClick→onActionPressed;不保留旧样式对象。 | -| checkbox | `TDCheckbox / TDCheckboxGroup` | `TCheckbox / TCheckboxGroup` | checked/id/controller 方案改为 value/onChanged;组提供 options 和受控选中集合,类型按当前 API。 | -| radio | `TDRadio / TDRadioGroup` | `TRadio / TRadioGroup` | 单项必须位于同类型组下;组持有 value/onChanged,不再为每项维护选中状态。 | -| switch | `TDSwitch` | `TSwitch` | value/onChanged 管开关状态;空回调禁用;规格与具体配色分别从实例/Theme 设置。 | -| stepper | `TDStepper` | `TStepper` | required value;回调接受后重建;旧 defaultValue/eventController 不能作为迁移目标。 | -| slider | `TDSlider / TDRangeSlider` | `TSlider / TRangeSlider` | 按当前值及回调类型迁移;旧 Thumb/Track/Painter 类型不再作为可继承公开入口。 | -| rate | `TDRate` | `TRate` | 按当前受控数值与回调迁移;重验半星、禁用、只读与自定义指示器。 | -| picker | `TDPicker / TDMultiPicker / TDMultiLinkedPicker` | `TPicker + TPickerColumns / TPickerLinked` | 列数据改不可变 option 树;选择面板不负责业务确认,使用 TPickerPopup 组合草稿/确认/取消。 | -| date_time_picker | `TDDatePicker` | `TDateTimePicker` | DatePickerModel 改为 TDateTimePickerValue + DateTimePickerMode;上下界/步进显式传入,外部管理确认。 | -| cascader | `TDCascader / TDMultiCascader` | `TCascader` | 使用 TCascaderOption 树与受控路径;旧自定义 Tab/Action/多选控制类型不能机械替换,按当前能力重组。 | -| tree_select | `TDTreeSelect / TDSelectOption` | `TTreeSelect / TTreeSelectOption` | 树数据、选中集合与 multiple 明确配置;不再复用旧副作用控制器。 | -| calendar | `TDCalendar` | `TCalendar` | value 是 List;variant 决定单选/多选/区间;onChanged 回写,时间选择和弹层外部组合。 | -| upload | `TDUpload` | `TUpload` | files/onChanged 受控;单一 mediaType,maxFiles/maxFileSize、不可变结果;上传请求由业务执行。 | -| avatar | `TDAvatar` | `TAvatar` | 形状用 shape,物理大小/颜色迁 TAvatarThemeData;特殊文字用 child: Text(style: ...)。 | -| badge | `TDBadge` | `TBadge` | 统一 label/size 等当前入口;旧数字/红点/丝带类型按组件 API 重组,不复用旧 BadgeConfig。 | -| cell | `TDCell / TDCellGroup` | `TCell / TCellGroup` | 以内容槽组合;连续列表用 TCellGroup;统一背景/分隔线由组或 Theme 管理。 | -| collapse | `TDCollapse / TDCollapsePanel` | `TCollapse / TCollapsePanel` | 受控展开值与内容分开;形态/动画属于实例,具体外观从 TCollapseThemeData 配置。 | -| empty | `TDEmpty` | `TEmpty` | 旧 type 改为 icon/image/emptyText/operation 组合;不再查找 TDEmptyType,也不导入内部插图。 | -| footer | `TDFooter` | `TFooter` | 按当前内容/链接数据与组件 Theme 迁移,不继续使用旧 FooterType 作为类型。 | -| image | `TDImage` | `TImage` | 重验加载/失败/裁剪;尺寸和占位以当前 API 为准,旧 TDImageType 不能仅改前缀。 | -| image_viewer | `TDImageViewer / TDImageDialog` | `TImageViewer.show` | images 使用 ImageProvider 列表;initialIndex 与 onIndexChanged,内部 State/Dialog 类型不再直接实例化。 | -| progress | `TDProgress` | `TProgress` | variant/status 与主题分开;圆环 circleSize 表示外框边长,不能把旧半径语义套入。 | -| result | `TDResult` | `TResult` | 重选当前语义状态与内容插槽,背景/文字视觉使用 TResultThemeData。 | -| skeleton | `TDSkeleton / TDSkeletonRowCol*` | `TSkeleton / TSkeleton.custom` | 标准形态用 variant;自定义布局使用 TSkeletonLayout,不复用旧 RowCol 配置类型。 | -| swiper | `Swiper + TDSwiperPagination` | `TSwiper / TSwiperController` | 不再用第三方 SwiperController/SwiperPlugin;迁移 children 或 itemBuilder、分页及自有控制器。 | -| table | `TDTable / TDTableCol` | `TTable / TTableColumn` | 列使用 id/header/cellBuilder,data 必填;排序和选择是受控值,旧列/行选择回调需要改写。 | -| tag | `TDTag / TDSelectTag` | `TTag / TSelectTag` | 语义色用 colorPreset;选中/关闭遵循当前回调;具体字体和圆角从 Theme 设置。 | -| time_counter | `TDTimeCounter` | `TTimeCounter` | time 和 onChanged 均使用毫秒整数;重验自动开始、方向与结束;自建 Controller 由业务释放。 | -| action_sheet | `TDActionSheet` | `TActionSheet` | 按当前列表/宫格入口及 TActionSheetItem 组合;旧主题枚举不是新 Theme 类型。 | -| dialog | `TDAlertDialog / TDConfirmDialog / TDInputDialog` | `TDialog / TConfirmDialog / TDialogAction` | 单确认便捷弹窗与多操作槽分开;输入弹窗用 TDialog+TInput 组合,不恢复专用旧类。 | -| dropdown_menu | `TDDropdownMenu / TDDropdownItem` | `TDropdownMenu / TDropdownMenuItem` | 菜单项描述与 Single/MultiSelectPanel 组合;重验外部值更新、遮罩和 anchor,不直接改名前缀。 | -| loading | `TDLoading` | `TLoading` | 按当前 icon/内容与 TLoadingController 使用;旧内部指示器/State 不作为公开继承点。 | -| message | `TDMessage` | `TMessage` | duration 使用 Duration;status 替代旧 theme;显示由 Widget 树或命令句柄管理,不保留 visible 开关。 | -| notice_bar | `TDNoticeBar` | `TNoticeBar` | 语义状态/滚动/多行用当前 API;重验循环、点击与关闭,不搬旧样式类。 | -| popover | `TDPopover / TDPopoverWidget` | `TPopover` | 锚点和一次性命令按当前入口使用;offset/arrowSize/padding/背景/圆角从 TPopoverThemeData 设置。 | -| popup | `TDPopup*Panel / TDSlidePopupRoute` | `TPopup.show + TPopupOptions + TPopupHandle` | 面板、路由与控制统一;选择方向专属 Options/Inset,关闭结果从 handle.result 获取。 | -| refresh | `TDRefreshHeader` | `TPullDownRefresh` | 用 wrapper、受控回调和 TPullDownRefreshController 迁移;旧第三方 Header 不能仅改名。 | -| swipe_cell | `TDSwipeCell / TDSwipeCellAction` | `TSwipeCell / TSwipeCellAction` | 侧滑交互与逐项动作配置使用当前 API;不要依赖旧 Inherited/State,避免重复通知。 | -| toast | `TDToast` | `TToast` | duration 为 Duration,加载默认也会超时;持续加载显式 Duration.zero,背景拦截放 TOverlayConfig。 | -| theme | `TDTheme / TDThemeData` | `context.tTheme / TThemeData / TThemeBuilder` | 全局 Token→TD 组件 Theme→支持的实例配置;Material 外观不再反向影响 TD 默认视觉。 | - -## 编译通过后仍要检查 - -- 控件禁用条件、受控回调回写、连续操作与异步完成后的状态。 -- 主题明暗切换、局部 Theme、系统字体和 1/1.5/2 倍字号;不要用旧截图作为当前默认值的唯一依据。 -- 键盘、复制粘贴、输入法组合区、选区及焦点;返回键、安全区和 Overlay 的关闭/释放。 -- 列表排序/选择、日期边界、滚轮惯性、Swiper 实际页码;上传取消、权限与页面退出。 -- 业务创建的文本/Tab/Swiper/刷新控制器按其实际类型生命周期释放;回调中 setState 前确认 State 存活。 - -不存在替代入口的旧公开 State、Painter、布局适配和静态辅助类,不应通过深层 src 导入恢复。若业务依赖其具体能力,应使用公开 Widget/Theme/Flutter 原语重新组合,或在业务中维护对应实现;这类代码需要人工迁移。 - -## 0.2.7 公开导出名称索引 - -以下覆盖 0.2.7 主入口追踪到的自有公开声明(不包括外部包导出)。它用于查找旧名和定位处置方向,**不是自动替换表**。即使目标同名,构造参数、回调、默认值或行为也可能变化。公开基类的继承成员与业务自行继承/深层导入需额外审查。当前入口还导出 Material;同名的 Flutter 类型不作为旧 TD 自有声明的兼容实现。 - -| 0.2.7 名称 | 当前入口或处置 | 范围 | -|---|---|---| -| `BadgeConfig` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `CalendarBuilder` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `CalendarFormat` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `CalendarTrigger` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `CalendarType` | `TCalendarVariant` | 入口重组,见对应组件;不保证参数/行为兼容 | -| `CellBuilder` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `ChevronPainter` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `Chinese2Formatter` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `ContentBuilder` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `DatePickerCallback` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `DatePickerModel` | `TDateTimePickerValue` | 入口重组,见对应组件;不保证参数/行为兼容 | -| `DateSelectType` | `DateSelectType` | 同名或前缀对应,仍需核对参数/默认行为 | -| `DateSelectTypeNotifier` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `DateTypeKey` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `DefaultMapFactory` | `DefaultMapFactory` | 同名或前缀对应,仍需核对参数/默认行为 | -| `DefaultStickyHeaderController` | `DefaultStickyHeaderController` | 同名或前缀对应,仍需核对参数/默认行为 | -| `Font` | `Font` | 同名或前缀对应,仍需核对参数/默认行为 | -| `FontExtensions` | `FontExtensions` | 同名或前缀对应,仍需核对参数/默认行为 | -| `FontFamily` | `FontFamily` | 同名或前缀对应,仍需核对参数/默认行为 | -| `FormController` | `TFormController` | 入口重组,见对应组件;不保证参数/行为兼容 | -| `FormItemNotifier` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `HollowCircle` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `IconBuilder` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `IconTextDirection` | `IconTextDirection` | 同名或前缀对应,仍需核对参数/默认行为 | -| `ImageWidget` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `ItemBuilderType` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `ItemDistanceCalculator` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `LabelBuilder` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `LeftItemBuilder` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `LeftLinePainter` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `LeftLineWidget` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `LinkClick` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `MessageLink` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `MessageMarquee` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `MessageTheme` | `TMessageStatus` | 入口重组,见对应组件;不保证参数/行为兼容 | -| `MultiCascaderCallback` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `MultiCascaderListModel` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `MultiLinkedPickerModel` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `MultiPickerCallback` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `OnCellTap` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `OnCheckBoxGroupChange` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `OnCheckValueChanged` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `OnClose` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `OnDelete` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `OnGroupChange` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `OnImageTap` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `OnIndexChange` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `OnLongPress` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `OnLongTap` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `OnRadioGroupChange` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `OnRowSelect` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `OnScroll` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `OnSelect` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `OnSliderThemeDataUpdate` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `OnSwitchChanged` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `OnTap` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `PanelWithDownArrow` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `PlacementEnum` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `PlatformUtil` | `PlatformUtil` | 同名或前缀对应,仍需核对参数/默认行为 | -| `PopRoute` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `PopUpMenuItem` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `PopupClick` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `PopupDialog` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `PopupDialogState` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `Position` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `ProgressIndicator` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `RadioCorner` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `RadioCornerIcon` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `RectClipper` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `RightItemBuilder` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `RowCheckFunc` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `ScaleFormatter` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `SelectableFunc` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `SideItemProps` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `SlideTransitionFrom` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `SliderMeasureData` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `SliverStickyHeader` | `SliverStickyHeader` | 同名或前缀对应,仍需核对参数/默认行为 | -| `SliverStickyHeaderRenderObjectElement` | `SliverStickyHeaderRenderObjectElement` | 同名或前缀对应,仍需核对参数/默认行为 | -| `SliverStickyHeaderState` | `SliverStickyHeaderState` | 同名或前缀对应,仍需核对参数/默认行为 | -| `SliverStickyHeaderWidgetBuilder` | `SliverStickyHeaderWidgetBuilder` | 同名或前缀对应,仍需核对参数/默认行为 | -| `StickyHeaderController` | `StickyHeaderController` | 同名或前缀对应,仍需核对参数/默认行为 | -| `SwipeMotion` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDActionSheet` | `TActionSheet` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDActionSheetAlign` | `TActionSheetAlign` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDActionSheetItem` | `TActionSheetItem` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDActionSheetItemCallback` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDActionSheetTheme` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDAlertDialog` | `TDialog` | 入口重组,见对应组件;不保证参数/行为兼容 | -| `TDAvatar` | `TAvatar` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDAvatarShape` | `TAvatarShape` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDAvatarSize` | `TAvatarSize` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDAvatarType` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDBackTop` | `TBackTop` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDBackTopStyle` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDBackTopTheme` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDBadge` | `TBadge` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDBadgeBorder` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDBadgeSize` | `TBadgeSize` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDBadgeType` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDBarItemAction` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDBottomTabBar` | `TTabBar` | 入口重组,见对应组件;不保证参数/行为兼容 | -| `TDBottomTabBarBasicType` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDBottomTabBarComponentType` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDBottomTabBarIndicatorAnimation` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDBottomTabBarItemWithBadge` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDBottomTabBarOutlineType` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDBottomTabBarPopUpBtnConfig` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDBottomTabBarPopUpShapeConfig` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDBottomTabBarTabConfig` | `TTabBarItemConfig` | 入口重组,见对应组件;不保证参数/行为兼容 | -| `TDBoxShadows` | `TBoxShadows` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDButton` | `TButton` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDButtonEvent` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDButtonIconPosition` | `TButtonIconPosition` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDButtonShape` | `TButtonShape` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDButtonSize` | `TButtonSize` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDButtonStatus` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDButtonStyle` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDButtonTheme` | `TButtonColorPreset` | 入口重组,见对应组件;不保证参数/行为兼容 | -| `TDButtonType` | `TButtonVariant` | 入口重组,见对应组件;不保证参数/行为兼容 | -| `TDCalendar` | `TCalendar` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDCalendarBody` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDCalendarCell` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDCalendarHeader` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDCalendarInherited` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDCalendarPopup` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDCalendarStyle` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDCapsuleRangeSliderThumbShape` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDCapsuleRangeSliderTickMarkShape` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDCapsuleRectRangeSliderTrackShape` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDCapsuleRectSliderTrackShape` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDCapsuleRectThemeData` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDCapsuleSliderThumbShape` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDCapsuleSliderTickMarkShape` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDCardStyle` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDCascader` | `TCascader` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDCascaderAction` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDCell` | `TCell` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDCellAlign` | `TCellAlign` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDCellClick` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDCellGroup` | `TCellGroup` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDCellGroupTheme` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDCellStyle` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDCheckBoxSize` | `TCheckboxSize` | 入口重组,见对应组件;不保证参数/行为兼容 | -| `TDCheckbox` | `TCheckbox` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDCheckboxGroup` | `TCheckboxGroup` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDCheckboxGroupContainer` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDCheckboxGroupContainerState` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDCheckboxGroupController` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDCheckboxGroupInherited` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDCheckboxGroupState` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDCheckboxState` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDCheckboxStyle` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDCircleIndicator` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDCollapse` | `TCollapse` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDCollapseIconTextBuilder` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDCollapsePanel` | `TCollapsePanel` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDCollapseStyle` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDColors` | `TColors` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDConfirmDialog` | `TConfirmDialog` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDContentDirection` | `TContentDirection` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDCustomTab` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDDatePicker` | `TDateTimePicker` | 入口重组,见对应组件;不保证参数/行为兼容 | -| `TDDialogButtonOptions` | `TDialogAction` | 入口重组,见对应组件;不保证参数/行为兼容 | -| `TDDialogButtonStyle` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDDialogImagePosition` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDDivider` | `TDivider` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDDrawer` | `TDrawer` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDDrawerItem` | `TDrawerItem` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDDrawerItemClickCallback` | `TDrawerItemClickCallback` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDDrawerPlacement` | `TDrawerPlacement` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDDrawerWidget` | `TDrawer` | 入口重组,见对应组件;不保证参数/行为兼容 | -| `TDDropdownItem` | `TDropdownMenuItem` | 入口重组,见对应组件;不保证参数/行为兼容 | -| `TDDropdownItemBuilder` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDDropdownItemContentBuilder` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDDropdownItemController` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDDropdownItemOption` | `TDropdownMenuOption` | 入口重组,见对应组件;不保证参数/行为兼容 | -| `TDDropdownItemOptionsCallback` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDDropdownMenu` | `TDropdownMenu` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDDropdownMenuDirection` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDEmpty` | `TEmpty` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDEmptyType` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDExtraThemeData` | `TExtraThemeData` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDFab` | `TFab` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDFabShape` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDFabSize` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDFabTheme` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDFontFamilies` | `TFontFamilies` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDFontLoader` | `TFontLoader` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDFontLoaderWidget` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDFonts` | `TFonts` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDFooter` | `TFooter` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDFooterType` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDForm` | `TForm` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDFormItem` | `TFormItem` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDFormItemType` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDFormValidation` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDFractionPagination` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDIconLabel` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDIcons` | `TIcons` | 入口重组,见对应组件;不保证参数/行为兼容 | -| `TDImage` | `TImage` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDImageDialog` | `TImageViewer` | 入口重组,见对应组件;不保证参数/行为兼容 | -| `TDImageType` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDImageViewer` | `TImageViewer` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDImageViewerWidget` | `TImageViewer` | 入口重组,见对应组件;不保证参数/行为兼容 | -| `TDIndexes` | `TIndexes` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDIndexesAnchor` | `TIndexesAnchor` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDIndexesList` | `TIndexesList` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDInput` | `TInput` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDInputDialog` | `TDialog` | 入口重组,见对应组件;不保证参数/行为兼容 | -| `TDInputSize` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDInputSpacer` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDInputType` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDInputView` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDItemWidget` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDLabelWidget` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDLink` | `TLink` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDLinkConfiguration` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDLinkSize` | `TLinkSize` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDLinkState` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDLinkStyle` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDLinkType` | `TLinkColorPreset` | 入口重组,见对应组件;不保证参数/行为兼容 | -| `TDLoading` | `TLoading` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDLoadingController` | `TLoadingController` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDLoadingIcon` | `TLoadingIcon` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDLoadingSize` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDMap` | `TMap` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDMessage` | `TMessage` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDMultiCascader` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDMultiLinkedPicker` | `TPicker` | 入口重组,见对应组件;不保证参数/行为兼容 | -| `TDMultiPicker` | `TPicker` | 入口重组,见对应组件;不保证参数/行为兼容 | -| `TDNavBar` | `TNavBar` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDNavBarItem` | `TNavBarItem` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDNavBarItemBorder` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDNoOverlayShape` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDNoneIndicator` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDNoticeBar` | `TNoticeBar` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDNoticeBarStyle` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDNoticeBarTheme` | `TNoticeBarStatus` | 入口重组,见对应组件;不保证参数/行为兼容 | -| `TDNoticeBarType` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDPageTransformer` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDPicker` | `TPicker` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDPopover` | `TPopover` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDPopoverPlacement` | `TPopoverPlacement` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDPopoverTheme` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDPopoverWidget` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDPopupBasePanel` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDPopupBottomConfirmPanel` | `TPickerPopup` | 入口重组,见对应组件;不保证参数/行为兼容 | -| `TDPopupBottomDisplayPanel` | `TPopupOptions` | 入口重组,见对应组件;不保证参数/行为兼容 | -| `TDPopupCenterPanel` | `TPopupOptions` | 入口重组,见对应组件;不保证参数/行为兼容 | -| `TDProgress` | `TProgress` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDProgressLabelPosition` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDProgressStatus` | `TProgressStatus` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDProgressType` | `TProgressVariant` | 入口重组,见对应组件;不保证参数/行为兼容 | -| `TDRadio` | `TRadio` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDRadioGroup` | `TRadioGroup` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDRadioGroupState` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDRadioState` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDRadioStyle` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDRadius` | `TRadius` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDRangeSlider` | `TRangeSlider` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDRate` | `TRate` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDRefreshHeader` | `TPullDownRefresh` | 入口重组,见对应组件;不保证参数/行为兼容 | -| `TDResourceDelegate` | `TResourceDelegate` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDResourceManager` | `TResourceManager` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDResult` | `TResult` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDResultTheme` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDRoundRangeSliderThumbShape` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDRoundRangeSliderTickMarkShape` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDRoundSliderThumbShape` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDRoundSliderTickMarkShape` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDRoundedRectRangeSliderTrackShape` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDRoundedRectSliderTrackShape` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDSearchAlignment` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDSearchBar` | `TSearchBar` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDSearchBarCallBack` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDSearchBarClearEvent` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDSearchBarEvent` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDSearchStyle` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDSelectOption` | `TTreeSelectOption` | 入口重组,见对应组件;不保证参数/行为兼容 | -| `TDSelectTag` | `TSelectTag` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDSideBar` | `TSideBar` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDSideBarController` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDSideBarItem` | `TSideBarItem` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDSideBarStyle` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDSkeleton` | `TSkeleton` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDSkeletonAnimation` | `TSkeletonAnimation` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDSkeletonRowCol` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDSkeletonRowColObj` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDSkeletonRowColObjStyle` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDSkeletonRowColStyle` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDSkeletonTheme` | `TSkeletonVariant` | 入口重组,见对应组件;不保证参数/行为兼容 | -| `TDSlidePopupRoute` | `TPopup` | 入口重组,见对应组件;不保证参数/行为兼容 | -| `TDSlider` | `TSlider` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDSliderState` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDSliderThemeData` | `TSliderThemeData` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDSpacers` | `TSpacers` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDStepper` | `TStepper` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDStepperController` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDStepperEventType` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDStepperIconButton` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDStepperIconType` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDStepperOverlimitFunction` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDStepperOverlimitType` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDStepperSize` | `TStepperSize` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDStepperTheme` | `TStepperVariant` | 入口重组,见对应组件;不保证参数/行为兼容 | -| `TDSteps` | `TSteps` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDStepsDirection` | `TStepsDirection` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDStepsItemData` | `TStepsItemData` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDStepsStatus` | `TStepsStatus` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDSwipeCell` | `TSwipeCell` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDSwipeCellAction` | `TSwipeCellAction` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDSwipeCellInherited` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDSwipeCellPanel` | `TSwipeCellPanel` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDSwipeDirection` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDSwiperArrowPagination` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDSwiperDotsPagination` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDSwiperPagination` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDSwitch` | `TSwitch` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDSwitchSize` | `TSwitchSize` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDSwitchState` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDSwitchType` | `TSwitchVariant` | 入口重组,见对应组件;不保证参数/行为兼容 | -| `TDTDResourceBuilder` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDTab` | `TTab` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDTabBar` | `TTabsBar` | 入口重组,见对应组件;不保证参数/行为兼容 | -| `TDTabBarIndicator` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDTabBarOutlineType` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDTabBarVerticalIndicator` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDTabBarView` | `TTabsBarView` | 入口重组,见对应组件;不保证参数/行为兼容 | -| `TDTabOutlineType` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDTabSize` | `TTabsBarSize` | 入口重组,见对应组件;不保证参数/行为兼容 | -| `TDTable` | `TTable` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDTableCol` | `TTableColumn` | 入口重组,见对应组件;不保证参数/行为兼容 | -| `TDTableColAlign` | `TTableColumnAlign` | 入口重组,见对应组件;不保证参数/行为兼容 | -| `TDTableColFixed` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDTableEmpty` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDTableState` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDTag` | `TTag` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDTagShape` | `TTagShape` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDTagSize` | `TTagSize` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDTagStyle` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDTagTheme` | `TTagColorPreset` | 入口重组,见对应组件;不保证参数/行为兼容 | -| `TDTapEvent` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDTapFunction` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDText` | `TText` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDTextConfiguration` | `TTextThemeData` | 入口重组,见对应组件;不保证参数/行为兼容 | -| `TDTextLabel` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDTextPaddingConfig` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDTextSpan` | `TTextSpan` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDTextarea` | `TTextarea` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDTextareaLayout` | `TTextareaLayout` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDTheme` | `TThemeData` | 入口重组,见对应组件;不保证参数/行为兼容 | -| `TDThemeData` | `TThemeData` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDTimeCounter` | `TTimeCounter` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDTimeCounterController` | `TTimeCounterController` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDTimeCounterDirection` | `TTimeCounterDirection` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDTimeCounterSize` | `TTimeCounterSize` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDTimeCounterStatus` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDTimeCounterStyle` | `TTimeCounterVariant` | 入口重组,见对应组件;不保证参数/行为兼容 | -| `TDTimeCounterTheme` | `TTimeCounterVariant` | 入口重组,见对应组件;不保证参数/行为兼容 | -| `TDToast` | `TToast` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDToastConfig` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDTreeSelect` | `TTreeSelect` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDTreeSelectChangeEvent` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDTreeSelectStyle` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDUpload` | `TUpload` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDUploadBoxType` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDUploadClickEvent` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDUploadErrorEvent` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDUploadFile` | `TUploadFile` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDUploadFileStatus` | `TUploadFileStatus` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDUploadMediaType` | `TUploadMediaType` | 同名或前缀对应,仍需核对参数/默认行为 | -| `TDUploadType` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDUploadValidatorError` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDUploadValidatorEvent` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDUploadValueChangedEvent` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TDate` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TGIconHeaderWidget` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TGIconHeaderWidgetState` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TapCallback` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TextAlignment` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `TrapezoidPath` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `horizontalChild` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | -| `slideTransitionFromToAlignment` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | diff --git a/tdesign-site/site/flutter-example-docs/documentation.test.mjs b/tdesign-site/site/flutter-example-docs/documentation.test.mjs new file mode 100644 index 0000000000..e24b50552c --- /dev/null +++ b/tdesign-site/site/flutter-example-docs/documentation.test.mjs @@ -0,0 +1,76 @@ +import assert from 'node:assert/strict'; +import { mkdtempSync, mkdirSync, readFileSync, writeFileSync, rmSync } from 'node:fs'; +import { tmpdir } from 'node:os'; +import path from 'node:path'; +import test from 'node:test'; +import { fileURLToPath } from 'node:url'; +import { migrationSource, packageLinks, renderMigrationExamples, syncDocuments } from '../../../scripts/documentation.mjs'; +import { adaptGuideLinks, adaptRepositoryDocument } from './repository-document.mjs'; + +const root = fileURLToPath(new URL('../../../', import.meta.url)); +const marker = '\nold\n'; +const example = '// migration:button:start\nconst TButton();\n// migration:button:end'; + +test('package README links stay usable without repository-only files', () => { + const output = packageLinks(`[迁移](./${migrationSource}) [章节](./${migrationSource}#button) [贡献](CONTRIBUTING.md) [中文](./README_zh_CN.md) [主题](./tdesign-site/site/docs/custom-theme.md#局部) [外链](https://example.com)`); + assert.match(output, /\[迁移\]\(\.\/MIGRATION.md\)/); + assert.match(output, /\[章节\]\(\.\/MIGRATION.md#button\)/); + assert.match(output, /blob\/develop\/CONTRIBUTING.md/); + assert.match(output, /\[中文\]\(\.\/README_zh_CN.md\)/); + assert.match(output, /flutter\/custom-theme#局部/); + assert.match(output, /\[外链\]\(https:\/\/example.com\)/); +}); + +test('migration examples reject missing, duplicate and unmatched markers', () => { + assert.match(renderMigrationExamples(marker, example), /const TButton/); + assert.throws(() => renderMigrationExamples(marker, ''), /Missing/); + assert.throws(() => renderMigrationExamples(marker + marker, example), /Duplicate/); + assert.throws(() => renderMigrationExamples(marker + '', example), /Unmatched/); +}); + +test('check mode detects stale copies and missing sources without writing files', () => { + const temp = mkdtempSync(path.join(tmpdir(), 'tdesign-docs-test-')); + const write = (file, text) => { mkdirSync(path.dirname(path.join(temp, file)), { recursive: true }); writeFileSync(path.join(temp, file), text); }; + const read = file => readFileSync(path.join(temp, file), 'utf8'); + try { + write(migrationSource, `---\ntitle: migration\n---\n\n${marker}\n[主题](./custom-theme.md)`); + write('README.md', '# project'); + write('README_zh_CN.md', '# 项目'); + write('tdesign-component/tool/fixtures/token_migration/test/support/migration_027_examples.dart', example); + assert.throws(() => syncDocuments({ root: temp, check: true }), /Stale/); + assert.match(read(migrationSource), /old/); + syncDocuments({ root: temp }); + const portable = read('tdesign-component/MIGRATION.md'); + assert.match(portable, /Generated from/); + assert.doesNotMatch(portable, /title: migration/); + assert.match(portable, /https:\/\/tdesign.tencent.com\/flutter\/custom-theme/); + syncDocuments({ root: temp, check: true }); + write('tdesign-component/README.md', 'stale'); + assert.throws(() => syncDocuments({ root: temp, check: true }), /tdesign-component\/README.md/); + assert.equal(read('tdesign-component/README.md'), 'stale'); + rmSync(path.join(temp, 'README.md')); + assert.throws(() => syncDocuments({ root: temp }), /ENOENT/); + assert.equal(read('tdesign-component/README.md'), 'stale'); + } finally { rmSync(temp, { recursive: true, force: true }); } +}); + +test('site contribution page reads canonical rules and resolves repository links', () => { + const source = '# CONTRIBUTING\n\n[spec](./specs/README.md)'; + const rendered = adaptRepositoryDocument(source, path.join(root, 'CONTRIBUTING.md')); + assert.match(rendered, /^---\ntitle: 贡献指南/); + assert.match(rendered, /blob\/develop\/specs\/README.md/); + assert.doesNotMatch(rendered, /^# CONTRIBUTING/m); + assert.equal(adaptRepositoryDocument(source, path.join(root, 'README.md')), source); +}); + +test('guide links use stable routes and remain untouched in non-guide content', () => { + const source = '[迁移](./migration-0.2.7-to-1.0.md#button) [主题](./custom-theme.md)'; + const rendered = adaptGuideLinks(source, path.join(root, 'tdesign-site/site/docs/getting-started.md')); + assert.match(rendered, /\(\/flutter\/migration-1-0#button\)/); + assert.match(rendered, /\(\/flutter\/custom-theme\)/); + assert.equal(adaptGuideLinks(source, path.join(root, 'README.md')), source); +}); + +test('repository copies and runnable migration snippets are synchronized', () => { + syncDocuments({ check: true }); +}); diff --git a/tdesign-site/site/flutter-example-docs/repository-document.mjs b/tdesign-site/site/flutter-example-docs/repository-document.mjs new file mode 100644 index 0000000000..dd792cf7a3 --- /dev/null +++ b/tdesign-site/site/flutter-example-docs/repository-document.mjs @@ -0,0 +1,22 @@ +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; +import { guideLinks } from '../../../scripts/documentation.mjs'; + +const root = fileURLToPath(new URL('../../../', import.meta.url)); + +/** Display the canonical contribution guide without maintaining a site copy. */ +export function adaptRepositoryDocument(source, file) { + if (path.resolve(file) !== path.join(root, 'CONTRIBUTING.md')) return source; + const content = source.replace(/^# CONTRIBUTING\s*\n/, '').replace( + /\]\((\.\.?\/[^)]+)\)/g, + (_, target) => `](https://github.com/Tencent/tdesign-flutter/blob/develop/${target.replace(/^\.\//, '')})`, + ); + return `---\ntitle: 贡献指南\ndescription: TDesign Flutter 开发与贡献规范。\nspline: explain\n---\n\n${content}`; +} + +/** Resolve portable guide links to the existing public page routes. */ +export function adaptGuideLinks(source, file) { + const guides = path.join(root, 'tdesign-site/site/docs'); + if (path.dirname(path.resolve(file)) !== guides) return source; + return guideLinks(source); +} diff --git a/tdesign-site/site/plugin-tdoc/transforms.ts b/tdesign-site/site/plugin-tdoc/transforms.ts index c42cf096a9..cae9368c43 100644 --- a/tdesign-site/site/plugin-tdoc/transforms.ts +++ b/tdesign-site/site/plugin-tdoc/transforms.ts @@ -3,6 +3,7 @@ import fs from 'fs'; import mdToVue from '../scripts/md-to-vue'; import { replaceFlutterExampleDirectives } from '../flutter-example-docs/transform.mjs'; import { replaceFlutterApiDirectives } from '../flutter-example-docs/api.mjs'; +import { adaptGuideLinks, adaptRepositoryDocument } from '../flutter-example-docs/repository-document.mjs'; let demoCodesImports: Record = {}; @@ -13,6 +14,8 @@ export default { const name = reg && reg[1]; demoCodesImports = {}; + source = adaptGuideLinks(adaptRepositoryDocument(source, file), file); + // Flutter Web 文档直接读取 Example App 生成的唯一代码资产。 source = replaceFlutterExampleDirectives(source); source = replaceFlutterApiDirectives(source); diff --git a/tdesign-site/site/site.config.mjs b/tdesign-site/site/site.config.mjs index 1ed1cf3124..1b9c7cc8d0 100644 --- a/tdesign-site/site/site.config.mjs +++ b/tdesign-site/site/site.config.mjs @@ -16,21 +16,21 @@ export default { name: 'migration-1-0', meta: { docType: 'explain' }, path: '/flutter/migration-1-0', - component: () => import('@docs/migration-1-0.md'), + component: () => import('@docs/migration-0.2.7-to-1.0.md'), }, { title: '贡献指南', name: 'develop', meta: { docType: 'explain' }, path: '/flutter/develop', - component: () => import('../CONTRIBUTING.md'), + component: () => import('../../CONTRIBUTING.md'), }, { title: '常见问题', name: 'faq', meta: { docType: 'explain' }, path: '/flutter/faq', - component: () => import('../FAQ.md'), + component: () => import('@docs/faq.md'), }, // { // title: '谁在用', @@ -46,13 +46,6 @@ export default { path: '/flutter/changelog', component: () => import('../CHANGELOG.md'), }, - // { - // title: '自定义主题', - // name: 'custom-theme', - // meta: { docType: 'explain' }, - // path: '/flutter/custom-theme', - // component: () => import('@docs/custom-theme.md'), - // }, { title: '组件概览', name: 'overview', @@ -73,6 +66,20 @@ export default { path: '/flutter/components/theme', component: () => import('@component-docs/theme/README.md'), }, + { + title: '自定义主题', + name: 'custom-theme', + meta: { docType: 'explain' }, + path: '/flutter/custom-theme', + component: () => import('@docs/custom-theme.md'), + }, + { + title: '国际化', + name: 'internationalization', + meta: { docType: 'explain' }, + path: '/flutter/internationalization', + component: () => import('@docs/internationalization.md'), + }, { title: '深色模式', name: 'dark-mode', From c9d5e8d40945cc99d81c1e67515dc7befa25a660 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=98=BF=20Cai?= Date: Thu, 15 Oct 2026 15:39:47 +0800 Subject: [PATCH 03/13] docs: align 1.0 guides with current theme and localization examples --- CONTRIBUTING.md | 12 +- README.md | 4 +- README_zh_CN.md | 4 +- scripts/documentation.mjs | 45 ++++--- .../acceptance.md | 41 ++++++ specs/063-stable-documentation-review/plan.md | 8 ++ specs/063-stable-documentation-review/spec.md | 13 ++ .../063-stable-documentation-review/tasks.md | 8 ++ .../validation.json | 117 +++++++++++++++++ tdesign-component/MIGRATION.md | 2 +- tdesign-component/README.md | 4 +- tdesign-component/README_zh_CN.md | 4 +- .../example/lib/documentation_examples.dart | 59 +++++++++ .../example/test/theme/theme_demo_test.dart | 123 ++++++++++++++++++ tdesign-site/README.md | 2 + tdesign-site/docs/components/theme/README.md | 6 +- tdesign-site/site/docs/custom-theme.md | 117 ++++++++--------- tdesign-site/site/docs/dark-mode.md | 74 ----------- tdesign-site/site/docs/faq.md | 52 ++++---- tdesign-site/site/docs/getting-started.md | 12 +- .../site/docs/internationalization.md | 78 +++++------ .../site/docs/migration-0.2.7-to-1.0.md | 2 +- .../documentation.test.mjs | 15 +++ .../repository-document.mjs | 2 +- tdesign-site/site/router.ts | 4 + tdesign-site/site/site.config.mjs | 26 ++-- 26 files changed, 578 insertions(+), 256 deletions(-) create mode 100644 specs/063-stable-documentation-review/acceptance.md create mode 100644 specs/063-stable-documentation-review/plan.md create mode 100644 specs/063-stable-documentation-review/spec.md create mode 100644 specs/063-stable-documentation-review/tasks.md create mode 100644 specs/063-stable-documentation-review/validation.json create mode 100644 tdesign-component/example/lib/documentation_examples.dart delete mode 100644 tdesign-site/site/docs/dark-mode.md diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 33363a8f0d..b024ada989 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,8 +1,8 @@ -# CONTRIBUTING +# 贡献指南 -> **本文档是 `tdesign-flutter` 仓库开发 / 协作 / PR / 更新日志规范的唯一事实来源**。 -> 其他文档(`AGENTS.md` 入口索引、`.agents/skills/.../SKILL.md`、`specs/README.md`)如需引用,统一指向本文档,避免重复维护。 -> - Spec 专项规范 → [`specs/README.md`](./specs/README.md) +感谢参与 TDesign Flutter。本文介绍本地开发、编码规范、问题反馈、Pull Request 提交和验收流程。 + +涉及公共 API、组件行为或跨目录改动时,请先阅读[设计方案与验收记录规范](./specs/README.md),并随实现维护相应记录。 ## 目录结构 @@ -181,7 +181,7 @@ dart run tool/run_visual_regression.dart | 内容 | 唯一来源 | 使用与生成方式 | |---|---|---| | 项目介绍和最短示例 | 根README.md、README_zh_CN.md | 中英文分别维护,包内副本生成 | -| 安装、主题、深色模式、国际化、FAQ、迁移 | tdesign-site/site/docs/ | 站点直接读取,迁移另生成包内MIGRATION.md | +| 安装、主题(含明暗模式)、国际化、FAQ、迁移 | tdesign-site/site/docs/ | 站点直接读取,迁移另生成包内MIGRATION.md | | 贡献规范 | 本文件 | 站点直接读取并适配页面元信息与相对链接 | | 站点开发方式 | [tdesign-site/README.md](./tdesign-site/README.md) | 其他说明链接到此处 | | API | lib中的公开dartdoc注释 | 生成example/assets/api,站点和示例App共用 | @@ -189,6 +189,6 @@ dart run tool/run_visual_regression.dart | 设计决策与验收 | specs/ | 保留历史证据,现行用户用法写入用户指南 | | 发布流程与记录 | PUBLISH.md及既有CHANGELOG生成入口 | 发布步骤与历史记录分开维护 | -执行 `node scripts/sync-readme.mjs` 更新指南中的可运行迁移片段和包内副本;执行 `node scripts/sync-readme.mjs --check` 只检查,不改文件。包内副本顶部标注来源,不手工修改。站点普通指南使用小写连字符命名,迁移文件名写清起止版本。 +执行 `node scripts/sync-readme.mjs` 更新迁移、主题及国际化指南中的可运行示例片段和包内副本;执行 `node scripts/sync-readme.mjs --check` 只检查,不改文件。包内副本顶部标注来源,不手工修改。站点普通指南使用小写连字符命名,迁移文件名写清起止版本。 新增指南后在站点导航登记;内部文档链接使用相对路径,站点渲染时转换为既有路由,包内副本转换为可访问的线上入口。完整文档来源和边界见[整理记录](./specs/062-documentation-source-consolidation/spec.md)。 diff --git a/README.md b/README.md index 00a23bef7c..e882e11357 100644 --- a/README.md +++ b/README.md @@ -49,7 +49,7 @@ Upgrading from 0.2.7? Read the [1.0 migration guide (Chinese)](./tdesign-site/si Requires Flutter ≥ 3.32.0 and Dart ≥ 3.8.0. -Version 1.0 is being prepared for release. Follow [Getting started](./tdesign-site/site/docs/getting-started.md) for the pinned source dependency and switch to the stable version after publication. +Add `tdesign_flutter: ^1.0.0` to `pubspec.yaml` and run `flutter pub get`. See [Getting started](./tdesign-site/site/docs/getting-started.md) for the complete setup. ### Minimal Import @@ -75,7 +75,7 @@ The detailed guides below are currently in Chinese. - [Getting started](./tdesign-site/site/docs/getting-started.md) - [Custom themes](./tdesign-site/site/docs/custom-theme.md) -- [Dark mode](./tdesign-site/site/docs/dark-mode.md) +- [Dark mode](./tdesign-site/site/docs/custom-theme.md#明暗模式) - [Internationalization](./tdesign-site/site/docs/internationalization.md) - [FAQ](./tdesign-site/site/docs/faq.md) - [Component documentation](https://tdesign.tencent.com/flutter/overview) diff --git a/README_zh_CN.md b/README_zh_CN.md index 4e10784247..05e98b9af6 100644 --- a/README_zh_CN.md +++ b/README_zh_CN.md @@ -49,7 +49,7 @@ 要求 Flutter ≥ 3.32.0、Dart ≥ 3.8.0。 -1.0 仍处于发布准备阶段。安装方式和锁定源码依赖见[快速开始](./tdesign-site/site/docs/getting-started.md);正式发布后按指南切换稳定版本。 +在 `pubspec.yaml` 中添加 `tdesign_flutter: ^1.0.0`,运行 `flutter pub get`。完整接入步骤见[快速开始](./tdesign-site/site/docs/getting-started.md)。 ### 最小导入 @@ -73,7 +73,7 @@ const TButton(child: Text('按钮')) - [快速开始](./tdesign-site/site/docs/getting-started.md) - [自定义主题](./tdesign-site/site/docs/custom-theme.md) -- [深色模式](./tdesign-site/site/docs/dark-mode.md) +- [深色模式](./tdesign-site/site/docs/custom-theme.md#明暗模式) - [国际化](./tdesign-site/site/docs/internationalization.md) - [常见问题](./tdesign-site/site/docs/faq.md) - [在线组件文档](https://tdesign.tencent.com/flutter/overview) diff --git a/scripts/documentation.mjs b/scripts/documentation.mjs index b8f88b6ea3..fb8995a4e0 100644 --- a/scripts/documentation.mjs +++ b/scripts/documentation.mjs @@ -33,29 +33,31 @@ export function packageLinks(content) { }); } -export function renderMigrationExamples(guide, examples) { +export function renderExamples(guide, examples, family = 'migration') { const seen = new Set(); - const rendered = guide.replace( - /[\s\S]*?/g, - (_, name) => { - if (seen.has(name)) throw new Error(`Duplicate migration example: ${name}`); - seen.add(name); - const start = `// migration:${name}:start`; - const end = `// migration:${name}:end`; - if (examples.split(start).length !== 2 || examples.split(end).length !== 2) { - throw new Error(`Missing or duplicate migration example: ${name}`); - } - const offset = examples.indexOf(start) + start.length; - const endOffset = examples.indexOf(end, offset); - if (endOffset < 0) throw new Error(`Invalid migration example order: ${name}`); - return `\n\`\`\`dart\n${examples.slice(offset, endOffset).trim()}\n\`\`\`\n`; - }, - ); - const markers = [...rendered.matchAll(//g)]; - if (markers.length !== seen.size * 2 || seen.size === 0) throw new Error('Unmatched migration example markers'); + const pattern = new RegExp(`[\\s\\S]*?`, 'g'); + const rendered = guide.replace(pattern, (_, name) => { + if (seen.has(name)) throw new Error(`Duplicate ${family} example: ${name}`); + seen.add(name); + const start = `// ${family}:${name}:start`; + const end = `// ${family}:${name}:end`; + if (examples.split(start).length !== 2 || examples.split(end).length !== 2) { + throw new Error(`Missing or duplicate ${family} example: ${name}`); + } + const offset = examples.indexOf(start) + start.length; + const endOffset = examples.indexOf(end, offset); + if (endOffset < 0) throw new Error(`Invalid ${family} example order: ${name}`); + return `\n\`\`\`dart\n${examples.slice(offset, endOffset).trim()}\n\`\`\`\n`; + }); + const markers = [...rendered.matchAll(new RegExp(``, 'g'))]; + if (markers.length !== seen.size * 2 || seen.size === 0) throw new Error(`Unmatched ${family} example markers`); return rendered; } +export function renderMigrationExamples(guide, examples) { + return renderExamples(guide, examples); +} + export function generatedDocument(source, body) { return `\n\n${body}`; } @@ -65,6 +67,11 @@ export function syncDocuments({ root = repositoryRoot, check = false } = {}) { const read = file => readFileSync(resolve(root, file), 'utf8'); const guide = renderMigrationExamples(read(migrationSource), read(exampleSource)); const outputs = new Map([[migrationSource, guide]]); + const documentationExamples = read('tdesign-component/example/lib/documentation_examples.dart'); + for (const file of ['custom-theme', 'internationalization']) { + const path = `tdesign-site/site/docs/${file}.md`; + outputs.set(path, renderExamples(read(path), documentationExamples, 'documentation')); + } for (const source of ['README.md', 'README_zh_CN.md']) { outputs.set(`tdesign-component/${source}`, generatedDocument(source, packageLinks(read(source)))); } diff --git a/specs/063-stable-documentation-review/acceptance.md b/specs/063-stable-documentation-review/acceptance.md new file mode 100644 index 0000000000..bc113bcaa3 --- /dev/null +++ b/specs/063-stable-documentation-review/acceptance.md @@ -0,0 +1,41 @@ +# 1.0文档复核验收 + +日期:2026-10-15。此轮按用户指定的“1.0已发布”口径整理用户文档,没有执行包发布、修改版本号或更改CI。 + +## 七项处理 + +1. README、快速开始、FAQ、迁移开头及包内副本统一为 `tdesign_flutter: ^1.0.0`;去掉源码固定提交和预发布安装说明。 +2. 左侧菜单不再显示迁移项;快速开始保留迁移链接。迁移页作为非菜单路由继续提供 `/flutter/migration-1-0`,不丢失原地址。 +3. 根贡献指南开头改为正式贡献流程简介和设计/验收规范链接,去掉内部工具和“唯一事实来源”声明;站点继续直接读取根正文。 +4. FAQ按1.0重新组织,优先链接站内快速开始、迁移、主题和具体组件;移除旧test_app/main源码跳转、旧转换脚本入口、缓存全局context和正则按单字符匹配等旧说明。保留仓库源码链接的目标在本地核实;Flutter国际化文档打开后更新为其当前重定向目标。 +5. Theme标题从“主题--基础”改为“Theme 主题”,描述明确为色板示例和API。左侧按唯一Example代码manifest读取功能色、文字与图标颜色、中性色板三个例子;右侧TThemeColorsPage恰好挂载同三个Widget。现有代码片段生成器--check通过;运行测试覆盖浅深色三组示例与自定义中性色Token重建,Web主题接收/生命周期也回归通过。此结论是源码与功能对齐,不宣称像素验收。 +6. 自定义主题和国际化片段改为从真实Dart源码提取。主题覆盖JSON命名、空值回退、局部扩展保留和明暗切换;国际化使用当前完整IntlResourceDelegate及生成的AppLocalizations,按当前context构建代理、开启needAlwaysBuild,验证中文切英文。文档明确仅实现cancel/confirm不完整,其余必填字段和默认中文字段也需业务翻译。旧CSS转换脚本不再作为全Token通用导入推荐;说明官网实际css2token转换及适配边界。 +7. 深色模式并入custom-theme的“明暗模式”章节,删除重复文档及侧栏项;旧 `/flutter/dark-mode` 重定向新章节,路由支持锚点定位。README、快速开始及FAQ入口均更新。 + +## 实际验证 + +| 检查 | 结果 | +|---|---| +| Example严格分析,Flutter3.32.0/3.47.7 | 均0问题 | +| Theme/主题通信/生命周期功能回归 | 两SDK各25项通过,最终命令排除golden | +| 核心示例及测试源码 | 9个文件在主工程与高SDK隔离工程指纹一致 | +| 站点文档/示例/API回归 | 22项通过 | +| 站点主题桥接 | 6项通过 | +| 文档映射与组件契约 | 57页、360个生成示例通过 | +| Example代码片段生成检查 | --check退出0 | +| 文档片段与包内副本同步 | --check通过 | +| 站点生产构建 | 通过 | +| 本地预览 | 19000端口的配置、主题页、国际化页模块HTTP200,19001示例服务保持运行 | +| 当前Markdown相对/仓库源码链接 | 存在性检查通过 | + +命令:在Example工程运行 `flutter analyze --no-pub --fatal-infos` 和 `flutter test --no-pub --exclude-tags golden test/theme/theme_demo_test.dart test/web_theme_message_test.dart test/web_theme_listener_lifecycle_test.dart`;在组件工程运行 `dart --packages=.dart_tool/package_config.json tool/generate_example_code.dart --check`;根目录运行 `npm run site --prefix tdesign-site` 和 `node scripts/sync-readme.mjs --check`。 + +源码与日志指纹见[validation.json](validation.json)。日志仍在临时目录,不把后续日志不存在当作可重新核验;重新验证按上述命令执行。 + +## 失败记录与边界 + +首次Example分析发现IntlResourceDelegate闭包可用构造tear-off,已修复并双版本复核0问题。另一次误从仓库根目录执行分析,没有正确包级上下文,产生大量依赖解析诊断;不计为Example分析结果,最终均在Example包执行。 + +首次测试误包含两个Golden在macOS比较,浅/深各失败约7.03%/6.98%;未更新基准或把它们认定为生产视觉缺陷。反馈图片移到临时目录保留,没有提交。最终功能命令明确排除Golden。规定的Linux3.32视觉验收仍未完成,不能把功能测试或源码同源当作像素一致证据。 + +站点构建保留既有上游PURE注解、历史二维码资源、输出目录与大chunk警告;未部署站点,未进行新浏览器像素或窄屏人工验收。生产Dart、测试调度清单、CI/工作流、CHANGELOG和版本号均未改;此前677项队列未因这次文档复核而关闭。 diff --git a/specs/063-stable-documentation-review/plan.md b/specs/063-stable-documentation-review/plan.md new file mode 100644 index 0000000000..97572f2f84 --- /dev/null +++ b/specs/063-stable-documentation-review/plan.md @@ -0,0 +1,8 @@ +# 实施方案 + +- site.config将非菜单路由单列,router注册迁移页和旧深色模式重定向;共享文档链接转换复用当前地址。 +- 稳定版用户文案统一修改README、快速开始、迁移开头与FAQ,包内副本继续同步生成。 +- 贡献规范保留唯一正文,开头改为面向贡献者的简介和Spec链接。 +- 自定义主题使用真实Dart源码的JSON/局部Theme/明暗配置片段;国际化引用完整IntlResourceDelegate及生成的AppLocalizations,通过现有Example环境运行。 +- 扩展现有Theme Demo测试验证分组/Widget、浅深色与自定义重建;不把源码同源或测试通过称为像素验收。 +- 外部教程尽量改为站内指南;核对保留外链和当前仓库源文件。旧转换脚本不再作为支持全部Token的推荐入口。 diff --git a/specs/063-stable-documentation-review/spec.md b/specs/063-stable-documentation-review/spec.md new file mode 100644 index 0000000000..924797b71c --- /dev/null +++ b/specs/063-stable-documentation-review/spec.md @@ -0,0 +1,13 @@ +# 1.0正式版文档复核 + +## 目标 + +按用户要求以1.0已发布的口径呈现用户文档;快速开始使用^1.0.0;迁移不占左侧菜单,仍可从快速开始访问。贡献说明使用正式公开文案,FAQ按当前实现重写。主题页明确为色板示例/API,验证其生成代码与实际示例分组一致。主题配置与国际化示例必须来自可运行源码。深色模式合并到自定义主题,旧地址跳转。 + +## 边界 + +这是用户指定的正式版文档口径,不执行包发布或修改版本号。保留迁移完整正文与包内副本,不修改CI、测试清单、CHANGELOG和生产组件实现。国际化基于当前完整示例代理,说明业务需实现全部抽象资源字段和其余多语言字段。 + +## 验收 + +用户文档无预发布安装说明;左侧无独立迁移/深色模式项,但原路由可访问或跳转;贡献开头无内部工具说明;FAQ不再推荐旧全局context/转换脚本;主题页分组与代码同源并验证明暗/主题重建;主题和国际化代码分析及功能测试通过;站点构建、生成检查和同步通过。 diff --git a/specs/063-stable-documentation-review/tasks.md b/specs/063-stable-documentation-review/tasks.md new file mode 100644 index 0000000000..26b261f73a --- /dev/null +++ b/specs/063-stable-documentation-review/tasks.md @@ -0,0 +1,8 @@ +# 任务 + +- [x] 正式版文案、迁移入口和深色模式合并。 +- [x] 贡献开头与FAQ重写。 +- [x] 主题与国际化真实源码/文档同步。 +- [x] Theme代码/运行示例对应及主题切换验证。 +- [x] 站点、Dart、生成、链接与范围检查。 +- [x] 更新PR与预览。 diff --git a/specs/063-stable-documentation-review/validation.json b/specs/063-stable-documentation-review/validation.json new file mode 100644 index 0000000000..d5ee2a3226 --- /dev/null +++ b/specs/063-stable-documentation-review/validation.json @@ -0,0 +1,117 @@ +{ + "date": "2026-10-15", + "documentEdition": "1.0 stable, as requested; no package publication or version mutation", + "sdkVersions": [ + "3.32.0", + "3.47.7" + ], + "functionalTestsPerSdk": 25, + "goldenExcludedInFinalRuns": true, + "finalLinuxVisualAcceptance": false, + "siteTests": { + "theme": 6, + "documentation": 22, + "componentPages": 57, + "generatedExamples": 360 + }, + "exampleCodeCheckExitCode": 0, + "sources": [ + { + "file": "tdesign-component/example/lib/documentation_examples.dart", + "sha256": "0dfb236ed486793ab0b38d521b967cf123bb2d567bc66fbd0a04f20234c6db86", + "identicalInHighSdkCopy": true + }, + { + "file": "tdesign-component/example/lib/base/intl_resource_delegate.dart", + "sha256": "2001ca6ca79d897bb0797a538e2d27b62f03c171b64a9cbce45842b489926a3f", + "identicalInHighSdkCopy": true + }, + { + "file": "tdesign-component/example/lib/page/theme/theme_page.dart", + "sha256": "803bcd089a07866598d08fa5a60e176dc4e3a9b9d0707a295f0238063360cab1", + "identicalInHighSdkCopy": true + }, + { + "file": "tdesign-component/example/lib/page/theme/theme_function_color_example.dart", + "sha256": "cfd47fbaa1c2869f8d967cbfe99d8bbb6c8cdb8c162adcfc1b47f79c1a5e901f", + "identicalInHighSdkCopy": true + }, + { + "file": "tdesign-component/example/lib/page/theme/theme_text_color_example.dart", + "sha256": "32f653f08eb171586db4734d070e1b711985fa9bc9fc94e07234ea64b0d2e973", + "identicalInHighSdkCopy": true + }, + { + "file": "tdesign-component/example/lib/page/theme/theme_other_color_example.dart", + "sha256": "a632545a80d6bb7240a8e3f0cb408deb38222673f1474030a788af0c846220eb", + "identicalInHighSdkCopy": true + }, + { + "file": "tdesign-component/example/test/theme/theme_demo_test.dart", + "sha256": "eca02ae6cb6d1aaf94d7f19476aa15d5c769785cc823e11fb0c539e3d9d13fda", + "identicalInHighSdkCopy": true + }, + { + "file": "tdesign-component/example/test/web_theme_message_test.dart", + "sha256": "5b65cd9d2177b29e322bb3d230027a38fe685de107ee9840c6be907886dc6fce", + "identicalInHighSdkCopy": true + }, + { + "file": "tdesign-component/example/test/web_theme_listener_lifecycle_test.dart", + "sha256": "8ccc9785019654ebf94ba78d9dc863eb676fd549a793067c67bdf2f45f82f9f5", + "identicalInHighSdkCopy": true + } + ], + "logs": { + "testsLow": { + "file": "tdesign-stable-docs-tests-low-final.log", + "sha256": "99d18e8780d10da28cc6f39256e6359884fe5e36ca7e1a73950bc22a335d9eb7" + }, + "testsHigh": { + "file": "tdesign-stable-docs-tests-high.log", + "sha256": "fa93d4860526a0e57d764634887c2e31521cab85047a96c425d97036e7214ff0" + }, + "analysisLow": { + "file": "tdesign-stable-docs-example-analyze-low-final.log", + "sha256": "4f03c26b69223d6dcfc4a18e293faa950fcf9b9b80ccf01cd3aa97bab33c0302" + }, + "analysisHigh": { + "file": "tdesign-stable-docs-analyze-high.log", + "sha256": "c6277cd75773f31e7110974348a98074cc40ded68f6d7340177504832ea10423" + }, + "site": { + "file": "tdesign-stable-docs-site-final.log", + "sha256": "5a36a851b1608cca416ab3b6e49f9a050e5bf7814ec64880f5489c670ce9f031" + }, + "exampleCodeCheck": { + "file": "tdesign-stable-docs-code-check.log", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "initialMacGoldenFailure": { + "file": "tdesign-stable-docs-tests-low.log", + "sha256": "f43e1d723d120ced9d60ed3e24020bd72fd45707ca23fd451831a6c2b7a03b62" + }, + "initialLintWarning": { + "file": "tdesign-stable-docs-analyze-low.log", + "sha256": "12cc2f986d5b924d98f0107bcac27e3e2d06613a2385d331e0b281ac895e3e12" + }, + "wrongDirectoryAnalysis": { + "file": "tdesign-stable-docs-analyze-low-final.log", + "sha256": "7d58283a2e16ce345f794166baee6dcd9bdaf2dfd281006fa1776d9f38f2830f" + } + }, + "sdkLockHashes": { + "low": "9aed677f1b9c70d582c0ea32877aaabb5a40e1604ca2a786da6040a48c9c1be0", + "high": "e72a26b91a35d1e005c75b09d1c50818f4a15f359b3b9cbeb849dfa375f1571d" + }, + "externalDocumentation": { + "internationalization": "https://docs.flutter.dev/ui/internationalization", + "verifiedBy": "official Flutter page opened; old URL redirects to this URL" + }, + "limitations": [ + "First run incorrectly included 2 golden comparisons on macOS; both failed, neither baseline updated. Final runs exclude golden.", + "One analysis attempt ran from repository root without the package analysis context and failed; final analyses run in the Example package.", + "No new browser pixel or Linux Golden acceptance; HTTP preview modules and source/runtime contracts checked.", + "Complete user translation coverage remains the application responsibility." + ] +} diff --git a/tdesign-component/MIGRATION.md b/tdesign-component/MIGRATION.md index 7c1f85298f..265d37ffac 100644 --- a/tdesign-component/MIGRATION.md +++ b/tdesign-component/MIGRATION.md @@ -4,7 +4,7 @@ 本文仅面向 `tdesign_flutter 0.2.7` 使用方。1.0 是不兼容升级,旧参数和旧行为不会通过兼容别名保留;不能对全项目执行一次 `TD` → `T` 替换后就认为迁移结束。 -本文按 0.2.7 实际发布包与当前 1.0 候选编写。正式 1.0 发布后使用 `tdesign_flutter: ^1.0.0`;发布前不要把这个版本约束当作已经可从 pub.dev 安装的稳定版本。已有 alpha 的升级不在本文范围。 +升级时将依赖更新为 `tdesign_flutter: ^1.0.0`。本文仅说明 0.2.7 到 1.0 的迁移;alpha 版本之间的升级不在本文范围。 ## 升级顺序 diff --git a/tdesign-component/README.md b/tdesign-component/README.md index 6236e1e9f3..a26f9b478a 100644 --- a/tdesign-component/README.md +++ b/tdesign-component/README.md @@ -51,7 +51,7 @@ Upgrading from 0.2.7? Read the [1.0 migration guide (Chinese)](./MIGRATION.md) b Requires Flutter ≥ 3.32.0 and Dart ≥ 3.8.0. -Version 1.0 is being prepared for release. Follow [Getting started](https://tdesign.tencent.com/flutter/getting-started) for the pinned source dependency and switch to the stable version after publication. +Add `tdesign_flutter: ^1.0.0` to `pubspec.yaml` and run `flutter pub get`. See [Getting started](https://tdesign.tencent.com/flutter/getting-started) for the complete setup. ### Minimal Import @@ -77,7 +77,7 @@ The detailed guides below are currently in Chinese. - [Getting started](https://tdesign.tencent.com/flutter/getting-started) - [Custom themes](https://tdesign.tencent.com/flutter/custom-theme) -- [Dark mode](https://tdesign.tencent.com/flutter/dark-mode) +- [Dark mode](https://tdesign.tencent.com/flutter/custom-theme#明暗模式) - [Internationalization](https://tdesign.tencent.com/flutter/internationalization) - [FAQ](https://tdesign.tencent.com/flutter/faq) - [Component documentation](https://tdesign.tencent.com/flutter/overview) diff --git a/tdesign-component/README_zh_CN.md b/tdesign-component/README_zh_CN.md index 86b8bc28e8..3a15764b08 100644 --- a/tdesign-component/README_zh_CN.md +++ b/tdesign-component/README_zh_CN.md @@ -51,7 +51,7 @@ 要求 Flutter ≥ 3.32.0、Dart ≥ 3.8.0。 -1.0 仍处于发布准备阶段。安装方式和锁定源码依赖见[快速开始](https://tdesign.tencent.com/flutter/getting-started);正式发布后按指南切换稳定版本。 +在 `pubspec.yaml` 中添加 `tdesign_flutter: ^1.0.0`,运行 `flutter pub get`。完整接入步骤见[快速开始](https://tdesign.tencent.com/flutter/getting-started)。 ### 最小导入 @@ -75,7 +75,7 @@ const TButton(child: Text('按钮')) - [快速开始](https://tdesign.tencent.com/flutter/getting-started) - [自定义主题](https://tdesign.tencent.com/flutter/custom-theme) -- [深色模式](https://tdesign.tencent.com/flutter/dark-mode) +- [深色模式](https://tdesign.tencent.com/flutter/custom-theme#明暗模式) - [国际化](https://tdesign.tencent.com/flutter/internationalization) - [常见问题](https://tdesign.tencent.com/flutter/faq) - [在线组件文档](https://tdesign.tencent.com/flutter/overview) diff --git a/tdesign-component/example/lib/documentation_examples.dart b/tdesign-component/example/lib/documentation_examples.dart new file mode 100644 index 0000000000..3b1579e3d0 --- /dev/null +++ b/tdesign-component/example/lib/documentation_examples.dart @@ -0,0 +1,59 @@ +import 'package:tdesign_flutter/tdesign_flutter.dart'; + +import 'base/intl_resource_delegate.dart'; +import 'l10n/app_localizations.dart'; + +// documentation:theme-json:start +TThemeData documentationThemeTokens() { + const json = ''' +{ + "ocean": {"color": {"brandColor": "#0052D9"}}, + "oceanDark": {"color": {"brandColor": "#699EF5"}} +} +'''; + return TThemeData.fromJson('ocean', json, darkName: 'oceanDark') ?? + TThemeData.defaultData(); +} +// documentation:theme-json:end + +// documentation:theme-mode:start +Widget documentationThemeApp(ThemeMode mode, Widget home) { + final tokens = documentationThemeTokens(); + return MaterialApp( + theme: TThemeBuilder.light(tokens), + darkTheme: TThemeBuilder.dark(tokens), + themeMode: mode, + home: home, + ); +} +// documentation:theme-mode:end + +// documentation:theme-local:start +Widget documentationLocalTheme(BuildContext context, Widget child) { + return Theme( + data: Theme.of( + context, + ).mergeExtension(const TTagThemeData(squareBorderRadius: 6)), + child: child, + ); +} +// documentation:theme-local:end + +// documentation:intl:start +void configureDocumentationResources() { + setTResourceBuilder( + IntlResourceDelegate.new, + needAlwaysBuild: true, + ); +} + +Widget documentationLocalizedApp(Locale locale, Widget home) { + return MaterialApp( + locale: locale, + supportedLocales: AppLocalizations.supportedLocales, + localizationsDelegates: AppLocalizations.localizationsDelegates, + home: home, + ); +} + +// documentation:intl:end diff --git a/tdesign-component/example/test/theme/theme_demo_test.dart b/tdesign-component/example/test/theme/theme_demo_test.dart index 72c6fc01ea..fdf800997a 100644 --- a/tdesign-component/example/test/theme/theme_demo_test.dart +++ b/tdesign-component/example/test/theme/theme_demo_test.dart @@ -1,6 +1,10 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:tdesign_flutter/tdesign_flutter.dart'; +import 'package:tdesign_flutter_example/documentation_examples.dart'; +import 'package:tdesign_flutter_example/page/theme/theme_function_color_example.dart'; +import 'package:tdesign_flutter_example/page/theme/theme_other_color_example.dart'; import 'package:tdesign_flutter_example/page/theme/theme_page.dart'; +import 'package:tdesign_flutter_example/page/theme/theme_text_color_example.dart'; import '../demo_page_test_utils.dart'; @@ -30,4 +34,123 @@ void main() { expect(tester.takeException(), isNull); await disposeDemoPage(tester); }, tags: 'demo'); + + testWidgets( + 'Theme public Demo has the same three source groups in light and dark', + (tester) async { + for (final mode in [ThemeMode.light, ThemeMode.dark]) { + await pumpFullDemoPage(tester, spec, mode); + expect(find.byType(ThemeFunctionColorExample), findsOneWidget); + expect(find.byType(ThemeTextColorExample), findsOneWidget); + expect(find.byType(ThemeOtherColorExample), findsOneWidget); + expect(tester.takeException(), isNull); + await disposeDemoPage(tester); + } + }, + tags: 'demo', + ); + + testWidgets( + 'theme guide JSON and runtime mode switch change the effective brand token', + (tester) async { + final home = Scaffold( + body: Builder( + builder: (context) => + Text(context.tTheme.brandColor.toARGB32().toRadixString(16)), + ), + ); + await tester.pumpWidget(documentationThemeApp(ThemeMode.light, home)); + await tester.pumpAndSettle(); + expect(find.text('ff0052d9'), findsOneWidget); + await tester.pumpWidget(documentationThemeApp(ThemeMode.dark, home)); + await tester.pumpAndSettle(); + expect(find.text('ff699ef5'), findsOneWidget); + expect(tester.takeException(), isNull); + }, + ); + + testWidgets('local theme guide preserves unrelated theme extensions', ( + tester, + ) async { + await tester.pumpWidget( + MaterialApp( + home: Builder( + builder: (context) { + final tokens = context.tTheme; + return documentationLocalTheme( + context, + Builder( + builder: (inner) { + expect(inner.tTheme, same(tokens)); + expect( + Theme.of( + inner, + ).extension()?.squareBorderRadius, + 6, + ); + return const SizedBox.shrink(); + }, + ), + ); + }, + ), + ), + ); + expect(tester.takeException(), isNull); + }); + + testWidgets( + 'internationalization guide uses current resource context after locale changes', + (tester) async { + configureDocumentationResources(); + addTearDown( + () => setTResourceBuilder((context) => null, needAlwaysBuild: true), + ); + Widget home() => Scaffold( + body: Builder( + builder: (context) => + Text(TResourceManager.instance.delegate(context).confirm), + ), + ); + await tester.pumpWidget( + documentationLocalizedApp(const Locale('zh'), home()), + ); + await tester.pumpAndSettle(); + expect(find.text('确认'), findsOneWidget); + await tester.pumpWidget( + documentationLocalizedApp(const Locale('en'), home()), + ); + await tester.pumpAndSettle(); + expect(find.text('Confirm'), findsOneWidget); + expect(tester.takeException(), isNull); + }, + ); + + testWidgets('visible neutral palette refreshes after a custom token change', ( + tester, + ) async { + Widget host(Color color) => MaterialApp( + theme: TThemeBuilder.light( + TThemeData.defaultData().copyWith( + name: 'documentation-palette', + colorMap: {'grayColor1': color}, + ), + ), + home: const Scaffold( + body: SingleChildScrollView(child: ThemeOtherColorExample()), + ), + ); + for (final color in [Colors.red, Colors.blue]) { + await tester.pumpWidget(host(color)); + await tester.pumpAndSettle(); + final swatch = find + .ancestor( + of: find.text('grayColor1'), + matching: find.byType(Container), + ) + .first; + expect(tester.widget(swatch).color, color); + expect(tester.takeException(), isNull); + } + }); } diff --git a/tdesign-site/README.md b/tdesign-site/README.md index 9bab02607c..3c4260ae20 100644 --- a/tdesign-site/README.md +++ b/tdesign-site/README.md @@ -33,6 +33,8 @@ pnpm install --frozen-lockfile `pnpm test:example-code` 验证全部57份组件文档及对应资产;组件页禁止手写代码块、API参数表和迁移正文。迁移摘要的后续接入见[设计方案](../specs/061-migration-documentation-design/plan.md)。 +主题与国际化示例维护在 `tdesign-component/example/lib/documentation_examples.dart`,指南中的标记片段从该源码提取;修改代码后由现有Theme功能测试验证。迁移示例继续来自独立消费夹具。 + 包内README和迁移副本统一执行 `node ../scripts/sync-readme.mjs` 生成,或加 `--check` 只读检查。`script/copy-readme.js` 仅保留兼容入口。 更新日志保留现有发布工具入口,不在文档构建时生成或覆盖;版本发布步骤见[PUBLISH.md](../PUBLISH.md)。 diff --git a/tdesign-site/docs/components/theme/README.md b/tdesign-site/docs/components/theme/README.md index 6be694efb9..060fe8fd2d 100644 --- a/tdesign-site/docs/components/theme/README.md +++ b/tdesign-site/docs/components/theme/README.md @@ -1,7 +1,7 @@ --- -title: 主题--基础 -description: 提供全局 Token、明暗主题和组件 ThemeExtension 的配置入口。 -spline: other +title: Theme 主题 +description: 查看功能色、文字与图标颜色和中性色板,以及主题与资源 API。主题配置方法见自定义主题指南。 +spline: explain isComponent: true --- diff --git a/tdesign-site/site/docs/custom-theme.md b/tdesign-site/site/docs/custom-theme.md index 0453b3d254..171cd4c0ee 100644 --- a/tdesign-site/site/docs/custom-theme.md +++ b/tdesign-site/site/docs/custom-theme.md @@ -1,88 +1,89 @@ --- title: 自定义主题 -description: 全局 Token、主题 JSON 和组件 ThemeExtension 的配置方式。 +description: 配置全局主题、组件样式和明暗模式。 spline: explain --- +## 主题的作用范围 -TDesign Flutter 提供两种灵活的主题定制方式: +全局颜色、字体和间距等 Token 通过 `TThemeData` 配置;`TThemeBuilder` 把 Token 转为 Flutter `ThemeData`。组件局部外观使用对应 `T*ThemeData`,单个组件可用的实例配置以组件 API 为准。 -## 方式一:JSON 配置 +使用 `context.tTheme` 读取当前子树主题。`TThemeData.defaultData()` 返回默认配置,不能代替当前上下文的主题。TD 内置视觉不隐式继承 Material 组件主题;自定义内容仍可使用 Flutter 的主题机制。 -直接使用 JSON 格式定义主题属性: +本文代码由[可运行示例源码](https://github.com/Tencent/tdesign-flutter/blob/develop/tdesign-component/example/lib/documentation_examples.dart)同步生成。示例文件引入: ```dart -String themeConfig = ''' -{ - "myTheme": { - "color": { - "brandColor": "#D7B386" - }, - "font": { - "fontBodyMedium": { - "size": 40, - "lineHeight": 55 - } - } - } -} -'''; - -MaterialApp( - theme: TThemeBuilder.light(TThemeData.fromJson('myTheme', themeConfig)!), - // ... -) +import 'package:tdesign_flutter/tdesign_flutter.dart'; ``` -> 所有可用的主题键值请参考 [t_default_theme.dart](https://github.com/Tencent/tdesign-flutter/blob/develop/tdesign-component/lib/src/theme/t_default_theme.dart) - -## 方式二:主题生成器(推荐) +## JSON 配置 -如果你不想自定义太多颜色,但是想要拥有好看的自定义主题,"主题生成器"是个不错的选择。 +以下示例分别配置浅色和深色品牌色: -主题生成器支持浅色和深色配置,具体可参考[深色模式](https://tdesign.tencent.com/flutter/dark-mode)。 + +```dart +TThemeData documentationThemeTokens() { + const json = ''' +{ + "ocean": {"color": {"brandColor": "#0052D9"}}, + "oceanDark": {"color": {"brandColor": "#699EF5"}} +} +'''; + return TThemeData.fromJson('ocean', json, darkName: 'oceanDark') ?? + TThemeData.defaultData(); +} +``` + - +JSON 使用命名主题对象;`ocean`、`oceanDark` 必须与调用中的名称一致。`fromJson` 返回可空结果,加载失败时可回退默认主题。完整字段见[主题 API](/flutter/components/theme?tab=api),默认 Token 定义见[默认主题源码](https://github.com/Tencent/tdesign-flutter/blob/develop/tdesign-component/lib/src/theme/t_default_theme.dart)。 -1. **生成**:进入 [TDesign 主题生成器](https://tdesign.tencent.com/vue/custom-theme),点击下方的主题生成器,在右边生成器里选择想要的颜色,点击下载。 +配置来自资源文件时,先在应用 `pubspec.yaml` 的 `flutter.assets` 注册文件,再通过 `rootBundle.loadString` 读取;这需要导入 `package:flutter/services.dart`。读取完成后再构建或更新应用主题,不在 Widget 的每次 build 中重复加载。 -2. **转换**:此时你得到一个 `theme.css` 文件,将该文件放到 `tdesign-component/example/shell/theme/` 文件夹下,修改该文件夹下的 `css2_json_theme.dart` 为你自己的文件名、主题名和输出路径,即可得到一个 `theme.json` 文件。 +## 组件局部样式 -3. **应用**:通过 `TThemeData.fromJson` 加载主题 JSON,美观的自定义主题就设置完成了。 +通过 `mergeExtension` 合并指定类型的主题扩展,保留子树中的其他扩展: + ```dart -var jsonString = await rootBundle.loadString('assets/theme.json'); -final _themeData = TThemeData.fromJson('green', jsonString, darkName: 'greenDark') ?? - TThemeData.defaultData(); -// ... -MaterialApp( - title: 'TDesign Flutter Example', - theme: TThemeBuilder.light(_themeData), - home: MyHomePage(title: 'TDesign Flutter 组件库'), -); +Widget documentationLocalTheme(BuildContext context, Widget child) { + return Theme( + data: Theme.of( + context, + ).mergeExtension(const TTagThemeData(squareBorderRadius: 6)), + child: child, + ); +} ``` + -## 读取当前主题 +传入组件必须处于这个 `Theme` 子树内;需要读取更新后主题时,在子树的 `Builder` 或独立 Widget 中取得 context。 -组件通过 `context.tTheme` 读取当前子树 Token;`TThemeData.defaultData()` 仅用于不需要继承局部主题的场景。实例规格、状态与具体视觉配置分别遵循组件公开 API。 - -## 组件局部样式 +## 明暗模式 -通过组件的 `T*ThemeData` 覆盖局部样式。`mergeExtension` 保留其他主题扩展,仅替换指定类型的扩展。 +浅色、深色和跟随系统由 `MaterialApp.themeMode` 决定: + ```dart -Theme( - data: Theme.of(context).mergeExtension( - const TTagThemeData(squareBorderRadius: 6), - ), - child: const TTag('局部圆角'), -); +Widget documentationThemeApp(ThemeMode mode, Widget home) { + final tokens = documentationThemeTokens(); + return MaterialApp( + theme: TThemeBuilder.light(tokens), + darkTheme: TThemeBuilder.dark(tokens), + themeMode: mode, + home: home, + ); +} ``` + -全局 Token 与组件 ThemeExtension 分别负责全局配色和组件样式;组件可用配置见各组件文档末尾的 Theme 表。 +- `ThemeMode.light`:固定浅色。 +- `ThemeMode.dark`:固定深色。 +- `ThemeMode.system`:跟随系统外观。 -## 明暗模式 +业务保存用户的外观选择,在切换时重建 `MaterialApp` 并传入新的 `mode`;不需要重新注册资源代理。自定义深色配色必须提供相应的深色主题配置,不能只把浅色颜色整体变暗。 + +## 主题工具与色板预览 + +[Theme 主题](/flutter/components/theme)展示功能色、文字与图标颜色、中性色板,并提供主题 API 查询。页面中的色板会根据当前上下文重新读取主题。 -主题的 `theme`、`darkTheme`、`themeMode` 和运行时切换见[深色模式](./dark-mode.md)。 +官网主题工具的 CSS 转换使用仓库内[css2token](https://github.com/Tencent/tdesign-flutter/tree/develop/packages/css2token)和[Web 主题接收适配](https://github.com/Tencent/tdesign-flutter/blob/develop/tdesign-component/example/lib/util/web_theme_message.dart)。它们负责 CSS Token 转换与默认值合并,不是组件包中的公开 CSS 导入 API。业务接入优先使用上面的 JSON 配置;不要把旧颜色转换脚本当作能处理所有字体、间距和阴影的通用转换器。 diff --git a/tdesign-site/site/docs/dark-mode.md b/tdesign-site/site/docs/dark-mode.md deleted file mode 100644 index db129e8bea..0000000000 --- a/tdesign-site/site/docs/dark-mode.md +++ /dev/null @@ -1,74 +0,0 @@ ---- -title: 深色模式 -description: 使用 TThemeBuilder 和 Flutter ThemeMode 配置浅色、深色及跟随系统的主题。 -spline: explain ---- - -## 配置主题 - -通过 `TThemeBuilder.light` 和 `TThemeBuilder.dark` 将 `TThemeData` 转换为 Flutter 主题,并在 `MaterialApp` 上设置 `themeMode`。 - -```dart -import 'package:flutter/material.dart'; -import 'package:tdesign_flutter/tdesign_flutter.dart'; - -void main() => runApp(const ThemeExample()); - -class ThemeExample extends StatefulWidget { - const ThemeExample({super.key}); - - @override - State createState() => _ThemeExampleState(); -} - -class _ThemeExampleState extends State { - final TThemeData _tokens = TThemeData.defaultData(); - ThemeMode _mode = ThemeMode.system; - - @override - Widget build(BuildContext context) { - return MaterialApp( - theme: TThemeBuilder.light(_tokens), - darkTheme: TThemeBuilder.dark(_tokens), - themeMode: _mode, - home: Scaffold( - appBar: AppBar(title: const Text('主题设置')), - body: Column( - children: [ - for (final mode in ThemeMode.values) - TextButton( - onPressed: () => setState(() => _mode = mode), - child: Text(switch (mode) { - ThemeMode.system => '跟随系统', - ThemeMode.light => '浅色模式', - ThemeMode.dark => '深色模式', - }), - ), - ], - ), - ), - ); - } -} -``` - -`ThemeMode.system` 跟随系统外观;`ThemeMode.light` 和 `ThemeMode.dark` 固定使用对应模式。应用可以自行保存用户选择,在启动时恢复。 - -## 加载自定义配色 - -将主题 JSON 注册到应用的 `pubspec.yaml` assets 中,再加载浅色和深色配置: - -```dart -final json = await rootBundle.loadString('assets/theme.json'); -final tokens = TThemeData.fromJson( - 'green', - json, - darkName: 'greenDark', -) ?? TThemeData.defaultData(); -``` - -此处需要引入 `package:flutter/services.dart`。JSON 中的 `green` 和 `greenDark` 应与实际主题名称一致。用上面的 `tokens` 替换示例中的 `_tokens`,再分别通过 `TThemeBuilder.light(tokens)` 和 `TThemeBuilder.dark(tokens)` 构建主题。 - -组件通过 `context.tTheme` 读取当前子树的 Token。全局配色由 `TThemeData` 管理,组件局部样式通过对应的 `T*ThemeData` 配置。 - -完整示例见 [深色模式示例源码](https://github.com/Tencent/tdesign-flutter/blob/develop/tdesign-component/example/lib/component_test/dark_test.dart),配色配置见 [自定义主题](https://tdesign.tencent.com/flutter/custom-theme)。 diff --git a/tdesign-site/site/docs/faq.md b/tdesign-site/site/docs/faq.md index 47dd730b96..8f152c043b 100644 --- a/tdesign-site/site/docs/faq.md +++ b/tdesign-site/site/docs/faq.md @@ -1,49 +1,49 @@ --- title: 常见问题 -description: +description: TDesign Flutter 1.0 的接入、主题、状态管理和资源使用问题。 spline: explain --- -## 版本节奏 +## 使用哪个版本和 Flutter SDK? -1.0 当前处于预发布阶段,版本按功能完成和验证进度发布,不承诺固定的月度发布日期。已发布版本见 [Releases](https://github.com/Tencent/tdesign-flutter/releases),后续计划以 [Issues](https://github.com/Tencent/tdesign-flutter/issues) 和对应里程碑为准。 +1.0项目使用 `tdesign_flutter: ^1.0.0`,要求 Flutter ≥3.32.0、Dart ≥3.8.0。Android/iOS最低系统版本还取决于实际解析的Flutter和平台插件,应在目标宿主构建验证。完整步骤见[快速开始](./getting-started.md)。 -## 自定义主题 -- 自定义主题用法请参考:https://tdesign.tencent.com/flutter/custom-theme -- 在启动即修改主题颜色,完整示例代码请参考:https://github.com/Tencent/tdesign-flutter/blob/develop/tdesign-component/example/lib/component_test/test_app.dart -- 在应用使用中切换主题颜色,示例代码请参考 example 的 `main.dart` 和 `home.dart`:https://github.com/Tencent/tdesign-flutter/blob/develop/tdesign-component/example/lib/main.dart -- 转换完整代码:https://github.com/Tencent/tdesign-flutter/blob/develop/tdesign-component/example/shell/theme/css2_json_theme.dart +## 从0.2.7升级,只替换TD前缀是否足够? -## 深色模式 +不足够。构造参数、回调、受控值、主题配置和已移除能力均可能变化,尤其要区分顶部页签与底部导航。请先阅读[0.2.7 → 1.0迁移指南](./migration-0.2.7-to-1.0.md)。 -可参考[深色模式](https://tdesign.tencent.com/flutter/dark-mode) +## 为什么组件没有跟随Material主题变化? -## 新增组件 +TD内置外观使用全局Token、组件Theme及公开实例配置。Material的按钮主题、文字主题或IconTheme不作为TD内置视觉的隐式覆盖入口。配置方法见[自定义主题](./custom-theme.md),明暗模式也在同一指南中。 -如果有新增组件的想法,可以提 [issue](https://github.com/Tencent/tdesign-flutter/issues),或者在已有 issue 补充。如果想提交代码,开发实现,可以拉负责人一起评估。 +## 为什么切换主题后仍显示默认颜色? -## Input相关 -- 自定义高度:TInput没有自带 `height` 参数,可以通过外部嵌套 `SizedBox` 来修改高度。不过修改高度后,内部相关高度不会等比缩放,需要业务自己同步修改。 -- 输入正则:Input的`FilteringTextInputFormatter.allow(RegExp(r''))`的正则是匹配即将输入的单个字符串的,不是匹配已输入的整个字符串的,按字符串匹配写的正则可能导致无法输入。 +先检查是否通过当前子树的 `context.tTheme` 读取颜色,是否错误地固定使用 `TThemeData.defaultData()`;再检查读取context是否位于新Theme之下。局部覆盖使用 `mergeExtension`,避免重建extensions列表时丢失其他主题扩展。 -## TImage缓存问题 +## 点击、输入或选择后,为什么值不变化? -`TImage`基于系统 [Image](https://api.flutter.dev/flutter/widgets/Image-class.html) 组件封装,未单独处理缓存逻辑,使用的是系统组件自带的缓存。 +受控组件需要父级接收回调、更新状态并把新value传回。仅记录回调不会更新业务值。输入框的controller和initialValue互斥,initialValue只用于初始化。具体要求见[Input](/flutter/components/input)、[Checkbox](/flutter/components/checkbox)等组件API。 -## Toast 使用context +## 输入内容为什么被过滤?如何调整高度? -目前 `TToast` 显示需要`context`,如果使用的是`GetX`,可以考虑是否要方法记录一个全局context,再给 TToast 使用。如果后续实现方案优化了context,将更新本文档。 +按所需规则配置Flutter的输入格式化器。`FilteringTextInputFormatter`执行文本过滤,复杂的整段输入校验应按输入法组合区和实际业务规则处理。输入框布局、内容间距和文字高度应通过当前组件API、Theme和合理的外部约束配置,不能假设给外层设置高度就会让内部全部等比缩放。参见[Input](/flutter/components/input)和[Textarea](/flutter/components/textarea)。 -## 内部写死的颜色或尺寸 +## Toast应该使用哪个context?加载提示如何关闭? -如果发现组件内部写死了颜色或尺寸,导致无法适应业务场景,可以直接提 [issue](https://github.com/Tencent/tdesign-flutter/issues) 优化。 +使用目标Navigator和Theme子树中的有效context,避免缓存已经卸载的页面context或用全局context绕过局部主题。持续加载需要显式 `Duration.zero` 并在业务结束后关闭;具体句柄和关闭方式见[Toast](/flutter/components/toast)及迁移指南。 -## Flutter SDK 版本要求 +## 图片是否有独立缓存配置? -TDesign Flutter v1 的最低支持版本为 Flutter `3.32.0`,不再支持 Flutter 3.32 以下版本,也不再需要配置 `tdesign_flutter_adaptation` 依赖覆盖。 +`TImage`使用Flutter的Image/ImageProvider机制。缓存与图片来源、ImageProvider及Flutter图片缓存有关,不应假定每次重建都会重新下载。加载、失败占位和裁剪配置见[Image](/flutter/components/image)。 -## 文字居中 +## 为什么组件文案没有随应用语言更新? -`TText` 使用 Flutter 的文本布局,不再通过旧版的内部 padding 或 字体 padding 配置 补偿字体位置。水平对齐使用 `textAlign`,容器内对齐使用 `Center` 或 `Align`;行高与字体布局可通过 `style`、`strutStyle` 和 `textHeightBehavior` 配置。 +检查完整资源代理是否已注册,读取context是否位于Localizations之下,切换语言后是否仍缓存旧代理。对接方式与检查清单见[国际化](./internationalization.md)。 -示例见 [Text 文档](https://tdesign.tencent.com/flutter/components/text) 和 [文本示例源码](https://github.com/Tencent/tdesign-flutter/tree/develop/tdesign-component/example/lib/page/text)。 +## 如何调整文字居中与行高? + +使用 `textAlign`、外部Center/Align以及 `style`、`strutStyle`、`textHeightBehavior`;不再使用旧版字体padding补偿。见[Text](/flutter/components/text)。 + +## 如何反馈问题或申请组件能力? + +先查看当前组件API和示例,确认问题后在[GitHub Issues](https://github.com/Tencent/tdesign-flutter/issues)提供组件版本、Flutter版本、运行平台、最小复现及预期结果。提交修复前阅读[贡献指南](/flutter/develop)。 diff --git a/tdesign-site/site/docs/getting-started.md b/tdesign-site/site/docs/getting-started.md index 3bd541e603..a915fe802c 100644 --- a/tdesign-site/site/docs/getting-started.md +++ b/tdesign-site/site/docs/getting-started.md @@ -13,20 +13,16 @@ spline: explain ### 添加依赖 -当前单入口功能尚未发布到 pub.dev。发布前,在 `pubspec.yaml` 中添加以下锁定提交的源码依赖: +在应用的 `pubspec.yaml` 中添加: ```yaml dependencies: flutter: sdk: flutter - tdesign_flutter: - git: - url: https://github.com/Tencent/tdesign-flutter.git - ref: 86c37e563039c57cf6c3f9b52fead418fd3c03bd - path: tdesign-component + tdesign_flutter: ^1.0.0 ``` -包含上述能力的 `1.0.0` 稳定版发布后,可将源码依赖替换为 `tdesign_flutter: ^1.0.0`,允许兼容的 1.x 更新,无需每次发布都修改版本号;`1.0.0` 不带 `^` 则只允许该精确版本。发布前请使用上面的源码配置。 +`^1.0.0` 允许兼容的1.x更新。应用应提交依赖锁文件,升级后回归关键业务页面。 安装依赖: @@ -55,7 +51,7 @@ const TButton(child: Text('按钮')) ## 下一步 - [自定义主题](./custom-theme.md) -- [深色模式](./dark-mode.md) +- [明暗主题切换](./custom-theme.md#明暗模式) - [国际化](./internationalization.md) - [组件概览](./overview.md) - [常见问题](./faq.md) diff --git a/tdesign-site/site/docs/internationalization.md b/tdesign-site/site/docs/internationalization.md index 841cbe6b0a..1e05954ac6 100644 --- a/tdesign-site/site/docs/internationalization.md +++ b/tdesign-site/site/docs/internationalization.md @@ -1,55 +1,59 @@ --- title: 国际化 -description: 通过 TResourceDelegate 对接应用的 Flutter 国际化资源。 +description: 通过当前资源代理与 Flutter Localizations 对接应用语言。 spline: explain --- +## 资源代理与应用语言 -TDesign Flutter 组件库内部不内置国际化语言,但支持与 Flutter 的国际化能力搭配使用。可以继承 `TResourceDelegate` 类,该类抽离了组件内部所有文字资源,重写获取文字的方法进行国际化处理,并通过 `setTResourceBuilder` 注入。 +TDesign Flutter 通过 `TResourceDelegate` 提供组件内部文案,通过 `setTResourceBuilder` 注册资源代理。应用自身的翻译文件、支持语言及 Locale 切换由 Flutter `Localizations` 管理。未提供翻译的默认文案不会自动变成目标语言。 -### 快速配置 +## 实现完整代理 -1. **重写 `TResourceDelegate` 类:** +以示例工程的[完整 IntlResourceDelegate](https://github.com/Tencent/tdesign-flutter/blob/develop/tdesign-component/example/lib/base/intl_resource_delegate.dart)为参考,将组件资源字段映射到应用生成的 `AppLocalizations`。 -```dart -/// 国际化资源代理 -class IntlResourceDelegate extends TResourceDelegate { - IntlResourceDelegate(this.context); +`TResourceDelegate` 有多个必须实现的抽象字段;只覆盖 `cancel` 和 `confirm` 不能构成可实例化的完整代理。请按[当前资源 API](/flutter/components/theme?tab=api)实现全部必填字段,并按业务需要覆盖带默认实现的字段,包括上传状态和无障碍文案。新增组件资源后也要检查对应翻译。 + +## 注册与配置 - BuildContext context; +下面代码来自示例工程的 `lib/documentation_examples.dart`,使用已有的完整代理和生成的本地化类。在业务项目中,将两个相对导入替换成自己的对应文件: - /// 国际化需要每次更新 context - updateContext(BuildContext context) { - this.context = context; - } +```dart +import 'package:tdesign_flutter/tdesign_flutter.dart'; +import 'base/intl_resource_delegate.dart'; +import 'l10n/app_localizations.dart'; +``` - @override - String get cancel => AppLocalizations.of(context)!.cancel; + +```dart +void configureDocumentationResources() { + setTResourceBuilder( + IntlResourceDelegate.new, + needAlwaysBuild: true, + ); +} - @override - String get confirm => AppLocalizations.of(context)!.confirm; +Widget documentationLocalizedApp(Locale locale, Widget home) { + return MaterialApp( + locale: locale, + supportedLocales: AppLocalizations.supportedLocales, + localizationsDelegates: AppLocalizations.localizationsDelegates, + home: home, + ); } ``` + -2. **注入 `TResourceDelegate` 类:** +在应用启动时调用一次 `configureDocumentationResources()`,再使用 `documentationLocalizedApp` 构建应用。更新语言时,重建应用并传入新的 `Locale`。 -```dart -var delegate = IntlResourceDelegate(context); -return MaterialApp( - home: Builder( - builder: (context) { - // 设置文案代理,国际化需要在 MaterialApp 初始化完成之后才生效,而且需要每次更新 context - setTResourceBuilder((context) => delegate..updateContext(context), needAlwaysBuild: true); - return MyHomePage( - title: AppLocalizations.of(context)?.components ?? '', - ); - }, - ), - // 设置国际化处理 - locale: locale, - supportedLocales: AppLocalizations.supportedLocales, - localizationsDelegates: AppLocalizations.localizationsDelegates, -); -``` +构建器收到的是读取组件资源时的 context,必须位于配置了 `Localizations` 的应用子树中。`needAlwaysBuild: true` 让每次读取资源时都按当前 context 创建代理,避免持续复用首次语言的缓存;不需要保存全局 context 或反复修改同一个代理的 context。 + +示例包含中文和英文。业务的 `supportedLocales`、生成的翻译资源和代理字段映射需保持一致。框架的 Material/Widgets/Cupertino 本地化代理由示例的 `AppLocalizations.localizationsDelegates` 提供。 + +Flutter 翻译资源的生成与配置见[Flutter 国际化文档](https://docs.flutter.dev/ui/internationalization)。 + +## 检查语言切换 -3. Flutter 国际化配置方法,请参阅官方文档:[Flutter 应用里的国际化](https://docs.flutter.cn/ui/accessibility-and-internationalization/internationalization) +- 首次进入页面、运行中切换语言后,确认/取消、刷新、日期、上传及无障碍文案都应更新。 +- 只有默认实现、尚未覆盖的字段需要补翻译,不能仅凭按钮文字变化认定全部组件已国际化。 +- 资源构建器是全局注册;需要多个语言子树时,仍应根据传入 context 选择当前资源。 diff --git a/tdesign-site/site/docs/migration-0.2.7-to-1.0.md b/tdesign-site/site/docs/migration-0.2.7-to-1.0.md index ff66a502be..6abd28b0c1 100644 --- a/tdesign-site/site/docs/migration-0.2.7-to-1.0.md +++ b/tdesign-site/site/docs/migration-0.2.7-to-1.0.md @@ -8,7 +8,7 @@ spline: explain 本文仅面向 `tdesign_flutter 0.2.7` 使用方。1.0 是不兼容升级,旧参数和旧行为不会通过兼容别名保留;不能对全项目执行一次 `TD` → `T` 替换后就认为迁移结束。 -本文按 0.2.7 实际发布包与当前 1.0 候选编写。正式 1.0 发布后使用 `tdesign_flutter: ^1.0.0`;发布前不要把这个版本约束当作已经可从 pub.dev 安装的稳定版本。已有 alpha 的升级不在本文范围。 +升级时将依赖更新为 `tdesign_flutter: ^1.0.0`。本文仅说明 0.2.7 到 1.0 的迁移;alpha 版本之间的升级不在本文范围。 ## 升级顺序 diff --git a/tdesign-site/site/flutter-example-docs/documentation.test.mjs b/tdesign-site/site/flutter-example-docs/documentation.test.mjs index e24b50552c..14bb26ddf8 100644 --- a/tdesign-site/site/flutter-example-docs/documentation.test.mjs +++ b/tdesign-site/site/flutter-example-docs/documentation.test.mjs @@ -4,6 +4,7 @@ import { tmpdir } from 'node:os'; import path from 'node:path'; import test from 'node:test'; import { fileURLToPath } from 'node:url'; +import siteConfig from '../site.config.mjs'; import { migrationSource, packageLinks, renderMigrationExamples, syncDocuments } from '../../../scripts/documentation.mjs'; import { adaptGuideLinks, adaptRepositoryDocument } from './repository-document.mjs'; @@ -34,6 +35,8 @@ test('check mode detects stale copies and missing sources without writing files' const read = file => readFileSync(path.join(temp, file), 'utf8'); try { write(migrationSource, `---\ntitle: migration\n---\n\n${marker}\n[主题](./custom-theme.md)`); + write('tdesign-component/example/lib/documentation_examples.dart', example.replaceAll('migration:', 'documentation:')); + for (const file of ['custom-theme', 'internationalization']) write(`tdesign-site/site/docs/${file}.md`, marker.replaceAll('migration-example:', 'documentation-example:')); write('README.md', '# project'); write('README_zh_CN.md', '# 项目'); write('tdesign-component/tool/fixtures/token_migration/test/support/migration_027_examples.dart', example); @@ -74,3 +77,15 @@ test('guide links use stable routes and remain untouched in non-guide content', test('repository copies and runnable migration snippets are synchronized', () => { syncDocuments({ check: true }); }); + +test('migration is linked from getting started and dark mode shares the theme guide', () => { + const leaves = siteConfig.docs.flatMap(group => group.children ?? []); + assert.ok(!leaves.some(page => ['migration-1-0', 'dark-mode'].includes(page.name))); + assert.ok(siteConfig.standalone.some(page => page.path === '/flutter/migration-1-0')); + assert.equal(siteConfig.standalone.find(page => page.path === '/flutter/dark-mode').redirect, '/flutter/custom-theme#明暗模式'); + const read = file => readFileSync(path.join(root, file), 'utf8'); + assert.match(read('tdesign-site/site/docs/getting-started.md'), /tdesign_flutter: \^1\.0\.0/); + assert.match(read('tdesign-site/site/docs/getting-started.md'), /migration-0\.2\.7-to-1\.0\.md/); + assert.doesNotMatch(read('tdesign-site/site/docs/getting-started.md'), /尚未发布|发布前|git:/); + assert.match(read('tdesign-site/docs/components/theme/README.md'), /title: Theme 主题/); +}); diff --git a/tdesign-site/site/flutter-example-docs/repository-document.mjs b/tdesign-site/site/flutter-example-docs/repository-document.mjs index dd792cf7a3..ccf1f2b10a 100644 --- a/tdesign-site/site/flutter-example-docs/repository-document.mjs +++ b/tdesign-site/site/flutter-example-docs/repository-document.mjs @@ -7,7 +7,7 @@ const root = fileURLToPath(new URL('../../../', import.meta.url)); /** Display the canonical contribution guide without maintaining a site copy. */ export function adaptRepositoryDocument(source, file) { if (path.resolve(file) !== path.join(root, 'CONTRIBUTING.md')) return source; - const content = source.replace(/^# CONTRIBUTING\s*\n/, '').replace( + const content = source.replace(/^# (?:CONTRIBUTING|贡献指南)\s*\n/, '').replace( /\]\((\.\.?\/[^)]+)\)/g, (_, target) => `](https://github.com/Tencent/tdesign-flutter/blob/develop/${target.replace(/^\.\//, '')})`, ); diff --git a/tdesign-site/site/router.ts b/tdesign-site/site/router.ts index 78b0376f85..dcab78e459 100644 --- a/tdesign-site/site/router.ts +++ b/tdesign-site/site/router.ts @@ -35,6 +35,7 @@ const routes: Array = [ path: '/:catchAll(.*)', redirect: '/flutter/overview', }, + ...siteConfig.standalone, ...getDocsRoutes(docs, 'document'), ...getDocsRoutes(docs, 'component'), ]; @@ -42,6 +43,9 @@ const routes: Array = [ const routerConfig: RouterOptions = { routes, history: createWebHistory('/'), + scrollBehavior(to) { + return to.hash ? { el: decodeURIComponent(to.hash) } : { top: 0 }; + }, }; const router = createRouter(routerConfig); diff --git a/tdesign-site/site/site.config.mjs b/tdesign-site/site/site.config.mjs index 1b9c7cc8d0..305d408606 100644 --- a/tdesign-site/site/site.config.mjs +++ b/tdesign-site/site/site.config.mjs @@ -1,4 +1,16 @@ export default { + standalone: [ + { + path: '/flutter/migration-1-0', + name: 'migration-1-0', + meta: { docType: 'explain' }, + component: () => import('@docs/migration-0.2.7-to-1.0.md'), + }, + { + path: '/flutter/dark-mode', + redirect: '/flutter/custom-theme#明暗模式', + }, + ], docs: [ { title: '开始', @@ -11,13 +23,6 @@ export default { path: '/flutter/getting-started', component: () => import('@docs/getting-started.md'), }, - { - title: '0.2.7 → 1.0 迁移', - name: 'migration-1-0', - meta: { docType: 'explain' }, - path: '/flutter/migration-1-0', - component: () => import('@docs/migration-0.2.7-to-1.0.md'), - }, { title: '贡献指南', name: 'develop', @@ -80,13 +85,6 @@ export default { path: '/flutter/internationalization', component: () => import('@docs/internationalization.md'), }, - { - title: '深色模式', - name: 'dark-mode', - meta: { docType: 'explain' }, - path: '/flutter/dark-mode', - component: () => import('@docs/dark-mode.md'), - }, ], }, { From 342be883ac6e4973c503b4dcdafa3381c0b18ab0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=98=BF=20Cai?= Date: Thu, 15 Oct 2026 15:50:07 +0800 Subject: [PATCH 04/13] docs(contributing): clarify spec and changelog requirements --- CONTRIBUTING.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index b024ada989..9421648137 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -92,14 +92,14 @@ PR 描述「更新日志」小节是**面向实际使用方的用户**的本次 1. **只记录用户可感知的变更**:仅当本次改动会改变用户在使用组件 / 库时能观察到的行为(如 API、样式、交互、性能、体验等)时才写入更新日志;从用户角度描述具体变化,标注可能的 breaking change。 2. **内部 / CI 改动不写日志**:纯内部实现、CI/CD 配置、文档结构调整、重构(行为不变)等**用户无需感知**的改动,**不应凭空生成更新日志**,而是勾选「本条 PR 不需要纳入 Changelog」,避免产生无用日志。判断标准是:**这个用户在使用产品时能否感知到这次变化?** 感知不到就不写。 3. **组件 PR 不单列 Demo 配套改动**:组件 PR 的更新日志只描述组件 / 库使用方在实际接入中可感知的行为变化。Demo 页面布局、示例文案、示例代码、Golden 和测试等配套改动,即使在示例中可见,也不单独写入 Changelog;应写在「需求背景和解决方案」中,并按实际情况勾选「演示代码改进」或「测试用例」。同一 PR 同时修改组件与其 Demo 时,更新日志只保留组件行为条目。此规则不影响以文档、站点或示例应用本身为交付目标的独立 PR 按实际受众判断更新日志。 -4. **「不写更新日志」≠「不需要 Spec」**:二者由两套独立标准触发,不能互相推导(详见 [`specs/README.md`](./specs/README.md))。**判断口诀**:要不要 **Spec** 看「改动复杂度 / 碰不碰公共契约」(面向开发者);要不要**更新日志**看「用户感不感知」(面向用户)。两轴交叉即四种情况: +4. **分别判断 Spec 与更新日志的要求**:两者用途不同,应独立评估。 - | 用户是否可感知 ↓ | 可感知 | 无感 | - | --- | --- | --- | - | 碰组件 / 公共契约(要 Spec) | **两者都要** | **只要 Spec**、不写日志(纯内部重构) | - | 不碰组件(纯文档 / 依赖 / CI) | (罕见)只要日志 | **两者都不需要** | + **Spec 用于说明设计与验收。** 公共 API 或行为契约变更、复杂需求、组件重构及跨目录改动,应按 [Spec 规范](./specs/README.md)创建或更新设计与验收记录。简单文案、格式调整和单文件局部修改通常不需要完整 Spec,具体由 Review 结合改动范围确认。 + + **更新日志用于说明用户可感知的变化。** 公开接口、行为、样式等变化应记录;行为不变的内部重构、CI 配置和文档结构整理无需单列更新日志,在 PR 中说明即可。 + + 例如,组件内部重构可能需要 Spec,但无需更新日志;公开 API 变更通常两者都需要。勾选“本条 PR 不需要纳入 Changelog”仅说明无需更新日志,不影响 Spec 的要求。 - **最容易出错**:把"勾选「本条 PR 不需要纳入 Changelog」"等同于"不需要 Spec"。行为不变的纯内部重构(用户无感、不写日志)仍属于组件修改,**需要 Spec**(Review 结合实际改动判定)但**不写更新日志**。 5. **一个 PR 含多个功能 / 修复时,必须按条目分开列写**,不能合并成一条笼统描述。 6. 每条遵循 Conventional Commits 的 commit type,**与最终分组(CHANGELOG 章节)固定对应**,写日志按实际 type 归入对应分组: From 5c1954feb23816d0d0eef646e30e097cdfafa38d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=98=BF=20Cai?= Date: Thu, 15 Oct 2026 15:55:51 +0800 Subject: [PATCH 05/13] docs(migration): organize component upgrade navigation by usage --- .../acceptance.md | 6 + tdesign-component/MIGRATION.md | 352 ++++++++++++++---- .../site/docs/migration-0.2.7-to-1.0.md | 352 ++++++++++++++---- 3 files changed, 582 insertions(+), 128 deletions(-) diff --git a/specs/063-stable-documentation-review/acceptance.md b/specs/063-stable-documentation-review/acceptance.md index bc113bcaa3..f1a02de25d 100644 --- a/specs/063-stable-documentation-review/acceptance.md +++ b/specs/063-stable-documentation-review/acceptance.md @@ -39,3 +39,9 @@ 首次测试误包含两个Golden在macOS比较,浅/深各失败约7.03%/6.98%;未更新基准或把它们认定为生产视觉缺陷。反馈图片移到临时目录保留,没有提交。最终功能命令明确排除Golden。规定的Linux3.32视觉验收仍未完成,不能把功能测试或源码同源当作像素一致证据。 站点构建保留既有上游PURE注解、历史二维码资源、输出目录与大chunk警告;未部署站点,未进行新浏览器像素或窄屏人工验收。生产Dart、测试调度清单、CI/工作流、CHANGELOG和版本号均未改;此前677项队列未因这次文档复核而关闭。 + +## 组件迁移导航可读性 + +原57行四列表格改为6个场景分组,与当前组件分类对应:全局配置1项、基础6项、导航8项、输入16项、数据展示15项、反馈11项。每项以中英文组件名称、旧入口→新入口和“需要调整”呈现,名称直接链接当前API。正文开头增加快速跳转及三步阅读方法;按钮给出具体阅读路径。 + +原383项公开类型对照保留在折叠附录,首次阅读不展开全部辅助类型。检查57项唯一性、组件API链接、显式导航锚点及383项附录完整性通过;同步、站点测试与构建通过。未将该导航整理称为57个完整迁移专章已实施。 diff --git a/tdesign-component/MIGRATION.md b/tdesign-component/MIGRATION.md index 265d37ffac..b5b088dae8 100644 --- a/tdesign-component/MIGRATION.md +++ b/tdesign-component/MIGRATION.md @@ -6,6 +6,8 @@ 升级时将依赖更新为 `tdesign_flutter: ^1.0.0`。本文仅说明 0.2.7 到 1.0 的迁移;alpha 版本之间的升级不在本文范围。 +已有具体组件需要迁移时,可直接跳到[按组件查找迁移方式](#migration-components);首次升级建议先按下面的顺序处理公共配置。 + ## 升级顺序 1. 保留当前依赖锁文件、主题 JSON 与关键页面截图;先在业务分支迁移。 @@ -284,69 +286,285 @@ Widget migratedUpload({ - **底部导航**:旧 `TDBottomTabBar` → `TTabBar`,提供 type、navigationTabs、受控 value/onChanged;旧 `topBorder/showTopBorder/centerDistance` 没有等价开关恢复,按新的默认边线和内置图文布局验收。 - **Swiper**:使用 `TSwiper` 的 children 或 itemBuilder/itemCount;自建 `TSwiperController` 并在页面 dispose 中释放。旧第三方 SwiperPlugin/SwiperController 和 TDSwiperPagination 不能直接传入;按当前分页、箭头与 pageEffect 能力重组。TSwiper 默认 loop/autoplay 均 false,业务需要时显式打开。 -## 全部组件迁移索引 - -下表是入口与职责迁移索引,不承诺旧构造参数一一保留。每个组件的全部当前字段与默认值以 1.0 API 文档为准;旧名查找见文末导出索引。 - -| 组件 | 0.2.7 入口 | 1.0 入口 | 必须检查的迁移点 | -|---|---|---|---| -| button | `TDButton` | `TButton` | text→child;onTap→onPressed;type→variant;theme→colorPreset;状态样式合并为 ButtonStyle。 | -| divider | `TDDivider` | `TDivider` | 按当前构造及 TDividerThemeData 配置;方向/内容与具体视觉默认值分开。 | -| fab | `TDFab` | `TFab` | 重新核对尺寸/形态枚举、内容和事件;具体视觉从 TFabThemeData 配置。 | -| icon | `TDIcons / Icon` | `TIcons / TIcon` | 图标数据来自 tdesign_flutter_icons;TIcon 的默认视觉由 TD 控制,实例 size/color 可覆盖。 | -| text | `TDText / TDTextSpan` | `TText / TTextSpan` | 删除分散字体、在线加载和 padding 入口;用 style、textScaler、显式父布局,见文字一节。 | -| link | `TDLink` | `TLink` | 内容改用 Widget child;内置规格与 colorPreset 留实例,具体视觉从 TLinkThemeData 配置。 | -| backtop | `TDBackTop` | `TBackTop` | 按当前滚动绑定与形态配置;仅提供滚动控制器时按组件契约回顶,不用空回调猜禁用。 | -| drawer | `TDDrawer / TDDrawerWidget` | `TDrawer / showTDrawer` | 内容与浮层打开分开;宽度/背景移入 TDrawerThemeData,旧内容实现类型不再直接构造。 | -| indexes | `TDIndexes` | `TIndexes` | 重新核对受控索引及滚动对象;字母列表最大高度在组件 Theme 配置。 | -| navbar | `TDNavBar` | `TNavBar` | title/操作保留内容职责,背景、颜色、间距、边框和阴影迁入 TNavBarThemeData。 | -| sidebar | `TDSideBar` | `TSideBar` | 选择交给 value/onChanged;去掉旧 Controller/数据项样式依赖,视觉使用 TSideBarThemeData。 | -| steps | `TDSteps` | `TSteps.progress / selectable / display` | 选择进度、可选择或纯展示模式;不把三种状态源混用。 | -| tab_bar | `TDBottomTabBar` | `TTabBar` | 底部导航:显式 type、navigationTabs、value/onChanged;尺寸/颜色/分隔线迁 Theme。 | -| tabs | `TDTabBar / TDTabBarView` | `TTabsBar / TTabsBarView` | 顶部页签:共享 TabController 或 DefaultTabController;不是底部 TTabBar。 | -| form | `TDForm / FormController` | `TForm / TFormField / TFormController` | 从 items/rules/data 配置改为字段 Widget 树;value/onChanged、validator 与控制器职责分开。 | -| input | `TDInput` | `TInput` | controller 与 initialValue 互斥;onChanged/hintText/prefix/suffix;不要把 initialValue 当持续受控值。 | -| textarea | `TDTextarea` | `TTextarea` | 多行输入独立组件;用 minLines/maxLines、controller 与字段回调,核对计数/字符限制。 | -| search | `TDSearchBar` | `TSearchBar` | placeHolder→hintText、onTextChanged→onChanged、onActionClick→onActionPressed;不保留旧样式对象。 | -| checkbox | `TDCheckbox / TDCheckboxGroup` | `TCheckbox / TCheckboxGroup` | checked/id/controller 方案改为 value/onChanged;组提供 options 和受控选中集合,类型按当前 API。 | -| radio | `TDRadio / TDRadioGroup` | `TRadio / TRadioGroup` | 单项必须位于同类型组下;组持有 value/onChanged,不再为每项维护选中状态。 | -| switch | `TDSwitch` | `TSwitch` | value/onChanged 管开关状态;空回调禁用;规格与具体配色分别从实例/Theme 设置。 | -| stepper | `TDStepper` | `TStepper` | required value;回调接受后重建;旧 defaultValue/eventController 不能作为迁移目标。 | -| slider | `TDSlider / TDRangeSlider` | `TSlider / TRangeSlider` | 按当前值及回调类型迁移;旧 Thumb/Track/Painter 类型不再作为可继承公开入口。 | -| rate | `TDRate` | `TRate` | 按当前受控数值与回调迁移;重验半星、禁用、只读与自定义指示器。 | -| picker | `TDPicker / TDMultiPicker / TDMultiLinkedPicker` | `TPicker + TPickerColumns / TPickerLinked` | 列数据改不可变 option 树;选择面板不负责业务确认,使用 TPickerPopup 组合草稿/确认/取消。 | -| date_time_picker | `TDDatePicker` | `TDateTimePicker` | DatePickerModel 改为 TDateTimePickerValue + DateTimePickerMode;上下界/步进显式传入,外部管理确认。 | -| cascader | `TDCascader / TDMultiCascader` | `TCascader` | 使用 TCascaderOption 树与受控路径;旧自定义 Tab/Action/多选控制类型不能机械替换,按当前能力重组。 | -| tree_select | `TDTreeSelect / TDSelectOption` | `TTreeSelect / TTreeSelectOption` | 树数据、选中集合与 multiple 明确配置;不再复用旧副作用控制器。 | -| calendar | `TDCalendar` | `TCalendar` | value 是 List;variant 决定单选/多选/区间;onChanged 回写,时间选择和弹层外部组合。 | -| upload | `TDUpload` | `TUpload` | files/onChanged 受控;单一 mediaType,maxFiles/maxFileSize、不可变结果;上传请求由业务执行。 | -| avatar | `TDAvatar` | `TAvatar` | 形状用 shape,物理大小/颜色迁 TAvatarThemeData;特殊文字用 child: Text(style: ...)。 | -| badge | `TDBadge` | `TBadge` | 统一 label/size 等当前入口;旧数字/红点/丝带类型按组件 API 重组,不复用旧 BadgeConfig。 | -| cell | `TDCell / TDCellGroup` | `TCell / TCellGroup` | 以内容槽组合;连续列表用 TCellGroup;统一背景/分隔线由组或 Theme 管理。 | -| collapse | `TDCollapse / TDCollapsePanel` | `TCollapse / TCollapsePanel` | 受控展开值与内容分开;形态/动画属于实例,具体外观从 TCollapseThemeData 配置。 | -| empty | `TDEmpty` | `TEmpty` | 旧 type 改为 icon/image/emptyText/operation 组合;不再查找 TDEmptyType,也不导入内部插图。 | -| footer | `TDFooter` | `TFooter` | 按当前内容/链接数据与组件 Theme 迁移,不继续使用旧 FooterType 作为类型。 | -| image | `TDImage` | `TImage` | 重验加载/失败/裁剪;尺寸和占位以当前 API 为准,旧 TDImageType 不能仅改前缀。 | -| image_viewer | `TDImageViewer / TDImageDialog` | `TImageViewer.show` | images 使用 ImageProvider 列表;initialIndex 与 onIndexChanged,内部 State/Dialog 类型不再直接实例化。 | -| progress | `TDProgress` | `TProgress` | variant/status 与主题分开;圆环 circleSize 表示外框边长,不能把旧半径语义套入。 | -| result | `TDResult` | `TResult` | 重选当前语义状态与内容插槽,背景/文字视觉使用 TResultThemeData。 | -| skeleton | `TDSkeleton / TDSkeletonRowCol*` | `TSkeleton / TSkeleton.custom` | 标准形态用 variant;自定义布局使用 TSkeletonLayout,不复用旧 RowCol 配置类型。 | -| swiper | `Swiper + TDSwiperPagination` | `TSwiper / TSwiperController` | 不再用第三方 SwiperController/SwiperPlugin;迁移 children 或 itemBuilder、分页及自有控制器。 | -| table | `TDTable / TDTableCol` | `TTable / TTableColumn` | 列使用 id/header/cellBuilder,data 必填;排序和选择是受控值,旧列/行选择回调需要改写。 | -| tag | `TDTag / TDSelectTag` | `TTag / TSelectTag` | 语义色用 colorPreset;选中/关闭遵循当前回调;具体字体和圆角从 Theme 设置。 | -| time_counter | `TDTimeCounter` | `TTimeCounter` | time 和 onChanged 均使用毫秒整数;重验自动开始、方向与结束;自建 Controller 由业务释放。 | -| action_sheet | `TDActionSheet` | `TActionSheet` | 按当前列表/宫格入口及 TActionSheetItem 组合;旧主题枚举不是新 Theme 类型。 | -| dialog | `TDAlertDialog / TDConfirmDialog / TDInputDialog` | `TDialog / TConfirmDialog / TDialogAction` | 单确认便捷弹窗与多操作槽分开;输入弹窗用 TDialog+TInput 组合,不恢复专用旧类。 | -| dropdown_menu | `TDDropdownMenu / TDDropdownItem` | `TDropdownMenu / TDropdownMenuItem` | 菜单项描述与 Single/MultiSelectPanel 组合;重验外部值更新、遮罩和 anchor,不直接改名前缀。 | -| loading | `TDLoading` | `TLoading` | 按当前 icon/内容与 TLoadingController 使用;旧内部指示器/State 不作为公开继承点。 | -| message | `TDMessage` | `TMessage` | duration 使用 Duration;status 替代旧 theme;显示由 Widget 树或命令句柄管理,不保留 visible 开关。 | -| notice_bar | `TDNoticeBar` | `TNoticeBar` | 语义状态/滚动/多行用当前 API;重验循环、点击与关闭,不搬旧样式类。 | -| popover | `TDPopover / TDPopoverWidget` | `TPopover` | 锚点和一次性命令按当前入口使用;offset/arrowSize/padding/背景/圆角从 TPopoverThemeData 设置。 | -| popup | `TDPopup*Panel / TDSlidePopupRoute` | `TPopup.show + TPopupOptions + TPopupHandle` | 面板、路由与控制统一;选择方向专属 Options/Inset,关闭结果从 handle.result 获取。 | -| refresh | `TDRefreshHeader` | `TPullDownRefresh` | 用 wrapper、受控回调和 TPullDownRefreshController 迁移;旧第三方 Header 不能仅改名。 | -| swipe_cell | `TDSwipeCell / TDSwipeCellAction` | `TSwipeCell / TSwipeCellAction` | 侧滑交互与逐项动作配置使用当前 API;不要依赖旧 Inherited/State,避免重复通知。 | -| toast | `TDToast` | `TToast` | duration 为 Duration,加载默认也会超时;持续加载显式 Duration.zero,背景拦截放 TOverlayConfig。 | -| theme | `TDTheme / TDThemeData` | `context.tTheme / TThemeData / TThemeBuilder` | 全局 Token→TD 组件 Theme→支持的实例配置;Material 外观不再反向影响 TD 默认视觉。 | + +## 按组件查找迁移方式 + +只需要迁移项目中实际使用的组件。先搜索代码中的旧类名,例如 `TDButton`,再按下面的分类找到它。 + +1. **找对应入口**:每项先列出“0.2.7旧入口 → 1.0入口”,用于定位新组件。 +2. **完成用法调整**:阅读“需要调整”,并结合前文示例修改参数、数据和回调;箭头不表示只改类名就能完成迁移。 +3. **核对当前用法**:点击组件名称进入1.0 API文档,再验证真实操作、主题及布局。 + +例如,搜索到 `TDButton` 时,先看[按钮与禁用语义](#按钮与禁用语义),把文字和点击回调迁到新的内容槽与回调,再查看按钮API。不要仅把它改名为 `TButton` 后就结束。 + +### 选择你正在迁移的组件 + +- [主题与全局配置](#migration-group-global)(1项) +- [按钮、文字与基础组件](#migration-group-basic)(6项) +- [页面导航与页签](#migration-group-navigation)(8项) +- [表单、输入与选择](#migration-group-input)(16项) +- [内容与数据展示](#migration-group-display)(15项) +- [浮层、提示与交互反馈](#migration-group-feedback)(11项) + +查找旧枚举、Controller、State等辅助类型时,使用文末的[旧类型名称对照](#migration-legacy-types)。该附录用于定位处置方向,组件迁移优先按下面的分组进行。 + + +### 主题与全局配置 + +先处理全局主题,再迁移各组件的局部样式。 + +- **[Theme 主题](https://tdesign.tencent.com/flutter/components/theme?tab=api)**:`TDTheme / TDThemeData` → `context.tTheme / TThemeData / TThemeBuilder`。 + + **需要调整**:全局 Token→TD 组件 Theme→支持的实例配置; Material 外观不再反向影响 TD 默认视觉。 + + +### 按钮、文字与基础组件 + +从页面上常用的按钮、文字、图标等开始,核对内容槽和样式配置。 + +- **[Button 按钮](https://tdesign.tencent.com/flutter/components/button?tab=api)**:`TDButton` → `TButton`。 + + **需要调整**:text→child; onTap→onPressed; type→variant; theme→colorPreset; 状态样式合并为 ButtonStyle。 + +- **[Divider 分割线](https://tdesign.tencent.com/flutter/components/divider?tab=api)**:`TDDivider` → `TDivider`。 + + **需要调整**:按当前构造及 TDividerThemeData 配置; 方向/内容与具体视觉默认值分开。 + +- **[Fab 悬浮按钮](https://tdesign.tencent.com/flutter/components/fab?tab=api)**:`TDFab` → `TFab`。 + + **需要调整**:重新核对尺寸/形态枚举、内容和事件; 具体视觉从 TFabThemeData 配置。 + +- **[Icon 图标](https://tdesign.tencent.com/flutter/components/icon?tab=api)**:`TDIcons / Icon` → `TIcons / TIcon`。 + + **需要调整**:图标数据来自 tdesign_flutter_icons; TIcon 的默认视觉由 TD 控制,实例 size/color 可覆盖。 + +- **[Link 链接](https://tdesign.tencent.com/flutter/components/link?tab=api)**:`TDLink` → `TLink`。 + + **需要调整**:内容改用 Widget child; 内置规格与 colorPreset 留实例,具体视觉从 TLinkThemeData 配置。 + +- **[Text 文本](https://tdesign.tencent.com/flutter/components/text?tab=api)**:`TDText / TDTextSpan` → `TText / TTextSpan`。 + + **需要调整**:删除分散字体、在线加载和 padding 入口; 用 style、textScaler、显式父布局,见文字一节。 + + +### 页面导航与页签 + +重点区分顶部页签、底部导航以及各自的控制器和受控值。 + +- **[BackTop 返回顶部](https://tdesign.tencent.com/flutter/components/back-top?tab=api)**:`TDBackTop` → `TBackTop`。 + + **需要调整**:按当前滚动绑定与形态配置; 仅提供滚动控制器时按组件契约回顶,不用空回调猜禁用。 + +- **[Drawer 抽屉](https://tdesign.tencent.com/flutter/components/drawer?tab=api)**:`TDDrawer / TDDrawerWidget` → `TDrawer / showTDrawer`。 + + **需要调整**:内容与浮层打开分开; 宽度/背景移入 TDrawerThemeData,旧内容实现类型不再直接构造。 + +- **[Indexes 索引](https://tdesign.tencent.com/flutter/components/indexes?tab=api)**:`TDIndexes` → `TIndexes`。 + + **需要调整**:重新核对受控索引及滚动对象; 字母列表最大高度在组件 Theme 配置。 + +- **[Navbar 导航栏](https://tdesign.tencent.com/flutter/components/navbar?tab=api)**:`TDNavBar` → `TNavBar`。 + + **需要调整**:title/操作保留内容职责,背景、颜色、间距、边框和阴影迁入 TNavBarThemeData。 + +- **[SideBar 侧边栏](https://tdesign.tencent.com/flutter/components/side-bar?tab=api)**:`TDSideBar` → `TSideBar`。 + + **需要调整**:选择交给 value/onChanged; 去掉旧 Controller/数据项样式依赖,视觉使用 TSideBarThemeData。 + +- **[Steps 步骤条](https://tdesign.tencent.com/flutter/components/steps?tab=api)**:`TDSteps` → `TSteps.progress / selectable / display`。 + + **需要调整**:选择进度、可选择或纯展示模式; 不把三种状态源混用。 + +- **[TabBar 标签栏](https://tdesign.tencent.com/flutter/components/tab-bar?tab=api)**:`TDBottomTabBar` → `TTabBar`。 + + **需要调整**:底部导航:显式 type、navigationTabs、value/onChanged; 尺寸/颜色/分隔线迁 组件 Theme。 + +- **[Tabs 选项卡](https://tdesign.tencent.com/flutter/components/tabs?tab=api)**:`TDTabBar / TDTabBarView` → `TTabsBar / TTabsBarView`。 + + **需要调整**:顶部页签:共享 TabController 或 DefaultTabController; 不是底部 TTabBar。 + + +### 表单、输入与选择 + +先确认值由谁持有,再处理回调、表单校验和确认/取消流程。 + +- **[Calendar 日历](https://tdesign.tencent.com/flutter/components/calendar?tab=api)**:`TDCalendar` → `TCalendar`。 + + **需要调整**:value 是 List; variant 决定单选/多选/区间; onChanged 回写,时间选择和弹层外部组合。 + +- **[Cascader 级联选择器](https://tdesign.tencent.com/flutter/components/cascader?tab=api)**:`TDCascader / TDMultiCascader` → `TCascader`。 + + **需要调整**:使用 TCascaderOption 树与受控路径; 旧自定义 Tab/Action/多选控制类型不能机械替换,按当前能力重组。 + +- **[CheckBox 多选框](https://tdesign.tencent.com/flutter/components/checkbox?tab=api)**:`TDCheckbox / TDCheckboxGroup` → `TCheckbox / TCheckboxGroup`。 + + **需要调整**:checked/id/controller 方案改为 value/onChanged; 组提供 options 和受控选中集合,类型按当前 API。 + +- **[DateTimePicker 时间选择器](https://tdesign.tencent.com/flutter/components/date-time-picker?tab=api)**:`TDDatePicker` → `TDateTimePicker`。 + + **需要调整**:DatePickerModel 改为 TDateTimePickerValue + DateTimePickerMode; 上下界/步进显式传入,外部管理确认。 + +- **[Form 表单](https://tdesign.tencent.com/flutter/components/form?tab=api)**:`TDForm / FormController` → `TForm / TFormField / TFormController`。 + + **需要调整**:从 items/rules/data 配置改为字段 Widget 树; value/onChanged、validator 与控制器职责分开。 + +- **[Input 输入框](https://tdesign.tencent.com/flutter/components/input?tab=api)**:`TDInput` → `TInput`。 + + **需要调整**:controller 与 initialValue 互斥; onChanged/hintText/prefix/suffix; 不要把 initialValue 当持续受控值。 + +- **[Picker 选择器](https://tdesign.tencent.com/flutter/components/picker?tab=api)**:`TDPicker / TDMultiPicker / TDMultiLinkedPicker` → `TPicker + TPickerColumns / TPickerLinked`。 + + **需要调整**:列数据改不可变 option 树; 选择面板不负责业务确认,使用 TPickerPopup 组合草稿/确认/取消。 + +- **[Radio 单选框](https://tdesign.tencent.com/flutter/components/radio?tab=api)**:`TDRadio / TDRadioGroup` → `TRadio / TRadioGroup`。 + + **需要调整**:单项必须位于同类型组下; 组持有 value/onChanged,不再为每项维护选中状态。 + +- **[Rate 评分](https://tdesign.tencent.com/flutter/components/rate?tab=api)**:`TDRate` → `TRate`。 + + **需要调整**:按当前受控数值与回调迁移; 重验半星、禁用、只读与自定义指示器。 + +- **[Search 搜索框](https://tdesign.tencent.com/flutter/components/search?tab=api)**:`TDSearchBar` → `TSearchBar`。 + + **需要调整**:placeHolder→hintText、onTextChanged→onChanged、onActionClick→onActionPressed; 不保留旧样式对象。 + +- **[Slider 滑动选择器](https://tdesign.tencent.com/flutter/components/slider?tab=api)**:`TDSlider / TDRangeSlider` → `TSlider / TRangeSlider`。 + + **需要调整**:按当前值及回调类型迁移; 旧 Thumb/Track/Painter 类型不再作为可继承公开入口。 + +- **[Stepper 步进器](https://tdesign.tencent.com/flutter/components/stepper?tab=api)**:`TDStepper` → `TStepper`。 + + **需要调整**:required value; 回调接受后重建; 旧 defaultValue/eventController 不能作为迁移目标。 + +- **[Switch 开关](https://tdesign.tencent.com/flutter/components/switch?tab=api)**:`TDSwitch` → `TSwitch`。 + + **需要调整**:value/onChanged 管开关状态; 空回调禁用; 规格与具体配色分别从实例/Theme 设置。 + +- **[Textarea 多行文本框](https://tdesign.tencent.com/flutter/components/textarea?tab=api)**:`TDTextarea` → `TTextarea`。 + + **需要调整**:多行输入独立组件; 用 minLines/maxLines、controller 与字段回调,核对计数/字符限制。 + +- **[TreeSelect 树形选择](https://tdesign.tencent.com/flutter/components/tree-select?tab=api)**:`TDTreeSelect / TDSelectOption` → `TTreeSelect / TTreeSelectOption`。 + + **需要调整**:树数据、选中集合与 multiple 明确配置; 不再复用旧副作用控制器。 + +- **[Upload 上传](https://tdesign.tencent.com/flutter/components/upload?tab=api)**:`TDUpload` → `TUpload`。 + + **需要调整**:files/onChanged 受控; 单一 mediaType,maxFiles/maxFileSize、不可变结果; 上传请求由业务执行。 + + +### 内容与数据展示 + +检查数据结构、内容插槽、状态以及具体尺寸的含义。 + +- **[Avatar 头像](https://tdesign.tencent.com/flutter/components/avatar?tab=api)**:`TDAvatar` → `TAvatar`。 + + **需要调整**:形状用 shape,物理大小/颜色迁 TAvatarThemeData; 特殊文字用 child: Text(style: ...)。 + +- **[Badge 徽标](https://tdesign.tencent.com/flutter/components/badge?tab=api)**:`TDBadge` → `TBadge`。 + + **需要调整**:统一 label/size 等当前入口; 旧数字/红点/丝带类型按组件 API 重组,不复用旧 BadgeConfig。 + +- **[Cell 单元格](https://tdesign.tencent.com/flutter/components/cell?tab=api)**:`TDCell / TDCellGroup` → `TCell / TCellGroup`。 + + **需要调整**:以内容槽组合; 连续列表用 TCellGroup; 统一背景/分隔线由组或 Theme 管理。 + +- **[Collapse 折叠面板](https://tdesign.tencent.com/flutter/components/collapse?tab=api)**:`TDCollapse / TDCollapsePanel` → `TCollapse / TCollapsePanel`。 + + **需要调整**:受控展开值与内容分开; 形态/动画属于实例,具体外观从 TCollapseThemeData 配置。 + +- **[Empty 空状态](https://tdesign.tencent.com/flutter/components/empty?tab=api)**:`TDEmpty` → `TEmpty`。 + + **需要调整**:旧 type 改为 icon/image/emptyText/operation 组合; 不再查找 TDEmptyType,也不导入内部插图。 + +- **[Footer 页脚](https://tdesign.tencent.com/flutter/components/footer?tab=api)**:`TDFooter` → `TFooter`。 + + **需要调整**:按当前内容/链接数据与组件 Theme 迁移,不继续使用旧 FooterType 作为类型。 + +- **[Image 图片](https://tdesign.tencent.com/flutter/components/image?tab=api)**:`TDImage` → `TImage`。 + + **需要调整**:重验加载/失败/裁剪; 尺寸和占位以当前 API 为准,旧 TDImageType 不能仅改前缀。 + +- **[ImageViewer 图片预览](https://tdesign.tencent.com/flutter/components/image-viewer?tab=api)**:`TDImageViewer / TDImageDialog` → `TImageViewer.show`。 + + **需要调整**:images 使用 ImageProvider 列表; initialIndex 与 onIndexChanged,内部 State/Dialog 类型不再直接实例化。 + +- **[Progress 进度条](https://tdesign.tencent.com/flutter/components/progress?tab=api)**:`TDProgress` → `TProgress`。 + + **需要调整**:variant/status 与主题分开; 圆环 circleSize 表示外框边长,不能把旧半径语义套入。 + +- **[Result 结果](https://tdesign.tencent.com/flutter/components/result?tab=api)**:`TDResult` → `TResult`。 + + **需要调整**:重选当前语义状态与内容插槽,背景/文字视觉使用 TResultThemeData。 + +- **[Skeleton 骨架屏](https://tdesign.tencent.com/flutter/components/skeleton?tab=api)**:`TDSkeleton / TDSkeletonRowCol*` → `TSkeleton / TSkeleton.custom`。 + + **需要调整**:标准形态用 variant; 自定义布局使用 TSkeletonLayout,不复用旧 RowCol 配置类型。 + +- **[Swiper 轮播图](https://tdesign.tencent.com/flutter/components/swiper?tab=api)**:`Swiper + TDSwiperPagination` → `TSwiper / TSwiperController`。 + + **需要调整**:不再用第三方 SwiperController/SwiperPlugin; 迁移 children 或 itemBuilder、分页及自有控制器。 + +- **[Table 表格](https://tdesign.tencent.com/flutter/components/table?tab=api)**:`TDTable / TDTableCol` → `TTable / TTableColumn`。 + + **需要调整**:列使用 id/header/cellBuilder,data 必填; 排序和选择是受控值,旧列/行选择回调需要改写。 + +- **[Tag 标签](https://tdesign.tencent.com/flutter/components/tag?tab=api)**:`TDTag / TDSelectTag` → `TTag / TSelectTag`。 + + **需要调整**:语义色用 colorPreset; 选中/关闭遵循当前回调; 具体字体和圆角从 Theme 设置。 + +- **[TimeCounter 计时器](https://tdesign.tencent.com/flutter/components/time-counter?tab=api)**:`TDTimeCounter` → `TTimeCounter`。 + + **需要调整**:time 和 onChanged 均使用毫秒整数; 重验自动开始、方向与结束; 自建 Controller 由业务释放。 + + +### 浮层、提示与交互反馈 + +核对打开与关闭方式、返回结果、时长、异步结束和资源释放。 + +- **[ActionSheet 动作面板](https://tdesign.tencent.com/flutter/components/action-sheet?tab=api)**:`TDActionSheet` → `TActionSheet`。 + + **需要调整**:按当前列表/宫格入口及 TActionSheetItem 组合; 旧主题枚举不是新 Theme 类型。 + +- **[Dialog 对话框](https://tdesign.tencent.com/flutter/components/dialog?tab=api)**:`TDAlertDialog / TDConfirmDialog / TDInputDialog` → `TDialog / TConfirmDialog / TDialogAction`。 + + **需要调整**:单确认便捷弹窗与多操作槽分开; 输入弹窗用 TDialog+TInput 组合,不恢复专用旧类。 + +- **[DropdownMenu 下拉菜单](https://tdesign.tencent.com/flutter/components/dropdown-menu?tab=api)**:`TDDropdownMenu / TDDropdownItem` → `TDropdownMenu / TDropdownMenuItem`。 + + **需要调整**:菜单项描述与 Single/MultiSelectPanel 组合; 重验外部值更新、遮罩和 anchor,不直接改名前缀。 + +- **[Loading 加载](https://tdesign.tencent.com/flutter/components/loading?tab=api)**:`TDLoading` → `TLoading`。 + + **需要调整**:按当前 icon/内容与 TLoadingController 使用; 旧内部指示器/State 不作为公开继承点。 + +- **[Message 全局提示](https://tdesign.tencent.com/flutter/components/message?tab=api)**:`TDMessage` → `TMessage`。 + + **需要调整**:duration 使用 Duration; status 替代旧 theme; 显示由 Widget 树或命令句柄管理,不保留 visible 开关。 + +- **[NoticeBar 消息提醒](https://tdesign.tencent.com/flutter/components/notice-bar?tab=api)**:`TDNoticeBar` → `TNoticeBar`。 + + **需要调整**:语义状态/滚动/多行用当前 API; 重验循环、点击与关闭,不搬旧样式类。 + +- **[Popover 弹出气泡](https://tdesign.tencent.com/flutter/components/popover?tab=api)**:`TDPopover / TDPopoverWidget` → `TPopover`。 + + **需要调整**:锚点和一次性命令按当前入口使用; offset/arrowSize/padding/背景/圆角从 TPopoverThemeData 设置。 + +- **[Popup 弹出层](https://tdesign.tencent.com/flutter/components/popup?tab=api)**:`TDPopup*Panel / TDSlidePopupRoute` → `TPopup.show + TPopupOptions + TPopupHandle`。 + + **需要调整**:面板、路由与控制统一; 选择方向专属 Options/Inset,关闭结果从 handle.result 获取。 + +- **[PullDownRefresh 下拉刷新](https://tdesign.tencent.com/flutter/components/pull-down-refresh?tab=api)**:`TDRefreshHeader` → `TPullDownRefresh`。 + + **需要调整**:用 wrapper、受控回调和 TPullDownRefreshController 迁移; 旧第三方 Header 不能仅改名。 + +- **[SwipeCell 滑动操作](https://tdesign.tencent.com/flutter/components/swipe-cell?tab=api)**:`TDSwipeCell / TDSwipeCellAction` → `TSwipeCell / TSwipeCellAction`。 + + **需要调整**:侧滑交互与逐项动作配置使用当前 API; 不要依赖旧 Inherited/State,避免重复通知。 + +- **[Toast 轻提示](https://tdesign.tencent.com/flutter/components/toast?tab=api)**:`TDToast` → `TToast`。 + + **需要调整**:duration 为 Duration,加载默认也会超时; 持续加载显式 Duration.zero,背景拦截放 TOverlayConfig。 ## 编译通过后仍要检查 @@ -358,10 +576,14 @@ Widget migratedUpload({ 不存在替代入口的旧公开 State、Painter、布局适配和静态辅助类,不应通过深层 src 导入恢复。若业务依赖其具体能力,应使用公开 Widget/Theme/Flutter 原语重新组合,或在业务中维护对应实现;这类代码需要人工迁移。 -## 0.2.7 公开导出名称索引 + +## 附录:按旧类型名称查找 以下覆盖 0.2.7 主入口追踪到的自有公开声明(不包括外部包导出)。它用于查找旧名和定位处置方向,**不是自动替换表**。即使目标同名,构造参数、回调、默认值或行为也可能变化。公开基类的继承成员与业务自行继承/深层导入需额外审查。当前入口还导出 Material;同名的 Flutter 类型不作为旧 TD 自有声明的兼容实现。 +
+展开0.2.7旧类型名称对照表(383项) + | 0.2.7 名称 | 当前入口或处置 | 范围 | |---|---|---| | `BadgeConfig` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | @@ -747,3 +969,5 @@ Widget migratedUpload({ | `TrapezoidPath` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | | `horizontalChild` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | | `slideTransitionFromToAlignment` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | + +
diff --git a/tdesign-site/site/docs/migration-0.2.7-to-1.0.md b/tdesign-site/site/docs/migration-0.2.7-to-1.0.md index 6abd28b0c1..399aa7ffa2 100644 --- a/tdesign-site/site/docs/migration-0.2.7-to-1.0.md +++ b/tdesign-site/site/docs/migration-0.2.7-to-1.0.md @@ -10,6 +10,8 @@ spline: explain 升级时将依赖更新为 `tdesign_flutter: ^1.0.0`。本文仅说明 0.2.7 到 1.0 的迁移;alpha 版本之间的升级不在本文范围。 +已有具体组件需要迁移时,可直接跳到[按组件查找迁移方式](#migration-components);首次升级建议先按下面的顺序处理公共配置。 + ## 升级顺序 1. 保留当前依赖锁文件、主题 JSON 与关键页面截图;先在业务分支迁移。 @@ -288,69 +290,285 @@ Widget migratedUpload({ - **底部导航**:旧 `TDBottomTabBar` → `TTabBar`,提供 type、navigationTabs、受控 value/onChanged;旧 `topBorder/showTopBorder/centerDistance` 没有等价开关恢复,按新的默认边线和内置图文布局验收。 - **Swiper**:使用 `TSwiper` 的 children 或 itemBuilder/itemCount;自建 `TSwiperController` 并在页面 dispose 中释放。旧第三方 SwiperPlugin/SwiperController 和 TDSwiperPagination 不能直接传入;按当前分页、箭头与 pageEffect 能力重组。TSwiper 默认 loop/autoplay 均 false,业务需要时显式打开。 -## 全部组件迁移索引 - -下表是入口与职责迁移索引,不承诺旧构造参数一一保留。每个组件的全部当前字段与默认值以 1.0 API 文档为准;旧名查找见文末导出索引。 - -| 组件 | 0.2.7 入口 | 1.0 入口 | 必须检查的迁移点 | -|---|---|---|---| -| button | `TDButton` | `TButton` | text→child;onTap→onPressed;type→variant;theme→colorPreset;状态样式合并为 ButtonStyle。 | -| divider | `TDDivider` | `TDivider` | 按当前构造及 TDividerThemeData 配置;方向/内容与具体视觉默认值分开。 | -| fab | `TDFab` | `TFab` | 重新核对尺寸/形态枚举、内容和事件;具体视觉从 TFabThemeData 配置。 | -| icon | `TDIcons / Icon` | `TIcons / TIcon` | 图标数据来自 tdesign_flutter_icons;TIcon 的默认视觉由 TD 控制,实例 size/color 可覆盖。 | -| text | `TDText / TDTextSpan` | `TText / TTextSpan` | 删除分散字体、在线加载和 padding 入口;用 style、textScaler、显式父布局,见文字一节。 | -| link | `TDLink` | `TLink` | 内容改用 Widget child;内置规格与 colorPreset 留实例,具体视觉从 TLinkThemeData 配置。 | -| backtop | `TDBackTop` | `TBackTop` | 按当前滚动绑定与形态配置;仅提供滚动控制器时按组件契约回顶,不用空回调猜禁用。 | -| drawer | `TDDrawer / TDDrawerWidget` | `TDrawer / showTDrawer` | 内容与浮层打开分开;宽度/背景移入 TDrawerThemeData,旧内容实现类型不再直接构造。 | -| indexes | `TDIndexes` | `TIndexes` | 重新核对受控索引及滚动对象;字母列表最大高度在组件 Theme 配置。 | -| navbar | `TDNavBar` | `TNavBar` | title/操作保留内容职责,背景、颜色、间距、边框和阴影迁入 TNavBarThemeData。 | -| sidebar | `TDSideBar` | `TSideBar` | 选择交给 value/onChanged;去掉旧 Controller/数据项样式依赖,视觉使用 TSideBarThemeData。 | -| steps | `TDSteps` | `TSteps.progress / selectable / display` | 选择进度、可选择或纯展示模式;不把三种状态源混用。 | -| tab_bar | `TDBottomTabBar` | `TTabBar` | 底部导航:显式 type、navigationTabs、value/onChanged;尺寸/颜色/分隔线迁 Theme。 | -| tabs | `TDTabBar / TDTabBarView` | `TTabsBar / TTabsBarView` | 顶部页签:共享 TabController 或 DefaultTabController;不是底部 TTabBar。 | -| form | `TDForm / FormController` | `TForm / TFormField / TFormController` | 从 items/rules/data 配置改为字段 Widget 树;value/onChanged、validator 与控制器职责分开。 | -| input | `TDInput` | `TInput` | controller 与 initialValue 互斥;onChanged/hintText/prefix/suffix;不要把 initialValue 当持续受控值。 | -| textarea | `TDTextarea` | `TTextarea` | 多行输入独立组件;用 minLines/maxLines、controller 与字段回调,核对计数/字符限制。 | -| search | `TDSearchBar` | `TSearchBar` | placeHolder→hintText、onTextChanged→onChanged、onActionClick→onActionPressed;不保留旧样式对象。 | -| checkbox | `TDCheckbox / TDCheckboxGroup` | `TCheckbox / TCheckboxGroup` | checked/id/controller 方案改为 value/onChanged;组提供 options 和受控选中集合,类型按当前 API。 | -| radio | `TDRadio / TDRadioGroup` | `TRadio / TRadioGroup` | 单项必须位于同类型组下;组持有 value/onChanged,不再为每项维护选中状态。 | -| switch | `TDSwitch` | `TSwitch` | value/onChanged 管开关状态;空回调禁用;规格与具体配色分别从实例/Theme 设置。 | -| stepper | `TDStepper` | `TStepper` | required value;回调接受后重建;旧 defaultValue/eventController 不能作为迁移目标。 | -| slider | `TDSlider / TDRangeSlider` | `TSlider / TRangeSlider` | 按当前值及回调类型迁移;旧 Thumb/Track/Painter 类型不再作为可继承公开入口。 | -| rate | `TDRate` | `TRate` | 按当前受控数值与回调迁移;重验半星、禁用、只读与自定义指示器。 | -| picker | `TDPicker / TDMultiPicker / TDMultiLinkedPicker` | `TPicker + TPickerColumns / TPickerLinked` | 列数据改不可变 option 树;选择面板不负责业务确认,使用 TPickerPopup 组合草稿/确认/取消。 | -| date_time_picker | `TDDatePicker` | `TDateTimePicker` | DatePickerModel 改为 TDateTimePickerValue + DateTimePickerMode;上下界/步进显式传入,外部管理确认。 | -| cascader | `TDCascader / TDMultiCascader` | `TCascader` | 使用 TCascaderOption 树与受控路径;旧自定义 Tab/Action/多选控制类型不能机械替换,按当前能力重组。 | -| tree_select | `TDTreeSelect / TDSelectOption` | `TTreeSelect / TTreeSelectOption` | 树数据、选中集合与 multiple 明确配置;不再复用旧副作用控制器。 | -| calendar | `TDCalendar` | `TCalendar` | value 是 List;variant 决定单选/多选/区间;onChanged 回写,时间选择和弹层外部组合。 | -| upload | `TDUpload` | `TUpload` | files/onChanged 受控;单一 mediaType,maxFiles/maxFileSize、不可变结果;上传请求由业务执行。 | -| avatar | `TDAvatar` | `TAvatar` | 形状用 shape,物理大小/颜色迁 TAvatarThemeData;特殊文字用 child: Text(style: ...)。 | -| badge | `TDBadge` | `TBadge` | 统一 label/size 等当前入口;旧数字/红点/丝带类型按组件 API 重组,不复用旧 BadgeConfig。 | -| cell | `TDCell / TDCellGroup` | `TCell / TCellGroup` | 以内容槽组合;连续列表用 TCellGroup;统一背景/分隔线由组或 Theme 管理。 | -| collapse | `TDCollapse / TDCollapsePanel` | `TCollapse / TCollapsePanel` | 受控展开值与内容分开;形态/动画属于实例,具体外观从 TCollapseThemeData 配置。 | -| empty | `TDEmpty` | `TEmpty` | 旧 type 改为 icon/image/emptyText/operation 组合;不再查找 TDEmptyType,也不导入内部插图。 | -| footer | `TDFooter` | `TFooter` | 按当前内容/链接数据与组件 Theme 迁移,不继续使用旧 FooterType 作为类型。 | -| image | `TDImage` | `TImage` | 重验加载/失败/裁剪;尺寸和占位以当前 API 为准,旧 TDImageType 不能仅改前缀。 | -| image_viewer | `TDImageViewer / TDImageDialog` | `TImageViewer.show` | images 使用 ImageProvider 列表;initialIndex 与 onIndexChanged,内部 State/Dialog 类型不再直接实例化。 | -| progress | `TDProgress` | `TProgress` | variant/status 与主题分开;圆环 circleSize 表示外框边长,不能把旧半径语义套入。 | -| result | `TDResult` | `TResult` | 重选当前语义状态与内容插槽,背景/文字视觉使用 TResultThemeData。 | -| skeleton | `TDSkeleton / TDSkeletonRowCol*` | `TSkeleton / TSkeleton.custom` | 标准形态用 variant;自定义布局使用 TSkeletonLayout,不复用旧 RowCol 配置类型。 | -| swiper | `Swiper + TDSwiperPagination` | `TSwiper / TSwiperController` | 不再用第三方 SwiperController/SwiperPlugin;迁移 children 或 itemBuilder、分页及自有控制器。 | -| table | `TDTable / TDTableCol` | `TTable / TTableColumn` | 列使用 id/header/cellBuilder,data 必填;排序和选择是受控值,旧列/行选择回调需要改写。 | -| tag | `TDTag / TDSelectTag` | `TTag / TSelectTag` | 语义色用 colorPreset;选中/关闭遵循当前回调;具体字体和圆角从 Theme 设置。 | -| time_counter | `TDTimeCounter` | `TTimeCounter` | time 和 onChanged 均使用毫秒整数;重验自动开始、方向与结束;自建 Controller 由业务释放。 | -| action_sheet | `TDActionSheet` | `TActionSheet` | 按当前列表/宫格入口及 TActionSheetItem 组合;旧主题枚举不是新 Theme 类型。 | -| dialog | `TDAlertDialog / TDConfirmDialog / TDInputDialog` | `TDialog / TConfirmDialog / TDialogAction` | 单确认便捷弹窗与多操作槽分开;输入弹窗用 TDialog+TInput 组合,不恢复专用旧类。 | -| dropdown_menu | `TDDropdownMenu / TDDropdownItem` | `TDropdownMenu / TDropdownMenuItem` | 菜单项描述与 Single/MultiSelectPanel 组合;重验外部值更新、遮罩和 anchor,不直接改名前缀。 | -| loading | `TDLoading` | `TLoading` | 按当前 icon/内容与 TLoadingController 使用;旧内部指示器/State 不作为公开继承点。 | -| message | `TDMessage` | `TMessage` | duration 使用 Duration;status 替代旧 theme;显示由 Widget 树或命令句柄管理,不保留 visible 开关。 | -| notice_bar | `TDNoticeBar` | `TNoticeBar` | 语义状态/滚动/多行用当前 API;重验循环、点击与关闭,不搬旧样式类。 | -| popover | `TDPopover / TDPopoverWidget` | `TPopover` | 锚点和一次性命令按当前入口使用;offset/arrowSize/padding/背景/圆角从 TPopoverThemeData 设置。 | -| popup | `TDPopup*Panel / TDSlidePopupRoute` | `TPopup.show + TPopupOptions + TPopupHandle` | 面板、路由与控制统一;选择方向专属 Options/Inset,关闭结果从 handle.result 获取。 | -| refresh | `TDRefreshHeader` | `TPullDownRefresh` | 用 wrapper、受控回调和 TPullDownRefreshController 迁移;旧第三方 Header 不能仅改名。 | -| swipe_cell | `TDSwipeCell / TDSwipeCellAction` | `TSwipeCell / TSwipeCellAction` | 侧滑交互与逐项动作配置使用当前 API;不要依赖旧 Inherited/State,避免重复通知。 | -| toast | `TDToast` | `TToast` | duration 为 Duration,加载默认也会超时;持续加载显式 Duration.zero,背景拦截放 TOverlayConfig。 | -| theme | `TDTheme / TDThemeData` | `context.tTheme / TThemeData / TThemeBuilder` | 全局 Token→TD 组件 Theme→支持的实例配置;Material 外观不再反向影响 TD 默认视觉。 | + +## 按组件查找迁移方式 + +只需要迁移项目中实际使用的组件。先搜索代码中的旧类名,例如 `TDButton`,再按下面的分类找到它。 + +1. **找对应入口**:每项先列出“0.2.7旧入口 → 1.0入口”,用于定位新组件。 +2. **完成用法调整**:阅读“需要调整”,并结合前文示例修改参数、数据和回调;箭头不表示只改类名就能完成迁移。 +3. **核对当前用法**:点击组件名称进入1.0 API文档,再验证真实操作、主题及布局。 + +例如,搜索到 `TDButton` 时,先看[按钮与禁用语义](#按钮与禁用语义),把文字和点击回调迁到新的内容槽与回调,再查看按钮API。不要仅把它改名为 `TButton` 后就结束。 + +### 选择你正在迁移的组件 + +- [主题与全局配置](#migration-group-global)(1项) +- [按钮、文字与基础组件](#migration-group-basic)(6项) +- [页面导航与页签](#migration-group-navigation)(8项) +- [表单、输入与选择](#migration-group-input)(16项) +- [内容与数据展示](#migration-group-display)(15项) +- [浮层、提示与交互反馈](#migration-group-feedback)(11项) + +查找旧枚举、Controller、State等辅助类型时,使用文末的[旧类型名称对照](#migration-legacy-types)。该附录用于定位处置方向,组件迁移优先按下面的分组进行。 + + +### 主题与全局配置 + +先处理全局主题,再迁移各组件的局部样式。 + +- **[Theme 主题](https://tdesign.tencent.com/flutter/components/theme?tab=api)**:`TDTheme / TDThemeData` → `context.tTheme / TThemeData / TThemeBuilder`。 + + **需要调整**:全局 Token→TD 组件 Theme→支持的实例配置; Material 外观不再反向影响 TD 默认视觉。 + + +### 按钮、文字与基础组件 + +从页面上常用的按钮、文字、图标等开始,核对内容槽和样式配置。 + +- **[Button 按钮](https://tdesign.tencent.com/flutter/components/button?tab=api)**:`TDButton` → `TButton`。 + + **需要调整**:text→child; onTap→onPressed; type→variant; theme→colorPreset; 状态样式合并为 ButtonStyle。 + +- **[Divider 分割线](https://tdesign.tencent.com/flutter/components/divider?tab=api)**:`TDDivider` → `TDivider`。 + + **需要调整**:按当前构造及 TDividerThemeData 配置; 方向/内容与具体视觉默认值分开。 + +- **[Fab 悬浮按钮](https://tdesign.tencent.com/flutter/components/fab?tab=api)**:`TDFab` → `TFab`。 + + **需要调整**:重新核对尺寸/形态枚举、内容和事件; 具体视觉从 TFabThemeData 配置。 + +- **[Icon 图标](https://tdesign.tencent.com/flutter/components/icon?tab=api)**:`TDIcons / Icon` → `TIcons / TIcon`。 + + **需要调整**:图标数据来自 tdesign_flutter_icons; TIcon 的默认视觉由 TD 控制,实例 size/color 可覆盖。 + +- **[Link 链接](https://tdesign.tencent.com/flutter/components/link?tab=api)**:`TDLink` → `TLink`。 + + **需要调整**:内容改用 Widget child; 内置规格与 colorPreset 留实例,具体视觉从 TLinkThemeData 配置。 + +- **[Text 文本](https://tdesign.tencent.com/flutter/components/text?tab=api)**:`TDText / TDTextSpan` → `TText / TTextSpan`。 + + **需要调整**:删除分散字体、在线加载和 padding 入口; 用 style、textScaler、显式父布局,见文字一节。 + + +### 页面导航与页签 + +重点区分顶部页签、底部导航以及各自的控制器和受控值。 + +- **[BackTop 返回顶部](https://tdesign.tencent.com/flutter/components/back-top?tab=api)**:`TDBackTop` → `TBackTop`。 + + **需要调整**:按当前滚动绑定与形态配置; 仅提供滚动控制器时按组件契约回顶,不用空回调猜禁用。 + +- **[Drawer 抽屉](https://tdesign.tencent.com/flutter/components/drawer?tab=api)**:`TDDrawer / TDDrawerWidget` → `TDrawer / showTDrawer`。 + + **需要调整**:内容与浮层打开分开; 宽度/背景移入 TDrawerThemeData,旧内容实现类型不再直接构造。 + +- **[Indexes 索引](https://tdesign.tencent.com/flutter/components/indexes?tab=api)**:`TDIndexes` → `TIndexes`。 + + **需要调整**:重新核对受控索引及滚动对象; 字母列表最大高度在组件 Theme 配置。 + +- **[Navbar 导航栏](https://tdesign.tencent.com/flutter/components/navbar?tab=api)**:`TDNavBar` → `TNavBar`。 + + **需要调整**:title/操作保留内容职责,背景、颜色、间距、边框和阴影迁入 TNavBarThemeData。 + +- **[SideBar 侧边栏](https://tdesign.tencent.com/flutter/components/side-bar?tab=api)**:`TDSideBar` → `TSideBar`。 + + **需要调整**:选择交给 value/onChanged; 去掉旧 Controller/数据项样式依赖,视觉使用 TSideBarThemeData。 + +- **[Steps 步骤条](https://tdesign.tencent.com/flutter/components/steps?tab=api)**:`TDSteps` → `TSteps.progress / selectable / display`。 + + **需要调整**:选择进度、可选择或纯展示模式; 不把三种状态源混用。 + +- **[TabBar 标签栏](https://tdesign.tencent.com/flutter/components/tab-bar?tab=api)**:`TDBottomTabBar` → `TTabBar`。 + + **需要调整**:底部导航:显式 type、navigationTabs、value/onChanged; 尺寸/颜色/分隔线迁 组件 Theme。 + +- **[Tabs 选项卡](https://tdesign.tencent.com/flutter/components/tabs?tab=api)**:`TDTabBar / TDTabBarView` → `TTabsBar / TTabsBarView`。 + + **需要调整**:顶部页签:共享 TabController 或 DefaultTabController; 不是底部 TTabBar。 + + +### 表单、输入与选择 + +先确认值由谁持有,再处理回调、表单校验和确认/取消流程。 + +- **[Calendar 日历](https://tdesign.tencent.com/flutter/components/calendar?tab=api)**:`TDCalendar` → `TCalendar`。 + + **需要调整**:value 是 List; variant 决定单选/多选/区间; onChanged 回写,时间选择和弹层外部组合。 + +- **[Cascader 级联选择器](https://tdesign.tencent.com/flutter/components/cascader?tab=api)**:`TDCascader / TDMultiCascader` → `TCascader`。 + + **需要调整**:使用 TCascaderOption 树与受控路径; 旧自定义 Tab/Action/多选控制类型不能机械替换,按当前能力重组。 + +- **[CheckBox 多选框](https://tdesign.tencent.com/flutter/components/checkbox?tab=api)**:`TDCheckbox / TDCheckboxGroup` → `TCheckbox / TCheckboxGroup`。 + + **需要调整**:checked/id/controller 方案改为 value/onChanged; 组提供 options 和受控选中集合,类型按当前 API。 + +- **[DateTimePicker 时间选择器](https://tdesign.tencent.com/flutter/components/date-time-picker?tab=api)**:`TDDatePicker` → `TDateTimePicker`。 + + **需要调整**:DatePickerModel 改为 TDateTimePickerValue + DateTimePickerMode; 上下界/步进显式传入,外部管理确认。 + +- **[Form 表单](https://tdesign.tencent.com/flutter/components/form?tab=api)**:`TDForm / FormController` → `TForm / TFormField / TFormController`。 + + **需要调整**:从 items/rules/data 配置改为字段 Widget 树; value/onChanged、validator 与控制器职责分开。 + +- **[Input 输入框](https://tdesign.tencent.com/flutter/components/input?tab=api)**:`TDInput` → `TInput`。 + + **需要调整**:controller 与 initialValue 互斥; onChanged/hintText/prefix/suffix; 不要把 initialValue 当持续受控值。 + +- **[Picker 选择器](https://tdesign.tencent.com/flutter/components/picker?tab=api)**:`TDPicker / TDMultiPicker / TDMultiLinkedPicker` → `TPicker + TPickerColumns / TPickerLinked`。 + + **需要调整**:列数据改不可变 option 树; 选择面板不负责业务确认,使用 TPickerPopup 组合草稿/确认/取消。 + +- **[Radio 单选框](https://tdesign.tencent.com/flutter/components/radio?tab=api)**:`TDRadio / TDRadioGroup` → `TRadio / TRadioGroup`。 + + **需要调整**:单项必须位于同类型组下; 组持有 value/onChanged,不再为每项维护选中状态。 + +- **[Rate 评分](https://tdesign.tencent.com/flutter/components/rate?tab=api)**:`TDRate` → `TRate`。 + + **需要调整**:按当前受控数值与回调迁移; 重验半星、禁用、只读与自定义指示器。 + +- **[Search 搜索框](https://tdesign.tencent.com/flutter/components/search?tab=api)**:`TDSearchBar` → `TSearchBar`。 + + **需要调整**:placeHolder→hintText、onTextChanged→onChanged、onActionClick→onActionPressed; 不保留旧样式对象。 + +- **[Slider 滑动选择器](https://tdesign.tencent.com/flutter/components/slider?tab=api)**:`TDSlider / TDRangeSlider` → `TSlider / TRangeSlider`。 + + **需要调整**:按当前值及回调类型迁移; 旧 Thumb/Track/Painter 类型不再作为可继承公开入口。 + +- **[Stepper 步进器](https://tdesign.tencent.com/flutter/components/stepper?tab=api)**:`TDStepper` → `TStepper`。 + + **需要调整**:required value; 回调接受后重建; 旧 defaultValue/eventController 不能作为迁移目标。 + +- **[Switch 开关](https://tdesign.tencent.com/flutter/components/switch?tab=api)**:`TDSwitch` → `TSwitch`。 + + **需要调整**:value/onChanged 管开关状态; 空回调禁用; 规格与具体配色分别从实例/Theme 设置。 + +- **[Textarea 多行文本框](https://tdesign.tencent.com/flutter/components/textarea?tab=api)**:`TDTextarea` → `TTextarea`。 + + **需要调整**:多行输入独立组件; 用 minLines/maxLines、controller 与字段回调,核对计数/字符限制。 + +- **[TreeSelect 树形选择](https://tdesign.tencent.com/flutter/components/tree-select?tab=api)**:`TDTreeSelect / TDSelectOption` → `TTreeSelect / TTreeSelectOption`。 + + **需要调整**:树数据、选中集合与 multiple 明确配置; 不再复用旧副作用控制器。 + +- **[Upload 上传](https://tdesign.tencent.com/flutter/components/upload?tab=api)**:`TDUpload` → `TUpload`。 + + **需要调整**:files/onChanged 受控; 单一 mediaType,maxFiles/maxFileSize、不可变结果; 上传请求由业务执行。 + + +### 内容与数据展示 + +检查数据结构、内容插槽、状态以及具体尺寸的含义。 + +- **[Avatar 头像](https://tdesign.tencent.com/flutter/components/avatar?tab=api)**:`TDAvatar` → `TAvatar`。 + + **需要调整**:形状用 shape,物理大小/颜色迁 TAvatarThemeData; 特殊文字用 child: Text(style: ...)。 + +- **[Badge 徽标](https://tdesign.tencent.com/flutter/components/badge?tab=api)**:`TDBadge` → `TBadge`。 + + **需要调整**:统一 label/size 等当前入口; 旧数字/红点/丝带类型按组件 API 重组,不复用旧 BadgeConfig。 + +- **[Cell 单元格](https://tdesign.tencent.com/flutter/components/cell?tab=api)**:`TDCell / TDCellGroup` → `TCell / TCellGroup`。 + + **需要调整**:以内容槽组合; 连续列表用 TCellGroup; 统一背景/分隔线由组或 Theme 管理。 + +- **[Collapse 折叠面板](https://tdesign.tencent.com/flutter/components/collapse?tab=api)**:`TDCollapse / TDCollapsePanel` → `TCollapse / TCollapsePanel`。 + + **需要调整**:受控展开值与内容分开; 形态/动画属于实例,具体外观从 TCollapseThemeData 配置。 + +- **[Empty 空状态](https://tdesign.tencent.com/flutter/components/empty?tab=api)**:`TDEmpty` → `TEmpty`。 + + **需要调整**:旧 type 改为 icon/image/emptyText/operation 组合; 不再查找 TDEmptyType,也不导入内部插图。 + +- **[Footer 页脚](https://tdesign.tencent.com/flutter/components/footer?tab=api)**:`TDFooter` → `TFooter`。 + + **需要调整**:按当前内容/链接数据与组件 Theme 迁移,不继续使用旧 FooterType 作为类型。 + +- **[Image 图片](https://tdesign.tencent.com/flutter/components/image?tab=api)**:`TDImage` → `TImage`。 + + **需要调整**:重验加载/失败/裁剪; 尺寸和占位以当前 API 为准,旧 TDImageType 不能仅改前缀。 + +- **[ImageViewer 图片预览](https://tdesign.tencent.com/flutter/components/image-viewer?tab=api)**:`TDImageViewer / TDImageDialog` → `TImageViewer.show`。 + + **需要调整**:images 使用 ImageProvider 列表; initialIndex 与 onIndexChanged,内部 State/Dialog 类型不再直接实例化。 + +- **[Progress 进度条](https://tdesign.tencent.com/flutter/components/progress?tab=api)**:`TDProgress` → `TProgress`。 + + **需要调整**:variant/status 与主题分开; 圆环 circleSize 表示外框边长,不能把旧半径语义套入。 + +- **[Result 结果](https://tdesign.tencent.com/flutter/components/result?tab=api)**:`TDResult` → `TResult`。 + + **需要调整**:重选当前语义状态与内容插槽,背景/文字视觉使用 TResultThemeData。 + +- **[Skeleton 骨架屏](https://tdesign.tencent.com/flutter/components/skeleton?tab=api)**:`TDSkeleton / TDSkeletonRowCol*` → `TSkeleton / TSkeleton.custom`。 + + **需要调整**:标准形态用 variant; 自定义布局使用 TSkeletonLayout,不复用旧 RowCol 配置类型。 + +- **[Swiper 轮播图](https://tdesign.tencent.com/flutter/components/swiper?tab=api)**:`Swiper + TDSwiperPagination` → `TSwiper / TSwiperController`。 + + **需要调整**:不再用第三方 SwiperController/SwiperPlugin; 迁移 children 或 itemBuilder、分页及自有控制器。 + +- **[Table 表格](https://tdesign.tencent.com/flutter/components/table?tab=api)**:`TDTable / TDTableCol` → `TTable / TTableColumn`。 + + **需要调整**:列使用 id/header/cellBuilder,data 必填; 排序和选择是受控值,旧列/行选择回调需要改写。 + +- **[Tag 标签](https://tdesign.tencent.com/flutter/components/tag?tab=api)**:`TDTag / TDSelectTag` → `TTag / TSelectTag`。 + + **需要调整**:语义色用 colorPreset; 选中/关闭遵循当前回调; 具体字体和圆角从 Theme 设置。 + +- **[TimeCounter 计时器](https://tdesign.tencent.com/flutter/components/time-counter?tab=api)**:`TDTimeCounter` → `TTimeCounter`。 + + **需要调整**:time 和 onChanged 均使用毫秒整数; 重验自动开始、方向与结束; 自建 Controller 由业务释放。 + + +### 浮层、提示与交互反馈 + +核对打开与关闭方式、返回结果、时长、异步结束和资源释放。 + +- **[ActionSheet 动作面板](https://tdesign.tencent.com/flutter/components/action-sheet?tab=api)**:`TDActionSheet` → `TActionSheet`。 + + **需要调整**:按当前列表/宫格入口及 TActionSheetItem 组合; 旧主题枚举不是新 Theme 类型。 + +- **[Dialog 对话框](https://tdesign.tencent.com/flutter/components/dialog?tab=api)**:`TDAlertDialog / TDConfirmDialog / TDInputDialog` → `TDialog / TConfirmDialog / TDialogAction`。 + + **需要调整**:单确认便捷弹窗与多操作槽分开; 输入弹窗用 TDialog+TInput 组合,不恢复专用旧类。 + +- **[DropdownMenu 下拉菜单](https://tdesign.tencent.com/flutter/components/dropdown-menu?tab=api)**:`TDDropdownMenu / TDDropdownItem` → `TDropdownMenu / TDropdownMenuItem`。 + + **需要调整**:菜单项描述与 Single/MultiSelectPanel 组合; 重验外部值更新、遮罩和 anchor,不直接改名前缀。 + +- **[Loading 加载](https://tdesign.tencent.com/flutter/components/loading?tab=api)**:`TDLoading` → `TLoading`。 + + **需要调整**:按当前 icon/内容与 TLoadingController 使用; 旧内部指示器/State 不作为公开继承点。 + +- **[Message 全局提示](https://tdesign.tencent.com/flutter/components/message?tab=api)**:`TDMessage` → `TMessage`。 + + **需要调整**:duration 使用 Duration; status 替代旧 theme; 显示由 Widget 树或命令句柄管理,不保留 visible 开关。 + +- **[NoticeBar 消息提醒](https://tdesign.tencent.com/flutter/components/notice-bar?tab=api)**:`TDNoticeBar` → `TNoticeBar`。 + + **需要调整**:语义状态/滚动/多行用当前 API; 重验循环、点击与关闭,不搬旧样式类。 + +- **[Popover 弹出气泡](https://tdesign.tencent.com/flutter/components/popover?tab=api)**:`TDPopover / TDPopoverWidget` → `TPopover`。 + + **需要调整**:锚点和一次性命令按当前入口使用; offset/arrowSize/padding/背景/圆角从 TPopoverThemeData 设置。 + +- **[Popup 弹出层](https://tdesign.tencent.com/flutter/components/popup?tab=api)**:`TDPopup*Panel / TDSlidePopupRoute` → `TPopup.show + TPopupOptions + TPopupHandle`。 + + **需要调整**:面板、路由与控制统一; 选择方向专属 Options/Inset,关闭结果从 handle.result 获取。 + +- **[PullDownRefresh 下拉刷新](https://tdesign.tencent.com/flutter/components/pull-down-refresh?tab=api)**:`TDRefreshHeader` → `TPullDownRefresh`。 + + **需要调整**:用 wrapper、受控回调和 TPullDownRefreshController 迁移; 旧第三方 Header 不能仅改名。 + +- **[SwipeCell 滑动操作](https://tdesign.tencent.com/flutter/components/swipe-cell?tab=api)**:`TDSwipeCell / TDSwipeCellAction` → `TSwipeCell / TSwipeCellAction`。 + + **需要调整**:侧滑交互与逐项动作配置使用当前 API; 不要依赖旧 Inherited/State,避免重复通知。 + +- **[Toast 轻提示](https://tdesign.tencent.com/flutter/components/toast?tab=api)**:`TDToast` → `TToast`。 + + **需要调整**:duration 为 Duration,加载默认也会超时; 持续加载显式 Duration.zero,背景拦截放 TOverlayConfig。 ## 编译通过后仍要检查 @@ -362,10 +580,14 @@ Widget migratedUpload({ 不存在替代入口的旧公开 State、Painter、布局适配和静态辅助类,不应通过深层 src 导入恢复。若业务依赖其具体能力,应使用公开 Widget/Theme/Flutter 原语重新组合,或在业务中维护对应实现;这类代码需要人工迁移。 -## 0.2.7 公开导出名称索引 + +## 附录:按旧类型名称查找 以下覆盖 0.2.7 主入口追踪到的自有公开声明(不包括外部包导出)。它用于查找旧名和定位处置方向,**不是自动替换表**。即使目标同名,构造参数、回调、默认值或行为也可能变化。公开基类的继承成员与业务自行继承/深层导入需额外审查。当前入口还导出 Material;同名的 Flutter 类型不作为旧 TD 自有声明的兼容实现。 +
+展开0.2.7旧类型名称对照表(383项) + | 0.2.7 名称 | 当前入口或处置 | 范围 | |---|---|---| | `BadgeConfig` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | @@ -751,3 +973,5 @@ Widget migratedUpload({ | `TrapezoidPath` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | | `horizontalChild` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | | `slideTransitionFromToAlignment` | 无对应的 TD 自有声明;按组件 Widget / Theme / Flutter 原语改写 | 旧实现无兼容契约;同名 Flutter 类型不代表等价 | + +
From 1347262f63f3d3af0e4d7d2c0637f78776234a0b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=98=BF=20Cai?= Date: Thu, 15 Oct 2026 17:00:56 +0800 Subject: [PATCH 06/13] fix(theme): complete dark theme defaults and runnable migration guides --- scripts/documentation.mjs | 7 +- .../064-migration-reading-flow/acceptance.md | 23 + specs/064-migration-reading-flow/plan.md | 7 + specs/064-migration-reading-flow/spec.md | 21 + specs/064-migration-reading-flow/tasks.md | 8 + .../065-demo-debug-test-modules/acceptance.md | 12 + specs/065-demo-debug-test-modules/plan.md | 3 + specs/065-demo-debug-test-modules/spec.md | 3 + specs/065-demo-debug-test-modules/tasks.md | 5 + specs/066-theme-neutral-palette/acceptance.md | 12 + specs/066-theme-neutral-palette/plan.md | 3 + specs/066-theme-neutral-palette/spec.md | 3 + specs/066-theme-neutral-palette/tasks.md | 5 + .../acceptance.md | 14 + specs/067-custom-theme-live-examples/plan.md | 7 + specs/067-custom-theme-live-examples/spec.md | 9 + specs/067-custom-theme-live-examples/tasks.md | 6 + .../068-custom-theme-dark-mode/acceptance.md | 21 + .../delivery-validation.json | 100 ++ specs/068-custom-theme-dark-mode/plan.md | 3 + specs/068-custom-theme-dark-mode/spec.md | 7 + specs/068-custom-theme-dark-mode/tasks.md | 5 + tdesign-component/MIGRATION.md | 887 +++++++++++------- .../example/assets/api/theme_api.md | 2 + .../code/theme.ThemeOtherColorExample.txt | 19 +- .../example/lib/base/example_route.dart | 15 + .../example/lib/base/example_widget.dart | 2 +- .../example/lib/documentation_theme_demo.dart | 302 ++++++ .../page/action_sheet/action_sheet_page.dart | 1 - .../example/lib/page/avatar/avatar_page.dart | 1 - .../lib/page/backtop/backtop_page.dart | 1 - .../example/lib/page/badge/badge_page.dart | 1 - .../example/lib/page/button/button_page.dart | 1 - .../lib/page/calendar/calendar_page.dart | 1 - .../lib/page/cascader/cascader_page.dart | 1 - .../example/lib/page/cell/cell_page.dart | 1 - .../lib/page/checkbox/checkbox_page.dart | 1 - .../lib/page/collapse/collapse_page.dart | 1 - .../date_time_picker_page.dart | 1 - .../example/lib/page/dialog/dialog_page.dart | 1 - .../example/lib/page/drawer/drawer_page.dart | 1 - .../dropdown_menu/dropdown_menu_page.dart | 1 - .../example/lib/page/empty/empty_page.dart | 1 - .../example/lib/page/fab/fab_page.dart | 1 - .../example/lib/page/footer/footer_page.dart | 1 - .../example/lib/page/form/form_page.dart | 1 - .../example/lib/page/image/image_page.dart | 1 - .../page/image_viewer/image_viewer_page.dart | 1 - .../lib/page/indexes/indexes_page.dart | 1 - .../example/lib/page/input/input_page.dart | 1 - .../lib/page/loading/loading_page.dart | 1 - .../lib/page/message/message_page.dart | 1 - .../example/lib/page/navbar/navbar_page.dart | 1 - .../lib/page/notice_bar/notice_bar_page.dart | 1 - .../example/lib/page/picker/picker_page.dart | 1 - .../lib/page/popover/popover_page.dart | 1 - .../example/lib/page/popup/popup_page.dart | 1 - .../lib/page/progress/progress_page.dart | 1 - .../example/lib/page/radio/radio_page.dart | 1 - .../example/lib/page/rate/rate_page.dart | 1 - .../example/lib/page/result/result_page.dart | 1 - .../lib/page/search_bar/search_bar_page.dart | 1 - .../lib/page/sidebar/sidebar_page.dart | 1 - .../example/lib/page/slider/slider_page.dart | 1 - .../lib/page/stepper/stepper_page.dart | 1 - .../example/lib/page/steps/steps_page.dart | 1 - .../lib/page/swipe_cell/swipe_cell_page.dart | 1 - .../example/lib/page/swiper/swiper_page.dart | 1 - .../example/lib/page/switch/switch_page.dart | 1 - .../lib/page/tab_bar/tab_bar_page.dart | 1 - .../example/lib/page/table/table_page.dart | 1 - .../example/lib/page/tag/tag_page.dart | 1 - .../lib/page/textarea/textarea_page.dart | 1 - .../page/theme/theme_other_color_example.dart | 19 +- .../page/time_counter/time_counter_page.dart | 1 - .../page/tree_select/tree_select_page.dart | 1 - .../action_sheet/action_sheet_page_test.dart | 6 +- .../test/backtop/backtop_demo_test.dart | 2 +- .../example/test/badge/badge_page_test.dart | 2 +- .../test/calendar/calendar_demo_test.dart | 6 +- .../example/test/cell/cell_page_test.dart | 6 +- .../test/collapse/collapse_demo_test.dart | 15 +- .../example/test/dialog/dialog_page_test.dart | 6 +- .../example/test/drawer/drawer_demo_test.dart | 5 +- .../dropdown_menu_page_test.dart | 6 +- .../example/test/image/image_demo_test.dart | 5 +- .../test/notice_bar/notice_bar_page_test.dart | 7 +- .../example/test/popup/popup_demo_test.dart | 6 +- .../test/progress/progress_demo_test.dart | 2 +- .../example/test/result/result_demo_test.dart | 8 +- .../example/test/search/search_page_test.dart | 12 +- .../example/test/switch/switch_page_test.dart | 9 +- .../test/textarea/textarea_page_test.dart | 5 +- .../example/test/theme/theme_demo_test.dart | 270 ++++++ .../time_counter/time_counter_page_test.dart | 6 +- .../example/test/widget_test.dart | 25 +- tdesign-component/lib/src/theme/t_theme.dart | 37 +- .../test/components/theme/t_theme_test.dart | 25 + tdesign-site/site/docs/custom-theme.md | 19 +- .../site/docs/migration-0.2.7-to-1.0.md | 887 +++++++++++------- .../documentation.test.mjs | 25 +- tdesign-site/site/plugin-tdoc/component.vue | 16 +- 102 files changed, 2174 insertions(+), 821 deletions(-) create mode 100644 specs/064-migration-reading-flow/acceptance.md create mode 100644 specs/064-migration-reading-flow/plan.md create mode 100644 specs/064-migration-reading-flow/spec.md create mode 100644 specs/064-migration-reading-flow/tasks.md create mode 100644 specs/065-demo-debug-test-modules/acceptance.md create mode 100644 specs/065-demo-debug-test-modules/plan.md create mode 100644 specs/065-demo-debug-test-modules/spec.md create mode 100644 specs/065-demo-debug-test-modules/tasks.md create mode 100644 specs/066-theme-neutral-palette/acceptance.md create mode 100644 specs/066-theme-neutral-palette/plan.md create mode 100644 specs/066-theme-neutral-palette/spec.md create mode 100644 specs/066-theme-neutral-palette/tasks.md create mode 100644 specs/067-custom-theme-live-examples/acceptance.md create mode 100644 specs/067-custom-theme-live-examples/plan.md create mode 100644 specs/067-custom-theme-live-examples/spec.md create mode 100644 specs/067-custom-theme-live-examples/tasks.md create mode 100644 specs/068-custom-theme-dark-mode/acceptance.md create mode 100644 specs/068-custom-theme-dark-mode/delivery-validation.json create mode 100644 specs/068-custom-theme-dark-mode/plan.md create mode 100644 specs/068-custom-theme-dark-mode/spec.md create mode 100644 specs/068-custom-theme-dark-mode/tasks.md create mode 100644 tdesign-component/example/lib/documentation_theme_demo.dart diff --git a/scripts/documentation.mjs b/scripts/documentation.mjs index fb8995a4e0..3337ad6b9a 100644 --- a/scripts/documentation.mjs +++ b/scripts/documentation.mjs @@ -14,8 +14,11 @@ function guideRoute(slug) { } export function guideLinks(content, { absolute = false } = {}) { - return content.replace(/\]\(\.\/([a-z0-9.-]+)\.md(#[^)]*)?\)/g, (_, slug, fragment = '') => - `](${absolute ? site : '/flutter/'}${guideRoute(slug)}${fragment})`); + const local = content.replace(/\]\(\.\/([a-z0-9.-]+)\.md(#[^)]*)?\)/g, (_, slug, fragment = '') => + `](/flutter/${guideRoute(slug)}${fragment})`); + // Keep navigation inside the local preview; package readers need full URLs. + return local.replace(/\]\((?:https:\/\/tdesign\.tencent\.com)?\/flutter\/([^)]*)\)/g, + (_, target) => `](${absolute ? site : '/flutter/'}${target})`); } // Package readers cannot resolve repository-only relative paths. diff --git a/specs/064-migration-reading-flow/acceptance.md b/specs/064-migration-reading-flow/acceptance.md new file mode 100644 index 0000000000..a3743bd120 --- /dev/null +++ b/specs/064-migration-reading-flow/acceptance.md @@ -0,0 +1,23 @@ +# 本地评审验收 + +本轮按用户要求仅在本地修改,没有暂存、提交、推送或更新远端PR。 + +- 总览前置,按公共配置、调用参数/状态、交互流程说明阅读范围;6组组件默认收起。 +- 8个主要迁移章节增加旧用法处理、1.0注意事项和完成检查,并提供导航与返回链接。9组原可运行代码片段内容逐字节保留。 +- 检查57个组件入口唯一、383项附录完整、7个折叠区闭合及全部显式迁移锚点存在。 +- 本地组件API链接不再跳转线上;包内副本仍转换为完整线上链接。新增双向链接转换回归。 +- 文档/示例/API测试23项、站点主题测试6项、57项组件契约及360示例映射通过;生产构建通过。同步幂等,--check和差异空白检查通过。 +- 初次预览检查发现旧进程仍返回缓存的编译页。已停止本次持有的19002文档服务,使用--force重新启动;重新请求?import模块并解析docMd,确认新总览、完成检查、7个details及实际渲染的本地API链接均存在。 +- 文档预览http://localhost:19002/flutter/migration-1-0,19003组件服务保留运行,19002的示例代理HTTP200。 + +生产组件、运行测试源码、CI、版本及CHANGELOG没有修改;复用原9组代码,没有再次运行Flutter功能或Golden。不声称完整覆盖57个组件的全部旧业务用法或已完成浏览器像素/窄屏验收。历史构建中的输出目录、上游注解、二维码与大体积chunk警告保留。 + +## 导航范围调整 + +按用户要求移除自定义搜索组件、正文解析器、对应测试及页面接入。保留普通文档分类目录与组件到迁移章节的链接,不增加搜索维护成本。 + +移除后重新通过站点主题6项、文档/示例23项测试及生产构建;57项组件契约通过,同步检查无过期副本。重启19002预览并检查实际编译页面,确认不再包含搜索元信息,7个折叠区与本地组件链接保留,示例代理HTTP200。 + +## 交付状态更新 + +用户已授权将本地改动提交、推送到PR1163,并以推送后的提交进行全局Review;上文“仅本地/不推送”为此前实施阶段的历史记录,不再是本次交付限制。合并放行以当前提交的CI、Review及适用视觉验收为准。 diff --git a/specs/064-migration-reading-flow/plan.md b/specs/064-migration-reading-flow/plan.md new file mode 100644 index 0000000000..42cd3ba7d1 --- /dev/null +++ b/specs/064-migration-reading-flow/plan.md @@ -0,0 +1,7 @@ +# 本地实施 + +1. 总览前置,新增按改动性质选择阅读范围的说明。 +2. 组件导航按6组收起,需要时展开;可用详情入口直达具体改法。 +3. 为原有9组主要迁移说明补齐旧/新职责对照与实际完成标准,不新写未经验证的Dart示例。 +4. 统一站内/包内链接转换,保留原访问地址和锚点。 +5. 检查57入口、383附录、9组代码片段完整性、同步幂等、站点构建与预览;不提交推送。 diff --git a/specs/064-migration-reading-flow/spec.md b/specs/064-migration-reading-flow/spec.md new file mode 100644 index 0000000000..c671b601bd --- /dev/null +++ b/specs/064-migration-reading-flow/spec.md @@ -0,0 +1,21 @@ +# 迁移指南分层阅读 + +状态:实现完成,按用户最新授权提交至PR1163,待合并前Review。 + +## 目标 + +让用户先定位升级范围,再按需阅读具体改法;复用现有已验证迁移代码,避免只优化排版而仍无法执行。 + +## 契约 + +总览先于详细代码;57个组件入口按现有6组保留,采用可展开分组。已覆盖的主要场景提供明确的旧用法处理、新用法、行为风险与迁移检查。没有逐项完整验证的组件不标记为只需改名或已完成迁移。383项旧类型对照仍作为折叠附录。 + +站点内的组件链接使用本地路由;包内副本使用可独立访问的线上链接。只维护一份迁移正文,复用原有代码片段生成机制。 + +## 非目标 + +本Spec仅涉及迁移文档与链接适配,不修改组件API、运行代码、版本、CI或CHANGELOG;不宣称57个组件完整详情、所有旧业务场景或真机视觉已验证。 + +## 组件定位 + +使用普通文档目录、6组组件分类和已有迁移章节链接帮助定位;不增加自定义搜索功能或第二份组件清单。 diff --git a/specs/064-migration-reading-flow/tasks.md b/specs/064-migration-reading-flow/tasks.md new file mode 100644 index 0000000000..3894b1caba --- /dev/null +++ b/specs/064-migration-reading-flow/tasks.md @@ -0,0 +1,8 @@ +# 本地任务 + +- [x] 总览、分组导航和详情层重排。 +- [x] 主要组件职责对照与迁移检查。 +- [x] 本地与发布包链接适配。 +- [x] 完整性、站点与预览检查。 + +- [x] 移除自定义搜索功能,保留普通文档分类目录与迁移章节链接。 diff --git a/specs/065-demo-debug-test-modules/acceptance.md b/specs/065-demo-debug-test-modules/acceptance.md new file mode 100644 index 0000000000..5b877cf4a3 --- /dev/null +++ b/specs/065-demo-debug-test-modules/acceptance.md @@ -0,0 +1,12 @@ +# 本地验收 + +- 已移除47个页面的 showTestModule:false,ExamplePage默认true;共享kDebugMode门禁保留,Profile/Release隐藏。 +- Flutter 3.32.0:19个受影响测试文件中98项功能测试通过,排除golden标签与“视觉快照”用例。共享控件、全部页面及test目录分析无问题;git diff --check通过。 +- 更新原有隐藏断言为Debug默认展示;Switch允许调试区块带来的滚动;Search测试通过TSearchBar定位子TextField(当前TextField.decoration为空,原定位过时),保留搜索结果交互验证。 +- Flutter19003预览已热重启,页面需刷新。本轮没有构建Release产物,Release结论基于保留的kDebugMode构建常量门禁;未重新运行高版本Flutter或浏览器像素验收。 +- 首轮误包含Cell文件中3项视觉快照,在macOS出现2.21%~2.65%差异。没有更新Golden基线;后续仅运行功能回归,Linux视觉验收仍未执行,不宣称视觉检查通过。 +- 仅本地修改,未暂存、提交、推送或更新远端PR;未修改CI、版本、CHANGELOG。 + +## 交付状态更新 + +用户已授权将本地改动提交、推送到PR1163,并以推送后的提交进行全局Review;上文“仅本地/不推送”为此前实施阶段的历史记录,不再是本次交付限制。合并放行以当前提交的CI、Review及适用视觉验收为准。 diff --git a/specs/065-demo-debug-test-modules/plan.md b/specs/065-demo-debug-test-modules/plan.md new file mode 100644 index 0000000000..5c366db6cc --- /dev/null +++ b/specs/065-demo-debug-test-modules/plan.md @@ -0,0 +1,3 @@ +# 实施方案 + +恢复共享默认值为 true,保留 kDebugMode 门禁;删除页面 false 覆盖。更新受影响功能测试并运行,检查共享控件静态分析。不得更新 Golden 基线,不改 CI、版本和 CHANGELOG。仅本地修改。 diff --git a/specs/065-demo-debug-test-modules/spec.md b/specs/065-demo-debug-test-modules/spec.md new file mode 100644 index 0000000000..f103c30228 --- /dev/null +++ b/specs/065-demo-debug-test-modules/spec.md @@ -0,0 +1,3 @@ +# Demo 调试验证区块统一展示 + +按用户确认,所有 Demo 在 Debug 默认显示内部单元测试区块,Profile/Release 统一不显示。移除页面层显式关闭设置,保留 ExamplePage 显式开关供测试或内部调用使用。此决定取代历史组件 Spec 中关闭调试区块的要求,不改变组件公共 API 和正式示例内容。 diff --git a/specs/065-demo-debug-test-modules/tasks.md b/specs/065-demo-debug-test-modules/tasks.md new file mode 100644 index 0000000000..1b8e4abfe1 --- /dev/null +++ b/specs/065-demo-debug-test-modules/tasks.md @@ -0,0 +1,5 @@ +# 任务 + +- [x] 统一共享默认值与页面设置。 +- [x] 调整默认展示和页面契约测试。 +- [x] 运行相关测试、分析与预览刷新。 diff --git a/specs/066-theme-neutral-palette/acceptance.md b/specs/066-theme-neutral-palette/acceptance.md new file mode 100644 index 0000000000..11d2484377 --- /dev/null +++ b/specs/066-theme-neutral-palette/acceptance.md @@ -0,0 +1,12 @@ +# 本地验收 + +- 根因:TMap.entries/keys仅枚举本地值,按键访问才解析引用与factory默认值。Web消息合并保留这种增量结构。仅覆盖grayColor1的主题原来只能列出一项灰阶和额外bgColorContainer。 +- 修复:灰阶键来自默认与当前主题的并集,值从当前主题按键解析;生成theme.ThemeOtherColorExample.txt,无手改产物。 +- Flutter3.32.0:Theme和Web主题消息19项非Golden测试通过;新增回归确认当前映射确实只有一个显式灰阶,浅深色均列出14项,当前覆盖值及继承值正确,红蓝主题切换后更新。 +- 修改相关目录静态分析无问题;生成片段--check通过,git diff --check通过。不改变组件API或TMap枚举语义。 +- 原预览会话热重启被自动权限审核拒绝,未请求提权;另启正常本地预览,Flutter19005和站点19004均启动。Theme路由、示例代理、Flutter main.dart.js均HTTP200。未执行浏览器像素验收、Linux Golden、高版本或Release构建。 +- 仅本地修改,未暂存/提交/推送,未修改CI/版本/CHANGELOG。 + +## 交付状态更新 + +用户已授权将本地改动提交、推送到PR1163,并以推送后的提交进行全局Review;上文“仅本地/不推送”为此前实施阶段的历史记录,不再是本次交付限制。合并放行以当前提交的CI、Review及适用视觉验收为准。 diff --git a/specs/066-theme-neutral-palette/plan.md b/specs/066-theme-neutral-palette/plan.md new file mode 100644 index 0000000000..592d8e9b07 --- /dev/null +++ b/specs/066-theme-neutral-palette/plan.md @@ -0,0 +1,3 @@ +# 方案 + +合并默认主题和当前主题的灰阶键,以当前colorMap[key]解析最终颜色;沿用原展示结构和对比度。增加真实Web主题消息的增量回归,覆盖浅深色和重建。源代码重新生成片段。功能测试排除Golden,不更新视觉基线。本地修改不推送。 diff --git a/specs/066-theme-neutral-palette/spec.md b/specs/066-theme-neutral-palette/spec.md new file mode 100644 index 0000000000..3a31539505 --- /dev/null +++ b/specs/066-theme-neutral-palette/spec.md @@ -0,0 +1,3 @@ +# 中性色板完整展示 + +当前Demo遍历colorMap.entries只得到本地显式Token,Web增量主题的默认回退色不会出现。中性色板应展示默认14级灰阶及当前显式新增的grayColor项,每项通过当前主题按键解析,保留bgColorContainer。切换主题后更新。只改Demo,不改TMap契约或组件公共API。 diff --git a/specs/066-theme-neutral-palette/tasks.md b/specs/066-theme-neutral-palette/tasks.md new file mode 100644 index 0000000000..36fe51be15 --- /dev/null +++ b/specs/066-theme-neutral-palette/tasks.md @@ -0,0 +1,5 @@ +# 任务 + +- [x] 修复继承灰阶枚举。 +- [x] 增量Web主题回归。 +- [x] 生成片段、功能测试、分析和预览。 diff --git a/specs/067-custom-theme-live-examples/acceptance.md b/specs/067-custom-theme-live-examples/acceptance.md new file mode 100644 index 0000000000..64a8b5110d --- /dev/null +++ b/specs/067-custom-theme-live-examples/acceptance.md @@ -0,0 +1,14 @@ +# 本地验收 + +- custom-theme指南以flutterExample:custom-theme接入plugin-tdoc/component.vue的共享组件预览结构:td-doc-main + DEMO正文 + td-doc-phone + 同一iframe样式及说明。未复制手机容器CSS;普通组件标签与API分支保留。 +- 已移除正文三个独立iframe,保留三个场景独立预览链接。统一custom-theme路由使用ExamplePage分组展示JSON配置、局部样式、明暗模式,复用原DocumentationThemeDemo及文档函数。 +- Flutter3.32.0:Theme文件11项非Golden测试通过,包含原有主题行为、三个独立路由、统一路由页面结构、三个场景同时展示、局部样式隔离与明暗/系统切换;相关源码与测试静态分析无问题。 +- npm run site --prefix tdesign-site:主题6项、文档24项通过,57组件/360示例映射通过,生产构建通过。保留原有构建警告。 +- 文档同步--check和git diff --check通过。 +- Flutter19005热重启、站点19004强制重启完成。解析custom-theme.md?import确认flutterExample指向统一路由、保持非组件指南且正文无iframe;编译的共享Vue模块保留手机与主容器。指南、Flutter代理、main.dart.js均HTTP200。 +- 预览:http://localhost:19004/flutter/custom-theme。未执行实际浏览器像素/窄屏人工验收、高版本Flutter或Release构建;未运行/更新Golden。 +- 仅本地修改,未暂存、提交、推送或更新PR;不改CI、版本、CHANGELOG。 + +## 交付状态更新 + +用户已授权将本地改动提交、推送到PR1163,并以推送后的提交进行全局Review;上文“仅本地/不推送”为此前实施阶段的历史记录,不再是本次交付限制。合并放行以当前提交的CI、Review及适用视觉验收为准。 diff --git a/specs/067-custom-theme-live-examples/plan.md b/specs/067-custom-theme-live-examples/plan.md new file mode 100644 index 0000000000..64f8d12803 --- /dev/null +++ b/specs/067-custom-theme-live-examples/plan.md @@ -0,0 +1,7 @@ +# 实施方案 + +指南通过flutterExample元信息选择Flutter路由,plugin-tdoc/component.vue复用既有组件预览分支。普通组件仍展示原有标签和API;指南使用docMd正文及共享手机容器。 + +统一Flutter指南页面使用ExamplePage、ExampleModule、ExampleItem。按Spec068修订,统一入口只使用一个MaterialApp,三个场景内容继承同一主题;独立场景路由保留应用壳,均复用指南配置与局部样式函数。 + +回归加入已有Theme测试文件,验证统一路由、三个场景、局部样式隔离与明暗切换;站点检查指南元信息和独立链接。构建后检查实际编译页与预览代理。不新建CI入口,不运行或更新Golden。 diff --git a/specs/067-custom-theme-live-examples/spec.md b/specs/067-custom-theme-live-examples/spec.md new file mode 100644 index 0000000000..978e12c773 --- /dev/null +++ b/specs/067-custom-theme-live-examples/spec.md @@ -0,0 +1,9 @@ +# 自定义主题指南运行示例 + +custom-theme指南的JSON配置、局部样式与明暗模式代码必须有对应Flutter Web效果,不能用Theme色板页替代配置演示。运行示例复用documentation_examples.dart内生成文档的函数,不维护第二份配置。 + +## 展示契约 + +站点复用组件页的td-doc-main、DEMO正文容器、td-doc-phone及iframe样式:左文档右手机,正文不另放独立iframe。指南保持现有目录与标题,不增加API/指南标签。右侧custom-theme路由以ExamplePage分组展示JSON配置、组件局部样式、明暗模式,与其他Demo保持相同页面结构。各章节提供独立场景链接。 + +展示当前品牌色、局部Tag对照及浅/深/系统模式切换。演示直接调用文档函数;固定配置与官网主题工具相互独立。不改变组件公共API、CI、版本与CHANGELOG,仅本地修改,不推送。 diff --git a/specs/067-custom-theme-live-examples/tasks.md b/specs/067-custom-theme-live-examples/tasks.md new file mode 100644 index 0000000000..7559096859 --- /dev/null +++ b/specs/067-custom-theme-live-examples/tasks.md @@ -0,0 +1,6 @@ +# 任务 + +- [x] 实现复用指南函数的场景和统一ExamplePage路由。 +- [x] 站点指南复用组件预览结构,移除正文独立iframe。 +- [x] 验证文档代码对应、实际交互、路由与站点构建。 +- [x] 刷新本地预览,记录验证范围。 diff --git a/specs/068-custom-theme-dark-mode/acceptance.md b/specs/068-custom-theme-dark-mode/acceptance.md new file mode 100644 index 0000000000..72ce384671 --- /dev/null +++ b/specs/068-custom-theme-dark-mode/acceptance.md @@ -0,0 +1,21 @@ +# 本地验收 + +- 根因1:三个DocumentationThemeDemo各自使用默认light的MaterialApp,模式仅更新一个场景。已改为统一入口只有一个MaterialApp,ExamplePage及三个无应用壳场景共享同一状态。单独场景仍保留应用壳。 +- 根因2:fromJson私有解析链的_emptyData始终绑定默认浅色factory,稀疏深色块只有brandColor变化。已将深色解析的color/ref/font/fontMetric/radius/fontFamily/shadow/insetShadow/spacer回退选择为默认深色;公开签名未变,原无暗色块回退和显式ref优先规则保留。此为错误回退的修复,存在稀疏暗色块的运行外观会改变,不是API移除或重命名。 +- 文档说明同一tokens包含浅深两套配置,light/dark构建分别选择;示例显示当前模式、当前外观及ocean/oceanDark名称,初始跟随外层外观,显式system跟随系统。全页背景、三个场景容器与文字一起切换。 +- Flutter3.32.0与隔离副本3.47.7:各51项组件主题测试+23项Demo/Web主题消息非Golden测试通过;两版本相关源码和测试分析均无问题。回归包含背景与文字实际Token值、不同模式映射、原有无暗色块行为、全部场景同步更新和局部样式隔离。 +- 高版本首次运行遇到用户配置目录不可写及旧副本package_config失效;用临时XDG_CONFIG_HOME及隔离副本离线pub get修复环境后重新运行通过,未改主检出依赖。 +- Theme API由正式生成器单独重新生成,差异仅增加fromJson回退说明。同步检查、差异空白检查通过。 +- 站点主题6项、文档24项与57组件/360示例映射通过,生产构建通过;保留既有构建警告。 +- Flutter19005热重启及站点19004强制重启完成。实际?import指南包含新说明及共享custom-theme路由,Flutter代理main.dart.js为HTTP200。预览:http://localhost:19004/flutter/custom-theme。 +- 未执行实际浏览器像素/窄屏人工验收、Linux Golden或Release构建,不更新Golden。仅本地修改,未暂存、提交、推送或更新PR;未修改CI、版本或CHANGELOG。 + +## 部分配置数值展示 + +JSON场景新增四项浅深配置对照:brandColor、bgColorPage、bgColorContainer、textColorPrimary。值从当前Token的light/dark关联直接读取,未另存颜色值;标记当前列及JSON覆盖/默认继承,提供色块和保留alpha的十六进制值说明。 + +Flutter3.32.0与3.47.7各13项Theme非Golden测试通过,新增回归核对八个实际值、两套配置来源、模式标记、实际背景/文字一致性及320dp无溢出。相关源码和测试3.32静态分析无问题;站点30项相关测试与生产构建通过,差异空白检查通过。Flutter19005热重启、站点19004重启及实际编译指南检查完成。未执行浏览器像素人工检查。仅本地修改,未提交推送。 + +## 交付状态更新 + +用户已授权将本地改动提交、推送到PR1163,并以推送后的提交进行全局Review;上文“仅本地/不推送”为此前实施阶段的历史记录,不再是本次交付限制。合并放行以当前提交的CI、Review及适用视觉验收为准。 diff --git a/specs/068-custom-theme-dark-mode/delivery-validation.json b/specs/068-custom-theme-dark-mode/delivery-validation.json new file mode 100644 index 0000000000..ab3ef5c4c8 --- /dev/null +++ b/specs/068-custom-theme-dark-mode/delivery-validation.json @@ -0,0 +1,100 @@ +{ + "base_local_head": "5c1954feb23816d0d0eef646e30e097cdfafa38d", + "flutter_versions": [ + "3.32.0", + "3.47.7" + ], + "source_sha256": { + "tdesign-component/lib/src/theme/t_theme.dart": "e02a07a75b5b6aa21f29e99bb495520cc3bdccc5b6d8a1e000ac9520bbd1ab86", + "tdesign-component/example/lib/documentation_theme_demo.dart": "04530148c7a66005c294aa0ef6800fcc74f3cc02d7b6e566759f2b24a5625e68", + "tdesign-component/example/test/theme/theme_demo_test.dart": "d855fe7b4e44cc189630a0bcc965fff4d6d384a654d8d8e54a1e05d19b8d4a92", + "tdesign-component/test/components/theme/t_theme_test.dart": "3c8a5a64c489d4f5d1b800a95f2717360b7de01880d563629363176fd097d79b" + }, + "checks": [ + { + "log_name": "tdesign-pr-final-component-analyze-low.log", + "sha256": "f2721a1569bd781da4f4afb0324a2b684d3cad47d165aff96b5fbaee4a576d75", + "tail": [ + "Analyzing tdesign-component... ", + "No issues found! (ran in 26.2s)" + ] + }, + { + "log_name": "tdesign-pr-final-component-analyze-high.log", + "sha256": "38607600b0f1598ba0067bad4e6f177b93231bb0bd5c706606c3677cafc31308", + "tail": [ + "Analyzing tdesign-component... ", + "No issues found! (ran in 25.5s)" + ] + }, + { + "log_name": "tdesign-pr-final-example-analyze-low.log", + "sha256": "c70d999138c4862537f0c4cb57be4bd153cdded682797f9e7cac550abf748176", + "tail": [ + "Analyzing example... ", + "No issues found! (ran in 16.6s)" + ] + }, + { + "log_name": "tdesign-pr-final-example-analyze-high.log", + "sha256": "e73b8007fc0d475702924aae2c84cd09382c9793967feb25f0dba48c59a26ae9", + "tail": [ + "Analyzing example... ", + "No issues found! (ran in 16.4s)" + ] + }, + { + "log_name": "tdesign-pr-final-codegen.log", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "tail": [] + }, + { + "log_name": "tdesign-theme-values-tests.log", + "sha256": "9a29a34b14d3ce66f9ca4ebf854013dffe928430b85eb3ff66312f0154b4adab", + "tail": [ + "00:05 +13: guide compares actual light and dark token values at phone width ", + "00:05 +13: (tearDownAll) ", + "00:05 +13: All tests passed! " + ] + }, + { + "log_name": "tdesign-theme-values-tests-high.log", + "sha256": "96ada29ea03cf42e37f398967382530bd55188c85cc38d9b8dfa2ed1d5cddaec", + "tail": [ + "00:02 +12: guide compares actual light and dark token values at phone width", + "00:02 +13: (tearDownAll)", + "00:02 +13: All tests passed!" + ] + }, + { + "log_name": "tdesign-dark-token-tests.log", + "sha256": "351ec03fdd1732695f5fcbb1f8bf2e60540a2fbd7ea366dfacc23267c853e042", + "tail": [ + "00:08 +50: /Users/rs/.codex/.chatgpt-projects/g-p-6ad03a864eec81918724e40af37fbf26/tdesign-flutter/tdesign-component/test/theme/theme_test.dart: ... 无构造器 themeData 子树 mergeExtension 覆盖 TLoading 样式 ", + "00:08 +51: /Users/rs/.codex/.chatgpt-projects/g-p-6ad03a864eec81918724e40af37fbf26/tdesign-flutter/tdesign-component/test/theme/theme_test.dart: ... 无构造器 themeData 子树 mergeExtension 覆盖 TLoading 样式 ", + "00:08 +51: All tests passed! " + ] + }, + { + "log_name": "tdesign-dark-token-tests-high-final.log", + "sha256": "27f0fc193f721ff66d89b5cdadf53a04ed7ad84feba1c6bf1ceeac900ac52987", + "tail": [ + "00:01 +49: /private/tmp/tdesign-stable-docs-high/tdesign-component/test/theme/theme_test.dart: TLoading 无构造器 themeData TLoading 从 Theme Extension 读取样式", + "00:01 +50: /private/tmp/tdesign-stable-docs-high/tdesign-component/test/theme/theme_test.dart: TLoading 无构造器 themeData 子树 mergeExtension 覆盖 TLoading 样式", + "00:01 +51: All tests passed!" + ] + }, + { + "log_name": "tdesign-theme-values-site.log", + "sha256": "fc8301ce0137099f4cbb2691e5d022c6d50f382f7710095e90f7ef8de763b2e6", + "tail": [ + "- Use build.rollupOptions.output.manualChunks to improve chunking: https://rollupjs.org/configuration-options/#output-manualchunks", + "- Adjust chunk size limit for this warning via build.chunkSizeWarningLimit.", + "✓ built in 3.92s" + ] + } + ], + "limitations": [ + "Linux Golden and new CI results still required; local functional tests are not visual approval." + ] +} diff --git a/specs/068-custom-theme-dark-mode/plan.md b/specs/068-custom-theme-dark-mode/plan.md new file mode 100644 index 0000000000..762d4445e5 --- /dev/null +++ b/specs/068-custom-theme-dark-mode/plan.md @@ -0,0 +1,3 @@ +# 实施方案 + +给私有解析链增加深色默认映射选择,不改变公开签名;同步fromJson注释。将指南拆为共享应用壳和无MaterialApp内容,独立场景保留应用壳。模式按钮控制整个指南,显式显示当前模式/外观及主题名称。更新指南解释同一tokens与模式范围。回归覆盖稀疏暗色背景/文字/引用和整页各背景切换,保留无暗色块回退。仅本地修改,不改CI、版本或CHANGELOG;不更新Golden。 diff --git a/specs/068-custom-theme-dark-mode/spec.md b/specs/068-custom-theme-dark-mode/spec.md new file mode 100644 index 0000000000..9b07cc9938 --- /dev/null +++ b/specs/068-custom-theme-dark-mode/spec.md @@ -0,0 +1,7 @@ +# 自定义主题深色完整性 + +修复稀疏JSON深色配置错误继承浅色默认Token,以及指南每个场景独立默认浅色导致混合背景的问题。存在深色块时缺失值按默认深色主题解析;没有深色块仍保持已有buildDark回退行为。显式颜色与ref优先,深色块仍继承浅色显式ref契约。指南使用一个MaterialApp共享明暗状态,初始跟随外层预览外观;手动模式覆盖外层,system跟随系统。标题、背景、文字及三个场景同步切换。局部标签样式只影响对应子树。 + +## 配置数值对照 + +Demo展示浅色ocean与深色oceanDark的brandColor、bgColorPage、bgColorContainer、textColorPrimary,直接从本次运行配置读取。标注品牌色为JSON覆盖,其余为默认继承;颜色保留透明度,使用#RRGGBB或#AARRGGBB格式并给出说明。当前生效模式明确标识,320dp宽度不溢出。不罗列全量Token。 diff --git a/specs/068-custom-theme-dark-mode/tasks.md b/specs/068-custom-theme-dark-mode/tasks.md new file mode 100644 index 0000000000..6bb57b61dd --- /dev/null +++ b/specs/068-custom-theme-dark-mode/tasks.md @@ -0,0 +1,5 @@ +# 任务 + +- [x] 修复JSON深色默认回退及测试。 +- [x] 指南统一主题状态与模式语义。 +- [x] 功能测试、分析、文档同步、预览。 diff --git a/tdesign-component/MIGRATION.md b/tdesign-component/MIGRATION.md index b5b088dae8..5ae16ce948 100644 --- a/tdesign-component/MIGRATION.md +++ b/tdesign-component/MIGRATION.md @@ -23,279 +23,37 @@ import 'package:tdesign_flutter/tdesign_flutter.dart'; 仍可显式导入 Material;业务另有同名类型时用 import 前缀或 show/hide 解决。不要从 `package:tdesign_flutter/src/...` 导入旧 State、Painter 或内部适配类型。 -## 主题、文字与样式 +## 先判断需要做哪些工作 -旧 `TDTheme.of(context)` 对应 `context.tTheme`;全局数据为 `TThemeData`,应用使用 `TThemeBuilder.light/dark`。让组件跟随局部主题时读取 `context.tTheme`,不要用固定默认值绕开子树 Theme。 +**先处理公共配置。** 升级依赖和SDK后,先迁移导入、主题和文字,再处理实际使用的组件。 - -```dart -Widget migratedApp(Widget home) { - final tokens = TThemeData.defaultData(); - return MaterialApp( - theme: TThemeBuilder.light(tokens), - darkTheme: TThemeBuilder.dark(tokens), - home: home, - ); -} +**参数或状态变化,需要改写调用处。** 按钮内容与回调、复选框受控值和输入控制器不能只替换类名。先看具体改法,再核对组件API。 -Widget migratedTextTheme(BuildContext context, Widget child) { - return Theme( - data: Theme.of( - context, - ).mergeExtension(const TTextThemeData(textStyle: TextStyle(fontSize: 18))), - child: child, - ); -} -``` - +**交互职责变化,需要重组业务流程。** Form、Picker/日期确认、浮层、Upload、页签和轮播,需要检查状态、提交/取消及资源释放,不能仅以编译通过作为完成标准。 -- TD 内置外观按全局 Token、TD 组件 Theme、受支持的显式实例配置解析。Material `textTheme`、按钮 Theme、`IconTheme`、visualDensity 等不再隐式改变 TD 内置视觉;原生 Material 和调用方自定义内容仍可使用自己的主题。 -- 使用 `mergeExtension` 合并子树组件主题,避免用 `copyWith(extensions: [...])` 意外丢弃其他 ThemeExtension。 -- `TText` 的单实例文字使用 `style: TextStyle(...)`;`TTextSpan` 也用 `style`。不要继续传旧 `fontWeight/fontFamily/textColor/isTextThrough/lineThroughColor`,删除线使用 `TextDecoration.lineThrough`。 -- `textScaleFactor` 改为 `textScaler`;未传时继承系统文字缩放。旧 `TDTextPaddingConfig` 改为父级 Padding/Align/Center,段落文字不要按单行居中规则强行裁切。 -- 在线字体先由业务调用 `TFontLoader.load` 并管理加载状态,之后通过文字 `style.fontFamily` 或 TD 文字 Theme 配置,不再在文字 build 时请求字体 URL。 -- 自定义主题 JSON 需要核对字段与最终默认值;旧按钮状态样式、组件形态、交互时长等不能一律塞进 Theme。具体视觉默认值与实例的状态/规格选择分开。 +尚未逐项确认的业务用法应继续核对API和真实操作,不归为“只改名即可”。下面索引用于查找,具体改法解释主要场景,完整API不在本文重复列出。 -## 按钮与禁用语义 +### 直接查看主要改法 -0.2.7:`TDButton(text: '保存', type: TDButtonType.fill, theme: TDButtonTheme.primary, onTap: save)`。 - -1.0 的对应写法: - - -```dart -Widget migratedButton(VoidCallback? onPressed) { - return TButton( - variant: TButtonVariant.fill, - colorPreset: TButtonColorPreset.primary, - onPressed: onPressed, - child: const Text('保存'), - ); -} -``` - - -`onPressed == null` 表示禁用;长按也要求按钮处于可点击状态。不要保留旧 `disabled: false` 却漏传回调。`icon` 使用 Widget,IconData 包在 `Icon(...)` 或 `TIcon(...)` 中。普通/按压/禁用的具体样式合并到 `ButtonStyle` 的状态属性;尺寸布局按 size、显式样式或外部约束表达,不搬旧 style/activeStyle/disableStyle 三套对象。 - -自定义反色主题时,默认配色的 `TButtonVariant.ghost` 文字与描边读取 `textColorAnti`,禁用时读取 `fontWhite4`;不要仅修改原始白色层级 `fontWhite1` 来控制这类按钮。单个按钮的前景、边框和交互状态仍通过 `ButtonStyle` 覆盖。 - -## 受控值、输入与选择 - -对于 `TCheckbox`、`TRadioGroup`、`TSwitch`、`TStepper`、Picker、Calendar 等,父级应接受回调并重建传回新值。只记录回调而不更新 value,会导致保持旧值或滚动结束回退;空回调的禁用规则以各组件 API 为准。 - - -```dart -Widget migratedCheckbox(bool value, ValueChanged? onChanged) { - return TCheckbox(value: value, onChanged: onChanged, title: '同意条款'); -} - -Widget migratedRadio(String value, ValueChanged? onChanged) { - return TRadioGroup.options( - value: value, - onChanged: onChanged, - options: const [ - TRadioOption(value: 'a', label: '方案 A'), - TRadioOption(value: 'b', label: '方案 B'), - ], - ); -} -``` - - -`TRadio` 必须在同类型 `TRadioGroup` 下,不能把 groupValue/onChanged 重新分散到每个 radio。复选框单项 value 为 bool?(null 表示不确定态),组的 value/options 以当前泛型 API 为准,旧 id、controller、passThrough 等不能原样套入。 - -输入框的 `controller` 与 `initialValue` 互斥;`initialValue` 仅初始化内部值。需要外部更新、表单重置或保留选区时使用 `TextEditingController`,由创建方释放。单行用 `TInput`,多行用 `TTextarea`;不要把旧 TDInput 的 maxLines 参数当成完整多行迁移方案。重验空内容粘贴、中文组合输入、清空按钮、焦点与键盘遮挡。 - -## 表单改为字段树 - -旧 `items/rules/data` 配置改为 `TForm + TFormField + TFormItem`。字段持有业务 value/onChanged,validator 返回错误文案;`TFormController.validate()` 用于主动校验,`required: true` 执行必填校验,单独设置表单项必填标记不等于校验。 - - -```dart -Widget migratedForm({ - required TFormController form, - required TextEditingController text, - required String value, - required ValueChanged onChanged, -}) { - return TForm( - controller: form, - child: TFormField( - name: 'name', - value: value, - onChanged: onChanged, - required: true, - requiredMessage: '请输入姓名', - builder: (context, current, change, error) => TFormItem( - label: '姓名', - errorText: error, - child: TInput(controller: text, onChanged: change), - ), - ), - ); -} -``` - - -示例中的 text/form 由页面持有,value 由父级在 onChanged 中更新;页面销毁时释放自建 TextEditingController。业务执行 reset 时,同时更新字段值与自己的文本控制器;不要指望 initialValue 覆盖现有编辑状态。 - -## Picker、日期与浮层确认分离 - -`TDPicker/TDMultiPicker/TDMultiLinkedPicker` 改为 `TPicker` 和不可变 `TPickerColumns/TPickerLinked` 数据。面板回调只是候选值变化,不是业务确认。 - - -```dart -TPopupHandle migratedPicker({ - required BuildContext context, - required String initialValue, - required ValueChanged onConfirmed, -}) { - var draft = initialValue; - return TPickerPopup.show( - context, - child: StatefulBuilder( - builder: (context, setPanelState) => TPicker( - items: const TPickerColumns([ - [ - TPickerOption(label: '选项 A', value: 'a'), - TPickerOption(label: '选项 B', value: 'b'), - ], - ]), - value: [draft], - onChanged: (next) => setPanelState(() { - draft = next.values.single! as String; - }), - ), - ), - headerBuilder: (context, close) => TPopupHeader( - title: const Text('请选择'), - cancelButton: TButton(onPressed: close, child: const Text('取消')), - confirmButton: TButton( - onPressed: () { - onConfirmed(draft); - close(); - }, - child: const Text('确认'), - ), - ), - ); -} -``` - - -调用方在 `onConfirmed` 中更新业务保存值,并确保对应业务 State 仍 mounted;取消只关闭、不提交草稿。重新打开时用保存值创建新草稿。`TPickerPopup` 会为标准头部和滚轮预留高度;自定义通用 Popup 时也须提供合理内容约束。 - -`TDDatePicker + DatePickerModel` 改为 `TDateTimePicker + TDateTimePickerValue + DateTimePickerMode`。默认年月日,按需组合时间列;start/end 与 steps 用当前模型,onChanged 实时回写。`TDCalendar` 的 value 改为 `List`,single/multiple/range 由 variant 表达,组件不再同时负责业务弹窗确认或时间选择。 - - -```dart -Widget migratedCalendar( - List value, - ValueChanged>? onChanged, -) { - return SizedBox( - height: 400, - child: TCalendar( - value: value, - variant: TCalendarVariant.single, - minDate: DateTime(2026, 1, 1), - maxDate: DateTime(2026, 12, 31), - onChanged: onChanged, - ), - ); -} - -Widget migratedDateTime( - TDateTimePickerValue value, - ValueChanged? onChanged, -) { - return TDateTimePicker(value: value, onChanged: onChanged); -} -``` - - -**重新验证边界**:最小/最大日期的时分、跨天、闰日、区间端点、数据源变更、连续滚动与惯性。不要用整数时间戳或旧通知器替代新受控值。 - -## Popup、Dialog、Toast - -旧 `TDPopup*Panel/TDSlidePopupRoute` 组合改为 `TPopup.show(context, options: ...)`。按方向选择 `TPopupOptions.bottom/center/left/right/top` 与对应 Inset;从返回的 `TPopupHandle` 关闭/重开并读取本次 `result`。用正确 Theme/Navigator 子树的 context 打开;handle 重开不会自动重新解析已经合并的主题选项,需要新配置时重新创建。 - -`TConfirmDialog` 是单确认便捷组件;多操作使用 `TDialog.actions + TDialogAction`,输入弹窗组合 `TDialog + TInput`,不要寻找被删除的 TDInputDialog。 - - -```dart -Future migratedDialog(BuildContext context) { - return TDialog.show( - context, - dialog: const TConfirmDialog( - title: '操作确认', - content: '确认继续?', - buttonText: '继续', - ), - ); -} -``` - - -Toast 时长用 `Duration`;加载提示默认也会自动关闭。持续任务显式设置 `Duration.zero`,任务结束后按返回 ID 关闭。可见遮罩与背景点击/滚动拦截是独立配置,不要把半透明遮罩等同于不可穿透。 - - -```dart -String migratedLoading(BuildContext context) { - return TToast.showLoading( - context: context, - text: '处理中', - duration: Duration.zero, - overlay: const TOverlayConfig(preventScrollThrough: true), - ); -} -``` - - -结束任务时调用 `TToast.dismissToast(id)`。匿名提示会复用匿名 ID;需要并存时提供不同 toastId。`TMessage.duration` 同样使用 Duration,显示由 Widget 树或其公开命令管理,不能继续用旧 visible 参数控制。 - -## Upload 与平台依赖 - -Upload 只负责选择及文件列表交互,不执行 HTTP 上传。旧 `max/sizeLimit/multiple/disabled/onChange` 不能仅改名:改为 `maxFiles/maxFileSize`、单一 mediaType、受控 files/onChanged;自定义业务 picker 使用 `Future>`。 - - -```dart -Widget migratedUpload({ - required List files, - required ValueChanged>? onChanged, - TUploadPicker? picker, -}) { - return TUpload( - files: files, - onChanged: onChanged, - maxFiles: 2, - maxFileSize: 5 * 1024 * 1024, - picker: picker, - ); -} -``` - - -回调列表不可变,接受时直接保存新列表,不原地 add/remove;上传进度和结果由业务创建新 TUploadFile/列表更新。`onChanged == null` 阻止新交互,但不会取消已经开始的选择;卸载后不通知。数量/大小错误、选择器异常和业务回调异常分别按当前回调契约处理。 - -相册权限、iOS Info.plist、文件持久化和 Android 进程回收后的恢复属于宿主集成。默认选择器底层是 image_picker;业务可用 picker 接入自己的权限、恢复和上传流程。升级后重新构建原生宿主,并检查实际解析的平台实现版本;Dart 编译通过不能证明权限与系统相册行为通过。 - -## 两种 TabBar 与 Swiper - -- **顶部页签**:旧 `TDTabBar/TDTabBarView` → `TTabsBar/TTabsBarView`,显式共享 TabController 或位于同一个 DefaultTabController。TTabsBarView 默认不可滑动,需要手势切页时显式配置 physics。 -- **底部导航**:旧 `TDBottomTabBar` → `TTabBar`,提供 type、navigationTabs、受控 value/onChanged;旧 `topBorder/showTopBorder/centerDistance` 没有等价开关恢复,按新的默认边线和内置图文布局验收。 -- **Swiper**:使用 `TSwiper` 的 children 或 itemBuilder/itemCount;自建 `TSwiperController` 并在页面 dispose 中释放。旧第三方 SwiperPlugin/SwiperController 和 TDSwiperPagination 不能直接传入;按当前分页、箭头与 pageEffect 能力重组。TSwiper 默认 loop/autoplay 均 false,业务需要时显式打开。 +- [主题、文字与样式](#migration-theme) +- [按钮与禁用语义](#migration-button) +- [受控值、输入与选择](#migration-controlled) +- [表单改为字段树](#migration-form) +- [Picker、日期与浮层确认分离](#migration-picker) +- [Popup、Dialog、Toast](#migration-overlay) +- [Upload 与平台依赖](#migration-upload) +- [两种 TabBar 与 Swiper](#migration-tabs) ## 按组件查找迁移方式 -只需要迁移项目中实际使用的组件。先搜索代码中的旧类名,例如 `TDButton`,再按下面的分类找到它。 +只需要迁移项目中实际使用的组件。先搜索代码中的旧类名,例如 `TDButton`,再按下面的分类找到它。分组默认收起,展开后查看对应入口和提示。 1. **找对应入口**:每项先列出“0.2.7旧入口 → 1.0入口”,用于定位新组件。 -2. **完成用法调整**:阅读“需要调整”,并结合前文示例修改参数、数据和回调;箭头不表示只改类名就能完成迁移。 +2. **完成用法调整**:阅读“需要调整”,并结合下方具体改法修改参数、数据和回调;箭头不表示只改类名就能完成迁移。 3. **核对当前用法**:点击组件名称进入1.0 API文档,再验证真实操作、主题及布局。 -例如,搜索到 `TDButton` 时,先看[按钮与禁用语义](#按钮与禁用语义),把文字和点击回调迁到新的内容槽与回调,再查看按钮API。不要仅把它改名为 `TButton` 后就结束。 +例如,搜索到 `TDButton` 时,先看[按钮与禁用语义](#migration-button),把文字和点击回调迁到新的内容槽与回调,再查看按钮API。不要仅把它改名为 `TButton` 后就结束。 ### 选择你正在迁移的组件 @@ -309,22 +67,28 @@ Widget migratedUpload({ 查找旧枚举、Controller、State等辅助类型时,使用文末的[旧类型名称对照](#migration-legacy-types)。该附录用于定位处置方向,组件迁移优先按下面的分组进行。 -### 主题与全局配置 +
+主题与全局配置 + 先处理全局主题,再迁移各组件的局部样式。 - **[Theme 主题](https://tdesign.tencent.com/flutter/components/theme?tab=api)**:`TDTheme / TDThemeData` → `context.tTheme / TThemeData / TThemeBuilder`。 - **需要调整**:全局 Token→TD 组件 Theme→支持的实例配置; Material 外观不再反向影响 TD 默认视觉。 + **需要调整**:全局 Token→TD 组件 Theme→支持的实例配置; Material 外观不再反向影响 TD 默认视觉。 [查看相关改法](#migration-theme) + +
-### 按钮、文字与基础组件 +
+按钮、文字与基础组件 + 从页面上常用的按钮、文字、图标等开始,核对内容槽和样式配置。 - **[Button 按钮](https://tdesign.tencent.com/flutter/components/button?tab=api)**:`TDButton` → `TButton`。 - **需要调整**:text→child; onTap→onPressed; type→variant; theme→colorPreset; 状态样式合并为 ButtonStyle。 + **需要调整**:text→child; onTap→onPressed; type→variant; theme→colorPreset; 状态样式合并为 ButtonStyle。 [查看相关改法](#migration-button) - **[Divider 分割线](https://tdesign.tencent.com/flutter/components/divider?tab=api)**:`TDDivider` → `TDivider`。 @@ -344,10 +108,14 @@ Widget migratedUpload({ - **[Text 文本](https://tdesign.tencent.com/flutter/components/text?tab=api)**:`TDText / TDTextSpan` → `TText / TTextSpan`。 - **需要调整**:删除分散字体、在线加载和 padding 入口; 用 style、textScaler、显式父布局,见文字一节。 + **需要调整**:删除分散字体、在线加载和 padding 入口; 用 style、textScaler、显式父布局,见文字一节。 [查看相关改法](#migration-theme) + +
-### 页面导航与页签 +
+页面导航与页签 + 重点区分顶部页签、底部导航以及各自的控制器和受控值。 @@ -377,20 +145,24 @@ Widget migratedUpload({ - **[TabBar 标签栏](https://tdesign.tencent.com/flutter/components/tab-bar?tab=api)**:`TDBottomTabBar` → `TTabBar`。 - **需要调整**:底部导航:显式 type、navigationTabs、value/onChanged; 尺寸/颜色/分隔线迁 组件 Theme。 + **需要调整**:底部导航:显式 type、navigationTabs、value/onChanged; 尺寸/颜色/分隔线迁 组件 Theme。 [查看相关改法](#migration-tabs) - **[Tabs 选项卡](https://tdesign.tencent.com/flutter/components/tabs?tab=api)**:`TDTabBar / TDTabBarView` → `TTabsBar / TTabsBarView`。 - **需要调整**:顶部页签:共享 TabController 或 DefaultTabController; 不是底部 TTabBar。 + **需要调整**:顶部页签:共享 TabController 或 DefaultTabController; 不是底部 TTabBar。 [查看相关改法](#migration-tabs) + +
-### 表单、输入与选择 +
+表单、输入与选择 + 先确认值由谁持有,再处理回调、表单校验和确认/取消流程。 - **[Calendar 日历](https://tdesign.tencent.com/flutter/components/calendar?tab=api)**:`TDCalendar` → `TCalendar`。 - **需要调整**:value 是 List; variant 决定单选/多选/区间; onChanged 回写,时间选择和弹层外部组合。 + **需要调整**:value 是 List; variant 决定单选/多选/区间; onChanged 回写,时间选择和弹层外部组合。 [查看相关改法](#migration-picker) - **[Cascader 级联选择器](https://tdesign.tencent.com/flutter/components/cascader?tab=api)**:`TDCascader / TDMultiCascader` → `TCascader`。 @@ -398,173 +170,588 @@ Widget migratedUpload({ - **[CheckBox 多选框](https://tdesign.tencent.com/flutter/components/checkbox?tab=api)**:`TDCheckbox / TDCheckboxGroup` → `TCheckbox / TCheckboxGroup`。 - **需要调整**:checked/id/controller 方案改为 value/onChanged; 组提供 options 和受控选中集合,类型按当前 API。 + **需要调整**:checked/id/controller 方案改为 value/onChanged; 组提供 options 和受控选中集合,类型按当前 API。 [查看相关改法](#migration-controlled) - **[DateTimePicker 时间选择器](https://tdesign.tencent.com/flutter/components/date-time-picker?tab=api)**:`TDDatePicker` → `TDateTimePicker`。 - **需要调整**:DatePickerModel 改为 TDateTimePickerValue + DateTimePickerMode; 上下界/步进显式传入,外部管理确认。 + **需要调整**:DatePickerModel 改为 TDateTimePickerValue + DateTimePickerMode; 上下界/步进显式传入,外部管理确认。 [查看相关改法](#migration-picker) - **[Form 表单](https://tdesign.tencent.com/flutter/components/form?tab=api)**:`TDForm / FormController` → `TForm / TFormField / TFormController`。 - **需要调整**:从 items/rules/data 配置改为字段 Widget 树; value/onChanged、validator 与控制器职责分开。 + **需要调整**:从 items/rules/data 配置改为字段 Widget 树; value/onChanged、validator 与控制器职责分开。 [查看相关改法](#migration-form) - **[Input 输入框](https://tdesign.tencent.com/flutter/components/input?tab=api)**:`TDInput` → `TInput`。 - **需要调整**:controller 与 initialValue 互斥; onChanged/hintText/prefix/suffix; 不要把 initialValue 当持续受控值。 + **需要调整**:controller 与 initialValue 互斥; onChanged/hintText/prefix/suffix; 不要把 initialValue 当持续受控值。 [查看相关改法](#migration-controlled) - **[Picker 选择器](https://tdesign.tencent.com/flutter/components/picker?tab=api)**:`TDPicker / TDMultiPicker / TDMultiLinkedPicker` → `TPicker + TPickerColumns / TPickerLinked`。 - **需要调整**:列数据改不可变 option 树; 选择面板不负责业务确认,使用 TPickerPopup 组合草稿/确认/取消。 + **需要调整**:列数据改不可变 option 树; 选择面板不负责业务确认,使用 TPickerPopup 组合草稿/确认/取消。 [查看相关改法](#migration-picker) + +- **[Radio 单选框](https://tdesign.tencent.com/flutter/components/radio?tab=api)**:`TDRadio / TDRadioGroup` → `TRadio / TRadioGroup`。 + + **需要调整**:单项必须位于同类型组下; 组持有 value/onChanged,不再为每项维护选中状态。 [查看相关改法](#migration-controlled) + +- **[Rate 评分](https://tdesign.tencent.com/flutter/components/rate?tab=api)**:`TDRate` → `TRate`。 + + **需要调整**:按当前受控数值与回调迁移; 重验半星、禁用、只读与自定义指示器。 + +- **[Search 搜索框](https://tdesign.tencent.com/flutter/components/search?tab=api)**:`TDSearchBar` → `TSearchBar`。 + + **需要调整**:placeHolder→hintText、onTextChanged→onChanged、onActionClick→onActionPressed; 不保留旧样式对象。 + +- **[Slider 滑动选择器](https://tdesign.tencent.com/flutter/components/slider?tab=api)**:`TDSlider / TDRangeSlider` → `TSlider / TRangeSlider`。 + + **需要调整**:按当前值及回调类型迁移; 旧 Thumb/Track/Painter 类型不再作为可继承公开入口。 + +- **[Stepper 步进器](https://tdesign.tencent.com/flutter/components/stepper?tab=api)**:`TDStepper` → `TStepper`。 + + **需要调整**:required value; 回调接受后重建; 旧 defaultValue/eventController 不能作为迁移目标。 [查看相关改法](#migration-controlled) + +- **[Switch 开关](https://tdesign.tencent.com/flutter/components/switch?tab=api)**:`TDSwitch` → `TSwitch`。 + + **需要调整**:value/onChanged 管开关状态; 空回调禁用; 规格与具体配色分别从实例/Theme 设置。 [查看相关改法](#migration-controlled) + +- **[Textarea 多行文本框](https://tdesign.tencent.com/flutter/components/textarea?tab=api)**:`TDTextarea` → `TTextarea`。 + + **需要调整**:多行输入独立组件; 用 minLines/maxLines、controller 与字段回调,核对计数/字符限制。 [查看相关改法](#migration-controlled) + +- **[TreeSelect 树形选择](https://tdesign.tencent.com/flutter/components/tree-select?tab=api)**:`TDTreeSelect / TDSelectOption` → `TTreeSelect / TTreeSelectOption`。 + + **需要调整**:树数据、选中集合与 multiple 明确配置; 不再复用旧副作用控制器。 + +- **[Upload 上传](https://tdesign.tencent.com/flutter/components/upload?tab=api)**:`TDUpload` → `TUpload`。 + + **需要调整**:files/onChanged 受控; 单一 mediaType,maxFiles/maxFileSize、不可变结果; 上传请求由业务执行。 [查看相关改法](#migration-upload) + +
+ + +
+内容与数据展示 + + +检查数据结构、内容插槽、状态以及具体尺寸的含义。 + +- **[Avatar 头像](https://tdesign.tencent.com/flutter/components/avatar?tab=api)**:`TDAvatar` → `TAvatar`。 + + **需要调整**:形状用 shape,物理大小/颜色迁 TAvatarThemeData; 特殊文字用 child: Text(style: ...)。 + +- **[Badge 徽标](https://tdesign.tencent.com/flutter/components/badge?tab=api)**:`TDBadge` → `TBadge`。 + + **需要调整**:统一 label/size 等当前入口; 旧数字/红点/丝带类型按组件 API 重组,不复用旧 BadgeConfig。 + +- **[Cell 单元格](https://tdesign.tencent.com/flutter/components/cell?tab=api)**:`TDCell / TDCellGroup` → `TCell / TCellGroup`。 + + **需要调整**:以内容槽组合; 连续列表用 TCellGroup; 统一背景/分隔线由组或 Theme 管理。 + +- **[Collapse 折叠面板](https://tdesign.tencent.com/flutter/components/collapse?tab=api)**:`TDCollapse / TDCollapsePanel` → `TCollapse / TCollapsePanel`。 + + **需要调整**:受控展开值与内容分开; 形态/动画属于实例,具体外观从 TCollapseThemeData 配置。 + +- **[Empty 空状态](https://tdesign.tencent.com/flutter/components/empty?tab=api)**:`TDEmpty` → `TEmpty`。 + + **需要调整**:旧 type 改为 icon/image/emptyText/operation 组合; 不再查找 TDEmptyType,也不导入内部插图。 + +- **[Footer 页脚](https://tdesign.tencent.com/flutter/components/footer?tab=api)**:`TDFooter` → `TFooter`。 + + **需要调整**:按当前内容/链接数据与组件 Theme 迁移,不继续使用旧 FooterType 作为类型。 + +- **[Image 图片](https://tdesign.tencent.com/flutter/components/image?tab=api)**:`TDImage` → `TImage`。 + + **需要调整**:重验加载/失败/裁剪; 尺寸和占位以当前 API 为准,旧 TDImageType 不能仅改前缀。 + +- **[ImageViewer 图片预览](https://tdesign.tencent.com/flutter/components/image-viewer?tab=api)**:`TDImageViewer / TDImageDialog` → `TImageViewer.show`。 + + **需要调整**:images 使用 ImageProvider 列表; initialIndex 与 onIndexChanged,内部 State/Dialog 类型不再直接实例化。 + +- **[Progress 进度条](https://tdesign.tencent.com/flutter/components/progress?tab=api)**:`TDProgress` → `TProgress`。 + + **需要调整**:variant/status 与主题分开; 圆环 circleSize 表示外框边长,不能把旧半径语义套入。 + +- **[Result 结果](https://tdesign.tencent.com/flutter/components/result?tab=api)**:`TDResult` → `TResult`。 + + **需要调整**:重选当前语义状态与内容插槽,背景/文字视觉使用 TResultThemeData。 + +- **[Skeleton 骨架屏](https://tdesign.tencent.com/flutter/components/skeleton?tab=api)**:`TDSkeleton / TDSkeletonRowCol*` → `TSkeleton / TSkeleton.custom`。 + + **需要调整**:标准形态用 variant; 自定义布局使用 TSkeletonLayout,不复用旧 RowCol 配置类型。 + +- **[Swiper 轮播图](https://tdesign.tencent.com/flutter/components/swiper?tab=api)**:`Swiper + TDSwiperPagination` → `TSwiper / TSwiperController`。 + + **需要调整**:不再用第三方 SwiperController/SwiperPlugin; 迁移 children 或 itemBuilder、分页及自有控制器。 [查看相关改法](#migration-tabs) + +- **[Table 表格](https://tdesign.tencent.com/flutter/components/table?tab=api)**:`TDTable / TDTableCol` → `TTable / TTableColumn`。 + + **需要调整**:列使用 id/header/cellBuilder,data 必填; 排序和选择是受控值,旧列/行选择回调需要改写。 + +- **[Tag 标签](https://tdesign.tencent.com/flutter/components/tag?tab=api)**:`TDTag / TDSelectTag` → `TTag / TSelectTag`。 + + **需要调整**:语义色用 colorPreset; 选中/关闭遵循当前回调; 具体字体和圆角从 Theme 设置。 + +- **[TimeCounter 计时器](https://tdesign.tencent.com/flutter/components/time-counter?tab=api)**:`TDTimeCounter` → `TTimeCounter`。 + + **需要调整**:time 和 onChanged 均使用毫秒整数; 重验自动开始、方向与结束; 自建 Controller 由业务释放。 + +
+ + +
+浮层、提示与交互反馈 + + +核对打开与关闭方式、返回结果、时长、异步结束和资源释放。 + +- **[ActionSheet 动作面板](https://tdesign.tencent.com/flutter/components/action-sheet?tab=api)**:`TDActionSheet` → `TActionSheet`。 + + **需要调整**:按当前列表/宫格入口及 TActionSheetItem 组合; 旧主题枚举不是新 Theme 类型。 + +- **[Dialog 对话框](https://tdesign.tencent.com/flutter/components/dialog?tab=api)**:`TDAlertDialog / TDConfirmDialog / TDInputDialog` → `TDialog / TConfirmDialog / TDialogAction`。 + + **需要调整**:单确认便捷弹窗与多操作槽分开; 输入弹窗用 TDialog+TInput 组合,不恢复专用旧类。 [查看相关改法](#migration-overlay) + +- **[DropdownMenu 下拉菜单](https://tdesign.tencent.com/flutter/components/dropdown-menu?tab=api)**:`TDDropdownMenu / TDDropdownItem` → `TDropdownMenu / TDropdownMenuItem`。 + + **需要调整**:菜单项描述与 Single/MultiSelectPanel 组合; 重验外部值更新、遮罩和 anchor,不直接改名前缀。 + +- **[Loading 加载](https://tdesign.tencent.com/flutter/components/loading?tab=api)**:`TDLoading` → `TLoading`。 + + **需要调整**:按当前 icon/内容与 TLoadingController 使用; 旧内部指示器/State 不作为公开继承点。 + +- **[Message 全局提示](https://tdesign.tencent.com/flutter/components/message?tab=api)**:`TDMessage` → `TMessage`。 + + **需要调整**:duration 使用 Duration; status 替代旧 theme; 显示由 Widget 树或命令句柄管理,不保留 visible 开关。 + +- **[NoticeBar 消息提醒](https://tdesign.tencent.com/flutter/components/notice-bar?tab=api)**:`TDNoticeBar` → `TNoticeBar`。 + + **需要调整**:语义状态/滚动/多行用当前 API; 重验循环、点击与关闭,不搬旧样式类。 + +- **[Popover 弹出气泡](https://tdesign.tencent.com/flutter/components/popover?tab=api)**:`TDPopover / TDPopoverWidget` → `TPopover`。 + + **需要调整**:锚点和一次性命令按当前入口使用; offset/arrowSize/padding/背景/圆角从 TPopoverThemeData 设置。 + +- **[Popup 弹出层](https://tdesign.tencent.com/flutter/components/popup?tab=api)**:`TDPopup*Panel / TDSlidePopupRoute` → `TPopup.show + TPopupOptions + TPopupHandle`。 + + **需要调整**:面板、路由与控制统一; 选择方向专属 Options/Inset,关闭结果从 handle.result 获取。 [查看相关改法](#migration-overlay) + +- **[PullDownRefresh 下拉刷新](https://tdesign.tencent.com/flutter/components/pull-down-refresh?tab=api)**:`TDRefreshHeader` → `TPullDownRefresh`。 + + **需要调整**:用 wrapper、受控回调和 TPullDownRefreshController 迁移; 旧第三方 Header 不能仅改名。 + +- **[SwipeCell 滑动操作](https://tdesign.tencent.com/flutter/components/swipe-cell?tab=api)**:`TDSwipeCell / TDSwipeCellAction` → `TSwipeCell / TSwipeCellAction`。 + + **需要调整**:侧滑交互与逐项动作配置使用当前 API; 不要依赖旧 Inherited/State,避免重复通知。 + +- **[Toast 轻提示](https://tdesign.tencent.com/flutter/components/toast?tab=api)**:`TDToast` → `TToast`。 + + **需要调整**:duration 为 Duration,加载默认也会超时; 持续加载显式 Duration.zero,背景拦截放 TOverlayConfig。 [查看相关改法](#migration-overlay) + +
+ + +## 主题、文字与样式 + +### 先处理旧配置 + +- 将读取当前主题的 `TDTheme.of(context)` 改为 `context.tTheme`,固定默认配置不能代替局部主题。 +- 旧文字样式字段迁入 `TextStyle`;布局用父级Padding/Align表达,不恢复旧字体padding补偿。 +- 全局Token、组件Theme和单个实例配置分别处理,不能把所有旧样式都放入全局JSON。 + +### 1.0写法与注意事项 + +旧 `TDTheme.of(context)` 对应 `context.tTheme`;全局数据为 `TThemeData`,应用使用 `TThemeBuilder.light/dark`。让组件跟随局部主题时读取 `context.tTheme`,不要用固定默认值绕开子树 Theme。 + + +```dart +Widget migratedApp(Widget home) { + final tokens = TThemeData.defaultData(); + return MaterialApp( + theme: TThemeBuilder.light(tokens), + darkTheme: TThemeBuilder.dark(tokens), + home: home, + ); +} + +Widget migratedTextTheme(BuildContext context, Widget child) { + return Theme( + data: Theme.of( + context, + ).mergeExtension(const TTextThemeData(textStyle: TextStyle(fontSize: 18))), + child: child, + ); +} +``` + + +- TD 内置外观按全局 Token、TD 组件 Theme、受支持的显式实例配置解析。Material `textTheme`、按钮 Theme、`IconTheme`、visualDensity 等不再隐式改变 TD 内置视觉;原生 Material 和调用方自定义内容仍可使用自己的主题。 +- 使用 `mergeExtension` 合并子树组件主题,避免用 `copyWith(extensions: [...])` 意外丢弃其他 ThemeExtension。 +- `TText` 的单实例文字使用 `style: TextStyle(...)`;`TTextSpan` 也用 `style`。不要继续传旧 `fontWeight/fontFamily/textColor/isTextThrough/lineThroughColor`,删除线使用 `TextDecoration.lineThrough`。 +- `textScaleFactor` 改为 `textScaler`;未传时继承系统文字缩放。旧 `TDTextPaddingConfig` 改为父级 Padding/Align/Center,段落文字不要按单行居中规则强行裁切。 +- 在线字体先由业务调用 `TFontLoader.load` 并管理加载状态,之后通过文字 `style.fontFamily` 或 TD 文字 Theme 配置,不再在文字 build 时请求字体 URL。 +- 自定义主题 JSON 需要核对字段与最终默认值;旧按钮状态样式、组件形态、交互时长等不能一律塞进 Theme。具体视觉默认值与实例的状态/规格选择分开。 + +### 迁移后怎样确认 + +- 明暗切换和局部Theme下内置组件读取正确配色。 +- 覆盖一个组件Theme时其他扩展保持预期,文字行高与系统缩放正常。 + +[返回组件导航](#migration-components) + + +## 按钮与禁用语义 + +### 参数如何调整 + +- 文字:`text` 改为Widget内容 `child`,普通字符串用 `Text` 包装。 +- 点击:`onTap` 改为 `onPressed`;禁用时传null,启用时必须传有效回调。 +- 外观分类:`type` 改为 `variant`,`theme` 改为 `colorPreset`。 +- 状态样式:旧 `style/activeStyle/disableStyle` 合并到 `ButtonStyle` 的状态属性。 + +### 1.0写法与注意事项 + +0.2.7:`TDButton(text: '保存', type: TDButtonType.fill, theme: TDButtonTheme.primary, onTap: save)`。 + +1.0 的对应写法: -- **[Radio 单选框](https://tdesign.tencent.com/flutter/components/radio?tab=api)**:`TDRadio / TDRadioGroup` → `TRadio / TRadioGroup`。 + +```dart +Widget migratedButton(VoidCallback? onPressed) { + return TButton( + variant: TButtonVariant.fill, + colorPreset: TButtonColorPreset.primary, + onPressed: onPressed, + child: const Text('保存'), + ); +} +``` + - **需要调整**:单项必须位于同类型组下; 组持有 value/onChanged,不再为每项维护选中状态。 +`onPressed == null` 表示禁用;长按也要求按钮处于可点击状态。不要保留旧 `disabled: false` 却漏传回调。`icon` 使用 Widget,IconData 包在 `Icon(...)` 或 `TIcon(...)` 中。普通/按压/禁用的具体样式合并到 `ButtonStyle` 的状态属性;尺寸布局按 size、显式样式或外部约束表达,不搬旧 style/activeStyle/disableStyle 三套对象。 -- **[Rate 评分](https://tdesign.tencent.com/flutter/components/rate?tab=api)**:`TDRate` → `TRate`。 +自定义反色主题时,默认配色的 `TButtonVariant.ghost` 文字与描边读取 `textColorAnti`,禁用时读取 `fontWhite4`;不要仅修改原始白色层级 `fontWhite1` 来控制这类按钮。单个按钮的前景、边框和交互状态仍通过 `ButtonStyle` 覆盖。 - **需要调整**:按当前受控数值与回调迁移; 重验半星、禁用、只读与自定义指示器。 +### 迁移后怎样确认 -- **[Search 搜索框](https://tdesign.tencent.com/flutter/components/search?tab=api)**:`TDSearchBar` → `TSearchBar`。 +- 启用按钮点击一次仅执行业务回调一次。 +- 禁用不执行点击/长按;普通、按压、加载及禁用样式符合业务预期。 - **需要调整**:placeHolder→hintText、onTextChanged→onChanged、onActionClick→onActionPressed; 不保留旧样式对象。 +[返回组件导航](#migration-components) -- **[Slider 滑动选择器](https://tdesign.tencent.com/flutter/components/slider?tab=api)**:`TDSlider / TDRangeSlider` → `TSlider / TRangeSlider`。 + +## 受控值、输入与选择 - **需要调整**:按当前值及回调类型迁移; 旧 Thumb/Track/Painter 类型不再作为可继承公开入口。 +### 值由谁更新 -- **[Stepper 步进器](https://tdesign.tencent.com/flutter/components/stepper?tab=api)**:`TDStepper` → `TStepper`。 +- 旧checked、id或Controller方案需要逐组件改写,不能对所有组件统一替换字段名。 +- 在页面State或业务状态中持有当前值,传入value;在onChanged中保存新值并触发重建。 +- 父级重置或外部修改时更新同一状态来源,不额外维护第二份选中状态。 +- 输入框需要持续控制文本、重置或保留选区时使用TextEditingController;initialValue只负责初始化。 - **需要调整**:required value; 回调接受后重建; 旧 defaultValue/eventController 不能作为迁移目标。 +### 1.0写法与注意事项 -- **[Switch 开关](https://tdesign.tencent.com/flutter/components/switch?tab=api)**:`TDSwitch` → `TSwitch`。 +对于 `TCheckbox`、`TRadioGroup`、`TSwitch`、`TStepper`、Picker、Calendar 等,父级应接受回调并重建传回新值。只记录回调而不更新 value,会导致保持旧值或滚动结束回退;空回调的禁用规则以各组件 API 为准。 - **需要调整**:value/onChanged 管开关状态; 空回调禁用; 规格与具体配色分别从实例/Theme 设置。 + +```dart +Widget migratedCheckbox(bool value, ValueChanged? onChanged) { + return TCheckbox(value: value, onChanged: onChanged, title: '同意条款'); +} -- **[Textarea 多行文本框](https://tdesign.tencent.com/flutter/components/textarea?tab=api)**:`TDTextarea` → `TTextarea`。 +Widget migratedRadio(String value, ValueChanged? onChanged) { + return TRadioGroup.options( + value: value, + onChanged: onChanged, + options: const [ + TRadioOption(value: 'a', label: '方案 A'), + TRadioOption(value: 'b', label: '方案 B'), + ], + ); +} +``` + - **需要调整**:多行输入独立组件; 用 minLines/maxLines、controller 与字段回调,核对计数/字符限制。 +`TRadio` 必须在同类型 `TRadioGroup` 下,不能把 groupValue/onChanged 重新分散到每个 radio。复选框单项 value 为 bool?(null 表示不确定态),组的 value/options 以当前泛型 API 为准,旧 id、controller、passThrough 等不能原样套入。 -- **[TreeSelect 树形选择](https://tdesign.tencent.com/flutter/components/tree-select?tab=api)**:`TDTreeSelect / TDSelectOption` → `TTreeSelect / TTreeSelectOption`。 +输入框的 `controller` 与 `initialValue` 互斥;`initialValue` 仅初始化内部值。需要外部更新、表单重置或保留选区时使用 `TextEditingController`,由创建方释放。单行用 `TInput`,多行用 `TTextarea`;不要把旧 TDInput 的 maxLines 参数当成完整多行迁移方案。重验空内容粘贴、中文组合输入、清空按钮、焦点与键盘遮挡。 - **需要调整**:树数据、选中集合与 multiple 明确配置; 不再复用旧副作用控制器。 +### 迁移后怎样确认 -- **[Upload 上传](https://tdesign.tencent.com/flutter/components/upload?tab=api)**:`TDUpload` → `TUpload`。 +- 操作后显示新值,父级重置也能反映在组件上。 +- 复选框不确定态及单选组泛型符合业务,输入清空、组合输入和焦点正常。 +- 自建文本控制器在页面退出时释放。 - **需要调整**:files/onChanged 受控; 单一 mediaType,maxFiles/maxFileSize、不可变结果; 上传请求由业务执行。 +[返回组件导航](#migration-components) - -### 内容与数据展示 + +## 表单改为字段树 -检查数据结构、内容插槽、状态以及具体尺寸的含义。 +### 旧版配置分别放到哪里 -- **[Avatar 头像](https://tdesign.tencent.com/flutter/components/avatar?tab=api)**:`TDAvatar` → `TAvatar`。 +- `items`:改成TForm子树中的字段Widget,不再提交一份表单项配置列表。 +- `data`:字段的业务值由调用方持有,通过TFormField.value/onChanged连接。 +- `rules`:在字段上配置required或validator,并显示builder传出的错误文案。 +- 提交/重置:调用方编排业务操作;提交前使用TFormController.validate(),重置时同步业务值与文本控制器。 - **需要调整**:形状用 shape,物理大小/颜色迁 TAvatarThemeData; 特殊文字用 child: Text(style: ...)。 +### 1.0写法与注意事项 -- **[Badge 徽标](https://tdesign.tencent.com/flutter/components/badge?tab=api)**:`TDBadge` → `TBadge`。 +旧 `items/rules/data` 配置改为 `TForm + TFormField + TFormItem`。字段持有业务 value/onChanged,validator 返回错误文案;`TFormController.validate()` 用于主动校验,`required: true` 执行必填校验,单独设置表单项必填标记不等于校验。 - **需要调整**:统一 label/size 等当前入口; 旧数字/红点/丝带类型按组件 API 重组,不复用旧 BadgeConfig。 + +```dart +Widget migratedForm({ + required TFormController form, + required TextEditingController text, + required String value, + required ValueChanged onChanged, +}) { + return TForm( + controller: form, + child: TFormField( + name: 'name', + value: value, + onChanged: onChanged, + required: true, + requiredMessage: '请输入姓名', + builder: (context, current, change, error) => TFormItem( + label: '姓名', + errorText: error, + child: TInput(controller: text, onChanged: change), + ), + ), + ); +} +``` + -- **[Cell 单元格](https://tdesign.tencent.com/flutter/components/cell?tab=api)**:`TDCell / TDCellGroup` → `TCell / TCellGroup`。 +示例中的 text/form 由页面持有,value 由父级在 onChanged 中更新;页面销毁时释放自建 TextEditingController。业务执行 reset 时,同时更新字段值与自己的文本控制器;不要指望 initialValue 覆盖现有编辑状态。 - **需要调整**:以内容槽组合; 连续列表用 TCellGroup; 统一背景/分隔线由组或 Theme 管理。 +### 迁移后怎样确认 -- **[Collapse 折叠面板](https://tdesign.tencent.com/flutter/components/collapse?tab=api)**:`TDCollapse / TDCollapsePanel` → `TCollapse / TCollapsePanel`。 +- 空值提交显示正确错误文案,合法值可以通过校验。 +- 提交读取最新业务值,在校验通过前不会发起业务请求。 +- 重置同步处理业务值、文本及适用的错误状态。 - **需要调整**:受控展开值与内容分开; 形态/动画属于实例,具体外观从 TCollapseThemeData 配置。 +[返回组件导航](#migration-components) -- **[Empty 空状态](https://tdesign.tencent.com/flutter/components/empty?tab=api)**:`TDEmpty` → `TEmpty`。 + +## Picker、日期与浮层确认分离 - **需要调整**:旧 type 改为 icon/image/emptyText/operation 组合; 不再查找 TDEmptyType,也不导入内部插图。 +### 将选择与提交分成两步 -- **[Footer 页脚](https://tdesign.tencent.com/flutter/components/footer?tab=api)**:`TDFooter` → `TFooter`。 +- 旧TDPicker.show*等入口可能同时处理内容、标题和确认回调;新面板只处理数据及候选值。 +- 标题和操作按钮使用TPopupHeader等公开组件;打开时从业务保存值复制草稿。 +- 滚动只更新草稿,确认才提交业务值,取消丢弃草稿。 +- 旧日期数组和DatePickerModel应转换为当前日期值模型,旧回调参数不能原样传给新组件。 - **需要调整**:按当前内容/链接数据与组件 Theme 迁移,不继续使用旧 FooterType 作为类型。 +### 1.0写法与注意事项 -- **[Image 图片](https://tdesign.tencent.com/flutter/components/image?tab=api)**:`TDImage` → `TImage`。 +`TDPicker/TDMultiPicker/TDMultiLinkedPicker` 改为 `TPicker` 和不可变 `TPickerColumns/TPickerLinked` 数据。面板回调只是候选值变化,不是业务确认。 - **需要调整**:重验加载/失败/裁剪; 尺寸和占位以当前 API 为准,旧 TDImageType 不能仅改前缀。 + +```dart +TPopupHandle migratedPicker({ + required BuildContext context, + required String initialValue, + required ValueChanged onConfirmed, +}) { + var draft = initialValue; + return TPickerPopup.show( + context, + child: StatefulBuilder( + builder: (context, setPanelState) => TPicker( + items: const TPickerColumns([ + [ + TPickerOption(label: '选项 A', value: 'a'), + TPickerOption(label: '选项 B', value: 'b'), + ], + ]), + value: [draft], + onChanged: (next) => setPanelState(() { + draft = next.values.single! as String; + }), + ), + ), + headerBuilder: (context, close) => TPopupHeader( + title: const Text('请选择'), + cancelButton: TButton(onPressed: close, child: const Text('取消')), + confirmButton: TButton( + onPressed: () { + onConfirmed(draft); + close(); + }, + child: const Text('确认'), + ), + ), + ); +} +``` + -- **[ImageViewer 图片预览](https://tdesign.tencent.com/flutter/components/image-viewer?tab=api)**:`TDImageViewer / TDImageDialog` → `TImageViewer.show`。 +调用方在 `onConfirmed` 中更新业务保存值,并确保对应业务 State 仍 mounted;取消只关闭、不提交草稿。重新打开时用保存值创建新草稿。`TPickerPopup` 会为标准头部和滚轮预留高度;自定义通用 Popup 时也须提供合理内容约束。 - **需要调整**:images 使用 ImageProvider 列表; initialIndex 与 onIndexChanged,内部 State/Dialog 类型不再直接实例化。 +`TDDatePicker + DatePickerModel` 改为 `TDateTimePicker + TDateTimePickerValue + DateTimePickerMode`。默认年月日,按需组合时间列;start/end 与 steps 用当前模型,onChanged 实时回写。`TDCalendar` 的 value 改为 `List`,single/multiple/range 由 variant 表达,组件不再同时负责业务弹窗确认或时间选择。 -- **[Progress 进度条](https://tdesign.tencent.com/flutter/components/progress?tab=api)**:`TDProgress` → `TProgress`。 + +```dart +Widget migratedCalendar( + List value, + ValueChanged>? onChanged, +) { + return SizedBox( + height: 400, + child: TCalendar( + value: value, + variant: TCalendarVariant.single, + minDate: DateTime(2026, 1, 1), + maxDate: DateTime(2026, 12, 31), + onChanged: onChanged, + ), + ); +} - **需要调整**:variant/status 与主题分开; 圆环 circleSize 表示外框边长,不能把旧半径语义套入。 +Widget migratedDateTime( + TDateTimePickerValue value, + ValueChanged? onChanged, +) { + return TDateTimePicker(value: value, onChanged: onChanged); +} +``` + -- **[Result 结果](https://tdesign.tencent.com/flutter/components/result?tab=api)**:`TDResult` → `TResult`。 +**重新验证边界**:最小/最大日期的时分、跨天、闰日、区间端点、数据源变更、连续滚动与惯性。不要用整数时间戳或旧通知器替代新受控值。 - **需要调整**:重选当前语义状态与内容插槽,背景/文字视觉使用 TResultThemeData。 +### 迁移后怎样确认 -- **[Skeleton 骨架屏](https://tdesign.tencent.com/flutter/components/skeleton?tab=api)**:`TDSkeleton / TDSkeletonRowCol*` → `TSkeleton / TSkeleton.custom`。 +- 滚动后取消,业务保存值不变化。 +- 确认只提交当前草稿,重新打开从已保存值开始。 +- 日期上下界、区间端点、数据变化和连续滚动正确。 - **需要调整**:标准形态用 variant; 自定义布局使用 TSkeletonLayout,不复用旧 RowCol 配置类型。 +[返回组件导航](#migration-components) -- **[Swiper 轮播图](https://tdesign.tencent.com/flutter/components/swiper?tab=api)**:`Swiper + TDSwiperPagination` → `TSwiper / TSwiperController`。 + +## Popup、Dialog、Toast - **需要调整**:不再用第三方 SwiperController/SwiperPlugin; 迁移 children 或 itemBuilder、分页及自有控制器。 +### 按原业务目的选择新入口 -- **[Table 表格](https://tdesign.tencent.com/flutter/components/table?tab=api)**:`TDTable / TDTableCol` → `TTable / TTableColumn`。 +- 普通弹出层使用TPopup.show,对应方向/布局放入TPopupOptions,保存句柄管理关闭和结果。 +- 只有一个确认动作时可用TConfirmDialog;有确认/取消等多个动作时使用TDialog.actions与TDialogAction。 +- 旧输入弹窗改为TDialog与TInput组合,由业务持有输入值和提交逻辑。 +- 加载提示使用Toast并明确持续时间,任务结束后关闭对应ID。 - **需要调整**:列使用 id/header/cellBuilder,data 必填; 排序和选择是受控值,旧列/行选择回调需要改写。 +### 1.0写法与注意事项 -- **[Tag 标签](https://tdesign.tencent.com/flutter/components/tag?tab=api)**:`TDTag / TDSelectTag` → `TTag / TSelectTag`。 +旧 `TDPopup*Panel/TDSlidePopupRoute` 组合改为 `TPopup.show(context, options: ...)`。按方向选择 `TPopupOptions.bottom/center/left/right/top` 与对应 Inset;从返回的 `TPopupHandle` 关闭/重开并读取本次 `result`。用正确 Theme/Navigator 子树的 context 打开;handle 重开不会自动重新解析已经合并的主题选项,需要新配置时重新创建。 - **需要调整**:语义色用 colorPreset; 选中/关闭遵循当前回调; 具体字体和圆角从 Theme 设置。 +`TConfirmDialog` 是单确认便捷组件;多操作使用 `TDialog.actions + TDialogAction`,输入弹窗组合 `TDialog + TInput`,不要寻找被删除的 TDInputDialog。 -- **[TimeCounter 计时器](https://tdesign.tencent.com/flutter/components/time-counter?tab=api)**:`TDTimeCounter` → `TTimeCounter`。 + +```dart +Future migratedDialog(BuildContext context) { + return TDialog.show( + context, + dialog: const TConfirmDialog( + title: '操作确认', + content: '确认继续?', + buttonText: '继续', + ), + ); +} +``` + - **需要调整**:time 和 onChanged 均使用毫秒整数; 重验自动开始、方向与结束; 自建 Controller 由业务释放。 +Toast 时长用 `Duration`;加载提示默认也会自动关闭。持续任务显式设置 `Duration.zero`,任务结束后按返回 ID 关闭。可见遮罩与背景点击/滚动拦截是独立配置,不要把半透明遮罩等同于不可穿透。 - -### 浮层、提示与交互反馈 + +```dart +String migratedLoading(BuildContext context) { + return TToast.showLoading( + context: context, + text: '处理中', + duration: Duration.zero, + overlay: const TOverlayConfig(preventScrollThrough: true), + ); +} +``` + -核对打开与关闭方式、返回结果、时长、异步结束和资源释放。 +结束任务时调用 `TToast.dismissToast(id)`。匿名提示会复用匿名 ID;需要并存时提供不同 toastId。`TMessage.duration` 同样使用 Duration,显示由 Widget 树或其公开命令管理,不能继续用旧 visible 参数控制。 -- **[ActionSheet 动作面板](https://tdesign.tencent.com/flutter/components/action-sheet?tab=api)**:`TDActionSheet` → `TActionSheet`。 +### 迁移后怎样确认 - **需要调整**:按当前列表/宫格入口及 TActionSheetItem 组合; 旧主题枚举不是新 Theme 类型。 +- 确认、取消、遮罩与返回键产生各自预期结果。 +- 输入弹窗提交最新文本,取消不会误提交。 +- 任务结束关闭自己的加载提示,不误关其他并存提示。 -- **[Dialog 对话框](https://tdesign.tencent.com/flutter/components/dialog?tab=api)**:`TDAlertDialog / TDConfirmDialog / TDInputDialog` → `TDialog / TConfirmDialog / TDialogAction`。 +[返回组件导航](#migration-components) - **需要调整**:单确认便捷弹窗与多操作槽分开; 输入弹窗用 TDialog+TInput 组合,不恢复专用旧类。 + +## Upload 与平台依赖 -- **[DropdownMenu 下拉菜单](https://tdesign.tencent.com/flutter/components/dropdown-menu?tab=api)**:`TDDropdownMenu / TDDropdownItem` → `TDropdownMenu / TDropdownMenuItem`。 +### 旧参数和业务职责如何调整 - **需要调整**:菜单项描述与 Single/MultiSelectPanel 组合; 重验外部值更新、遮罩和 anchor,不直接改名前缀。 +- `files/onChange`:迁为受控files/onChanged,保存回调提供的新列表。 +- `max/sizeLimit`:改用maxFiles/maxFileSize,示例中的文件大小以字节表达。 +- `mediaType/multiple`:按新API选择单一媒体类型及数量上限,不直接传旧媒体类型列表。 +- `disabled`:通过当前公开交互配置处理,例如onChanged为null;禁用不等于取消已开始的异步选择。 +- 网络上传仍由业务执行并更新文件状态,选择完成不代表服务器上传成功。 -- **[Loading 加载](https://tdesign.tencent.com/flutter/components/loading?tab=api)**:`TDLoading` → `TLoading`。 +### 1.0写法与注意事项 - **需要调整**:按当前 icon/内容与 TLoadingController 使用; 旧内部指示器/State 不作为公开继承点。 +Upload 只负责选择及文件列表交互,不执行 HTTP 上传。旧 `max/sizeLimit/multiple/disabled/onChange` 不能仅改名:改为 `maxFiles/maxFileSize`、单一 mediaType、受控 files/onChanged;自定义业务 picker 使用 `Future>`。 -- **[Message 全局提示](https://tdesign.tencent.com/flutter/components/message?tab=api)**:`TDMessage` → `TMessage`。 + +```dart +Widget migratedUpload({ + required List files, + required ValueChanged>? onChanged, + TUploadPicker? picker, +}) { + return TUpload( + files: files, + onChanged: onChanged, + maxFiles: 2, + maxFileSize: 5 * 1024 * 1024, + picker: picker, + ); +} +``` + - **需要调整**:duration 使用 Duration; status 替代旧 theme; 显示由 Widget 树或命令句柄管理,不保留 visible 开关。 +回调列表不可变,接受时直接保存新列表,不原地 add/remove;上传进度和结果由业务创建新 TUploadFile/列表更新。`onChanged == null` 阻止新交互,但不会取消已经开始的选择;卸载后不通知。数量/大小错误、选择器异常和业务回调异常分别按当前回调契约处理。 -- **[NoticeBar 消息提醒](https://tdesign.tencent.com/flutter/components/notice-bar?tab=api)**:`TDNoticeBar` → `TNoticeBar`。 +相册权限、iOS Info.plist、文件持久化和 Android 进程回收后的恢复属于宿主集成。默认选择器底层是 image_picker;业务可用 picker 接入自己的权限、恢复和上传流程。升级后重新构建原生宿主,并检查实际解析的平台实现版本;Dart 编译通过不能证明权限与系统相册行为通过。 - **需要调整**:语义状态/滚动/多行用当前 API; 重验循环、点击与关闭,不搬旧样式类。 +### 迁移后怎样确认 -- **[Popover 弹出气泡](https://tdesign.tencent.com/flutter/components/popover?tab=api)**:`TDPopover / TDPopoverWidget` → `TPopover`。 +- 选择和删除后列表更新,取消选择不会误新增文件。 +- 超过数量或大小限制、选择失败和上传失败有正确处理。 +- 页面退出后,异步结果不会错误更新已销毁页面。 - **需要调整**:锚点和一次性命令按当前入口使用; offset/arrowSize/padding/背景/圆角从 TPopoverThemeData 设置。 +[返回组件导航](#migration-components) -- **[Popup 弹出层](https://tdesign.tencent.com/flutter/components/popup?tab=api)**:`TDPopup*Panel / TDSlidePopupRoute` → `TPopup.show + TPopupOptions + TPopupHandle`。 + +## 两种 TabBar 与 Swiper - **需要调整**:面板、路由与控制统一; 选择方向专属 Options/Inset,关闭结果从 handle.result 获取。 +### 先区分三种迁移路径 -- **[PullDownRefresh 下拉刷新](https://tdesign.tencent.com/flutter/components/pull-down-refresh?tab=api)**:`TDRefreshHeader` → `TPullDownRefresh`。 +- 顶部页签:TDTabBar/TDTabBarView迁为TTabsBar/TTabsBarView,并共享TabController。 +- 底部导航:TDBottomTabBar迁为TTabBar,由value/onChanged控制当前选择。 +- 轮播:旧Swiper迁为TSwiper,不再传第三方控制器或分页插件。 +- 先按下面的行为差异改写,再核对API;顶部页签和底部导航不能合并成一种替换。 - **需要调整**:用 wrapper、受控回调和 TPullDownRefreshController 迁移; 旧第三方 Header 不能仅改名。 +### 1.0写法与注意事项 -- **[SwipeCell 滑动操作](https://tdesign.tencent.com/flutter/components/swipe-cell?tab=api)**:`TDSwipeCell / TDSwipeCellAction` → `TSwipeCell / TSwipeCellAction`。 +- **顶部页签**:旧 `TDTabBar/TDTabBarView` → `TTabsBar/TTabsBarView`,显式共享 TabController 或位于同一个 DefaultTabController。TTabsBarView 默认不可滑动,需要手势切页时显式配置 physics。 +- **底部导航**:旧 `TDBottomTabBar` → `TTabBar`,提供 type、navigationTabs、受控 value/onChanged;旧 `topBorder/showTopBorder/centerDistance` 没有等价开关恢复,按新的默认边线和内置图文布局验收。 +- **Swiper**:使用 `TSwiper` 的 children 或 itemBuilder/itemCount;自建 `TSwiperController` 并在页面 dispose 中释放。旧第三方 SwiperPlugin/SwiperController 和 TDSwiperPagination 不能直接传入;按当前分页、箭头与 pageEffect 能力重组。TSwiper 默认 loop/autoplay 均 false,业务需要时显式打开。 - **需要调整**:侧滑交互与逐项动作配置使用当前 API; 不要依赖旧 Inherited/State,避免重复通知。 +### 迁移后怎样确认 -- **[Toast 轻提示](https://tdesign.tencent.com/flutter/components/toast?tab=api)**:`TDToast` → `TToast`。 +- 顶部页签与内容共享同一控制器,切换后内容一致。 +- 底部导航回调更新value,外部重置也正确显示选中项。 +- Swiper循环/自动播放显式符合业务需求,自建控制器被正确释放。 - **需要调整**:duration 为 Duration,加载默认也会超时; 持续加载显式 Duration.zero,背景拦截放 TOverlayConfig。 +[返回组件导航](#migration-components) ## 编译通过后仍要检查 diff --git a/tdesign-component/example/assets/api/theme_api.md b/tdesign-component/example/assets/api/theme_api.md index 2d75c108da..65384dd9f9 100644 --- a/tdesign-component/example/assets/api/theme_api.md +++ b/tdesign-component/example/assets/api/theme_api.md @@ -53,6 +53,8 @@ 解析主题 JSON;空字符串、格式错误或缺少 name 对应配置时返回 null。 +浅色与深色块中未配置的 Token 分别回退默认浅色与深色主题; +深色块不存在时不自动创建,暗色构建仍回退当前 Token。 | 名称 | 类型 | 默认值 | 说明 | 必传 | | --- | --- | --- | --- | --- | diff --git a/tdesign-component/example/assets/code/theme.ThemeOtherColorExample.txt b/tdesign-component/example/assets/code/theme.ThemeOtherColorExample.txt index 198d3aecf8..9fc88195e6 100644 --- a/tdesign-component/example/assets/code/theme.ThemeOtherColorExample.txt +++ b/tdesign-component/example/assets/code/theme.ThemeOtherColorExample.txt @@ -11,13 +11,18 @@ class _ThemeOtherColorExampleState extends State { @override void didChangeDependencies() { super.didChangeDependencies(); - grayMap - ..clear() - ..addEntries( - context.tTheme.colorMap.entries.where( - (entry) => entry.key.startsWith('grayColor'), - ), - ); + final colors = context.tTheme.colorMap; + final keys = { + ...TThemeData.defaultData().colorMap.keys, + ...colors.keys, + }.where((key) => key.startsWith('grayColor')); + grayMap.clear(); + for (final key in keys) { + final color = colors[key]; + if (color != null) { + grayMap[key] = color; + } + } } Widget _buildOtherColor(BuildContext context) { diff --git a/tdesign-component/example/lib/base/example_route.dart b/tdesign-component/example/lib/base/example_route.dart index 299ed3e488..a22ff334b1 100644 --- a/tdesign-component/example/lib/base/example_route.dart +++ b/tdesign-component/example/lib/base/example_route.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import '../config.dart'; +import '../documentation_theme_demo.dart'; import '../setting.dart'; import 'api_widget.dart'; import 'example_base.dart'; @@ -20,6 +21,20 @@ class TExampleRoute { pageModelList[model.name] = model; }); }); + pageModelList['custom-theme'] = ExamplePageModel( + text: '自定义主题', + name: 'custom-theme', + pageBuilder: (_, __) => const DocumentationThemeGuidePage(), + ); + // 指南运行效果使用独立路由,不加入组件清单或 API 生成。 + for (final scene in DocumentationThemeScene.values) { + final name = 'custom-theme-${scene.name}'; + pageModelList[name] = ExamplePageModel( + text: '自定义主题', + name: name, + pageBuilder: (_, __) => DocumentationThemeDemo(scene: scene), + ); + } // 添加关于页路由 pageModelList[aboutPath] = ExamplePageModel( text: '设置', diff --git a/tdesign-component/example/lib/base/example_widget.dart b/tdesign-component/example/lib/base/example_widget.dart index f1f05cc621..2959e325ea 100644 --- a/tdesign-component/example/lib/base/example_widget.dart +++ b/tdesign-component/example/lib/base/example_widget.dart @@ -79,7 +79,7 @@ class ExamplePage extends StatefulWidget { /// 悬浮按钮的位置过渡动画。 final FloatingActionButtonAnimator? floatingActionButtonAnimator; - /// 是否在 debug 模式展示仅用于内部验证的单元测试模块。 + /// 是否在 debug 模式展示仅用于内部验证的单元测试模块,默认展示。 /// /// profile 和 release 构建中始终不展示。 final bool showTestModule; diff --git a/tdesign-component/example/lib/documentation_theme_demo.dart b/tdesign-component/example/lib/documentation_theme_demo.dart new file mode 100644 index 0000000000..61b5e12897 --- /dev/null +++ b/tdesign-component/example/lib/documentation_theme_demo.dart @@ -0,0 +1,302 @@ +import 'package:tdesign_flutter/tdesign_flutter.dart'; + +import 'base/example_widget.dart'; +import 'documentation_examples.dart'; + +enum DocumentationThemeScene { json, local, mode } + +ThemeMode _previewMode(BuildContext context, ThemeMode? selection) => + selection ?? + (Theme.of(context).brightness == Brightness.dark + ? ThemeMode.dark + : ThemeMode.light); + +/// 自定义主题指南的独立运行入口,复用生成文档所用的配置函数。 +class DocumentationThemeDemo extends StatefulWidget { + const DocumentationThemeDemo({required this.scene, super.key}); + + final DocumentationThemeScene scene; + + @override + State createState() => _DocumentationThemeDemoState(); +} + +class _DocumentationThemeDemoState extends State { + ThemeMode? _selection; + + @override + Widget build(BuildContext context) { + final mode = _previewMode(context, _selection); + return documentationThemeApp( + mode, + Builder( + builder: (context) => Scaffold( + backgroundColor: context.tTheme.bgColorPage, + body: SafeArea( + child: SingleChildScrollView( + child: DocumentationThemeContent( + scene: widget.scene, + mode: mode, + onModeChanged: (mode) => setState(() => _selection = mode), + ), + ), + ), + ), + ), + ); + } +} + +/// 场景内容继承所在应用的主题,不再创建独立的 MaterialApp。 +class DocumentationThemeContent extends StatelessWidget { + const DocumentationThemeContent({ + required this.scene, + required this.mode, + required this.onModeChanged, + super.key, + }); + + final DocumentationThemeScene scene; + final ThemeMode mode; + final ValueChanged onModeChanged; + + String _modeLabel(ThemeMode mode) => switch (mode) { + ThemeMode.light => '浅色', + ThemeMode.dark => '深色', + ThemeMode.system => '跟随系统', + }; + + @override + Widget build(BuildContext context) { + final tokens = context.tTheme; + final brand = tokens.brandColor + .toARGB32() + .toRadixString(16) + .substring(2) + .toUpperCase(); + return ColoredBox( + key: ValueKey('theme-scene-${scene.name}'), + color: tokens.bgColorContainer, + child: Padding( + padding: const EdgeInsets.all(20), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + if (scene == DocumentationThemeScene.local) ...[ + const TText('默认标签'), + const SizedBox(height: 12), + const TTag('默认圆角', colorPreset: TTagColorPreset.primary), + const SizedBox(height: 24), + const TText('局部覆盖:圆角 6'), + const SizedBox(height: 12), + documentationLocalTheme( + context, + const TTag('局部圆角', colorPreset: TTagColorPreset.primary), + ), + const SizedBox(height: 16), + const TText('局部设置只影响“局部圆角”标签所在的 Theme 子树。'), + ] else ...[ + if (scene == DocumentationThemeScene.mode) ...[ + Wrap( + spacing: 8, + runSpacing: 8, + children: [ + for (final option in ThemeMode.values) + TButton( + size: TButtonSize.small, + colorPreset: mode == option + ? TButtonColorPreset.primary + : TButtonColorPreset.defaultTheme, + onPressed: () => onModeChanged(option), + child: Text(_modeLabel(option)), + ), + ], + ), + const SizedBox(height: 20), + TText('当前模式:${_modeLabel(mode)}'), + const SizedBox(height: 12), + ], + TText( + '当前外观:${Theme.of(context).brightness == Brightness.dark ? '深色' : '浅色'}', + ), + const SizedBox(height: 12), + TText('主题配置:${tokens.name}'), + const SizedBox(height: 12), + TText('brandColor:#$brand'), + const SizedBox(height: 16), + TButton( + colorPreset: TButtonColorPreset.primary, + onPressed: () {}, + child: const Text('品牌色按钮'), + ), + const SizedBox(height: 12), + const TTag('品牌色标签', colorPreset: TTagColorPreset.primary), + if (scene == DocumentationThemeScene.json) ...[ + const SizedBox(height: 24), + const _ThemeTokenComparison(), + ], + ], + ], + ), + ), + ); + } +} + +/// 整个指南只有一个应用主题,模式切换同时更新页面壳及所有示例。 +class DocumentationThemeGuidePage extends StatefulWidget { + const DocumentationThemeGuidePage({super.key}); + + @override + State createState() => + _DocumentationThemeGuidePageState(); +} + +class _DocumentationThemeGuidePageState + extends State { + ThemeMode? _selection; + + @override + Widget build(BuildContext context) { + final mode = _previewMode(context, _selection); + return documentationThemeApp( + mode, + Builder( + builder: (context) => ExamplePage( + title: '自定义主题', + desc: '配置全局主题、组件局部样式和明暗模式。', + exampleCodeGroup: 'theme', + backgroundColor: context.tTheme.bgColorPage, + children: [ + for (final scene in DocumentationThemeScene.values) + ExampleModule( + title: switch (scene) { + DocumentationThemeScene.json => 'JSON 配置', + DocumentationThemeScene.local => '组件局部样式', + DocumentationThemeScene.mode => '明暗模式', + }, + children: [ + ExampleItem( + ignoreCode: true, + center: false, + builder: (_) => DocumentationThemeContent( + scene: scene, + mode: mode, + onModeChanged: (mode) => + setState(() => _selection = mode), + ), + ), + ], + ), + ], + ), + ), + ); + } +} + +String _themeColorHex(Color color) { + final argb = color.toARGB32().toRadixString(16).padLeft(8, '0').toUpperCase(); + return '#${(color.toARGB32() >> 24) == 255 ? argb.substring(2) : argb}'; +} + +class _ThemeTokenComparison extends StatelessWidget { + const _ThemeTokenComparison(); + + @override + Widget build(BuildContext context) { + final tokens = context.tTheme; + final light = tokens.light; + final dark = light.dark ?? light; + final isDark = Theme.of(context).brightness == Brightness.dark; + final rows = <(String, Color Function(TThemeData), String)>[ + ('brandColor', (theme) => theme.brandColor, 'JSON 覆盖'), + ('bgColorPage', (theme) => theme.bgColorPage, '默认继承'), + ('bgColorContainer', (theme) => theme.bgColorContainer, '默认继承'), + ('textColorPrimary', (theme) => theme.textColorPrimary, '默认继承'), + ]; + Widget label(String text, {bool active = false}) => Padding( + padding: const EdgeInsets.symmetric(vertical: 10, horizontal: 4), + child: Text( + text, + style: TextStyle( + color: tokens.textColorPrimary, + fontSize: 12, + fontWeight: active ? FontWeight.w600 : FontWeight.w400, + ), + ), + ); + Widget value(Color color) => Padding( + padding: const EdgeInsets.symmetric(vertical: 10, horizontal: 4), + child: Wrap( + spacing: 4, + runSpacing: 4, + crossAxisAlignment: WrapCrossAlignment.center, + children: [ + Container( + width: 12, + height: 12, + decoration: BoxDecoration( + color: color, + border: Border.all(color: tokens.componentBorder), + ), + ), + Text( + _themeColorHex(color), + style: TextStyle( + fontFamily: 'monospace', + fontSize: 11, + color: tokens.textColorPrimary, + ), + ), + ], + ), + ); + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + const TText('浅色与深色配置对照'), + const SizedBox(height: 8), + Table( + key: const ValueKey('theme-token-comparison'), + columnWidths: const { + 0: FlexColumnWidth(1.4), + 1: FlexColumnWidth(), + 2: FlexColumnWidth(), + }, + defaultVerticalAlignment: TableCellVerticalAlignment.middle, + border: TableBorder( + horizontalInside: BorderSide(color: tokens.componentStroke), + ), + children: [ + TableRow( + children: [ + label('配置项 / 来源'), + label( + '浅色${!isDark ? '(当前)' : ''}\n${light.name}', + active: !isDark, + ), + label( + '深色${isDark ? '(当前)' : ''}\n${dark.name}', + active: isDark, + ), + ], + ), + for (final row in rows) + TableRow( + children: [ + label('${row.$1}\n${row.$3}'), + value(row.$2(light)), + value(row.$2(dark)), + ], + ), + ], + ), + const SizedBox(height: 8), + const TText('不透明色为 #RRGGBB;含透明度的颜色为 #AARRGGBB,前两位表示透明度。'), + ], + ); + } +} diff --git a/tdesign-component/example/lib/page/action_sheet/action_sheet_page.dart b/tdesign-component/example/lib/page/action_sheet/action_sheet_page.dart index 75f7a9d0de..c54bf72e88 100644 --- a/tdesign-component/example/lib/page/action_sheet/action_sheet_page.dart +++ b/tdesign-component/example/lib/page/action_sheet/action_sheet_page.dart @@ -27,7 +27,6 @@ class TActionSheetPage extends StatelessWidget { title: tTitle(context), desc: '从底部弹出的模态框,提供和当前场景相关的操作动作,也支持提供信息输入和描述。', exampleCodeGroup: 'action_sheet', - showTestModule: false, children: [ ExampleModule( title: '组件类型', diff --git a/tdesign-component/example/lib/page/avatar/avatar_page.dart b/tdesign-component/example/lib/page/avatar/avatar_page.dart index 136877f1e6..93919fe3c4 100644 --- a/tdesign-component/example/lib/page/avatar/avatar_page.dart +++ b/tdesign-component/example/lib/page/avatar/avatar_page.dart @@ -27,7 +27,6 @@ class _TAvatarPageState extends State { return ExamplePage( title: tTitle(), exampleCodeGroup: 'avatar', - showTestModule: false, desc: '用于展示用户头像信息,除了纯展示也可点击进入个人详情等操作。', children: [ ExampleModule( diff --git a/tdesign-component/example/lib/page/backtop/backtop_page.dart b/tdesign-component/example/lib/page/backtop/backtop_page.dart index 2185e0322a..edb011312a 100644 --- a/tdesign-component/example/lib/page/backtop/backtop_page.dart +++ b/tdesign-component/example/lib/page/backtop/backtop_page.dart @@ -44,7 +44,6 @@ class _TBackTopPageState extends State { desc: '用于当页面过长往下滑动时,帮助用户快速回到页面顶部。', exampleCodeGroup: 'backtop', compactDemo: true, - showTestModule: false, floatingActionButton: TBackTop( key: const Key('backtop-demo-floating'), controller: controller, diff --git a/tdesign-component/example/lib/page/badge/badge_page.dart b/tdesign-component/example/lib/page/badge/badge_page.dart index 0c421d606d..e715ddcc20 100644 --- a/tdesign-component/example/lib/page/badge/badge_page.dart +++ b/tdesign-component/example/lib/page/badge/badge_page.dart @@ -33,7 +33,6 @@ class TBadgePage extends StatelessWidget { desc: '用于告知用户,该区域的状态变化或者待处理任务的数量。', exampleCodeGroup: 'badge', backgroundColor: pageBackground, - showTestModule: false, children: [ ExampleModule( title: '组件类型', diff --git a/tdesign-component/example/lib/page/button/button_page.dart b/tdesign-component/example/lib/page/button/button_page.dart index b4cfb37cb4..05104a5799 100644 --- a/tdesign-component/example/lib/page/button/button_page.dart +++ b/tdesign-component/example/lib/page/button/button_page.dart @@ -26,7 +26,6 @@ class _TButtonPageState extends State { title: tTitle(), desc: '用于开启一个闭环的操作任务,如"删除"对象、"购买"商品等。', exampleCodeGroup: 'button', - showTestModule: false, children: [ ExampleModule( title: '组件类型', diff --git a/tdesign-component/example/lib/page/calendar/calendar_page.dart b/tdesign-component/example/lib/page/calendar/calendar_page.dart index b6b2430b00..b5203e8b68 100644 --- a/tdesign-component/example/lib/page/calendar/calendar_page.dart +++ b/tdesign-component/example/lib/page/calendar/calendar_page.dart @@ -37,7 +37,6 @@ class _TCalendarPageState extends State { backgroundColor: Theme.of(context).brightness == Brightness.light ? const Color(0xFFF6F6F6) : context.tTheme.bgColorPage, - showTestModule: false, children: [ ExampleModule( title: '组件类型', diff --git a/tdesign-component/example/lib/page/cascader/cascader_page.dart b/tdesign-component/example/lib/page/cascader/cascader_page.dart index c5f2e9aa37..93c8ce820f 100644 --- a/tdesign-component/example/lib/page/cascader/cascader_page.dart +++ b/tdesign-component/example/lib/page/cascader/cascader_page.dart @@ -27,7 +27,6 @@ class _TCascaderPageState extends State { desc: '用于多层级数据的逐级选择。', exampleCodeGroup: 'cascader', compactDemo: true, - showTestModule: false, children: [ ExampleModule( title: '组件类型', diff --git a/tdesign-component/example/lib/page/cell/cell_page.dart b/tdesign-component/example/lib/page/cell/cell_page.dart index b15eb5c2e6..c395be3192 100644 --- a/tdesign-component/example/lib/page/cell/cell_page.dart +++ b/tdesign-component/example/lib/page/cell/cell_page.dart @@ -17,7 +17,6 @@ class TCellPage extends StatelessWidget { desc: '用于各个类别行的信息展示。', exampleCodeGroup: 'cell', backgroundColor: context.tTheme.bgColorSecondaryContainer, - showTestModule: false, children: [ ExampleModule( title: '组件类型', diff --git a/tdesign-component/example/lib/page/checkbox/checkbox_page.dart b/tdesign-component/example/lib/page/checkbox/checkbox_page.dart index 23ed47ee07..dd3bcf78bd 100644 --- a/tdesign-component/example/lib/page/checkbox/checkbox_page.dart +++ b/tdesign-component/example/lib/page/checkbox/checkbox_page.dart @@ -28,7 +28,6 @@ class _TCheckboxPageState extends State { desc: '用于预设的一组选项中执行多项选择,并呈现选择结果。', exampleCodeGroup: 'checkbox', compactDemo: true, - showTestModule: false, children: [ ExampleModule( title: '组件类型', diff --git a/tdesign-component/example/lib/page/collapse/collapse_page.dart b/tdesign-component/example/lib/page/collapse/collapse_page.dart index 6781319e95..098c13a02b 100644 --- a/tdesign-component/example/lib/page/collapse/collapse_page.dart +++ b/tdesign-component/example/lib/page/collapse/collapse_page.dart @@ -22,7 +22,6 @@ class TCollapsePageState extends State { title: tTitle(), exampleCodeGroup: 'collapse', desc: '可以折叠/展开的内容区域。', - showTestModule: false, backgroundColor: Theme.of(context).brightness == Brightness.light ? const Color(0xFFF6F6F6) : context.tTheme.bgColorPage, diff --git a/tdesign-component/example/lib/page/date_time_picker/date_time_picker_page.dart b/tdesign-component/example/lib/page/date_time_picker/date_time_picker_page.dart index 43b870b4c5..cbc7510d70 100644 --- a/tdesign-component/example/lib/page/date_time_picker/date_time_picker_page.dart +++ b/tdesign-component/example/lib/page/date_time_picker/date_time_picker_page.dart @@ -31,7 +31,6 @@ class _TDateTimePickerPageState extends State { backgroundColor: Theme.of(context).brightness == Brightness.light ? const Color(0xFFF6F6F6) : context.tTheme.bgColorPage, - showTestModule: false, children: [ ExampleModule( title: '组件类型', diff --git a/tdesign-component/example/lib/page/dialog/dialog_page.dart b/tdesign-component/example/lib/page/dialog/dialog_page.dart index 0e14d8eb30..12335746f3 100644 --- a/tdesign-component/example/lib/page/dialog/dialog_page.dart +++ b/tdesign-component/example/lib/page/dialog/dialog_page.dart @@ -22,7 +22,6 @@ class TDialogPage extends StatelessWidget { desc: '用于显示重要提示或请求用户进行重要操作,一种打断当前操作的模态视图。', exampleCodeGroup: 'dialog', itemMargin: EdgeInsets.symmetric(horizontal: context.tTheme.spacer2), - showTestModule: false, children: [ ExampleModule( title: '组件类型', diff --git a/tdesign-component/example/lib/page/drawer/drawer_page.dart b/tdesign-component/example/lib/page/drawer/drawer_page.dart index 0ec1bed3a7..9009d07ebd 100644 --- a/tdesign-component/example/lib/page/drawer/drawer_page.dart +++ b/tdesign-component/example/lib/page/drawer/drawer_page.dart @@ -21,7 +21,6 @@ class TDrawerPage extends StatelessWidget { exampleCodeGroup: 'drawer', navBarKey: navBarkey, compactDemo: true, - showTestModule: false, children: [ ExampleModule( title: '组件类型', diff --git a/tdesign-component/example/lib/page/dropdown_menu/dropdown_menu_page.dart b/tdesign-component/example/lib/page/dropdown_menu/dropdown_menu_page.dart index e2f76a4826..f7c923e895 100644 --- a/tdesign-component/example/lib/page/dropdown_menu/dropdown_menu_page.dart +++ b/tdesign-component/example/lib/page/dropdown_menu/dropdown_menu_page.dart @@ -18,7 +18,6 @@ class TDropdownMenuPage extends StatelessWidget { desc: '菜单呈现数个并列的选项栏目,用于整个页面的内容筛选,由菜单面板和菜单选项组成。', exampleCodeGroup: 'dropdown_menu', compactDemo: true, - showTestModule: false, children: [ ExampleModule( title: '组件类型', diff --git a/tdesign-component/example/lib/page/empty/empty_page.dart b/tdesign-component/example/lib/page/empty/empty_page.dart index b3054b507c..4229a33c59 100644 --- a/tdesign-component/example/lib/page/empty/empty_page.dart +++ b/tdesign-component/example/lib/page/empty/empty_page.dart @@ -16,7 +16,6 @@ class TEmptyPage extends StatelessWidget { title: tTitle(context), exampleCodeGroup: 'empty', desc: '用于空状态时的占位提示。', - showTestModule: false, children: [ ExampleModule( title: '组件类型', diff --git a/tdesign-component/example/lib/page/fab/fab_page.dart b/tdesign-component/example/lib/page/fab/fab_page.dart index 8f81777050..50b8c4c044 100644 --- a/tdesign-component/example/lib/page/fab/fab_page.dart +++ b/tdesign-component/example/lib/page/fab/fab_page.dart @@ -85,7 +85,6 @@ class _TFabPageState extends State { desc: '当功能使用图标即可表意清楚时,可使用纯图标悬浮按钮,例如:添加、发布。', exampleCodeGroup: 'fab', scrollController: _scrollController, - showTestModule: false, children: [ ExampleModule( title: '组件类型', diff --git a/tdesign-component/example/lib/page/footer/footer_page.dart b/tdesign-component/example/lib/page/footer/footer_page.dart index 1f185b3a9e..50fb588880 100644 --- a/tdesign-component/example/lib/page/footer/footer_page.dart +++ b/tdesign-component/example/lib/page/footer/footer_page.dart @@ -16,7 +16,6 @@ class TFooterPage extends StatelessWidget { title: tTitle(context), desc: '用于基础列表展示,可附带文字、品牌 logo、操作,常用商详、个人中心、设置等页面。', exampleCodeGroup: 'footer', - showTestModule: false, children: [ ExampleModule( title: '组件类型', diff --git a/tdesign-component/example/lib/page/form/form_page.dart b/tdesign-component/example/lib/page/form/form_page.dart index 18b980340a..fe4a03f1f8 100644 --- a/tdesign-component/example/lib/page/form/form_page.dart +++ b/tdesign-component/example/lib/page/form/form_page.dart @@ -16,7 +16,6 @@ class TFormPage extends StatelessWidget { desc: '用以收集、校验和提交数据,一般由输入框、单选框、复选框、选择器等控件组成。', exampleCodeGroup: 'form', compactDemo: true, - showTestModule: false, children: [ ExampleModule( title: '组件类型', diff --git a/tdesign-component/example/lib/page/image/image_page.dart b/tdesign-component/example/lib/page/image/image_page.dart index db87a1a7a1..fba4bb0946 100644 --- a/tdesign-component/example/lib/page/image/image_page.dart +++ b/tdesign-component/example/lib/page/image/image_page.dart @@ -16,7 +16,6 @@ class TImagePage extends StatelessWidget { title: tTitle(context), exampleCodeGroup: 'image', desc: '用于展示效果,主要为上下左右居中裁切、拉伸、平铺等方式。', - showTestModule: false, children: [ ExampleModule( title: '组件类型', diff --git a/tdesign-component/example/lib/page/image_viewer/image_viewer_page.dart b/tdesign-component/example/lib/page/image_viewer/image_viewer_page.dart index 291c67d7f6..a03fcb5f0a 100644 --- a/tdesign-component/example/lib/page/image_viewer/image_viewer_page.dart +++ b/tdesign-component/example/lib/page/image_viewer/image_viewer_page.dart @@ -16,7 +16,6 @@ class TImageViewerPage extends StatelessWidget { title: 'ImageViewer 图片预览', desc: '用于图片内容的缩略展示与查看。', exampleCodeGroup: 'image-viewer', - showTestModule: false, children: [ ExampleModule( title: '组件类型', diff --git a/tdesign-component/example/lib/page/indexes/indexes_page.dart b/tdesign-component/example/lib/page/indexes/indexes_page.dart index 18ebe37588..a6631669b5 100644 --- a/tdesign-component/example/lib/page/indexes/indexes_page.dart +++ b/tdesign-component/example/lib/page/indexes/indexes_page.dart @@ -19,7 +19,6 @@ class TIndexesPage extends StatelessWidget { navBarKey: navBarkey, compactDemo: true, backgroundColor: context.tTheme.bgColorContainer, - showTestModule: false, children: [ ExampleModule( title: '组件类型', diff --git a/tdesign-component/example/lib/page/input/input_page.dart b/tdesign-component/example/lib/page/input/input_page.dart index 555e0e8d65..c79c930e4c 100644 --- a/tdesign-component/example/lib/page/input/input_page.dart +++ b/tdesign-component/example/lib/page/input/input_page.dart @@ -33,7 +33,6 @@ class _TInputViewPageState extends State { exampleCodeGroup: 'input', desc: '用于单行文本信息输入。', compactDemo: true, - showTestModule: false, children: [ ExampleModule( title: '组件类型', diff --git a/tdesign-component/example/lib/page/loading/loading_page.dart b/tdesign-component/example/lib/page/loading/loading_page.dart index 2aa04ec3c6..6c9023a0b3 100644 --- a/tdesign-component/example/lib/page/loading/loading_page.dart +++ b/tdesign-component/example/lib/page/loading/loading_page.dart @@ -30,7 +30,6 @@ class _TLoadingPageState extends State { title: tTitle(), exampleCodeGroup: 'loading', desc: '用于表示页面或操作的加载状态,给予用户反馈的同时减缓等待的焦虑感,由一个或一组反馈动效组成。', - showTestModule: false, children: [ ExampleModule( title: '组件类型', diff --git a/tdesign-component/example/lib/page/message/message_page.dart b/tdesign-component/example/lib/page/message/message_page.dart index d7f8423886..d6314d2817 100644 --- a/tdesign-component/example/lib/page/message/message_page.dart +++ b/tdesign-component/example/lib/page/message/message_page.dart @@ -18,7 +18,6 @@ class TMessagePage extends StatelessWidget { desc: '用于轻量级反馈或提示,不会打断用户操作。', exampleCodeGroup: 'message', itemMargin: const EdgeInsets.symmetric(horizontal: 16), - showTestModule: false, children: [ ExampleModule( title: '组件类型', diff --git a/tdesign-component/example/lib/page/navbar/navbar_page.dart b/tdesign-component/example/lib/page/navbar/navbar_page.dart index 9a27c7d9c5..2026a693c2 100644 --- a/tdesign-component/example/lib/page/navbar/navbar_page.dart +++ b/tdesign-component/example/lib/page/navbar/navbar_page.dart @@ -25,7 +25,6 @@ class TNavBarPage extends StatelessWidget { exampleCodeGroup: 'navbar', desc: '用于不同页面之间切换或者跳转,位于内容区的上方,系统状态栏的下方。', compactDemo: true, - showTestModule: false, children: [ ExampleModule( title: '组件类型', diff --git a/tdesign-component/example/lib/page/notice_bar/notice_bar_page.dart b/tdesign-component/example/lib/page/notice_bar/notice_bar_page.dart index 5762aa8db4..44b93e3497 100644 --- a/tdesign-component/example/lib/page/notice_bar/notice_bar_page.dart +++ b/tdesign-component/example/lib/page/notice_bar/notice_bar_page.dart @@ -22,7 +22,6 @@ class TNoticeBarPage extends StatelessWidget { title: tTitle(context), exampleCodeGroup: 'noticeBar', desc: '在导航栏下方,用于给用户显示提示消息。', - showTestModule: false, children: [ ExampleModule( title: '组件类型', diff --git a/tdesign-component/example/lib/page/picker/picker_page.dart b/tdesign-component/example/lib/page/picker/picker_page.dart index 0a2d9e865d..0f5f491b92 100644 --- a/tdesign-component/example/lib/page/picker/picker_page.dart +++ b/tdesign-component/example/lib/page/picker/picker_page.dart @@ -27,7 +27,6 @@ class _TPickerPageState extends State { backgroundColor: Theme.of(context).brightness == Brightness.light ? const Color(0xFFF6F6F6) : context.tTheme.bgColorPage, - showTestModule: false, children: [ ExampleModule( title: '组件类型', diff --git a/tdesign-component/example/lib/page/popover/popover_page.dart b/tdesign-component/example/lib/page/popover/popover_page.dart index 378b0c8303..a98c91a776 100644 --- a/tdesign-component/example/lib/page/popover/popover_page.dart +++ b/tdesign-component/example/lib/page/popover/popover_page.dart @@ -51,7 +51,6 @@ class _TPopoverPage extends State { title: tTitle(), desc: '用于文字提示的气泡框。', exampleCodeGroup: 'popover', - showTestModule: false, children: [ ExampleModule( title: '组件类型', diff --git a/tdesign-component/example/lib/page/popup/popup_page.dart b/tdesign-component/example/lib/page/popup/popup_page.dart index 3585554765..e7da7881b0 100644 --- a/tdesign-component/example/lib/page/popup/popup_page.dart +++ b/tdesign-component/example/lib/page/popup/popup_page.dart @@ -18,7 +18,6 @@ class TPopupPage extends StatelessWidget { desc: '由其他控件触发,屏幕滑出或弹出一块自定义内容区域。', exampleCodeGroup: 'popup', itemMargin: const EdgeInsets.symmetric(horizontal: 16), - showTestModule: false, children: [ ExampleModule( title: '组件类型', diff --git a/tdesign-component/example/lib/page/progress/progress_page.dart b/tdesign-component/example/lib/page/progress/progress_page.dart index feed1b5b9f..8f41e2a791 100644 --- a/tdesign-component/example/lib/page/progress/progress_page.dart +++ b/tdesign-component/example/lib/page/progress/progress_page.dart @@ -23,7 +23,6 @@ class TProgressPage extends StatelessWidget { title: tTitle(context), desc: '用于展示任务当前的进度。', exampleCodeGroup: 'progress', - showTestModule: false, children: [ ExampleModule( title: '组件类型', diff --git a/tdesign-component/example/lib/page/radio/radio_page.dart b/tdesign-component/example/lib/page/radio/radio_page.dart index 658702570f..580fb7238f 100644 --- a/tdesign-component/example/lib/page/radio/radio_page.dart +++ b/tdesign-component/example/lib/page/radio/radio_page.dart @@ -27,7 +27,6 @@ class _TRadioPageState extends State { desc: '用于在预设的一组选项中执行单项选择,并呈现选择结果。', exampleCodeGroup: 'radio', compactDemo: true, - showTestModule: false, children: [ ExampleModule( title: '组件类型', diff --git a/tdesign-component/example/lib/page/rate/rate_page.dart b/tdesign-component/example/lib/page/rate/rate_page.dart index b16b3e9d40..6bcc6b68fa 100644 --- a/tdesign-component/example/lib/page/rate/rate_page.dart +++ b/tdesign-component/example/lib/page/rate/rate_page.dart @@ -25,7 +25,6 @@ class TRatePage extends StatelessWidget { desc: '用于对某行为/事物进行打分。', exampleCodeGroup: 'rate', compactDemo: true, - showTestModule: false, children: [ ExampleModule( title: '组件类型', diff --git a/tdesign-component/example/lib/page/result/result_page.dart b/tdesign-component/example/lib/page/result/result_page.dart index c01fc82545..03bc5e657b 100644 --- a/tdesign-component/example/lib/page/result/result_page.dart +++ b/tdesign-component/example/lib/page/result/result_page.dart @@ -18,7 +18,6 @@ class TResultPage extends StatelessWidget { title: 'Result 结果', desc: '用于反馈不同结果的展示。', exampleCodeGroup: 'result', - showTestModule: false, children: [ ExampleModule( title: '组件类型', diff --git a/tdesign-component/example/lib/page/search_bar/search_bar_page.dart b/tdesign-component/example/lib/page/search_bar/search_bar_page.dart index e0bdcacd82..55a6d5658d 100644 --- a/tdesign-component/example/lib/page/search_bar/search_bar_page.dart +++ b/tdesign-component/example/lib/page/search_bar/search_bar_page.dart @@ -24,7 +24,6 @@ class _TSearchBarPageState extends State { title: tTitle(), desc: '用于用户输入搜索信息,并进行页面内容搜索。', compactDemo: true, - showTestModule: false, exampleCodeGroup: 'search', children: [ ExampleModule( diff --git a/tdesign-component/example/lib/page/sidebar/sidebar_page.dart b/tdesign-component/example/lib/page/sidebar/sidebar_page.dart index 899cfa9de0..8dcc7d3b97 100644 --- a/tdesign-component/example/lib/page/sidebar/sidebar_page.dart +++ b/tdesign-component/example/lib/page/sidebar/sidebar_page.dart @@ -32,7 +32,6 @@ class TSideBarPageState extends State { exampleCodeGroup: 'sideBar', desc: '用于内容分类后的展示切换。', compactDemo: true, - showTestModule: false, children: [ ExampleModule( title: '组件类型', diff --git a/tdesign-component/example/lib/page/slider/slider_page.dart b/tdesign-component/example/lib/page/slider/slider_page.dart index a18e10b6ab..00ea792a0b 100644 --- a/tdesign-component/example/lib/page/slider/slider_page.dart +++ b/tdesign-component/example/lib/page/slider/slider_page.dart @@ -28,7 +28,6 @@ class _TSliderPageState extends State { desc: '用于选择横轴上的数值、区间、档位。', exampleCodeGroup: 'slider', compactDemo: true, - showTestModule: false, children: [ ExampleModule( title: '组件类型', diff --git a/tdesign-component/example/lib/page/stepper/stepper_page.dart b/tdesign-component/example/lib/page/stepper/stepper_page.dart index 1f3e0168f3..51073fb483 100644 --- a/tdesign-component/example/lib/page/stepper/stepper_page.dart +++ b/tdesign-component/example/lib/page/stepper/stepper_page.dart @@ -24,7 +24,6 @@ class _TStepperPageState extends State { desc: '用于数量的增减。', exampleCodeGroup: 'stepper', compactDemo: true, - showTestModule: false, children: [ ExampleModule( title: '组件类型', diff --git a/tdesign-component/example/lib/page/steps/steps_page.dart b/tdesign-component/example/lib/page/steps/steps_page.dart index 6b47999031..bdd986c0c6 100644 --- a/tdesign-component/example/lib/page/steps/steps_page.dart +++ b/tdesign-component/example/lib/page/steps/steps_page.dart @@ -32,7 +32,6 @@ class _TStepsPageState extends State { exampleCodeGroup: 'steps', desc: '用于任务步骤展示或任务进度展示。', compactDemo: true, - showTestModule: false, children: [ ExampleModule( title: '组件类型', diff --git a/tdesign-component/example/lib/page/swipe_cell/swipe_cell_page.dart b/tdesign-component/example/lib/page/swipe_cell/swipe_cell_page.dart index 791607db8a..108883a399 100644 --- a/tdesign-component/example/lib/page/swipe_cell/swipe_cell_page.dart +++ b/tdesign-component/example/lib/page/swipe_cell/swipe_cell_page.dart @@ -18,7 +18,6 @@ class TSwipeCellPage extends StatelessWidget { exampleCodeGroup: 'SwipeCell', desc: '用于承载列表中的更多操作,通过左右滑动来展示,按钮宽度根据内容自适应、高度根据列表高度而变化。', backgroundColor: context.tTheme.bgColorPage, - showTestModule: false, children: [ ExampleModule( title: '组件类型', diff --git a/tdesign-component/example/lib/page/swiper/swiper_page.dart b/tdesign-component/example/lib/page/swiper/swiper_page.dart index 8b0ecf921a..4c593cd9e9 100644 --- a/tdesign-component/example/lib/page/swiper/swiper_page.dart +++ b/tdesign-component/example/lib/page/swiper/swiper_page.dart @@ -26,7 +26,6 @@ class _TSwiperPageState extends State { title: tTitle(), desc: '用于循环轮播一组图片或内容,也可以滑动进行切换,轮播动效时间可以设置。', exampleCodeGroup: 'swiper', - showTestModule: false, children: [ ExampleModule( title: '组件类型', diff --git a/tdesign-component/example/lib/page/switch/switch_page.dart b/tdesign-component/example/lib/page/switch/switch_page.dart index b077eb58b1..ec0af851ab 100644 --- a/tdesign-component/example/lib/page/switch/switch_page.dart +++ b/tdesign-component/example/lib/page/switch/switch_page.dart @@ -21,7 +21,6 @@ class TSwitchPage extends StatelessWidget { exampleCodeGroup: 'switch', desc: '用于控制某个功能的开启和关闭。', compactDemo: true, - showTestModule: false, children: [ ExampleModule( title: '组件类型', diff --git a/tdesign-component/example/lib/page/tab_bar/tab_bar_page.dart b/tdesign-component/example/lib/page/tab_bar/tab_bar_page.dart index 388302c533..e406865e37 100644 --- a/tdesign-component/example/lib/page/tab_bar/tab_bar_page.dart +++ b/tdesign-component/example/lib/page/tab_bar/tab_bar_page.dart @@ -27,7 +27,6 @@ class _TTabBarPageState extends State { desc: '用于在不同功能模块之间进行快速切换,位于页面底部。', exampleCodeGroup: 'tabBar', compactDemo: true, - showTestModule: false, children: [ ExampleModule( title: '组件类型', diff --git a/tdesign-component/example/lib/page/table/table_page.dart b/tdesign-component/example/lib/page/table/table_page.dart index 90bcd4386b..10377203a2 100644 --- a/tdesign-component/example/lib/page/table/table_page.dart +++ b/tdesign-component/example/lib/page/table/table_page.dart @@ -26,7 +26,6 @@ class TTablePage extends StatelessWidget { '表格常用于展示同类结构下的多种数据,易于组织、对比和分析等,并可对数据进行搜索、筛选、排序等操作。一般包括表头、数据行和表尾三部分。', exampleCodeGroup: 'table', compactDemo: true, - showTestModule: false, children: [ ExampleModule( title: '组件类型', diff --git a/tdesign-component/example/lib/page/tag/tag_page.dart b/tdesign-component/example/lib/page/tag/tag_page.dart index 74693db864..55b1064014 100644 --- a/tdesign-component/example/lib/page/tag/tag_page.dart +++ b/tdesign-component/example/lib/page/tag/tag_page.dart @@ -26,7 +26,6 @@ class _TTagPageState extends State { title: tTitle(), desc: '用于表明主体的类目,属性或状态', exampleCodeGroup: 'tag', - showTestModule: false, children: [ ExampleModule( title: '组件类型', diff --git a/tdesign-component/example/lib/page/textarea/textarea_page.dart b/tdesign-component/example/lib/page/textarea/textarea_page.dart index 9528b90d81..77064c01bb 100644 --- a/tdesign-component/example/lib/page/textarea/textarea_page.dart +++ b/tdesign-component/example/lib/page/textarea/textarea_page.dart @@ -24,7 +24,6 @@ class TTextareaPage extends StatelessWidget { exampleCodeGroup: 'textarea', desc: '用于多行文本信息输入。', compactDemo: true, - showTestModule: false, children: [ ExampleModule( title: '组件类型', diff --git a/tdesign-component/example/lib/page/theme/theme_other_color_example.dart b/tdesign-component/example/lib/page/theme/theme_other_color_example.dart index 75f5ebbb2b..1898671982 100644 --- a/tdesign-component/example/lib/page/theme/theme_other_color_example.dart +++ b/tdesign-component/example/lib/page/theme/theme_other_color_example.dart @@ -14,13 +14,18 @@ class _ThemeOtherColorExampleState extends State { @override void didChangeDependencies() { super.didChangeDependencies(); - grayMap - ..clear() - ..addEntries( - context.tTheme.colorMap.entries.where( - (entry) => entry.key.startsWith('grayColor'), - ), - ); + final colors = context.tTheme.colorMap; + final keys = { + ...TThemeData.defaultData().colorMap.keys, + ...colors.keys, + }.where((key) => key.startsWith('grayColor')); + grayMap.clear(); + for (final key in keys) { + final color = colors[key]; + if (color != null) { + grayMap[key] = color; + } + } } Widget _buildOtherColor(BuildContext context) { diff --git a/tdesign-component/example/lib/page/time_counter/time_counter_page.dart b/tdesign-component/example/lib/page/time_counter/time_counter_page.dart index 181b5ac362..dddf3f796e 100644 --- a/tdesign-component/example/lib/page/time_counter/time_counter_page.dart +++ b/tdesign-component/example/lib/page/time_counter/time_counter_page.dart @@ -27,7 +27,6 @@ class TTimeCounterPage extends StatelessWidget { title: tTitle(context), desc: '用于实时展示计时数值,支持正向计时与倒计时。', exampleCodeGroup: 'timeCounter', - showTestModule: false, children: [ ExampleModule( title: '组件类型', diff --git a/tdesign-component/example/lib/page/tree_select/tree_select_page.dart b/tdesign-component/example/lib/page/tree_select/tree_select_page.dart index bf98bded09..47b77263a7 100644 --- a/tdesign-component/example/lib/page/tree_select/tree_select_page.dart +++ b/tdesign-component/example/lib/page/tree_select/tree_select_page.dart @@ -16,7 +16,6 @@ class TTreeSelectPage extends StatelessWidget { desc: '用于多层级数据的逐级选择。', exampleCodeGroup: 'tree-select', compactDemo: true, - showTestModule: false, children: [ ExampleModule( title: '组件类型', diff --git a/tdesign-component/example/test/action_sheet/action_sheet_page_test.dart b/tdesign-component/example/test/action_sheet/action_sheet_page_test.dart index 566e250306..7eeb2585af 100644 --- a/tdesign-component/example/test/action_sheet/action_sheet_page_test.dart +++ b/tdesign-component/example/test/action_sheet/action_sheet_page_test.dart @@ -3,6 +3,7 @@ import 'package:provider/provider.dart'; import 'package:tdesign_flutter/src/components/action_sheet/t_action_sheet_grid.dart'; import 'package:tdesign_flutter/src/components/action_sheet/t_action_sheet_item_widget.dart'; import 'package:tdesign_flutter/tdesign_flutter.dart'; +import 'package:tdesign_flutter_example/base/example_widget.dart'; import 'package:tdesign_flutter_example/page/action_sheet/action_sheet_page.dart'; import 'package:tdesign_flutter_example/provider/theme_mode_provider.dart'; @@ -160,7 +161,10 @@ void main() { } } expect(foundLabels, containsAll(labels)); - expect(find.text('单元测试'), findsNothing); + expect( + tester.widget(find.byType(ExamplePage)).showTestModule, + isTrue, + ); }); testWidgets('触发按钮按 Figma 顺序使用 16dp 边距和 8dp 间距连续排列', (tester) async { diff --git a/tdesign-component/example/test/backtop/backtop_demo_test.dart b/tdesign-component/example/test/backtop/backtop_demo_test.dart index db77994487..88a0482469 100644 --- a/tdesign-component/example/test/backtop/backtop_demo_test.dart +++ b/tdesign-component/example/test/backtop/backtop_demo_test.dart @@ -13,7 +13,7 @@ void main() { final page = tester.widget(find.byType(ExamplePage)); expect(page.compactDemo, isTrue); - expect(page.showTestModule, isFalse); + expect(page.showTestModule, isTrue); expect( page.floatingActionButtonAnimator, FloatingActionButtonAnimator.noAnimation, diff --git a/tdesign-component/example/test/badge/badge_page_test.dart b/tdesign-component/example/test/badge/badge_page_test.dart index d861172adc..4444ec53ea 100644 --- a/tdesign-component/example/test/badge/badge_page_test.dart +++ b/tdesign-component/example/test/badge/badge_page_test.dart @@ -42,7 +42,7 @@ void main() { 'Medium', ]); expect(page.floatingActionButton, isNull); - expect(page.showTestModule, isFalse); + expect(page.showTestModule, isTrue); expect(page.backgroundColor, const Color(0xFFF6F6F6)); expect( page.children diff --git a/tdesign-component/example/test/calendar/calendar_demo_test.dart b/tdesign-component/example/test/calendar/calendar_demo_test.dart index a5d3b1ef46..0046528832 100644 --- a/tdesign-component/example/test/calendar/calendar_demo_test.dart +++ b/tdesign-component/example/test/calendar/calendar_demo_test.dart @@ -1,6 +1,7 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:tdesign_flutter/src/components/calendar/t_calendar_cell.dart'; import 'package:tdesign_flutter/tdesign_flutter.dart'; +import 'package:tdesign_flutter_example/base/example_widget.dart'; import '../demo_page_test_utils.dart'; import 'calendar_demo_test_spec.dart'; @@ -111,7 +112,10 @@ void main() { expect(tops, orderedEquals([...tops]..sort())); expect(find.text('单选模式'), findsNothing); expect(find.text('滚动控制'), findsNothing); - expect(find.text('单元测试'), findsNothing); + expect( + tester.widget(find.byType(ExamplePage)).showTestModule, + isTrue, + ); final inlineCalendar = tester.widget( find.byKey(const ValueKey('calendar-inline-panel')), diff --git a/tdesign-component/example/test/cell/cell_page_test.dart b/tdesign-component/example/test/cell/cell_page_test.dart index e6b2c7f0f1..9e03cd4a72 100644 --- a/tdesign-component/example/test/cell/cell_page_test.dart +++ b/tdesign-component/example/test/cell/cell_page_test.dart @@ -2,6 +2,7 @@ import 'package:flutter/rendering.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:provider/provider.dart'; import 'package:tdesign_flutter/tdesign_flutter.dart'; +import 'package:tdesign_flutter_example/base/example_widget.dart'; import 'package:tdesign_flutter_example/page/cell/cell_page.dart'; import 'package:tdesign_flutter_example/provider/theme_mode_provider.dart'; @@ -117,7 +118,10 @@ void main() { expect(find.text('多行单元格'), findsOneWidget); expect(find.text('02 组件样式'), findsOneWidget); expect(find.text('卡片单元格'), findsOneWidget); - expect(find.text('03 单元测试'), findsNothing); + expect( + tester.widget(find.byType(ExamplePage)).showTestModule, + isTrue, + ); final single = cellsOf(tester, 'cell-demo-single-line'); expect( diff --git a/tdesign-component/example/test/collapse/collapse_demo_test.dart b/tdesign-component/example/test/collapse/collapse_demo_test.dart index 801d89ec8a..0dfdceb3e1 100644 --- a/tdesign-component/example/test/collapse/collapse_demo_test.dart +++ b/tdesign-component/example/test/collapse/collapse_demo_test.dart @@ -22,7 +22,7 @@ void main() { testWidgets('实例顺序和初始状态与设计稿一致', (tester) async { await pumpFullDemoPage(tester, collapseDemoSpec, ThemeMode.light); final page = tester.widget(find.byType(ExamplePage)); - expect(page.showTestModule, isFalse); + expect(page.showTestModule, isTrue); expect(page.children.map((module) => module.title), ['组件类型', '组件样式']); expect(page.children[0].children.map((item) => item.desc), [ '基础折叠面板', @@ -30,15 +30,14 @@ void main() { '手风琴式', ]); - final collapses = tester.widgetList( - find.byWidgetPredicate((widget) => widget is TCollapse), - ).toList(); + final collapses = tester + .widgetList( + find.byWidgetPredicate((widget) => widget is TCollapse), + ) + .toList(); expect(collapses, hasLength(4)); expect(collapses[0].value, ['basic']); - expect( - collapses[1].children.single.trailingBuilder, - isNotNull, - ); + expect(collapses[1].children.single.trailingBuilder, isNotNull); final accordionCollapse = tester.widget( find.byWidgetPredicate( (widget) => diff --git a/tdesign-component/example/test/dialog/dialog_page_test.dart b/tdesign-component/example/test/dialog/dialog_page_test.dart index fe373dae0c..3c13210f1b 100644 --- a/tdesign-component/example/test/dialog/dialog_page_test.dart +++ b/tdesign-component/example/test/dialog/dialog_page_test.dart @@ -1,6 +1,7 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:provider/provider.dart'; import 'package:tdesign_flutter/tdesign_flutter.dart'; +import 'package:tdesign_flutter_example/base/example_widget.dart'; import 'package:tdesign_flutter_example/page/dialog/dialog_page.dart'; import 'package:tdesign_flutter_example/provider/theme_mode_provider.dart'; @@ -85,7 +86,10 @@ void main() { for (final label in ['文字按钮', '水平基础按钮', '垂直基础按钮', '多按钮', '带关闭按钮的对话框']) { expect(find.text(label), findsNWidgets(2), reason: label); } - expect(find.text('单元测试'), findsNothing); + expect( + tester.widget(find.byType(ExamplePage)).showTestModule, + isTrue, + ); }); testWidgets('22 个公开入口均可通过真实操作打开并关闭', (tester) async { diff --git a/tdesign-component/example/test/drawer/drawer_demo_test.dart b/tdesign-component/example/test/drawer/drawer_demo_test.dart index 6fa032a5d8..7b34d34822 100644 --- a/tdesign-component/example/test/drawer/drawer_demo_test.dart +++ b/tdesign-component/example/test/drawer/drawer_demo_test.dart @@ -33,7 +33,10 @@ void main() { testWidgets('公开 Demo 展示 Figma 的七个入口', (tester) async { await pumpFullDemoPage(tester, drawerDemoPageTestSpec, ThemeMode.light); - expect(find.text('单元测试'), findsNothing); + expect( + tester.widget(find.byType(ExamplePage)).showTestModule, + isTrue, + ); final renderedEntries = <(String, double)>[]; for (final scene in drawerDemoScenes) { final label = scene.label; diff --git a/tdesign-component/example/test/dropdown_menu/dropdown_menu_page_test.dart b/tdesign-component/example/test/dropdown_menu/dropdown_menu_page_test.dart index 20e49d70e1..9bb42084a2 100644 --- a/tdesign-component/example/test/dropdown_menu/dropdown_menu_page_test.dart +++ b/tdesign-component/example/test/dropdown_menu/dropdown_menu_page_test.dart @@ -1,6 +1,7 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:provider/provider.dart'; import 'package:tdesign_flutter/tdesign_flutter.dart'; +import 'package:tdesign_flutter_example/base/example_widget.dart'; import 'package:tdesign_flutter_example/page/dropdown_menu/dropdown_menu_page.dart'; import 'package:tdesign_flutter_example/provider/theme_mode_provider.dart'; @@ -52,7 +53,10 @@ void main() { actualEnabledStates, dropdownMenuPublicScenarios.map((scenario) => scenario.enabled).toList(), ); - expect(find.text('单元测试'), findsNothing); + expect( + tester.widget(find.byType(ExamplePage)).showTestModule, + isTrue, + ); await disposeDemoPage(tester); }); diff --git a/tdesign-component/example/test/image/image_demo_test.dart b/tdesign-component/example/test/image/image_demo_test.dart index 3dad9c28d2..73ccb2e2b0 100644 --- a/tdesign-component/example/test/image/image_demo_test.dart +++ b/tdesign-component/example/test/image/image_demo_test.dart @@ -79,6 +79,9 @@ void main() { expect(images[7].src, isNull); expect(images[8].src, isEmpty); expect(images[9].src, isEmpty); - expect(find.textContaining('单元测试'), findsNothing); + expect( + tester.widget(find.byType(ExamplePage)).showTestModule, + isTrue, + ); }, tags: 'demo'); } diff --git a/tdesign-component/example/test/notice_bar/notice_bar_page_test.dart b/tdesign-component/example/test/notice_bar/notice_bar_page_test.dart index a3b54beec0..b5da781a20 100644 --- a/tdesign-component/example/test/notice_bar/notice_bar_page_test.dart +++ b/tdesign-component/example/test/notice_bar/notice_bar_page_test.dart @@ -10,7 +10,7 @@ void main() { await pumpFullDemoPage(tester, noticeBarDemoPageTestSpec, ThemeMode.light); final page = tester.widget(find.byType(ExamplePage)); - expect(page.showTestModule, isFalse); + expect(page.showTestModule, isTrue); expect(page.children.map((module) => module.title), [ '组件类型', '组件状态', @@ -32,7 +32,10 @@ void main() { page.children[2].children.single.desc, '可滚动公告栏有水平(horizontal)和垂直(vertical)', ); - expect(find.textContaining('单元测试'), findsNothing); + expect( + tester.widget(find.byType(ExamplePage)).showTestModule, + isTrue, + ); expect(tester.takeException(), isNull); await disposeDemoPage(tester); }); diff --git a/tdesign-component/example/test/popup/popup_demo_test.dart b/tdesign-component/example/test/popup/popup_demo_test.dart index 7a03579478..0b25ee0aea 100644 --- a/tdesign-component/example/test/popup/popup_demo_test.dart +++ b/tdesign-component/example/test/popup/popup_demo_test.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; +import 'package:tdesign_flutter_example/base/example_widget.dart'; import '../demo_page_test_utils.dart'; import 'popup_demo_test_spec.dart'; @@ -27,7 +28,10 @@ void main() { ]; expect(triggerTops, orderedEquals([...triggerTops]..sort())); expect(find.text('嵌套弹窗'), findsNothing); - expect(find.text('单元测试'), findsNothing); + expect( + tester.widget(find.byType(ExamplePage)).showTestModule, + isTrue, + ); await disposeDemoPage(tester); }, tags: 'demo'); diff --git a/tdesign-component/example/test/progress/progress_demo_test.dart b/tdesign-component/example/test/progress/progress_demo_test.dart index 49438143f5..a54de8879a 100644 --- a/tdesign-component/example/test/progress/progress_demo_test.dart +++ b/tdesign-component/example/test/progress/progress_demo_test.dart @@ -54,7 +54,7 @@ void main() { } final page = tester.widget(find.byType(ExamplePage)); - expect(page.showTestModule, isFalse); + expect(page.showTestModule, isTrue); expect(page.backgroundColor, isNull); expect(page.itemMargin, isNull); diff --git a/tdesign-component/example/test/result/result_demo_test.dart b/tdesign-component/example/test/result/result_demo_test.dart index 3b0831d256..ae77c4fcb8 100644 --- a/tdesign-component/example/test/result/result_demo_test.dart +++ b/tdesign-component/example/test/result/result_demo_test.dart @@ -1,5 +1,6 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:tdesign_flutter/tdesign_flutter.dart'; +import 'package:tdesign_flutter_example/base/example_widget.dart'; import '../demo_page_test_utils.dart'; import 'result_demo_test_spec.dart'; @@ -10,8 +11,11 @@ void main() { testWidgets('公开 Demo 展示完整状态、描述与自定义结果', (tester) async { await pumpFullDemoPage(tester, resultDemoPageTestSpec, ThemeMode.light); - expect(find.text('02 单元测试'), findsNothing); - expect(find.textContaining('未在示例稿中体现'), findsNothing); + expect( + tester.widget(find.byType(ExamplePage)).showTestModule, + isTrue, + ); + expect(find.textContaining('未在示例稿中体现'), findsOneWidget); final results = tester.widgetList(find.byType(TResult)).toList(); expect(results, hasLength(9)); diff --git a/tdesign-component/example/test/search/search_page_test.dart b/tdesign-component/example/test/search/search_page_test.dart index 748b1f8d84..9772905e45 100644 --- a/tdesign-component/example/test/search/search_page_test.dart +++ b/tdesign-component/example/test/search/search_page_test.dart @@ -45,7 +45,7 @@ void main() { final page = tester.widget(find.byType(ExamplePage)); expect(page.compactDemo, isTrue); - expect(page.showTestModule, isFalse); + expect(page.showTestModule, isTrue); expect(page.children.map((module) => module.title), ['组件类型', '组件样式']); expect(page.children.last.children.map((item) => item.desc), [ '搜索框形状', @@ -96,10 +96,12 @@ void main() { await tester.pumpWidget(buildPage()); await tester.pump(); - final resultField = find.byWidgetPredicate( - (widget) => - widget is TextField && - widget.decoration?.hintText == '输入tdesign,有预览结果', + final resultField = find.descendant( + of: find.byWidgetPredicate( + (widget) => + widget is TSearchBar && widget.hintText == '输入tdesign,有预览结果', + ), + matching: find.byType(TextField), ); await tester.tap(resultField); await tester.pump(); diff --git a/tdesign-component/example/test/switch/switch_page_test.dart b/tdesign-component/example/test/switch/switch_page_test.dart index 88cd1fed1e..231571592e 100644 --- a/tdesign-component/example/test/switch/switch_page_test.dart +++ b/tdesign-component/example/test/switch/switch_page_test.dart @@ -2,6 +2,7 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:provider/provider.dart'; import 'package:tdesign_flutter/tdesign_flutter.dart'; import 'package:tdesign_flutter_example/base/example_base.dart'; +import 'package:tdesign_flutter_example/base/example_widget.dart'; import 'package:tdesign_flutter_example/page/switch/switch_page.dart'; import 'package:tdesign_flutter_example/provider/theme_mode_provider.dart'; @@ -46,7 +47,10 @@ void main() { expect(find.text('01 组件类型'), findsOneWidget); expect(find.text('02 组件状态'), findsOneWidget); expect(find.text('03 组件样式'), findsOneWidget); - expect(find.text('04 单元测试'), findsNothing); + expect( + tester.widget(find.byType(ExamplePage)).showTestModule, + isTrue, + ); expect(find.text('基础开关'), findsNWidgets(2)); expect(find.text('带描述开关'), findsOneWidget); expect(find.text('自定义颜色开关'), findsNWidgets(2)); @@ -72,7 +76,8 @@ void main() { matching: find.byType(Scrollable), ), ); - expect(scrollable.position.maxScrollExtent, 0); + // Debug 区块追加在公开示例后,页面允许继续滚动。 + expect(scrollable.position.maxScrollExtent, greaterThan(0)); expect( tester.widget(find.byType(Scaffold)).backgroundColor, const Color(0xFFF6F6F6), diff --git a/tdesign-component/example/test/textarea/textarea_page_test.dart b/tdesign-component/example/test/textarea/textarea_page_test.dart index 109e2cd459..89b79d5847 100644 --- a/tdesign-component/example/test/textarea/textarea_page_test.dart +++ b/tdesign-component/example/test/textarea/textarea_page_test.dart @@ -48,7 +48,10 @@ void main() { } expect(find.text('按字符权重限制'), findsNothing); - expect(find.text('单元测试'), findsNothing); + expect( + tester.widget(find.byType(ExamplePage)).showTestModule, + isTrue, + ); expect(tester.getSize(find.byType(TextareaMaxLengthExample)).height, 128); await disposeDemoPage(tester); }, tags: 'demo'); diff --git a/tdesign-component/example/test/theme/theme_demo_test.dart b/tdesign-component/example/test/theme/theme_demo_test.dart index fdf800997a..d78d4f0fe6 100644 --- a/tdesign-component/example/test/theme/theme_demo_test.dart +++ b/tdesign-component/example/test/theme/theme_demo_test.dart @@ -1,10 +1,14 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:tdesign_flutter/tdesign_flutter.dart'; +import 'package:tdesign_flutter_example/base/example_route.dart'; +import 'package:tdesign_flutter_example/base/example_widget.dart'; import 'package:tdesign_flutter_example/documentation_examples.dart'; +import 'package:tdesign_flutter_example/documentation_theme_demo.dart'; import 'package:tdesign_flutter_example/page/theme/theme_function_color_example.dart'; import 'package:tdesign_flutter_example/page/theme/theme_other_color_example.dart'; import 'package:tdesign_flutter_example/page/theme/theme_page.dart'; import 'package:tdesign_flutter_example/page/theme/theme_text_color_example.dart'; +import 'package:tdesign_flutter_example/util/web_theme_message.dart'; import '../demo_page_test_utils.dart'; @@ -153,4 +157,270 @@ void main() { expect(tester.takeException(), isNull); } }); + + testWidgets('Web incremental themes retain all inherited neutral swatches', ( + tester, + ) async { + for (final color in [Colors.red, Colors.blue]) { + final theme = parseWebThemeUpdateMessage({ + 'type': 'flutter-theme-update', + 'theme': { + 'light': { + 'color': { + 'grayColor1': color == Colors.red ? '#f44336' : '#2196f3', + }, + }, + 'dark': { + 'color': { + 'grayColor1': color == Colors.red ? '#f44336' : '#2196f3', + }, + }, + }, + }); + expect(theme, isNotNull); + expect( + theme!.colorMap.keys.where((key) => key.startsWith('grayColor')), + hasLength(1), + ); + for (final mode in [ThemeMode.light, ThemeMode.dark]) { + await tester.pumpWidget( + MaterialApp( + theme: TThemeBuilder.light(theme), + darkTheme: TThemeBuilder.dark(theme), + themeMode: mode, + home: const Scaffold( + body: SingleChildScrollView(child: ThemeOtherColorExample()), + ), + ), + ); + await tester.pumpAndSettle(); + for (var index = 1; index <= 14; index++) { + final label = find.text('grayColor$index'); + expect(label, findsOneWidget); + final swatch = tester.widget( + find.ancestor(of: label, matching: find.byType(Container)).first, + ); + expect( + swatch.color?.toARGB32(), + (index == 1 + ? color + : (mode == ThemeMode.dark ? theme.dark! : theme) + .colorMap['grayColor$index']) + ?.toARGB32(), + ); + } + expect(find.text('bgColorContainer'), findsOneWidget); + expect(tester.takeException(), isNull); + } + } + }); + + testWidgets('custom theme guide routes render the shared runnable examples', ( + tester, + ) async { + TExampleRoute.init(); + for (final scene in DocumentationThemeScene.values) { + final name = 'custom-theme-${scene.name}'; + expect(TExampleRoute.pageModelList.containsKey(name), isTrue); + await tester.pumpWidget( + MaterialApp( + key: ValueKey(name), + initialRoute: name, + onGenerateRoute: TExampleRoute.onGenerateRoute, + ), + ); + await tester.pumpAndSettle(); + expect(find.byType(DocumentationThemeDemo), findsOneWidget); + if (scene == DocumentationThemeScene.local) { + final tags = tester.elementList(find.byType(TTag)).toList(); + expect(tags, hasLength(2)); + expect( + Theme.of(tags[0]).extension()?.squareBorderRadius, + isNot(6), + ); + expect( + Theme.of(tags[1]).extension()?.squareBorderRadius, + 6, + ); + } else { + expect(find.text('brandColor:#0052D9'), findsOneWidget); + expect(find.text('品牌色按钮'), findsOneWidget); + expect(find.text('品牌色标签'), findsOneWidget); + } + expect(tester.takeException(), isNull); + } + }); + + testWidgets('custom theme guide switches light dark and system modes', ( + tester, + ) async { + tester.platformDispatcher.platformBrightnessTestValue = Brightness.light; + addTearDown(tester.platformDispatcher.clearPlatformBrightnessTestValue); + await tester.pumpWidget( + const DocumentationThemeDemo(scene: DocumentationThemeScene.mode), + ); + await tester.pumpAndSettle(); + expect(find.text('brandColor:#0052D9'), findsOneWidget); + await tester.tap(find.text('深色')); + await tester.pumpAndSettle(); + expect(find.text('brandColor:#699EF5'), findsOneWidget); + expect(find.text('当前外观:深色'), findsOneWidget); + await tester.tap(find.text('跟随系统')); + await tester.pumpAndSettle(); + expect(find.text('当前外观:浅色'), findsOneWidget); + tester.platformDispatcher.platformBrightnessTestValue = Brightness.dark; + await tester.pumpAndSettle(); + expect(find.text('当前外观:深色'), findsOneWidget); + await tester.tap(find.text('浅色')); + await tester.pumpAndSettle(); + expect(find.text('brandColor:#0052D9'), findsOneWidget); + expect(tester.takeException(), isNull); + }); + + testWidgets('custom theme guide shares the component ExamplePage structure', ( + tester, + ) async { + TExampleRoute.init(); + final model = TExampleRoute.pageModelList['custom-theme']; + expect(model, isNotNull); + final spec = DemoPageTestSpec( + name: 'custom-theme', + title: '自定义主题', + page: Builder(builder: (context) => model!.pageBuilder(context, model)), + expectedTexts: const ['JSON 配置', '组件局部样式', '明暗模式'], + ); + await pumpFullDemoPage(tester, spec, ThemeMode.light); + final page = tester.widget(find.byType(ExamplePage)); + expect(page.children.map((module) => module.title), [ + 'JSON 配置', + '组件局部样式', + '明暗模式', + ]); + expect(find.byType(DocumentationThemeContent), findsNWidgets(3)); + expect(find.text('brandColor:#0052D9'), findsNWidgets(2)); + await tester.tap(find.text('深色')); + await tester.pumpAndSettle(); + expect(find.text('brandColor:#699EF5'), findsNWidgets(2)); + expect(find.text('brandColor:#0052D9'), findsNothing); + expect(find.text('当前模式:深色'), findsOneWidget); + final defaults = TThemeData.defaultData().dark!; + final pageScaffold = tester.widget( + find + .descendant( + of: find.byType(ExamplePage), + matching: find.byType(Scaffold), + ) + .first, + ); + expect(pageScaffold.backgroundColor, defaults.bgColorPage); + for (final scene in DocumentationThemeScene.values) { + final finder = find.byKey(ValueKey('theme-scene-${scene.name}')); + expect( + tester.widget(finder).color, + defaults.bgColorContainer, + ); + final context = tester.element(finder); + expect(Theme.of(context).brightness, Brightness.dark); + expect(context.tTheme.textColorPrimary, defaults.textColorPrimary); + } + await tester.tap(find.text('浅色')); + await tester.pumpAndSettle(); + expect(find.text('brandColor:#0052D9'), findsNWidgets(2)); + expect(find.text('brandColor:#699EF5'), findsNothing); + expect(tester.takeException(), isNull); + await disposeDemoPage(tester); + }); + + testWidgets( + 'custom theme guide initially follows and updates with the host appearance', + (tester) async { + Widget host(bool dark) => MaterialApp( + theme: dark + ? TThemeBuilder.dark(TThemeData.defaultData()) + : TThemeBuilder.light(TThemeData.defaultData()), + home: const DocumentationThemeDemo(scene: DocumentationThemeScene.mode), + ); + for (final dark in [true, false, true]) { + await tester.pumpWidget(host(dark)); + await tester.pumpAndSettle(); + final defaults = dark + ? TThemeData.defaultData().dark! + : TThemeData.defaultData(); + final finder = find.byKey(const ValueKey('theme-scene-mode')); + expect( + tester.widget(finder).color, + defaults.bgColorContainer, + ); + expect( + Theme.of(tester.element(finder)).brightness, + dark ? Brightness.dark : Brightness.light, + ); + expect(find.text('当前模式:${dark ? '深色' : '浅色'}'), findsOneWidget); + expect( + find.text('主题配置:${dark ? 'oceanDark' : 'ocean'}'), + findsOneWidget, + ); + } + }, + ); + + testWidgets( + 'guide compares actual light and dark token values at phone width', + (tester) async { + tester.view.physicalSize = const Size(320, 1600); + tester.view.devicePixelRatio = 1; + addTearDown(tester.view.resetPhysicalSize); + addTearDown(tester.view.resetDevicePixelRatio); + for (final dark in [false, true]) { + await tester.pumpWidget( + MaterialApp( + theme: dark + ? TThemeBuilder.dark(TThemeData.defaultData()) + : TThemeBuilder.light(TThemeData.defaultData()), + home: const DocumentationThemeDemo( + scene: DocumentationThemeScene.json, + ), + ), + ); + await tester.pumpAndSettle(); + final comparison = find.byKey(const ValueKey('theme-token-comparison')); + expect(comparison, findsOneWidget); + for (final value in [ + '#0052D9', + '#699EF5', + '#F3F3F3', + '#181818', + '#FFFFFF', + '#242424', + '#E5000000', + '#E6FFFFFF', + ]) { + expect( + find.descendant(of: comparison, matching: find.text(value)), + findsOneWidget, + ); + } + expect(find.text('brandColor\nJSON 覆盖'), findsOneWidget); + expect(find.textContaining('默认继承'), findsNWidgets(3)); + expect( + find.text(dark ? '深色(当前)\noceanDark' : '浅色(当前)\nocean'), + findsOneWidget, + ); + final scene = find.byKey(const ValueKey('theme-scene-json')); + final activeTokens = tester.element(scene).tTheme; + final activeBg = dark ? '#181818' : '#F3F3F3'; + final activeText = dark ? '#E6FFFFFF' : '#E5000000'; + expect( + activeTokens.bgColorPage.toARGB32(), + int.parse('FF${activeBg.substring(1)}', radix: 16), + ); + expect( + activeTokens.textColorPrimary.toARGB32(), + int.parse(activeText.substring(1), radix: 16), + ); + expect(tester.getSize(comparison).width, lessThanOrEqualTo(320)); + expect(tester.takeException(), isNull); + } + }, + ); } diff --git a/tdesign-component/example/test/time_counter/time_counter_page_test.dart b/tdesign-component/example/test/time_counter/time_counter_page_test.dart index a404a917c3..03fdcb201e 100644 --- a/tdesign-component/example/test/time_counter/time_counter_page_test.dart +++ b/tdesign-component/example/test/time_counter/time_counter_page_test.dart @@ -1,6 +1,7 @@ import 'package:flutter/services.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:tdesign_flutter/tdesign_flutter.dart'; +import 'package:tdesign_flutter_example/base/example_widget.dart'; import '../demo_page_test_utils.dart'; import 'time_counter_demo_test_spec.dart'; @@ -26,7 +27,10 @@ void main() { expect(counters[5].variant, TTimeCounterVariant.highlight); expect(counters[5].splitWithUnit, isTrue); expect(counters[5].content, isNull); - expect(find.text('03 单元测试'), findsNothing); + expect( + tester.widget(find.byType(ExamplePage)).showTestModule, + isTrue, + ); expect(find.text('用于实时展示计时数值,支持正向计时与倒计时。'), findsOneWidget); for (final counter in counters) { diff --git a/tdesign-component/example/test/widget_test.dart b/tdesign-component/example/test/widget_test.dart index 47fdb43725..00e898ecda 100644 --- a/tdesign-component/example/test/widget_test.dart +++ b/tdesign-component/example/test/widget_test.dart @@ -203,7 +203,7 @@ void main() { ); }); - testWidgets('单元测试模块仅在 debug 模式按开关展示', (tester) async { + testWidgets('单元测试模块在 debug 模式默认展示并支持显式关闭', (tester) async { Widget buildPage({required bool showTestModule}) { return ChangeNotifierProvider( create: (_) => ThemeModeProvider(), @@ -226,6 +226,29 @@ void main() { ); } + await tester.pumpWidget( + ChangeNotifierProvider( + create: (_) => ThemeModeProvider(), + child: MaterialApp( + theme: TThemeBuilder.light(TThemeData.defaultData()), + home: ExamplePage( + title: 'Default test module', + exampleCodeGroup: 'test', + children: const [ + ExampleModule( + title: 'Demo', + children: [ + ExampleItem(ignoreCode: true, builder: _emptyExample), + ], + ), + ], + ), + ), + ), + ); + await tester.pump(); + expect(find.text('02 单元测试'), findsOneWidget); + await tester.pumpWidget(buildPage(showTestModule: true)); await tester.pump(); expect(find.text('02 单元测试'), findsOneWidget); diff --git a/tdesign-component/lib/src/theme/t_theme.dart b/tdesign-component/lib/src/theme/t_theme.dart index 7496775a22..ec998e291d 100644 --- a/tdesign-component/lib/src/theme/t_theme.dart +++ b/tdesign-component/lib/src/theme/t_theme.dart @@ -637,32 +637,41 @@ class TThemeData extends ThemeExtension { } /// 创建空对象 - static TThemeData _emptyData(String name, {TExtraThemeData? extraThemeData}) { - var refMap = TMap(factory: () => defaultData().refMap); + static TThemeData _emptyData( + String name, { + TExtraThemeData? extraThemeData, + bool preferDarkDefaults = false, + }) { + TThemeData defaults() => preferDarkDefaults + ? defaultData().dark ?? defaultData() + : defaultData(); + var refMap = TMap(factory: () => defaults().refMap); return TThemeData( name: name, - colorMap: TMap(factory: () => defaultData().colorMap, refs: refMap), - fontMap: TMap(factory: () => defaultData().fontMap, refs: refMap), + colorMap: TMap(factory: () => defaults().colorMap, refs: refMap), + fontMap: TMap(factory: () => defaults().fontMap, refs: refMap), fontMetricMap: TMap( - factory: () => defaultData().fontMetricMap, + factory: () => defaults().fontMetricMap, refs: refMap, ), - radiusMap: TMap(factory: () => defaultData().radiusMap, refs: refMap), + radiusMap: TMap(factory: () => defaults().radiusMap, refs: refMap), fontFamilyMap: TMap( - factory: () => defaultData().fontFamilyMap, + factory: () => defaults().fontFamilyMap, refs: refMap, ), - shadowMap: TMap(factory: () => defaultData().shadowMap, refs: refMap), + shadowMap: TMap(factory: () => defaults().shadowMap, refs: refMap), insetShadowMap: TMap( - factory: () => defaultData().insetShadowMap, + factory: () => defaults().insetShadowMap, refs: refMap, ), - spacerMap: TMap(factory: () => defaultData().spacerMap, refs: refMap), + spacerMap: TMap(factory: () => defaults().spacerMap, refs: refMap), refMap: refMap, ); } /// 解析主题 JSON;空字符串、格式错误或缺少 name 对应配置时返回 null。 + /// 浅色与深色块中未配置的 Token 分别回退默认浅色与深色主题; + /// 深色块不存在时不自动创建,暗色构建仍回退当前 Token。 /// /// [name] 主题名称,目前只支持一级键 /// @@ -700,6 +709,7 @@ class TThemeData extends ThemeExtension { darkName, themeConfig, extraThemeData, + preferDarkDefaults: true, ); darkTheme.light = theme; theme.dark = darkTheme; @@ -740,9 +750,10 @@ class TThemeData extends ThemeExtension { dynamic themeConfig, /// 可选的额外主题数据;仅在 name 对应的配置存在且非空时解析并安装。 - TExtraThemeData? extraThemeData, - ) { - var theme = _emptyData(name); + TExtraThemeData? extraThemeData, { + bool preferDarkDefaults = false, + }) { + var theme = _emptyData(name, preferDarkDefaults: preferDarkDefaults); Map? curThemeMap = themeConfig['$name']; if (curThemeMap?.isEmpty ?? true) { return theme; diff --git a/tdesign-component/test/components/theme/t_theme_test.dart b/tdesign-component/test/components/theme/t_theme_test.dart index bc48706b9a..5340ae3481 100644 --- a/tdesign-component/test/components/theme/t_theme_test.dart +++ b/tdesign-component/test/components/theme/t_theme_test.dart @@ -295,6 +295,31 @@ void main() { expect(td.colorScheme.primary, token.brandColor); }); + test('稀疏深色 JSON 的背景文字和引用回退默认深色 Token', () { + final token = TThemeData.fromJson('ocean', ''' + { + "ocean": {"color": {"brandColor": "#0052D9"}}, + "oceanDark": {"color": {"brandColor": "#699EF5"}} + } + ''')!; + final defaults = TThemeData.defaultData(); + final dark = token.dark!; + expect(token.bgColorPage, defaults.bgColorPage); + expect(token.textColorPrimary, defaults.textColorPrimary); + expect(dark.bgColorPage, defaults.dark!.bgColorPage); + expect(dark.bgColorContainer, defaults.dark!.bgColorContainer); + expect(dark.textColorPrimary, defaults.dark!.textColorPrimary); + expect(dark.componentBorder, defaults.dark!.componentBorder); + expect(dark.refMap['bgColorPage'], defaults.dark!.refMap['bgColorPage']); + expect(dark.brandColor.toARGB32(), 0xFF699EF5); + expect( + TThemeBuilder.dark(token).scaffoldBackgroundColor, + defaults.dark!.bgColorContainer, + ); + expect(dark.bgColorPage, isNot(token.bgColorPage)); + expect(dark.textColorPrimary, isNot(token.textColorPrimary)); + }); + test('buildDark 使用 token.dark 块', () { const json = ''' { diff --git a/tdesign-site/site/docs/custom-theme.md b/tdesign-site/site/docs/custom-theme.md index 171cd4c0ee..bb6b7c88b1 100644 --- a/tdesign-site/site/docs/custom-theme.md +++ b/tdesign-site/site/docs/custom-theme.md @@ -2,6 +2,7 @@ title: 自定义主题 description: 配置全局主题、组件样式和明暗模式。 spline: explain +flutterExample: custom-theme --- ## 主题的作用范围 @@ -10,7 +11,7 @@ spline: explain 使用 `context.tTheme` 读取当前子树主题。`TThemeData.defaultData()` 返回默认配置,不能代替当前上下文的主题。TD 内置视觉不隐式继承 Material 组件主题;自定义内容仍可使用 Flutter 的主题机制。 -本文代码由[可运行示例源码](https://github.com/Tencent/tdesign-flutter/blob/develop/tdesign-component/example/lib/documentation_examples.dart)同步生成。示例文件引入: +本文代码由[可运行示例源码](https://github.com/Tencent/tdesign-flutter/blob/develop/tdesign-component/example/lib/documentation_examples.dart)同步生成;右侧 Flutter 示例按章节展示对应效果,并直接复用这些函数。预览使用本文的品牌色配置;初始外观跟随外层预览,点击示例中的模式按钮后整页同步切换。示例文件引入: ```dart import 'package:tdesign_flutter/tdesign_flutter.dart'; @@ -35,7 +36,11 @@ TThemeData documentationThemeTokens() { ``` -JSON 使用命名主题对象;`ocean`、`oceanDark` 必须与调用中的名称一致。`fromJson` 返回可空结果,加载失败时可回退默认主题。完整字段见[主题 API](/flutter/components/theme?tab=api),默认 Token 定义见[默认主题源码](https://github.com/Tencent/tdesign-flutter/blob/develop/tdesign-component/lib/src/theme/t_default_theme.dart)。 +运行效果:浅色品牌色 #0052D9、深色品牌色 #699EF5 应用于按钮和标签。右侧同时列出两套配置的品牌色、页面背景、容器背景和主要文字色,并标注 JSON 覆盖或默认继承;下方切换明暗模式时整页同步更新,并标识当前生效的一列。 + +[单独打开运行示例](/flutter/example/#custom-theme-json) + +JSON 中未覆盖的 Token 按所属模式继承默认浅色或深色配置,背景和文字也会随模式切换。JSON 使用命名主题对象;`ocean`、`oceanDark` 必须与调用中的名称一致。`fromJson` 返回可空结果,加载失败时可回退默认主题。完整字段见[主题 API](/flutter/components/theme?tab=api),默认 Token 定义见[默认主题源码](https://github.com/Tencent/tdesign-flutter/blob/develop/tdesign-component/lib/src/theme/t_default_theme.dart)。 配置来自资源文件时,先在应用 `pubspec.yaml` 的 `flutter.assets` 注册文件,再通过 `rootBundle.loadString` 读取;这需要导入 `package:flutter/services.dart`。读取完成后再构建或更新应用主题,不在 Widget 的每次 build 中重复加载。 @@ -56,6 +61,10 @@ Widget documentationLocalTheme(BuildContext context, Widget child) { ``` +运行效果:对比默认标签与圆角为 6 的局部主题标签。 + +[单独打开运行示例](/flutter/example/#custom-theme-local) + 传入组件必须处于这个 `Theme` 子树内;需要读取更新后主题时,在子树的 `Builder` 或独立 Widget 中取得 context。 ## 明暗模式 @@ -76,6 +85,12 @@ Widget documentationThemeApp(ThemeMode mode, Widget home) { ``` +运行效果:点击浅色、深色或跟随系统,观察品牌色、组件与背景变化。 + +[单独打开运行示例](/flutter/example/#custom-theme-mode) + +`tokens` 同时包含浅色配置 `ocean` 与深色配置 `oceanDark`。`TThemeBuilder.light(tokens)` 使用浅色配置,`TThemeBuilder.dark(tokens)` 使用深色配置;两者传入同一个对象,并不表示使用同一套配色。 + - `ThemeMode.light`:固定浅色。 - `ThemeMode.dark`:固定深色。 - `ThemeMode.system`:跟随系统外观。 diff --git a/tdesign-site/site/docs/migration-0.2.7-to-1.0.md b/tdesign-site/site/docs/migration-0.2.7-to-1.0.md index 399aa7ffa2..fa5690a383 100644 --- a/tdesign-site/site/docs/migration-0.2.7-to-1.0.md +++ b/tdesign-site/site/docs/migration-0.2.7-to-1.0.md @@ -27,279 +27,37 @@ import 'package:tdesign_flutter/tdesign_flutter.dart'; 仍可显式导入 Material;业务另有同名类型时用 import 前缀或 show/hide 解决。不要从 `package:tdesign_flutter/src/...` 导入旧 State、Painter 或内部适配类型。 -## 主题、文字与样式 +## 先判断需要做哪些工作 -旧 `TDTheme.of(context)` 对应 `context.tTheme`;全局数据为 `TThemeData`,应用使用 `TThemeBuilder.light/dark`。让组件跟随局部主题时读取 `context.tTheme`,不要用固定默认值绕开子树 Theme。 +**先处理公共配置。** 升级依赖和SDK后,先迁移导入、主题和文字,再处理实际使用的组件。 - -```dart -Widget migratedApp(Widget home) { - final tokens = TThemeData.defaultData(); - return MaterialApp( - theme: TThemeBuilder.light(tokens), - darkTheme: TThemeBuilder.dark(tokens), - home: home, - ); -} +**参数或状态变化,需要改写调用处。** 按钮内容与回调、复选框受控值和输入控制器不能只替换类名。先看具体改法,再核对组件API。 -Widget migratedTextTheme(BuildContext context, Widget child) { - return Theme( - data: Theme.of( - context, - ).mergeExtension(const TTextThemeData(textStyle: TextStyle(fontSize: 18))), - child: child, - ); -} -``` - +**交互职责变化,需要重组业务流程。** Form、Picker/日期确认、浮层、Upload、页签和轮播,需要检查状态、提交/取消及资源释放,不能仅以编译通过作为完成标准。 -- TD 内置外观按全局 Token、TD 组件 Theme、受支持的显式实例配置解析。Material `textTheme`、按钮 Theme、`IconTheme`、visualDensity 等不再隐式改变 TD 内置视觉;原生 Material 和调用方自定义内容仍可使用自己的主题。 -- 使用 `mergeExtension` 合并子树组件主题,避免用 `copyWith(extensions: [...])` 意外丢弃其他 ThemeExtension。 -- `TText` 的单实例文字使用 `style: TextStyle(...)`;`TTextSpan` 也用 `style`。不要继续传旧 `fontWeight/fontFamily/textColor/isTextThrough/lineThroughColor`,删除线使用 `TextDecoration.lineThrough`。 -- `textScaleFactor` 改为 `textScaler`;未传时继承系统文字缩放。旧 `TDTextPaddingConfig` 改为父级 Padding/Align/Center,段落文字不要按单行居中规则强行裁切。 -- 在线字体先由业务调用 `TFontLoader.load` 并管理加载状态,之后通过文字 `style.fontFamily` 或 TD 文字 Theme 配置,不再在文字 build 时请求字体 URL。 -- 自定义主题 JSON 需要核对字段与最终默认值;旧按钮状态样式、组件形态、交互时长等不能一律塞进 Theme。具体视觉默认值与实例的状态/规格选择分开。 +尚未逐项确认的业务用法应继续核对API和真实操作,不归为“只改名即可”。下面索引用于查找,具体改法解释主要场景,完整API不在本文重复列出。 -## 按钮与禁用语义 +### 直接查看主要改法 -0.2.7:`TDButton(text: '保存', type: TDButtonType.fill, theme: TDButtonTheme.primary, onTap: save)`。 - -1.0 的对应写法: - - -```dart -Widget migratedButton(VoidCallback? onPressed) { - return TButton( - variant: TButtonVariant.fill, - colorPreset: TButtonColorPreset.primary, - onPressed: onPressed, - child: const Text('保存'), - ); -} -``` - - -`onPressed == null` 表示禁用;长按也要求按钮处于可点击状态。不要保留旧 `disabled: false` 却漏传回调。`icon` 使用 Widget,IconData 包在 `Icon(...)` 或 `TIcon(...)` 中。普通/按压/禁用的具体样式合并到 `ButtonStyle` 的状态属性;尺寸布局按 size、显式样式或外部约束表达,不搬旧 style/activeStyle/disableStyle 三套对象。 - -自定义反色主题时,默认配色的 `TButtonVariant.ghost` 文字与描边读取 `textColorAnti`,禁用时读取 `fontWhite4`;不要仅修改原始白色层级 `fontWhite1` 来控制这类按钮。单个按钮的前景、边框和交互状态仍通过 `ButtonStyle` 覆盖。 - -## 受控值、输入与选择 - -对于 `TCheckbox`、`TRadioGroup`、`TSwitch`、`TStepper`、Picker、Calendar 等,父级应接受回调并重建传回新值。只记录回调而不更新 value,会导致保持旧值或滚动结束回退;空回调的禁用规则以各组件 API 为准。 - - -```dart -Widget migratedCheckbox(bool value, ValueChanged? onChanged) { - return TCheckbox(value: value, onChanged: onChanged, title: '同意条款'); -} - -Widget migratedRadio(String value, ValueChanged? onChanged) { - return TRadioGroup.options( - value: value, - onChanged: onChanged, - options: const [ - TRadioOption(value: 'a', label: '方案 A'), - TRadioOption(value: 'b', label: '方案 B'), - ], - ); -} -``` - - -`TRadio` 必须在同类型 `TRadioGroup` 下,不能把 groupValue/onChanged 重新分散到每个 radio。复选框单项 value 为 bool?(null 表示不确定态),组的 value/options 以当前泛型 API 为准,旧 id、controller、passThrough 等不能原样套入。 - -输入框的 `controller` 与 `initialValue` 互斥;`initialValue` 仅初始化内部值。需要外部更新、表单重置或保留选区时使用 `TextEditingController`,由创建方释放。单行用 `TInput`,多行用 `TTextarea`;不要把旧 TDInput 的 maxLines 参数当成完整多行迁移方案。重验空内容粘贴、中文组合输入、清空按钮、焦点与键盘遮挡。 - -## 表单改为字段树 - -旧 `items/rules/data` 配置改为 `TForm + TFormField + TFormItem`。字段持有业务 value/onChanged,validator 返回错误文案;`TFormController.validate()` 用于主动校验,`required: true` 执行必填校验,单独设置表单项必填标记不等于校验。 - - -```dart -Widget migratedForm({ - required TFormController form, - required TextEditingController text, - required String value, - required ValueChanged onChanged, -}) { - return TForm( - controller: form, - child: TFormField( - name: 'name', - value: value, - onChanged: onChanged, - required: true, - requiredMessage: '请输入姓名', - builder: (context, current, change, error) => TFormItem( - label: '姓名', - errorText: error, - child: TInput(controller: text, onChanged: change), - ), - ), - ); -} -``` - - -示例中的 text/form 由页面持有,value 由父级在 onChanged 中更新;页面销毁时释放自建 TextEditingController。业务执行 reset 时,同时更新字段值与自己的文本控制器;不要指望 initialValue 覆盖现有编辑状态。 - -## Picker、日期与浮层确认分离 - -`TDPicker/TDMultiPicker/TDMultiLinkedPicker` 改为 `TPicker` 和不可变 `TPickerColumns/TPickerLinked` 数据。面板回调只是候选值变化,不是业务确认。 - - -```dart -TPopupHandle migratedPicker({ - required BuildContext context, - required String initialValue, - required ValueChanged onConfirmed, -}) { - var draft = initialValue; - return TPickerPopup.show( - context, - child: StatefulBuilder( - builder: (context, setPanelState) => TPicker( - items: const TPickerColumns([ - [ - TPickerOption(label: '选项 A', value: 'a'), - TPickerOption(label: '选项 B', value: 'b'), - ], - ]), - value: [draft], - onChanged: (next) => setPanelState(() { - draft = next.values.single! as String; - }), - ), - ), - headerBuilder: (context, close) => TPopupHeader( - title: const Text('请选择'), - cancelButton: TButton(onPressed: close, child: const Text('取消')), - confirmButton: TButton( - onPressed: () { - onConfirmed(draft); - close(); - }, - child: const Text('确认'), - ), - ), - ); -} -``` - - -调用方在 `onConfirmed` 中更新业务保存值,并确保对应业务 State 仍 mounted;取消只关闭、不提交草稿。重新打开时用保存值创建新草稿。`TPickerPopup` 会为标准头部和滚轮预留高度;自定义通用 Popup 时也须提供合理内容约束。 - -`TDDatePicker + DatePickerModel` 改为 `TDateTimePicker + TDateTimePickerValue + DateTimePickerMode`。默认年月日,按需组合时间列;start/end 与 steps 用当前模型,onChanged 实时回写。`TDCalendar` 的 value 改为 `List`,single/multiple/range 由 variant 表达,组件不再同时负责业务弹窗确认或时间选择。 - - -```dart -Widget migratedCalendar( - List value, - ValueChanged>? onChanged, -) { - return SizedBox( - height: 400, - child: TCalendar( - value: value, - variant: TCalendarVariant.single, - minDate: DateTime(2026, 1, 1), - maxDate: DateTime(2026, 12, 31), - onChanged: onChanged, - ), - ); -} - -Widget migratedDateTime( - TDateTimePickerValue value, - ValueChanged? onChanged, -) { - return TDateTimePicker(value: value, onChanged: onChanged); -} -``` - - -**重新验证边界**:最小/最大日期的时分、跨天、闰日、区间端点、数据源变更、连续滚动与惯性。不要用整数时间戳或旧通知器替代新受控值。 - -## Popup、Dialog、Toast - -旧 `TDPopup*Panel/TDSlidePopupRoute` 组合改为 `TPopup.show(context, options: ...)`。按方向选择 `TPopupOptions.bottom/center/left/right/top` 与对应 Inset;从返回的 `TPopupHandle` 关闭/重开并读取本次 `result`。用正确 Theme/Navigator 子树的 context 打开;handle 重开不会自动重新解析已经合并的主题选项,需要新配置时重新创建。 - -`TConfirmDialog` 是单确认便捷组件;多操作使用 `TDialog.actions + TDialogAction`,输入弹窗组合 `TDialog + TInput`,不要寻找被删除的 TDInputDialog。 - - -```dart -Future migratedDialog(BuildContext context) { - return TDialog.show( - context, - dialog: const TConfirmDialog( - title: '操作确认', - content: '确认继续?', - buttonText: '继续', - ), - ); -} -``` - - -Toast 时长用 `Duration`;加载提示默认也会自动关闭。持续任务显式设置 `Duration.zero`,任务结束后按返回 ID 关闭。可见遮罩与背景点击/滚动拦截是独立配置,不要把半透明遮罩等同于不可穿透。 - - -```dart -String migratedLoading(BuildContext context) { - return TToast.showLoading( - context: context, - text: '处理中', - duration: Duration.zero, - overlay: const TOverlayConfig(preventScrollThrough: true), - ); -} -``` - - -结束任务时调用 `TToast.dismissToast(id)`。匿名提示会复用匿名 ID;需要并存时提供不同 toastId。`TMessage.duration` 同样使用 Duration,显示由 Widget 树或其公开命令管理,不能继续用旧 visible 参数控制。 - -## Upload 与平台依赖 - -Upload 只负责选择及文件列表交互,不执行 HTTP 上传。旧 `max/sizeLimit/multiple/disabled/onChange` 不能仅改名:改为 `maxFiles/maxFileSize`、单一 mediaType、受控 files/onChanged;自定义业务 picker 使用 `Future>`。 - - -```dart -Widget migratedUpload({ - required List files, - required ValueChanged>? onChanged, - TUploadPicker? picker, -}) { - return TUpload( - files: files, - onChanged: onChanged, - maxFiles: 2, - maxFileSize: 5 * 1024 * 1024, - picker: picker, - ); -} -``` - - -回调列表不可变,接受时直接保存新列表,不原地 add/remove;上传进度和结果由业务创建新 TUploadFile/列表更新。`onChanged == null` 阻止新交互,但不会取消已经开始的选择;卸载后不通知。数量/大小错误、选择器异常和业务回调异常分别按当前回调契约处理。 - -相册权限、iOS Info.plist、文件持久化和 Android 进程回收后的恢复属于宿主集成。默认选择器底层是 image_picker;业务可用 picker 接入自己的权限、恢复和上传流程。升级后重新构建原生宿主,并检查实际解析的平台实现版本;Dart 编译通过不能证明权限与系统相册行为通过。 - -## 两种 TabBar 与 Swiper - -- **顶部页签**:旧 `TDTabBar/TDTabBarView` → `TTabsBar/TTabsBarView`,显式共享 TabController 或位于同一个 DefaultTabController。TTabsBarView 默认不可滑动,需要手势切页时显式配置 physics。 -- **底部导航**:旧 `TDBottomTabBar` → `TTabBar`,提供 type、navigationTabs、受控 value/onChanged;旧 `topBorder/showTopBorder/centerDistance` 没有等价开关恢复,按新的默认边线和内置图文布局验收。 -- **Swiper**:使用 `TSwiper` 的 children 或 itemBuilder/itemCount;自建 `TSwiperController` 并在页面 dispose 中释放。旧第三方 SwiperPlugin/SwiperController 和 TDSwiperPagination 不能直接传入;按当前分页、箭头与 pageEffect 能力重组。TSwiper 默认 loop/autoplay 均 false,业务需要时显式打开。 +- [主题、文字与样式](#migration-theme) +- [按钮与禁用语义](#migration-button) +- [受控值、输入与选择](#migration-controlled) +- [表单改为字段树](#migration-form) +- [Picker、日期与浮层确认分离](#migration-picker) +- [Popup、Dialog、Toast](#migration-overlay) +- [Upload 与平台依赖](#migration-upload) +- [两种 TabBar 与 Swiper](#migration-tabs) ## 按组件查找迁移方式 -只需要迁移项目中实际使用的组件。先搜索代码中的旧类名,例如 `TDButton`,再按下面的分类找到它。 +只需要迁移项目中实际使用的组件。先搜索代码中的旧类名,例如 `TDButton`,再按下面的分类找到它。分组默认收起,展开后查看对应入口和提示。 1. **找对应入口**:每项先列出“0.2.7旧入口 → 1.0入口”,用于定位新组件。 -2. **完成用法调整**:阅读“需要调整”,并结合前文示例修改参数、数据和回调;箭头不表示只改类名就能完成迁移。 +2. **完成用法调整**:阅读“需要调整”,并结合下方具体改法修改参数、数据和回调;箭头不表示只改类名就能完成迁移。 3. **核对当前用法**:点击组件名称进入1.0 API文档,再验证真实操作、主题及布局。 -例如,搜索到 `TDButton` 时,先看[按钮与禁用语义](#按钮与禁用语义),把文字和点击回调迁到新的内容槽与回调,再查看按钮API。不要仅把它改名为 `TButton` 后就结束。 +例如,搜索到 `TDButton` 时,先看[按钮与禁用语义](#migration-button),把文字和点击回调迁到新的内容槽与回调,再查看按钮API。不要仅把它改名为 `TButton` 后就结束。 ### 选择你正在迁移的组件 @@ -313,22 +71,28 @@ Widget migratedUpload({ 查找旧枚举、Controller、State等辅助类型时,使用文末的[旧类型名称对照](#migration-legacy-types)。该附录用于定位处置方向,组件迁移优先按下面的分组进行。 -### 主题与全局配置 +
+主题与全局配置 + 先处理全局主题,再迁移各组件的局部样式。 - **[Theme 主题](https://tdesign.tencent.com/flutter/components/theme?tab=api)**:`TDTheme / TDThemeData` → `context.tTheme / TThemeData / TThemeBuilder`。 - **需要调整**:全局 Token→TD 组件 Theme→支持的实例配置; Material 外观不再反向影响 TD 默认视觉。 + **需要调整**:全局 Token→TD 组件 Theme→支持的实例配置; Material 外观不再反向影响 TD 默认视觉。 [查看相关改法](#migration-theme) + +
-### 按钮、文字与基础组件 +
+按钮、文字与基础组件 + 从页面上常用的按钮、文字、图标等开始,核对内容槽和样式配置。 - **[Button 按钮](https://tdesign.tencent.com/flutter/components/button?tab=api)**:`TDButton` → `TButton`。 - **需要调整**:text→child; onTap→onPressed; type→variant; theme→colorPreset; 状态样式合并为 ButtonStyle。 + **需要调整**:text→child; onTap→onPressed; type→variant; theme→colorPreset; 状态样式合并为 ButtonStyle。 [查看相关改法](#migration-button) - **[Divider 分割线](https://tdesign.tencent.com/flutter/components/divider?tab=api)**:`TDDivider` → `TDivider`。 @@ -348,10 +112,14 @@ Widget migratedUpload({ - **[Text 文本](https://tdesign.tencent.com/flutter/components/text?tab=api)**:`TDText / TDTextSpan` → `TText / TTextSpan`。 - **需要调整**:删除分散字体、在线加载和 padding 入口; 用 style、textScaler、显式父布局,见文字一节。 + **需要调整**:删除分散字体、在线加载和 padding 入口; 用 style、textScaler、显式父布局,见文字一节。 [查看相关改法](#migration-theme) + +
-### 页面导航与页签 +
+页面导航与页签 + 重点区分顶部页签、底部导航以及各自的控制器和受控值。 @@ -381,20 +149,24 @@ Widget migratedUpload({ - **[TabBar 标签栏](https://tdesign.tencent.com/flutter/components/tab-bar?tab=api)**:`TDBottomTabBar` → `TTabBar`。 - **需要调整**:底部导航:显式 type、navigationTabs、value/onChanged; 尺寸/颜色/分隔线迁 组件 Theme。 + **需要调整**:底部导航:显式 type、navigationTabs、value/onChanged; 尺寸/颜色/分隔线迁 组件 Theme。 [查看相关改法](#migration-tabs) - **[Tabs 选项卡](https://tdesign.tencent.com/flutter/components/tabs?tab=api)**:`TDTabBar / TDTabBarView` → `TTabsBar / TTabsBarView`。 - **需要调整**:顶部页签:共享 TabController 或 DefaultTabController; 不是底部 TTabBar。 + **需要调整**:顶部页签:共享 TabController 或 DefaultTabController; 不是底部 TTabBar。 [查看相关改法](#migration-tabs) + +
-### 表单、输入与选择 +
+表单、输入与选择 + 先确认值由谁持有,再处理回调、表单校验和确认/取消流程。 - **[Calendar 日历](https://tdesign.tencent.com/flutter/components/calendar?tab=api)**:`TDCalendar` → `TCalendar`。 - **需要调整**:value 是 List; variant 决定单选/多选/区间; onChanged 回写,时间选择和弹层外部组合。 + **需要调整**:value 是 List; variant 决定单选/多选/区间; onChanged 回写,时间选择和弹层外部组合。 [查看相关改法](#migration-picker) - **[Cascader 级联选择器](https://tdesign.tencent.com/flutter/components/cascader?tab=api)**:`TDCascader / TDMultiCascader` → `TCascader`。 @@ -402,173 +174,588 @@ Widget migratedUpload({ - **[CheckBox 多选框](https://tdesign.tencent.com/flutter/components/checkbox?tab=api)**:`TDCheckbox / TDCheckboxGroup` → `TCheckbox / TCheckboxGroup`。 - **需要调整**:checked/id/controller 方案改为 value/onChanged; 组提供 options 和受控选中集合,类型按当前 API。 + **需要调整**:checked/id/controller 方案改为 value/onChanged; 组提供 options 和受控选中集合,类型按当前 API。 [查看相关改法](#migration-controlled) - **[DateTimePicker 时间选择器](https://tdesign.tencent.com/flutter/components/date-time-picker?tab=api)**:`TDDatePicker` → `TDateTimePicker`。 - **需要调整**:DatePickerModel 改为 TDateTimePickerValue + DateTimePickerMode; 上下界/步进显式传入,外部管理确认。 + **需要调整**:DatePickerModel 改为 TDateTimePickerValue + DateTimePickerMode; 上下界/步进显式传入,外部管理确认。 [查看相关改法](#migration-picker) - **[Form 表单](https://tdesign.tencent.com/flutter/components/form?tab=api)**:`TDForm / FormController` → `TForm / TFormField / TFormController`。 - **需要调整**:从 items/rules/data 配置改为字段 Widget 树; value/onChanged、validator 与控制器职责分开。 + **需要调整**:从 items/rules/data 配置改为字段 Widget 树; value/onChanged、validator 与控制器职责分开。 [查看相关改法](#migration-form) - **[Input 输入框](https://tdesign.tencent.com/flutter/components/input?tab=api)**:`TDInput` → `TInput`。 - **需要调整**:controller 与 initialValue 互斥; onChanged/hintText/prefix/suffix; 不要把 initialValue 当持续受控值。 + **需要调整**:controller 与 initialValue 互斥; onChanged/hintText/prefix/suffix; 不要把 initialValue 当持续受控值。 [查看相关改法](#migration-controlled) - **[Picker 选择器](https://tdesign.tencent.com/flutter/components/picker?tab=api)**:`TDPicker / TDMultiPicker / TDMultiLinkedPicker` → `TPicker + TPickerColumns / TPickerLinked`。 - **需要调整**:列数据改不可变 option 树; 选择面板不负责业务确认,使用 TPickerPopup 组合草稿/确认/取消。 + **需要调整**:列数据改不可变 option 树; 选择面板不负责业务确认,使用 TPickerPopup 组合草稿/确认/取消。 [查看相关改法](#migration-picker) + +- **[Radio 单选框](https://tdesign.tencent.com/flutter/components/radio?tab=api)**:`TDRadio / TDRadioGroup` → `TRadio / TRadioGroup`。 + + **需要调整**:单项必须位于同类型组下; 组持有 value/onChanged,不再为每项维护选中状态。 [查看相关改法](#migration-controlled) + +- **[Rate 评分](https://tdesign.tencent.com/flutter/components/rate?tab=api)**:`TDRate` → `TRate`。 + + **需要调整**:按当前受控数值与回调迁移; 重验半星、禁用、只读与自定义指示器。 + +- **[Search 搜索框](https://tdesign.tencent.com/flutter/components/search?tab=api)**:`TDSearchBar` → `TSearchBar`。 + + **需要调整**:placeHolder→hintText、onTextChanged→onChanged、onActionClick→onActionPressed; 不保留旧样式对象。 + +- **[Slider 滑动选择器](https://tdesign.tencent.com/flutter/components/slider?tab=api)**:`TDSlider / TDRangeSlider` → `TSlider / TRangeSlider`。 + + **需要调整**:按当前值及回调类型迁移; 旧 Thumb/Track/Painter 类型不再作为可继承公开入口。 + +- **[Stepper 步进器](https://tdesign.tencent.com/flutter/components/stepper?tab=api)**:`TDStepper` → `TStepper`。 + + **需要调整**:required value; 回调接受后重建; 旧 defaultValue/eventController 不能作为迁移目标。 [查看相关改法](#migration-controlled) + +- **[Switch 开关](https://tdesign.tencent.com/flutter/components/switch?tab=api)**:`TDSwitch` → `TSwitch`。 + + **需要调整**:value/onChanged 管开关状态; 空回调禁用; 规格与具体配色分别从实例/Theme 设置。 [查看相关改法](#migration-controlled) + +- **[Textarea 多行文本框](https://tdesign.tencent.com/flutter/components/textarea?tab=api)**:`TDTextarea` → `TTextarea`。 + + **需要调整**:多行输入独立组件; 用 minLines/maxLines、controller 与字段回调,核对计数/字符限制。 [查看相关改法](#migration-controlled) + +- **[TreeSelect 树形选择](https://tdesign.tencent.com/flutter/components/tree-select?tab=api)**:`TDTreeSelect / TDSelectOption` → `TTreeSelect / TTreeSelectOption`。 + + **需要调整**:树数据、选中集合与 multiple 明确配置; 不再复用旧副作用控制器。 + +- **[Upload 上传](https://tdesign.tencent.com/flutter/components/upload?tab=api)**:`TDUpload` → `TUpload`。 + + **需要调整**:files/onChanged 受控; 单一 mediaType,maxFiles/maxFileSize、不可变结果; 上传请求由业务执行。 [查看相关改法](#migration-upload) + +
+ + +
+内容与数据展示 + + +检查数据结构、内容插槽、状态以及具体尺寸的含义。 + +- **[Avatar 头像](https://tdesign.tencent.com/flutter/components/avatar?tab=api)**:`TDAvatar` → `TAvatar`。 + + **需要调整**:形状用 shape,物理大小/颜色迁 TAvatarThemeData; 特殊文字用 child: Text(style: ...)。 + +- **[Badge 徽标](https://tdesign.tencent.com/flutter/components/badge?tab=api)**:`TDBadge` → `TBadge`。 + + **需要调整**:统一 label/size 等当前入口; 旧数字/红点/丝带类型按组件 API 重组,不复用旧 BadgeConfig。 + +- **[Cell 单元格](https://tdesign.tencent.com/flutter/components/cell?tab=api)**:`TDCell / TDCellGroup` → `TCell / TCellGroup`。 + + **需要调整**:以内容槽组合; 连续列表用 TCellGroup; 统一背景/分隔线由组或 Theme 管理。 + +- **[Collapse 折叠面板](https://tdesign.tencent.com/flutter/components/collapse?tab=api)**:`TDCollapse / TDCollapsePanel` → `TCollapse / TCollapsePanel`。 + + **需要调整**:受控展开值与内容分开; 形态/动画属于实例,具体外观从 TCollapseThemeData 配置。 + +- **[Empty 空状态](https://tdesign.tencent.com/flutter/components/empty?tab=api)**:`TDEmpty` → `TEmpty`。 + + **需要调整**:旧 type 改为 icon/image/emptyText/operation 组合; 不再查找 TDEmptyType,也不导入内部插图。 + +- **[Footer 页脚](https://tdesign.tencent.com/flutter/components/footer?tab=api)**:`TDFooter` → `TFooter`。 + + **需要调整**:按当前内容/链接数据与组件 Theme 迁移,不继续使用旧 FooterType 作为类型。 + +- **[Image 图片](https://tdesign.tencent.com/flutter/components/image?tab=api)**:`TDImage` → `TImage`。 + + **需要调整**:重验加载/失败/裁剪; 尺寸和占位以当前 API 为准,旧 TDImageType 不能仅改前缀。 + +- **[ImageViewer 图片预览](https://tdesign.tencent.com/flutter/components/image-viewer?tab=api)**:`TDImageViewer / TDImageDialog` → `TImageViewer.show`。 + + **需要调整**:images 使用 ImageProvider 列表; initialIndex 与 onIndexChanged,内部 State/Dialog 类型不再直接实例化。 + +- **[Progress 进度条](https://tdesign.tencent.com/flutter/components/progress?tab=api)**:`TDProgress` → `TProgress`。 + + **需要调整**:variant/status 与主题分开; 圆环 circleSize 表示外框边长,不能把旧半径语义套入。 + +- **[Result 结果](https://tdesign.tencent.com/flutter/components/result?tab=api)**:`TDResult` → `TResult`。 + + **需要调整**:重选当前语义状态与内容插槽,背景/文字视觉使用 TResultThemeData。 + +- **[Skeleton 骨架屏](https://tdesign.tencent.com/flutter/components/skeleton?tab=api)**:`TDSkeleton / TDSkeletonRowCol*` → `TSkeleton / TSkeleton.custom`。 + + **需要调整**:标准形态用 variant; 自定义布局使用 TSkeletonLayout,不复用旧 RowCol 配置类型。 + +- **[Swiper 轮播图](https://tdesign.tencent.com/flutter/components/swiper?tab=api)**:`Swiper + TDSwiperPagination` → `TSwiper / TSwiperController`。 + + **需要调整**:不再用第三方 SwiperController/SwiperPlugin; 迁移 children 或 itemBuilder、分页及自有控制器。 [查看相关改法](#migration-tabs) + +- **[Table 表格](https://tdesign.tencent.com/flutter/components/table?tab=api)**:`TDTable / TDTableCol` → `TTable / TTableColumn`。 + + **需要调整**:列使用 id/header/cellBuilder,data 必填; 排序和选择是受控值,旧列/行选择回调需要改写。 + +- **[Tag 标签](https://tdesign.tencent.com/flutter/components/tag?tab=api)**:`TDTag / TDSelectTag` → `TTag / TSelectTag`。 + + **需要调整**:语义色用 colorPreset; 选中/关闭遵循当前回调; 具体字体和圆角从 Theme 设置。 + +- **[TimeCounter 计时器](https://tdesign.tencent.com/flutter/components/time-counter?tab=api)**:`TDTimeCounter` → `TTimeCounter`。 + + **需要调整**:time 和 onChanged 均使用毫秒整数; 重验自动开始、方向与结束; 自建 Controller 由业务释放。 + +
+ + +
+浮层、提示与交互反馈 + + +核对打开与关闭方式、返回结果、时长、异步结束和资源释放。 + +- **[ActionSheet 动作面板](https://tdesign.tencent.com/flutter/components/action-sheet?tab=api)**:`TDActionSheet` → `TActionSheet`。 + + **需要调整**:按当前列表/宫格入口及 TActionSheetItem 组合; 旧主题枚举不是新 Theme 类型。 + +- **[Dialog 对话框](https://tdesign.tencent.com/flutter/components/dialog?tab=api)**:`TDAlertDialog / TDConfirmDialog / TDInputDialog` → `TDialog / TConfirmDialog / TDialogAction`。 + + **需要调整**:单确认便捷弹窗与多操作槽分开; 输入弹窗用 TDialog+TInput 组合,不恢复专用旧类。 [查看相关改法](#migration-overlay) + +- **[DropdownMenu 下拉菜单](https://tdesign.tencent.com/flutter/components/dropdown-menu?tab=api)**:`TDDropdownMenu / TDDropdownItem` → `TDropdownMenu / TDropdownMenuItem`。 + + **需要调整**:菜单项描述与 Single/MultiSelectPanel 组合; 重验外部值更新、遮罩和 anchor,不直接改名前缀。 + +- **[Loading 加载](https://tdesign.tencent.com/flutter/components/loading?tab=api)**:`TDLoading` → `TLoading`。 + + **需要调整**:按当前 icon/内容与 TLoadingController 使用; 旧内部指示器/State 不作为公开继承点。 + +- **[Message 全局提示](https://tdesign.tencent.com/flutter/components/message?tab=api)**:`TDMessage` → `TMessage`。 + + **需要调整**:duration 使用 Duration; status 替代旧 theme; 显示由 Widget 树或命令句柄管理,不保留 visible 开关。 + +- **[NoticeBar 消息提醒](https://tdesign.tencent.com/flutter/components/notice-bar?tab=api)**:`TDNoticeBar` → `TNoticeBar`。 + + **需要调整**:语义状态/滚动/多行用当前 API; 重验循环、点击与关闭,不搬旧样式类。 + +- **[Popover 弹出气泡](https://tdesign.tencent.com/flutter/components/popover?tab=api)**:`TDPopover / TDPopoverWidget` → `TPopover`。 + + **需要调整**:锚点和一次性命令按当前入口使用; offset/arrowSize/padding/背景/圆角从 TPopoverThemeData 设置。 + +- **[Popup 弹出层](https://tdesign.tencent.com/flutter/components/popup?tab=api)**:`TDPopup*Panel / TDSlidePopupRoute` → `TPopup.show + TPopupOptions + TPopupHandle`。 + + **需要调整**:面板、路由与控制统一; 选择方向专属 Options/Inset,关闭结果从 handle.result 获取。 [查看相关改法](#migration-overlay) + +- **[PullDownRefresh 下拉刷新](https://tdesign.tencent.com/flutter/components/pull-down-refresh?tab=api)**:`TDRefreshHeader` → `TPullDownRefresh`。 + + **需要调整**:用 wrapper、受控回调和 TPullDownRefreshController 迁移; 旧第三方 Header 不能仅改名。 + +- **[SwipeCell 滑动操作](https://tdesign.tencent.com/flutter/components/swipe-cell?tab=api)**:`TDSwipeCell / TDSwipeCellAction` → `TSwipeCell / TSwipeCellAction`。 + + **需要调整**:侧滑交互与逐项动作配置使用当前 API; 不要依赖旧 Inherited/State,避免重复通知。 + +- **[Toast 轻提示](https://tdesign.tencent.com/flutter/components/toast?tab=api)**:`TDToast` → `TToast`。 + + **需要调整**:duration 为 Duration,加载默认也会超时; 持续加载显式 Duration.zero,背景拦截放 TOverlayConfig。 [查看相关改法](#migration-overlay) + +
+ + +## 主题、文字与样式 + +### 先处理旧配置 + +- 将读取当前主题的 `TDTheme.of(context)` 改为 `context.tTheme`,固定默认配置不能代替局部主题。 +- 旧文字样式字段迁入 `TextStyle`;布局用父级Padding/Align表达,不恢复旧字体padding补偿。 +- 全局Token、组件Theme和单个实例配置分别处理,不能把所有旧样式都放入全局JSON。 + +### 1.0写法与注意事项 + +旧 `TDTheme.of(context)` 对应 `context.tTheme`;全局数据为 `TThemeData`,应用使用 `TThemeBuilder.light/dark`。让组件跟随局部主题时读取 `context.tTheme`,不要用固定默认值绕开子树 Theme。 + + +```dart +Widget migratedApp(Widget home) { + final tokens = TThemeData.defaultData(); + return MaterialApp( + theme: TThemeBuilder.light(tokens), + darkTheme: TThemeBuilder.dark(tokens), + home: home, + ); +} + +Widget migratedTextTheme(BuildContext context, Widget child) { + return Theme( + data: Theme.of( + context, + ).mergeExtension(const TTextThemeData(textStyle: TextStyle(fontSize: 18))), + child: child, + ); +} +``` + + +- TD 内置外观按全局 Token、TD 组件 Theme、受支持的显式实例配置解析。Material `textTheme`、按钮 Theme、`IconTheme`、visualDensity 等不再隐式改变 TD 内置视觉;原生 Material 和调用方自定义内容仍可使用自己的主题。 +- 使用 `mergeExtension` 合并子树组件主题,避免用 `copyWith(extensions: [...])` 意外丢弃其他 ThemeExtension。 +- `TText` 的单实例文字使用 `style: TextStyle(...)`;`TTextSpan` 也用 `style`。不要继续传旧 `fontWeight/fontFamily/textColor/isTextThrough/lineThroughColor`,删除线使用 `TextDecoration.lineThrough`。 +- `textScaleFactor` 改为 `textScaler`;未传时继承系统文字缩放。旧 `TDTextPaddingConfig` 改为父级 Padding/Align/Center,段落文字不要按单行居中规则强行裁切。 +- 在线字体先由业务调用 `TFontLoader.load` 并管理加载状态,之后通过文字 `style.fontFamily` 或 TD 文字 Theme 配置,不再在文字 build 时请求字体 URL。 +- 自定义主题 JSON 需要核对字段与最终默认值;旧按钮状态样式、组件形态、交互时长等不能一律塞进 Theme。具体视觉默认值与实例的状态/规格选择分开。 + +### 迁移后怎样确认 + +- 明暗切换和局部Theme下内置组件读取正确配色。 +- 覆盖一个组件Theme时其他扩展保持预期,文字行高与系统缩放正常。 + +[返回组件导航](#migration-components) + + +## 按钮与禁用语义 + +### 参数如何调整 + +- 文字:`text` 改为Widget内容 `child`,普通字符串用 `Text` 包装。 +- 点击:`onTap` 改为 `onPressed`;禁用时传null,启用时必须传有效回调。 +- 外观分类:`type` 改为 `variant`,`theme` 改为 `colorPreset`。 +- 状态样式:旧 `style/activeStyle/disableStyle` 合并到 `ButtonStyle` 的状态属性。 + +### 1.0写法与注意事项 + +0.2.7:`TDButton(text: '保存', type: TDButtonType.fill, theme: TDButtonTheme.primary, onTap: save)`。 + +1.0 的对应写法: -- **[Radio 单选框](https://tdesign.tencent.com/flutter/components/radio?tab=api)**:`TDRadio / TDRadioGroup` → `TRadio / TRadioGroup`。 + +```dart +Widget migratedButton(VoidCallback? onPressed) { + return TButton( + variant: TButtonVariant.fill, + colorPreset: TButtonColorPreset.primary, + onPressed: onPressed, + child: const Text('保存'), + ); +} +``` + - **需要调整**:单项必须位于同类型组下; 组持有 value/onChanged,不再为每项维护选中状态。 +`onPressed == null` 表示禁用;长按也要求按钮处于可点击状态。不要保留旧 `disabled: false` 却漏传回调。`icon` 使用 Widget,IconData 包在 `Icon(...)` 或 `TIcon(...)` 中。普通/按压/禁用的具体样式合并到 `ButtonStyle` 的状态属性;尺寸布局按 size、显式样式或外部约束表达,不搬旧 style/activeStyle/disableStyle 三套对象。 -- **[Rate 评分](https://tdesign.tencent.com/flutter/components/rate?tab=api)**:`TDRate` → `TRate`。 +自定义反色主题时,默认配色的 `TButtonVariant.ghost` 文字与描边读取 `textColorAnti`,禁用时读取 `fontWhite4`;不要仅修改原始白色层级 `fontWhite1` 来控制这类按钮。单个按钮的前景、边框和交互状态仍通过 `ButtonStyle` 覆盖。 - **需要调整**:按当前受控数值与回调迁移; 重验半星、禁用、只读与自定义指示器。 +### 迁移后怎样确认 -- **[Search 搜索框](https://tdesign.tencent.com/flutter/components/search?tab=api)**:`TDSearchBar` → `TSearchBar`。 +- 启用按钮点击一次仅执行业务回调一次。 +- 禁用不执行点击/长按;普通、按压、加载及禁用样式符合业务预期。 - **需要调整**:placeHolder→hintText、onTextChanged→onChanged、onActionClick→onActionPressed; 不保留旧样式对象。 +[返回组件导航](#migration-components) -- **[Slider 滑动选择器](https://tdesign.tencent.com/flutter/components/slider?tab=api)**:`TDSlider / TDRangeSlider` → `TSlider / TRangeSlider`。 + +## 受控值、输入与选择 - **需要调整**:按当前值及回调类型迁移; 旧 Thumb/Track/Painter 类型不再作为可继承公开入口。 +### 值由谁更新 -- **[Stepper 步进器](https://tdesign.tencent.com/flutter/components/stepper?tab=api)**:`TDStepper` → `TStepper`。 +- 旧checked、id或Controller方案需要逐组件改写,不能对所有组件统一替换字段名。 +- 在页面State或业务状态中持有当前值,传入value;在onChanged中保存新值并触发重建。 +- 父级重置或外部修改时更新同一状态来源,不额外维护第二份选中状态。 +- 输入框需要持续控制文本、重置或保留选区时使用TextEditingController;initialValue只负责初始化。 - **需要调整**:required value; 回调接受后重建; 旧 defaultValue/eventController 不能作为迁移目标。 +### 1.0写法与注意事项 -- **[Switch 开关](https://tdesign.tencent.com/flutter/components/switch?tab=api)**:`TDSwitch` → `TSwitch`。 +对于 `TCheckbox`、`TRadioGroup`、`TSwitch`、`TStepper`、Picker、Calendar 等,父级应接受回调并重建传回新值。只记录回调而不更新 value,会导致保持旧值或滚动结束回退;空回调的禁用规则以各组件 API 为准。 - **需要调整**:value/onChanged 管开关状态; 空回调禁用; 规格与具体配色分别从实例/Theme 设置。 + +```dart +Widget migratedCheckbox(bool value, ValueChanged? onChanged) { + return TCheckbox(value: value, onChanged: onChanged, title: '同意条款'); +} -- **[Textarea 多行文本框](https://tdesign.tencent.com/flutter/components/textarea?tab=api)**:`TDTextarea` → `TTextarea`。 +Widget migratedRadio(String value, ValueChanged? onChanged) { + return TRadioGroup.options( + value: value, + onChanged: onChanged, + options: const [ + TRadioOption(value: 'a', label: '方案 A'), + TRadioOption(value: 'b', label: '方案 B'), + ], + ); +} +``` + - **需要调整**:多行输入独立组件; 用 minLines/maxLines、controller 与字段回调,核对计数/字符限制。 +`TRadio` 必须在同类型 `TRadioGroup` 下,不能把 groupValue/onChanged 重新分散到每个 radio。复选框单项 value 为 bool?(null 表示不确定态),组的 value/options 以当前泛型 API 为准,旧 id、controller、passThrough 等不能原样套入。 -- **[TreeSelect 树形选择](https://tdesign.tencent.com/flutter/components/tree-select?tab=api)**:`TDTreeSelect / TDSelectOption` → `TTreeSelect / TTreeSelectOption`。 +输入框的 `controller` 与 `initialValue` 互斥;`initialValue` 仅初始化内部值。需要外部更新、表单重置或保留选区时使用 `TextEditingController`,由创建方释放。单行用 `TInput`,多行用 `TTextarea`;不要把旧 TDInput 的 maxLines 参数当成完整多行迁移方案。重验空内容粘贴、中文组合输入、清空按钮、焦点与键盘遮挡。 - **需要调整**:树数据、选中集合与 multiple 明确配置; 不再复用旧副作用控制器。 +### 迁移后怎样确认 -- **[Upload 上传](https://tdesign.tencent.com/flutter/components/upload?tab=api)**:`TDUpload` → `TUpload`。 +- 操作后显示新值,父级重置也能反映在组件上。 +- 复选框不确定态及单选组泛型符合业务,输入清空、组合输入和焦点正常。 +- 自建文本控制器在页面退出时释放。 - **需要调整**:files/onChanged 受控; 单一 mediaType,maxFiles/maxFileSize、不可变结果; 上传请求由业务执行。 +[返回组件导航](#migration-components) - -### 内容与数据展示 + +## 表单改为字段树 -检查数据结构、内容插槽、状态以及具体尺寸的含义。 +### 旧版配置分别放到哪里 -- **[Avatar 头像](https://tdesign.tencent.com/flutter/components/avatar?tab=api)**:`TDAvatar` → `TAvatar`。 +- `items`:改成TForm子树中的字段Widget,不再提交一份表单项配置列表。 +- `data`:字段的业务值由调用方持有,通过TFormField.value/onChanged连接。 +- `rules`:在字段上配置required或validator,并显示builder传出的错误文案。 +- 提交/重置:调用方编排业务操作;提交前使用TFormController.validate(),重置时同步业务值与文本控制器。 - **需要调整**:形状用 shape,物理大小/颜色迁 TAvatarThemeData; 特殊文字用 child: Text(style: ...)。 +### 1.0写法与注意事项 -- **[Badge 徽标](https://tdesign.tencent.com/flutter/components/badge?tab=api)**:`TDBadge` → `TBadge`。 +旧 `items/rules/data` 配置改为 `TForm + TFormField + TFormItem`。字段持有业务 value/onChanged,validator 返回错误文案;`TFormController.validate()` 用于主动校验,`required: true` 执行必填校验,单独设置表单项必填标记不等于校验。 - **需要调整**:统一 label/size 等当前入口; 旧数字/红点/丝带类型按组件 API 重组,不复用旧 BadgeConfig。 + +```dart +Widget migratedForm({ + required TFormController form, + required TextEditingController text, + required String value, + required ValueChanged onChanged, +}) { + return TForm( + controller: form, + child: TFormField( + name: 'name', + value: value, + onChanged: onChanged, + required: true, + requiredMessage: '请输入姓名', + builder: (context, current, change, error) => TFormItem( + label: '姓名', + errorText: error, + child: TInput(controller: text, onChanged: change), + ), + ), + ); +} +``` + -- **[Cell 单元格](https://tdesign.tencent.com/flutter/components/cell?tab=api)**:`TDCell / TDCellGroup` → `TCell / TCellGroup`。 +示例中的 text/form 由页面持有,value 由父级在 onChanged 中更新;页面销毁时释放自建 TextEditingController。业务执行 reset 时,同时更新字段值与自己的文本控制器;不要指望 initialValue 覆盖现有编辑状态。 - **需要调整**:以内容槽组合; 连续列表用 TCellGroup; 统一背景/分隔线由组或 Theme 管理。 +### 迁移后怎样确认 -- **[Collapse 折叠面板](https://tdesign.tencent.com/flutter/components/collapse?tab=api)**:`TDCollapse / TDCollapsePanel` → `TCollapse / TCollapsePanel`。 +- 空值提交显示正确错误文案,合法值可以通过校验。 +- 提交读取最新业务值,在校验通过前不会发起业务请求。 +- 重置同步处理业务值、文本及适用的错误状态。 - **需要调整**:受控展开值与内容分开; 形态/动画属于实例,具体外观从 TCollapseThemeData 配置。 +[返回组件导航](#migration-components) -- **[Empty 空状态](https://tdesign.tencent.com/flutter/components/empty?tab=api)**:`TDEmpty` → `TEmpty`。 + +## Picker、日期与浮层确认分离 - **需要调整**:旧 type 改为 icon/image/emptyText/operation 组合; 不再查找 TDEmptyType,也不导入内部插图。 +### 将选择与提交分成两步 -- **[Footer 页脚](https://tdesign.tencent.com/flutter/components/footer?tab=api)**:`TDFooter` → `TFooter`。 +- 旧TDPicker.show*等入口可能同时处理内容、标题和确认回调;新面板只处理数据及候选值。 +- 标题和操作按钮使用TPopupHeader等公开组件;打开时从业务保存值复制草稿。 +- 滚动只更新草稿,确认才提交业务值,取消丢弃草稿。 +- 旧日期数组和DatePickerModel应转换为当前日期值模型,旧回调参数不能原样传给新组件。 - **需要调整**:按当前内容/链接数据与组件 Theme 迁移,不继续使用旧 FooterType 作为类型。 +### 1.0写法与注意事项 -- **[Image 图片](https://tdesign.tencent.com/flutter/components/image?tab=api)**:`TDImage` → `TImage`。 +`TDPicker/TDMultiPicker/TDMultiLinkedPicker` 改为 `TPicker` 和不可变 `TPickerColumns/TPickerLinked` 数据。面板回调只是候选值变化,不是业务确认。 - **需要调整**:重验加载/失败/裁剪; 尺寸和占位以当前 API 为准,旧 TDImageType 不能仅改前缀。 + +```dart +TPopupHandle migratedPicker({ + required BuildContext context, + required String initialValue, + required ValueChanged onConfirmed, +}) { + var draft = initialValue; + return TPickerPopup.show( + context, + child: StatefulBuilder( + builder: (context, setPanelState) => TPicker( + items: const TPickerColumns([ + [ + TPickerOption(label: '选项 A', value: 'a'), + TPickerOption(label: '选项 B', value: 'b'), + ], + ]), + value: [draft], + onChanged: (next) => setPanelState(() { + draft = next.values.single! as String; + }), + ), + ), + headerBuilder: (context, close) => TPopupHeader( + title: const Text('请选择'), + cancelButton: TButton(onPressed: close, child: const Text('取消')), + confirmButton: TButton( + onPressed: () { + onConfirmed(draft); + close(); + }, + child: const Text('确认'), + ), + ), + ); +} +``` + -- **[ImageViewer 图片预览](https://tdesign.tencent.com/flutter/components/image-viewer?tab=api)**:`TDImageViewer / TDImageDialog` → `TImageViewer.show`。 +调用方在 `onConfirmed` 中更新业务保存值,并确保对应业务 State 仍 mounted;取消只关闭、不提交草稿。重新打开时用保存值创建新草稿。`TPickerPopup` 会为标准头部和滚轮预留高度;自定义通用 Popup 时也须提供合理内容约束。 - **需要调整**:images 使用 ImageProvider 列表; initialIndex 与 onIndexChanged,内部 State/Dialog 类型不再直接实例化。 +`TDDatePicker + DatePickerModel` 改为 `TDateTimePicker + TDateTimePickerValue + DateTimePickerMode`。默认年月日,按需组合时间列;start/end 与 steps 用当前模型,onChanged 实时回写。`TDCalendar` 的 value 改为 `List`,single/multiple/range 由 variant 表达,组件不再同时负责业务弹窗确认或时间选择。 -- **[Progress 进度条](https://tdesign.tencent.com/flutter/components/progress?tab=api)**:`TDProgress` → `TProgress`。 + +```dart +Widget migratedCalendar( + List value, + ValueChanged>? onChanged, +) { + return SizedBox( + height: 400, + child: TCalendar( + value: value, + variant: TCalendarVariant.single, + minDate: DateTime(2026, 1, 1), + maxDate: DateTime(2026, 12, 31), + onChanged: onChanged, + ), + ); +} - **需要调整**:variant/status 与主题分开; 圆环 circleSize 表示外框边长,不能把旧半径语义套入。 +Widget migratedDateTime( + TDateTimePickerValue value, + ValueChanged? onChanged, +) { + return TDateTimePicker(value: value, onChanged: onChanged); +} +``` + -- **[Result 结果](https://tdesign.tencent.com/flutter/components/result?tab=api)**:`TDResult` → `TResult`。 +**重新验证边界**:最小/最大日期的时分、跨天、闰日、区间端点、数据源变更、连续滚动与惯性。不要用整数时间戳或旧通知器替代新受控值。 - **需要调整**:重选当前语义状态与内容插槽,背景/文字视觉使用 TResultThemeData。 +### 迁移后怎样确认 -- **[Skeleton 骨架屏](https://tdesign.tencent.com/flutter/components/skeleton?tab=api)**:`TDSkeleton / TDSkeletonRowCol*` → `TSkeleton / TSkeleton.custom`。 +- 滚动后取消,业务保存值不变化。 +- 确认只提交当前草稿,重新打开从已保存值开始。 +- 日期上下界、区间端点、数据变化和连续滚动正确。 - **需要调整**:标准形态用 variant; 自定义布局使用 TSkeletonLayout,不复用旧 RowCol 配置类型。 +[返回组件导航](#migration-components) -- **[Swiper 轮播图](https://tdesign.tencent.com/flutter/components/swiper?tab=api)**:`Swiper + TDSwiperPagination` → `TSwiper / TSwiperController`。 + +## Popup、Dialog、Toast - **需要调整**:不再用第三方 SwiperController/SwiperPlugin; 迁移 children 或 itemBuilder、分页及自有控制器。 +### 按原业务目的选择新入口 -- **[Table 表格](https://tdesign.tencent.com/flutter/components/table?tab=api)**:`TDTable / TDTableCol` → `TTable / TTableColumn`。 +- 普通弹出层使用TPopup.show,对应方向/布局放入TPopupOptions,保存句柄管理关闭和结果。 +- 只有一个确认动作时可用TConfirmDialog;有确认/取消等多个动作时使用TDialog.actions与TDialogAction。 +- 旧输入弹窗改为TDialog与TInput组合,由业务持有输入值和提交逻辑。 +- 加载提示使用Toast并明确持续时间,任务结束后关闭对应ID。 - **需要调整**:列使用 id/header/cellBuilder,data 必填; 排序和选择是受控值,旧列/行选择回调需要改写。 +### 1.0写法与注意事项 -- **[Tag 标签](https://tdesign.tencent.com/flutter/components/tag?tab=api)**:`TDTag / TDSelectTag` → `TTag / TSelectTag`。 +旧 `TDPopup*Panel/TDSlidePopupRoute` 组合改为 `TPopup.show(context, options: ...)`。按方向选择 `TPopupOptions.bottom/center/left/right/top` 与对应 Inset;从返回的 `TPopupHandle` 关闭/重开并读取本次 `result`。用正确 Theme/Navigator 子树的 context 打开;handle 重开不会自动重新解析已经合并的主题选项,需要新配置时重新创建。 - **需要调整**:语义色用 colorPreset; 选中/关闭遵循当前回调; 具体字体和圆角从 Theme 设置。 +`TConfirmDialog` 是单确认便捷组件;多操作使用 `TDialog.actions + TDialogAction`,输入弹窗组合 `TDialog + TInput`,不要寻找被删除的 TDInputDialog。 -- **[TimeCounter 计时器](https://tdesign.tencent.com/flutter/components/time-counter?tab=api)**:`TDTimeCounter` → `TTimeCounter`。 + +```dart +Future migratedDialog(BuildContext context) { + return TDialog.show( + context, + dialog: const TConfirmDialog( + title: '操作确认', + content: '确认继续?', + buttonText: '继续', + ), + ); +} +``` + - **需要调整**:time 和 onChanged 均使用毫秒整数; 重验自动开始、方向与结束; 自建 Controller 由业务释放。 +Toast 时长用 `Duration`;加载提示默认也会自动关闭。持续任务显式设置 `Duration.zero`,任务结束后按返回 ID 关闭。可见遮罩与背景点击/滚动拦截是独立配置,不要把半透明遮罩等同于不可穿透。 - -### 浮层、提示与交互反馈 + +```dart +String migratedLoading(BuildContext context) { + return TToast.showLoading( + context: context, + text: '处理中', + duration: Duration.zero, + overlay: const TOverlayConfig(preventScrollThrough: true), + ); +} +``` + -核对打开与关闭方式、返回结果、时长、异步结束和资源释放。 +结束任务时调用 `TToast.dismissToast(id)`。匿名提示会复用匿名 ID;需要并存时提供不同 toastId。`TMessage.duration` 同样使用 Duration,显示由 Widget 树或其公开命令管理,不能继续用旧 visible 参数控制。 -- **[ActionSheet 动作面板](https://tdesign.tencent.com/flutter/components/action-sheet?tab=api)**:`TDActionSheet` → `TActionSheet`。 +### 迁移后怎样确认 - **需要调整**:按当前列表/宫格入口及 TActionSheetItem 组合; 旧主题枚举不是新 Theme 类型。 +- 确认、取消、遮罩与返回键产生各自预期结果。 +- 输入弹窗提交最新文本,取消不会误提交。 +- 任务结束关闭自己的加载提示,不误关其他并存提示。 -- **[Dialog 对话框](https://tdesign.tencent.com/flutter/components/dialog?tab=api)**:`TDAlertDialog / TDConfirmDialog / TDInputDialog` → `TDialog / TConfirmDialog / TDialogAction`。 +[返回组件导航](#migration-components) - **需要调整**:单确认便捷弹窗与多操作槽分开; 输入弹窗用 TDialog+TInput 组合,不恢复专用旧类。 + +## Upload 与平台依赖 -- **[DropdownMenu 下拉菜单](https://tdesign.tencent.com/flutter/components/dropdown-menu?tab=api)**:`TDDropdownMenu / TDDropdownItem` → `TDropdownMenu / TDropdownMenuItem`。 +### 旧参数和业务职责如何调整 - **需要调整**:菜单项描述与 Single/MultiSelectPanel 组合; 重验外部值更新、遮罩和 anchor,不直接改名前缀。 +- `files/onChange`:迁为受控files/onChanged,保存回调提供的新列表。 +- `max/sizeLimit`:改用maxFiles/maxFileSize,示例中的文件大小以字节表达。 +- `mediaType/multiple`:按新API选择单一媒体类型及数量上限,不直接传旧媒体类型列表。 +- `disabled`:通过当前公开交互配置处理,例如onChanged为null;禁用不等于取消已开始的异步选择。 +- 网络上传仍由业务执行并更新文件状态,选择完成不代表服务器上传成功。 -- **[Loading 加载](https://tdesign.tencent.com/flutter/components/loading?tab=api)**:`TDLoading` → `TLoading`。 +### 1.0写法与注意事项 - **需要调整**:按当前 icon/内容与 TLoadingController 使用; 旧内部指示器/State 不作为公开继承点。 +Upload 只负责选择及文件列表交互,不执行 HTTP 上传。旧 `max/sizeLimit/multiple/disabled/onChange` 不能仅改名:改为 `maxFiles/maxFileSize`、单一 mediaType、受控 files/onChanged;自定义业务 picker 使用 `Future>`。 -- **[Message 全局提示](https://tdesign.tencent.com/flutter/components/message?tab=api)**:`TDMessage` → `TMessage`。 + +```dart +Widget migratedUpload({ + required List files, + required ValueChanged>? onChanged, + TUploadPicker? picker, +}) { + return TUpload( + files: files, + onChanged: onChanged, + maxFiles: 2, + maxFileSize: 5 * 1024 * 1024, + picker: picker, + ); +} +``` + - **需要调整**:duration 使用 Duration; status 替代旧 theme; 显示由 Widget 树或命令句柄管理,不保留 visible 开关。 +回调列表不可变,接受时直接保存新列表,不原地 add/remove;上传进度和结果由业务创建新 TUploadFile/列表更新。`onChanged == null` 阻止新交互,但不会取消已经开始的选择;卸载后不通知。数量/大小错误、选择器异常和业务回调异常分别按当前回调契约处理。 -- **[NoticeBar 消息提醒](https://tdesign.tencent.com/flutter/components/notice-bar?tab=api)**:`TDNoticeBar` → `TNoticeBar`。 +相册权限、iOS Info.plist、文件持久化和 Android 进程回收后的恢复属于宿主集成。默认选择器底层是 image_picker;业务可用 picker 接入自己的权限、恢复和上传流程。升级后重新构建原生宿主,并检查实际解析的平台实现版本;Dart 编译通过不能证明权限与系统相册行为通过。 - **需要调整**:语义状态/滚动/多行用当前 API; 重验循环、点击与关闭,不搬旧样式类。 +### 迁移后怎样确认 -- **[Popover 弹出气泡](https://tdesign.tencent.com/flutter/components/popover?tab=api)**:`TDPopover / TDPopoverWidget` → `TPopover`。 +- 选择和删除后列表更新,取消选择不会误新增文件。 +- 超过数量或大小限制、选择失败和上传失败有正确处理。 +- 页面退出后,异步结果不会错误更新已销毁页面。 - **需要调整**:锚点和一次性命令按当前入口使用; offset/arrowSize/padding/背景/圆角从 TPopoverThemeData 设置。 +[返回组件导航](#migration-components) -- **[Popup 弹出层](https://tdesign.tencent.com/flutter/components/popup?tab=api)**:`TDPopup*Panel / TDSlidePopupRoute` → `TPopup.show + TPopupOptions + TPopupHandle`。 + +## 两种 TabBar 与 Swiper - **需要调整**:面板、路由与控制统一; 选择方向专属 Options/Inset,关闭结果从 handle.result 获取。 +### 先区分三种迁移路径 -- **[PullDownRefresh 下拉刷新](https://tdesign.tencent.com/flutter/components/pull-down-refresh?tab=api)**:`TDRefreshHeader` → `TPullDownRefresh`。 +- 顶部页签:TDTabBar/TDTabBarView迁为TTabsBar/TTabsBarView,并共享TabController。 +- 底部导航:TDBottomTabBar迁为TTabBar,由value/onChanged控制当前选择。 +- 轮播:旧Swiper迁为TSwiper,不再传第三方控制器或分页插件。 +- 先按下面的行为差异改写,再核对API;顶部页签和底部导航不能合并成一种替换。 - **需要调整**:用 wrapper、受控回调和 TPullDownRefreshController 迁移; 旧第三方 Header 不能仅改名。 +### 1.0写法与注意事项 -- **[SwipeCell 滑动操作](https://tdesign.tencent.com/flutter/components/swipe-cell?tab=api)**:`TDSwipeCell / TDSwipeCellAction` → `TSwipeCell / TSwipeCellAction`。 +- **顶部页签**:旧 `TDTabBar/TDTabBarView` → `TTabsBar/TTabsBarView`,显式共享 TabController 或位于同一个 DefaultTabController。TTabsBarView 默认不可滑动,需要手势切页时显式配置 physics。 +- **底部导航**:旧 `TDBottomTabBar` → `TTabBar`,提供 type、navigationTabs、受控 value/onChanged;旧 `topBorder/showTopBorder/centerDistance` 没有等价开关恢复,按新的默认边线和内置图文布局验收。 +- **Swiper**:使用 `TSwiper` 的 children 或 itemBuilder/itemCount;自建 `TSwiperController` 并在页面 dispose 中释放。旧第三方 SwiperPlugin/SwiperController 和 TDSwiperPagination 不能直接传入;按当前分页、箭头与 pageEffect 能力重组。TSwiper 默认 loop/autoplay 均 false,业务需要时显式打开。 - **需要调整**:侧滑交互与逐项动作配置使用当前 API; 不要依赖旧 Inherited/State,避免重复通知。 +### 迁移后怎样确认 -- **[Toast 轻提示](https://tdesign.tencent.com/flutter/components/toast?tab=api)**:`TDToast` → `TToast`。 +- 顶部页签与内容共享同一控制器,切换后内容一致。 +- 底部导航回调更新value,外部重置也正确显示选中项。 +- Swiper循环/自动播放显式符合业务需求,自建控制器被正确释放。 - **需要调整**:duration 为 Duration,加载默认也会超时; 持续加载显式 Duration.zero,背景拦截放 TOverlayConfig。 +[返回组件导航](#migration-components) ## 编译通过后仍要检查 diff --git a/tdesign-site/site/flutter-example-docs/documentation.test.mjs b/tdesign-site/site/flutter-example-docs/documentation.test.mjs index 14bb26ddf8..db962d5842 100644 --- a/tdesign-site/site/flutter-example-docs/documentation.test.mjs +++ b/tdesign-site/site/flutter-example-docs/documentation.test.mjs @@ -5,7 +5,7 @@ import path from 'node:path'; import test from 'node:test'; import { fileURLToPath } from 'node:url'; import siteConfig from '../site.config.mjs'; -import { migrationSource, packageLinks, renderMigrationExamples, syncDocuments } from '../../../scripts/documentation.mjs'; +import { migrationSource, guideLinks, packageLinks, renderMigrationExamples, syncDocuments } from '../../../scripts/documentation.mjs'; import { adaptGuideLinks, adaptRepositoryDocument } from './repository-document.mjs'; const root = fileURLToPath(new URL('../../../', import.meta.url)); @@ -89,3 +89,26 @@ test('migration is linked from getting started and dark mode shares the theme gu assert.doesNotMatch(read('tdesign-site/site/docs/getting-started.md'), /尚未发布|发布前|git:/); assert.match(read('tdesign-site/docs/components/theme/README.md'), /title: Theme 主题/); }); + +test('component links stay local in preview and become absolute in package copies', () => { + const content = '[Button](https://tdesign.tencent.com/flutter/components/button?tab=api) [Form](/flutter/components/form)'; + const local = guideLinks(content); + assert.match(local, /\[Button\]\(\/flutter\/components\/button\?tab=api\)/); + assert.doesNotMatch(local, /https:/); + const portable = guideLinks(local, { absolute: true }); + assert.match(portable, /https:\/\/tdesign.tencent.com\/flutter\/components\/button\?tab=api/); + assert.match(portable, /https:\/\/tdesign.tencent.com\/flutter\/components\/form/); +}); + + +test('custom theme guide uses the shared component preview with standalone scene links', () => { + const guide = readFileSync(path.join(root, 'tdesign-site/site/docs/custom-theme.md'), 'utf8'); + const runtime = readFileSync(path.join(root, 'tdesign-component/example/lib/documentation_theme_demo.dart'), 'utf8'); + assert.match(guide, /^flutterExample: custom-theme$/m); + assert.doesNotMatch(guide, /
注:web示例仅供参考,预览实际效果请阅读快速开始
- + -
-
+
+
@@ -63,7 +63,7 @@ export default defineComponent({ return path.slice(path.lastIndexOf('/') + 1); }, liveUrl() { - return flutterExampleLiveUrl(this.name, { + return flutterExampleLiveUrl(this.info.flutterExample || this.name, { dev: import.meta.env.DEV, hostname: window.location.hostname, devServerPort: import.meta.env.VITE_FLUTTER_WEB_PORT || '19001', From 0c24e4f8b7bf946b46439d235adb308d925bb496 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=98=BF=20Cai?= Date: Thu, 15 Oct 2026 17:14:26 +0800 Subject: [PATCH 07/13] fix(test): isolate demo debug modules and stabilize calendar snapshots --- specs/069-ci-visual-determinism/acceptance.md | 11 +++ specs/069-ci-visual-determinism/plan.md | 5 ++ specs/069-ci-visual-determinism/spec.md | 7 ++ specs/069-ci-visual-determinism/tasks.md | 6 ++ .../example/lib/base/example_widget.dart | 9 ++- .../example/test/result/result_demo_test.dart | 1 - .../example/test/switch/switch_page_test.dart | 8 -- .../example/test/theme/theme_demo_test.dart | 78 +++++++++++++++++++ .../example/test/widget_test.dart | 20 ++++- .../t_component_centering_golden_test.dart | 7 +- .../test/tool/run_visual_regression_test.dart | 17 ++++ .../tool/run_visual_regression.dart | 21 +++-- 12 files changed, 169 insertions(+), 21 deletions(-) create mode 100644 specs/069-ci-visual-determinism/acceptance.md create mode 100644 specs/069-ci-visual-determinism/plan.md create mode 100644 specs/069-ci-visual-determinism/spec.md create mode 100644 specs/069-ci-visual-determinism/tasks.md diff --git a/specs/069-ci-visual-determinism/acceptance.md b/specs/069-ci-visual-determinism/acceptance.md new file mode 100644 index 0000000000..c4fc76b38d --- /dev/null +++ b/specs/069-ci-visual-determinism/acceptance.md @@ -0,0 +1,11 @@ +# 第一批修复验收 + +当前失败提交:1347262f63f3d3af0e4d7d2c0637f78776234a0b,视觉运行38709836897/job116338189565。大量Demo出现尺寸/像素差异,符合内部Debug区块未隔离的结构变化;旧运行38702101311的4项Calendar/Indexes差异集中在真实当天15的字形颜色,已检查Linux隔离差异图。 + +已修复Demo视觉子进程编译开关、文字居中测试日期漂移,并补充自定义主题整页浅深/手动/系统四个Golden场景。新基线仅允许取自Linux CI并核对;未写入macOS生成的基线。保持精确比较、原工作流及测试集合,不跳过失败场景。 + +Flutter3.32:调度/日历/居中55项通过;默认Debug共享控件/Result/Switch13项、隐藏开关13项、Theme非Golden13项通过;新增后字符清单及实际字体覆盖单项通过。两个包完整严格分析无问题。原调度及API工具集合144项亦通过。 + +Flutter3.47.7:55项调度/日历/居中通过,默认模式26项与隐藏模式13项通过。隔离验证工程的旧Shader缓存曾与当前SDK不匹配,已清理隔离工程缓存并离线解析后通过;不修改主工程依赖。 + +后续:提交这批修复后读取新CI,检查Linux实际图、必要基线以及剩余功能/覆盖率失败,当前不宣称CI全部通过。 diff --git a/specs/069-ci-visual-determinism/plan.md b/specs/069-ci-visual-determinism/plan.md new file mode 100644 index 0000000000..b4c0a74482 --- /dev/null +++ b/specs/069-ci-visual-determinism/plan.md @@ -0,0 +1,5 @@ +# 方案 + +ExamplePage增加默认true的TDESIGN_DEMO_TEST_MODULES编译开关;run_visual_regression为Demo子进程传false,生产组件测试不受影响。将视觉调度参数提取为可检查列表并验证隔离范围。去掉公开组件功能测试对内部文案/滚动高度的耦合,内部开关由共享控件测试验证。 + +文字居中Golden在自身CalendarThemeData中显式将todayDayStyle颜色设为普通日期文字色,保持选中态和布局参数。先跑调度器自测、双版本功能与分析,再推送读取新CI全部失败,逐项处理;适用Linux图片由CI产物取证,不直接更新基线消除失败。 diff --git a/specs/069-ci-visual-determinism/spec.md b/specs/069-ci-visual-determinism/spec.md new file mode 100644 index 0000000000..7dd5499962 --- /dev/null +++ b/specs/069-ci-visual-determinism/spec.md @@ -0,0 +1,7 @@ +# CI视觉回归确定性修复 + +保持本地Debug默认展示内部验证区块,Profile/Release隐藏;视觉调度器的Demo测试进程统一关闭内部区块,不修改组件视觉测试的输入。开关不改变ExamplePage.showTestModule配置值,实际展示取决于Debug、页面开关与进程开关。功能回归继续验证默认Debug行为。 + +修复Calendar/Indexes文字居中Golden随真实日期漂移:该场景仅验证居中与布局,普通日期与今天文字颜色一致;日历今日/选中状态的专门测试保留。禁止放宽比较器、跳过失败测试或在macOS生成Golden。必要的基线差异须从Linux实际图审查后更新并重跑。 + +自定义主题指南补充整页浅深、手动深色与跟随系统深色四个Golden。缺失基线时Linux CI保存实际图并继续报错,人工核对后才安装为基线;保留原精确像素比较。 diff --git a/specs/069-ci-visual-determinism/tasks.md b/specs/069-ci-visual-determinism/tasks.md new file mode 100644 index 0000000000..3caf60a94a --- /dev/null +++ b/specs/069-ci-visual-determinism/tasks.md @@ -0,0 +1,6 @@ +# 任务 + +- [x] 固定视觉测试内部区块展示策略。 +- [x] 消除文字居中Calendar真实日期输入。 +- [x] 运行双版本相关功能、调度器与严格分析。 +- [ ] 推送并核对最新CI,处理其余失败及Linux实际图。 diff --git a/tdesign-component/example/lib/base/example_widget.dart b/tdesign-component/example/lib/base/example_widget.dart index 2959e325ea..a1fa7247a0 100644 --- a/tdesign-component/example/lib/base/example_widget.dart +++ b/tdesign-component/example/lib/base/example_widget.dart @@ -14,6 +14,11 @@ import 'example_route.dart'; import 'notification_center.dart'; import 'syntax_highlighter.dart'; +const _demoTestModulesEnabled = bool.fromEnvironment( + 'TDESIGN_DEMO_TEST_MODULES', + defaultValue: true, +); + var navBarkey = GlobalKey(); /// 示例页面控件,建议每个页面返回一个ExampleWidget即可,不用独自封装 @@ -82,6 +87,8 @@ class ExamplePage extends StatefulWidget { /// 是否在 debug 模式展示仅用于内部验证的单元测试模块,默认展示。 /// /// profile 和 release 构建中始终不展示。 + /// 视觉测试通过 `--dart-define=TDESIGN_DEMO_TEST_MODULES=false` 统一隐藏, + /// 不改变本地 debug 的默认展示与页面开关。 final bool showTestModule; /// 悬浮按钮 @@ -252,7 +259,7 @@ class _ExamplePageState extends State with WidgetsBindingObserver { Widget _buildExampleList() { final modules = [ ...widget.children, - if (kDebugMode && widget.showTestModule) + if (kDebugMode && _demoTestModulesEnabled && widget.showTestModule) ExampleModule( title: '单元测试', children: [_buildTestExampleItem(), ...widget.test], diff --git a/tdesign-component/example/test/result/result_demo_test.dart b/tdesign-component/example/test/result/result_demo_test.dart index ae77c4fcb8..bea92f755a 100644 --- a/tdesign-component/example/test/result/result_demo_test.dart +++ b/tdesign-component/example/test/result/result_demo_test.dart @@ -15,7 +15,6 @@ void main() { tester.widget(find.byType(ExamplePage)).showTestModule, isTrue, ); - expect(find.textContaining('未在示例稿中体现'), findsOneWidget); final results = tester.widgetList(find.byType(TResult)).toList(); expect(results, hasLength(9)); diff --git a/tdesign-component/example/test/switch/switch_page_test.dart b/tdesign-component/example/test/switch/switch_page_test.dart index 231571592e..5614df3bef 100644 --- a/tdesign-component/example/test/switch/switch_page_test.dart +++ b/tdesign-component/example/test/switch/switch_page_test.dart @@ -70,14 +70,6 @@ void main() { expect(find.byType(TCellGroup), findsNWidgets(4)); expect(find.byType(TSwitch), findsNWidgets(11)); - final scrollable = tester.state( - find.descendant( - of: find.byType(CustomScrollView), - matching: find.byType(Scrollable), - ), - ); - // Debug 区块追加在公开示例后,页面允许继续滚动。 - expect(scrollable.position.maxScrollExtent, greaterThan(0)); expect( tester.widget(find.byType(Scaffold)).backgroundColor, const Color(0xFFF6F6F6), diff --git a/tdesign-component/example/test/theme/theme_demo_test.dart b/tdesign-component/example/test/theme/theme_demo_test.dart index d78d4f0fe6..44f98cd677 100644 --- a/tdesign-component/example/test/theme/theme_demo_test.dart +++ b/tdesign-component/example/test/theme/theme_demo_test.dart @@ -1,3 +1,8 @@ +import 'dart:io'; +import 'dart:ui' as ui; + +import 'package:flutter/rendering.dart'; +import 'package:flutter/services.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:tdesign_flutter/tdesign_flutter.dart'; import 'package:tdesign_flutter_example/base/example_route.dart'; @@ -22,6 +27,54 @@ void main() { ); registerDemoPageTests(spec); + setUpAll(() async { + // 指南内部 MaterialApp 使用默认字体栈;为其中文 fallback 加载测试字体。 + await (FontLoader('Microsoft YaHei')..addFont( + File( + 'test/fonts/TDesignGoldenCJK-Regular.otf', + ).readAsBytes().then(ByteData.sublistView), + )) + .load(); + }); + + const guideSpec = DemoPageTestSpec( + name: 'custom-theme', + title: '自定义主题', + page: DocumentationThemeGuidePage(), + expectedTexts: ['JSON 配置', '组件局部样式', '明暗模式'], + goldenDirectory: 'theme', + ); + for (final mode in [ThemeMode.light, ThemeMode.dark]) { + testWidgets('custom theme guide ${mode.name} whole page golden', ( + tester, + ) async { + await pumpFullDemoPage(tester, guideSpec, mode); + await _expectGuideGolden(tester, 'custom_theme_initial_${mode.name}.png'); + await disposeDemoPage(tester); + }, tags: 'golden'); + } + for (final followSystem in [false, true]) { + testWidgets( + 'custom theme guide ${followSystem ? 'system' : 'manual'} dark switch golden', + (tester) async { + tester.platformDispatcher.platformBrightnessTestValue = Brightness.dark; + addTearDown(tester.platformDispatcher.clearPlatformBrightnessTestValue); + await pumpFullDemoPage(tester, guideSpec, ThemeMode.light); + await tester.tap(find.text(followSystem ? '跟随系统' : '深色')); + await tester.pumpAndSettle(); + expect(find.text('当前外观:深色'), findsNWidgets(2)); + expect(find.text('brandColor:#699EF5'), findsNWidgets(2)); + expect(find.textContaining('单元测试'), findsNothing); + await _expectGuideGolden( + tester, + 'custom_theme_${followSystem ? 'system' : 'manual'}_dark.png', + ); + await disposeDemoPage(tester); + }, + tags: 'golden', + ); + } + testWidgets('Theme Demo lists the current palette keys', (tester) async { await pumpFullDemoPage(tester, spec, ThemeMode.light); @@ -424,3 +477,28 @@ void main() { }, ); } + +Future _expectGuideGolden(WidgetTester tester, String name) async { + final target = find.byKey(const ValueKey('custom-theme-demo-page')); + final golden = File('test/theme/goldens/$name'); + if (!golden.existsSync()) { + // 首次 Linux 验收保留实际图供核对,缺失基线仍然报错,不自动批准。 + await tester.runAsync(() async { + final boundary = tester.renderObject(target); + final image = await boundary.toImage(); + try { + final data = await image.toByteData(format: ui.ImageByteFormat.png); + final actual = File( + 'test/theme/failures/${name.replaceAll('.png', '')}_actual.png', + ); + await actual.parent.create(recursive: true); + await actual.writeAsBytes( + data!.buffer.asUint8List(data.offsetInBytes, data.lengthInBytes), + ); + } finally { + image.dispose(); + } + }); + } + await expectLater(target, matchesGoldenFile('goldens/$name')); +} diff --git a/tdesign-component/example/test/widget_test.dart b/tdesign-component/example/test/widget_test.dart index 00e898ecda..97bd286442 100644 --- a/tdesign-component/example/test/widget_test.dart +++ b/tdesign-component/example/test/widget_test.dart @@ -247,11 +247,27 @@ void main() { ), ); await tester.pump(); - expect(find.text('02 单元测试'), findsOneWidget); + expect( + find.text('02 单元测试'), + const bool.fromEnvironment( + 'TDESIGN_DEMO_TEST_MODULES', + defaultValue: true, + ) + ? findsOneWidget + : findsNothing, + ); await tester.pumpWidget(buildPage(showTestModule: true)); await tester.pump(); - expect(find.text('02 单元测试'), findsOneWidget); + expect( + find.text('02 单元测试'), + const bool.fromEnvironment( + 'TDESIGN_DEMO_TEST_MODULES', + defaultValue: true, + ) + ? findsOneWidget + : findsNothing, + ); await tester.pumpWidget(buildPage(showTestModule: false)); await tester.pump(); diff --git a/tdesign-component/test/components/text/t_component_centering_golden_test.dart b/tdesign-component/test/components/text/t_component_centering_golden_test.dart index c9e238094c..687ec417f3 100644 --- a/tdesign-component/test/components/text/t_component_centering_golden_test.dart +++ b/tdesign-component/test/components/text/t_component_centering_golden_test.dart @@ -266,9 +266,12 @@ void _calendarIndexesScenes() { brightness: brightness, extensions: [ token, - const TCalendarThemeData( + TCalendarThemeData( + // 本场景只验证居中,不让真实“今天”改变固定日期的截图。 + // 今日状态的颜色由 Calendar 独立状态测试覆盖。 + todayDayStyle: TextStyle(color: token.textColorPrimary), height: 550, - monthTitleStyle: TextStyle( + monthTitleStyle: const TextStyle( fontSize: 24, height: 2, color: Colors.purple, diff --git a/tdesign-component/test/tool/run_visual_regression_test.dart b/tdesign-component/test/tool/run_visual_regression_test.dart index a9b5d3e6fa..6f70ebf805 100644 --- a/tdesign-component/test/tool/run_visual_regression_test.dart +++ b/tdesign-component/test/tool/run_visual_regression_test.dart @@ -27,6 +27,23 @@ void main() { } }); + test('only Demo visual processes disable internal debug modules', () { + for (final suite in visualTestSuites) { + final args = visualTestArguments(suite); + expect( + args.contains('--dart-define=TDESIGN_DEMO_TEST_MODULES=false'), + suite.kind == VisualTestKind.demo, + ); + expect(args, containsAll(suite.testFiles)); + expect(args, containsAll(suite.arguments)); + expect(args, isNot(contains('--update-goldens'))); + expect( + visualTestArguments(suite, updateGoldens: true).last, + '--update-goldens', + ); + } + }); + test('visual regression uses the exact default Golden comparator', () { final goldenTests = [ for (final root in ['test', 'example/test']) diff --git a/tdesign-component/tool/run_visual_regression.dart b/tdesign-component/tool/run_visual_regression.dart index f04117c627..c592a87cf4 100644 --- a/tdesign-component/tool/run_visual_regression.dart +++ b/tdesign-component/tool/run_visual_regression.dart @@ -24,6 +24,19 @@ final visualTestSuites = [ VisualTestSuite(component.name, visualTest), ]; +List visualTestArguments( + VisualTestSuite suite, { + bool updateGoldens = false, +}) => [ + 'test', + ...suite.testFiles, + '--no-pub', + if (suite.kind == VisualTestKind.demo) + '--dart-define=TDESIGN_DEMO_TEST_MODULES=false', + ...suite.arguments, + if (updateGoldens) '--update-goldens', +]; + Future runVisualRegression({bool updateGoldens = false}) async { final failedSuites = []; final executedSuites = {}; @@ -36,13 +49,7 @@ Future runVisualRegression({bool updateGoldens = false}) async { stdout.writeln('\n=== ${suite.name} ==='); final process = await Process.start( 'flutter', - [ - 'test', - ...suite.testFiles, - '--no-pub', - ...suite.arguments, - if (updateGoldens) '--update-goldens', - ], + visualTestArguments(suite, updateGoldens: updateGoldens), workingDirectory: suite.workingDirectory, mode: ProcessStartMode.inheritStdio, ); From 43082c7b0cb6dfe38ea4b5898d194cbc988756bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=98=BF=20Cai?= Date: Thu, 15 Oct 2026 17:25:35 +0800 Subject: [PATCH 08/13] fix(ci): separate public demo tests and collect nested golden failures --- .github/workflows/test-build.yml | 2 +- specs/069-ci-visual-determinism/acceptance.md | 12 ++++ specs/069-ci-visual-determinism/plan.md | 2 + specs/069-ci-visual-determinism/spec.md | 4 +- .../example/test/theme/theme_demo_test.dart | 60 +++++++++++++------ .../example/test/widget_test.dart | 2 +- .../tool/run_component_regression_test.dart | 28 +++++++++ .../test/tool/run_visual_regression_test.dart | 8 +++ .../tool/demo_golden_coverage.dart | 13 +++- .../tool/run_example_regression.dart | 33 +++++++--- 10 files changed, 132 insertions(+), 32 deletions(-) diff --git a/.github/workflows/test-build.yml b/.github/workflows/test-build.yml index 3bfe756acb..a48fdc72ee 100644 --- a/.github/workflows/test-build.yml +++ b/.github/workflows/test-build.yml @@ -141,7 +141,7 @@ jobs: name: golden-failures-flutter-3.32.0 path: | tdesign-component/test/**/failures/ - tdesign-component/example/test/failures/ + tdesign-component/example/test/**/failures/ if-no-files-found: ignore retention-days: 7 diff --git a/specs/069-ci-visual-determinism/acceptance.md b/specs/069-ci-visual-determinism/acceptance.md index c4fc76b38d..26039d8b1d 100644 --- a/specs/069-ci-visual-determinism/acceptance.md +++ b/specs/069-ci-visual-determinism/acceptance.md @@ -9,3 +9,15 @@ Flutter3.32:调度/日历/居中55项通过;默认Debug共享控件/Result/S Flutter3.47.7:55项调度/日历/居中通过,默认模式26项与隐藏模式13项通过。隔离验证工程的旧Shader缓存曾与当前SDK不匹配,已清理隔离工程缓存并离线解析后通过;不修改主工程依赖。 后续:提交这批修复后读取新CI,检查Linux实际图、必要基线以及剩余功能/覆盖率失败,当前不宣称CI全部通过。 + +## 完整功能回归修复 + +读取1347262完整CI日志并在双SDK重现13项失败:内部示例污染公开Popover按钮数、TabBar等代码入口数及定位断言。run_example_regression现对公开场景统一隐藏内部区块,随后独立运行internal-demo标签验证默认Debug开关;未修改公开实例数量或放宽布局阈值。Flutter3.32.0与3.47.7完整公开功能回归各377项通过,默认Debug专项各1项通过。两个包分析曾发现新调度脚本单行if格式问题,已修正。 + +## Linux首轮修复结果与产物收集缺陷 + +0c24e4f8的Linux视觉运行38711495490/job116343960093已完成:Calendar/Indexes四项通过,原先大范围Demo差异消除,仅Divider、PullDownRefresh、Tabs、Skeleton、Icon、Link、Text、Upload、Theme、Toast十组仍失败。旧基线含内部区块而新输出按公开示例关闭,另有四个新增主题指南基线缺失。没有直接更新基线。 + +发现工作流只上传example/test/failures,实际目录是example/test/<组件>/failures,日志明确No files were found,导致无artifact。按本轮“排查并修复当前CI”授权,将路径修正为example/test/**/failures,并加调度器自检。下一轮先取得Linux实际图并核对后再安装必要基线。 + +调度器自检最终在双SDK各17项通过。指南视觉矩阵扩展为初始/手动切换/系统切换各浅深两张,共六张,确保明暗PNG成对;场景通过真实操作从相反模式切换。待Linux产物核对并安装后才能宣称视觉验收通过。 diff --git a/specs/069-ci-visual-determinism/plan.md b/specs/069-ci-visual-determinism/plan.md index b4c0a74482..00581dc2c2 100644 --- a/specs/069-ci-visual-determinism/plan.md +++ b/specs/069-ci-visual-determinism/plan.md @@ -3,3 +3,5 @@ ExamplePage增加默认true的TDESIGN_DEMO_TEST_MODULES编译开关;run_visual_regression为Demo子进程传false,生产组件测试不受影响。将视觉调度参数提取为可检查列表并验证隔离范围。去掉公开组件功能测试对内部文案/滚动高度的耦合,内部开关由共享控件测试验证。 文字居中Golden在自身CalendarThemeData中显式将todayDayStyle颜色设为普通日期文字色,保持选中态和布局参数。先跑调度器自测、双版本功能与分析,再推送读取新CI全部失败,逐项处理;适用Linux图片由CI产物取证,不直接更新基线消除失败。 + +CI运行证实Demo失败图片未上传:修复GitHub artifact路径为example/test/**/failures并验证。此为本轮用户明确要求修复CI后的最小工作流改动,不改变门禁、版本或比较容差。 diff --git a/specs/069-ci-visual-determinism/spec.md b/specs/069-ci-visual-determinism/spec.md index 7dd5499962..ddd4886b53 100644 --- a/specs/069-ci-visual-determinism/spec.md +++ b/specs/069-ci-visual-determinism/spec.md @@ -4,4 +4,6 @@ 修复Calendar/Indexes文字居中Golden随真实日期漂移:该场景仅验证居中与布局,普通日期与今天文字颜色一致;日历今日/选中状态的专门测试保留。禁止放宽比较器、跳过失败测试或在macOS生成Golden。必要的基线差异须从Linux实际图审查后更新并重跑。 -自定义主题指南补充整页浅深、手动深色与跟随系统深色四个Golden。缺失基线时Linux CI保存实际图并继续报错,人工核对后才安装为基线;保留原精确像素比较。 +自定义主题指南补充整页浅深、手动浅深色与跟随系统浅深色六个Golden。缺失基线时Linux CI保存实际图并继续报错,人工核对后才安装为基线;保留原精确像素比较。 + +完整功能回归发现13项公开场景断言被内部示例污染(按钮数量、代码入口及布局)。共享功能调度器同样关闭内部区块,另开默认Debug进程单独运行internal-demo标签的开关契约;不通过放大数量或放宽布局阈值接受污染。 diff --git a/tdesign-component/example/test/theme/theme_demo_test.dart b/tdesign-component/example/test/theme/theme_demo_test.dart index 44f98cd677..7e816340b0 100644 --- a/tdesign-component/example/test/theme/theme_demo_test.dart +++ b/tdesign-component/example/test/theme/theme_demo_test.dart @@ -54,25 +54,47 @@ void main() { }, tags: 'golden'); } for (final followSystem in [false, true]) { - testWidgets( - 'custom theme guide ${followSystem ? 'system' : 'manual'} dark switch golden', - (tester) async { - tester.platformDispatcher.platformBrightnessTestValue = Brightness.dark; - addTearDown(tester.platformDispatcher.clearPlatformBrightnessTestValue); - await pumpFullDemoPage(tester, guideSpec, ThemeMode.light); - await tester.tap(find.text(followSystem ? '跟随系统' : '深色')); - await tester.pumpAndSettle(); - expect(find.text('当前外观:深色'), findsNWidgets(2)); - expect(find.text('brandColor:#699EF5'), findsNWidgets(2)); - expect(find.textContaining('单元测试'), findsNothing); - await _expectGuideGolden( - tester, - 'custom_theme_${followSystem ? 'system' : 'manual'}_dark.png', - ); - await disposeDemoPage(tester); - }, - tags: 'golden', - ); + for (final mode in [ThemeMode.light, ThemeMode.dark]) { + testWidgets( + 'custom theme guide ${followSystem ? 'system' : 'manual'} ${mode.name} switch golden', + (tester) async { + final isDark = mode == ThemeMode.dark; + tester.platformDispatcher.platformBrightnessTestValue = isDark + ? Brightness.dark + : Brightness.light; + addTearDown( + tester.platformDispatcher.clearPlatformBrightnessTestValue, + ); + await pumpFullDemoPage( + tester, + guideSpec, + isDark ? ThemeMode.light : ThemeMode.dark, + ); + await tester.tap( + find.text( + followSystem + ? '跟随系统' + : isDark + ? '深色' + : '浅色', + ), + ); + await tester.pumpAndSettle(); + expect(find.text('当前外观:${isDark ? '深色' : '浅色'}'), findsNWidgets(2)); + expect( + find.text('brandColor:#${isDark ? '699EF5' : '0052D9'}'), + findsNWidgets(2), + ); + expect(find.textContaining('单元测试'), findsNothing); + await _expectGuideGolden( + tester, + 'custom_theme_${followSystem ? 'system' : 'manual'}_${mode.name}.png', + ); + await disposeDemoPage(tester); + }, + tags: 'golden', + ); + } } testWidgets('Theme Demo lists the current palette keys', (tester) async { diff --git a/tdesign-component/example/test/widget_test.dart b/tdesign-component/example/test/widget_test.dart index 97bd286442..d47b2b8812 100644 --- a/tdesign-component/example/test/widget_test.dart +++ b/tdesign-component/example/test/widget_test.dart @@ -272,7 +272,7 @@ void main() { await tester.pumpWidget(buildPage(showTestModule: false)); await tester.pump(); expect(find.text('02 单元测试'), findsNothing); - }); + }, tags: 'internal-demo'); testWidgets('Link Demo 使用页面背景与白色示例行分层', (tester) async { final token = TThemeData.defaultData(); diff --git a/tdesign-component/test/tool/run_component_regression_test.dart b/tdesign-component/test/tool/run_component_regression_test.dart index d68ee5e505..507f123ce4 100644 --- a/tdesign-component/test/tool/run_component_regression_test.dart +++ b/tdesign-component/test/tool/run_component_regression_test.dart @@ -5,6 +5,7 @@ import 'package:flutter_test/flutter_test.dart'; import '../../tool/check_component_coverage.dart'; import '../../tool/component_test_manifest.dart'; import '../../tool/run_component_regression.dart'; +import '../../tool/run_example_regression.dart'; void main() { test('regression suites and coverage targets stay in sync', () { @@ -57,6 +58,33 @@ void main() { } }); + test( + 'public example assertions and default debug controls run separately', + () { + final groups = exampleRegressionArguments([ + 'test/widget_test.dart', + 'test/example_test.dart', + ]); + expect(groups, hasLength(2)); + expect( + groups.first, + contains('--dart-define=TDESIGN_DEMO_TEST_MODULES=false'), + ); + expect( + groups.first, + containsAll(['--exclude-tags', 'golden', 'test/example_test.dart']), + ); + expect( + groups.last, + containsAll(['--tags', 'internal-demo', 'test/widget_test.dart']), + ); + expect( + groups.last.where((argument) => argument.startsWith('--dart-define=')), + isEmpty, + ); + }, + ); + test('GitHub and CNB invoke the shared example regression runner', () { final githubWorkflow = File( '../.github/workflows/test-build.yml', diff --git a/tdesign-component/test/tool/run_visual_regression_test.dart b/tdesign-component/test/tool/run_visual_regression_test.dart index 6f70ebf805..b2bdec64a8 100644 --- a/tdesign-component/test/tool/run_visual_regression_test.dart +++ b/tdesign-component/test/tool/run_visual_regression_test.dart @@ -110,6 +110,14 @@ void main() { ); }); + test('GitHub uploads failures from nested Demo directories', () { + final workflow = File( + '../.github/workflows/test-build.yml', + ).readAsStringSync(); + expect(workflow, contains('tdesign-component/test/**/failures/')); + expect(workflow, contains('tdesign-component/example/test/**/failures/')); + }); + test('visual regression suite names are unique', () { final names = visualTestSuites.map((suite) => suite.name).toList(); expect(names.toSet(), hasLength(names.length)); diff --git a/tdesign-component/tool/demo_golden_coverage.dart b/tdesign-component/tool/demo_golden_coverage.dart index 08cf146e86..5e06571115 100644 --- a/tdesign-component/tool/demo_golden_coverage.dart +++ b/tdesign-component/tool/demo_golden_coverage.dart @@ -366,9 +366,16 @@ const demoGoldenCoverage = [ ), DemoGoldenCoverage( component: 'theme', - kind: DemoGoldenCoverageKind.staticOnly, - states: ['light and dark token pages', 'Material 2 and 3 isolation'], - rationale: 'Theme 模块没有自身交互,颜色 Token 页面和 Material 默认值隔离场景固定其公开视觉契约。', + kind: DemoGoldenCoverageKind.exhaustiveWithFunctionalBoundary, + states: [ + 'light and dark token pages', + 'Material 2 and 3 isolation', + 'custom theme guide initial light and dark', + 'custom theme guide manual light and dark selection', + 'custom theme guide system light and dark selection', + ], + rationale: + '色板与Material隔离保留原场景;自定义主题指南整页覆盖JSON、局部样式和数值对照,真实操作保存手动与系统浅深色,包含从相反模式切换后的结果。系统外观变化与320dp边界另由功能测试验证。', ), DemoGoldenCoverage( component: 'toast', diff --git a/tdesign-component/tool/run_example_regression.dart b/tdesign-component/tool/run_example_regression.dart index 7030004ea5..28dc8d8587 100644 --- a/tdesign-component/tool/run_example_regression.dart +++ b/tdesign-component/tool/run_example_regression.dart @@ -2,18 +2,37 @@ import 'dart:io'; import 'component_test_manifest.dart'; +List> exampleRegressionArguments(List testFiles) => [ + [ + 'test', + '--no-pub', + '--exclude-tags', + 'golden', + '--dart-define=TDESIGN_DEMO_TEST_MODULES=false', + ...testFiles, + ], + // 公开示例与内部调试开关分别验证,避免内部示例污染组件数量及代码入口断言。 + ['test', '--no-pub', '--tags', 'internal-demo', 'test/widget_test.dart'], +]; + Future runExampleRegression() async { final testFiles = [ ...sharedExampleTests, for (final component in componentTestManifests) ...component.exampleTests, ]; - final process = await Process.start( - 'flutter', - ['test', '--no-pub', '--exclude-tags', 'golden', ...testFiles], - workingDirectory: 'example', - mode: ProcessStartMode.inheritStdio, - ); - return process.exitCode; + for (final arguments in exampleRegressionArguments(testFiles)) { + final process = await Process.start( + 'flutter', + arguments, + workingDirectory: 'example', + mode: ProcessStartMode.inheritStdio, + ); + final result = await process.exitCode; + if (result != 0) { + return result; + } + } + return 0; } Future main() async { From 053ecf89249dacdb53dc06e109c0a82230b6f01d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=98=BF=20Cai?= Date: Thu, 15 Oct 2026 17:39:45 +0800 Subject: [PATCH 09/13] test: align public demo goldens and preserve guide font fallbacks --- specs/069-ci-visual-determinism/acceptance.md | 6 + .../golden-provenance.json | 795 ++++++++++++++++++ .../example/lib/documentation_theme_demo.dart | 66 +- .../divider/goldens/divider_page_dark.png | Bin 71711 -> 43528 bytes .../divider/goldens/divider_page_light.png | Bin 72396 -> 43539 bytes .../example/test/fonts/README.md | 8 + .../test/icon/goldens/icon_copied_dark.png | Bin 121145 -> 104814 bytes .../test/icon/goldens/icon_copied_light.png | Bin 122553 -> 106131 bytes .../test/icon/goldens/icon_page_dark.png | Bin 121145 -> 104814 bytes .../test/icon/goldens/icon_page_light.png | Bin 122553 -> 106131 bytes .../test/link/goldens/link_feedback_dark.png | Bin 109229 -> 80502 bytes .../test/link/goldens/link_feedback_light.png | Bin 109659 -> 80947 bytes .../test/link/goldens/link_page_dark.png | Bin 107329 -> 78589 bytes .../test/link/goldens/link_page_light.png | Bin 107770 -> 79021 bytes .../goldens/pull_down_refresh_page_dark.png | Bin 93073 -> 64745 bytes .../goldens/pull_down_refresh_page_light.png | Bin 94722 -> 65733 bytes ..._down_refresh_timeout_post_action_dark.png | Bin 50226 -> 35702 bytes ...down_refresh_timeout_post_action_light.png | Bin 51040 -> 36015 bytes .../skeleton/goldens/skeleton_page_dark.png | Bin 86105 -> 57238 bytes .../skeleton/goldens/skeleton_page_light.png | Bin 87957 -> 58517 bytes .../goldens/tabs_content_selected_dark.png | Bin 118518 -> 89950 bytes .../goldens/tabs_content_selected_light.png | Bin 119195 -> 90027 bytes .../test/tabs/goldens/tabs_page_dark.png | Bin 118429 -> 89878 bytes .../test/tabs/goldens/tabs_page_light.png | Bin 119124 -> 89957 bytes .../test/text/goldens/text_page_dark.png | Bin 125197 -> 96858 bytes .../test/text/goldens/text_page_light.png | Bin 126072 -> 97083 bytes .../test/theme/goldens/theme_page_dark.png | Bin 232841 -> 183237 bytes .../test/theme/goldens/theme_page_light.png | Bin 225969 -> 174846 bytes .../example/test/theme/theme_demo_test.dart | 35 +- .../toast/goldens/toast_cover_opened_dark.png | Bin 101052 -> 75962 bytes .../goldens/toast_cover_opened_light.png | Bin 104402 -> 78255 bytes .../toast/goldens/toast_fail_opened_dark.png | Bin 110452 -> 81394 bytes .../toast/goldens/toast_fail_opened_light.png | Bin 111882 -> 81942 bytes .../toast_horizontal_icon_opened_dark.png | Bin 109908 -> 81914 bytes .../toast_horizontal_icon_opened_light.png | Bin 111317 -> 82630 bytes .../goldens/toast_loading_opened_dark.png | Bin 109864 -> 80968 bytes .../goldens/toast_loading_opened_light.png | Bin 111250 -> 81472 bytes .../goldens/toast_manual_opened_dark.png | Bin 109768 -> 81703 bytes .../goldens/toast_manual_opened_light.png | Bin 111137 -> 82356 bytes .../toast_multiple_text_opened_dark.png | Bin 114513 -> 86255 bytes .../toast_multiple_text_opened_light.png | Bin 115523 -> 86726 bytes .../test/toast/goldens/toast_page_dark.png | Bin 107144 -> 78725 bytes .../test/toast/goldens/toast_page_light.png | Bin 108530 -> 79406 bytes .../goldens/toast_success_opened_dark.png | Bin 110371 -> 81275 bytes .../goldens/toast_success_opened_light.png | Bin 111745 -> 81794 bytes .../toast/goldens/toast_text_opened_dark.png | Bin 109768 -> 81703 bytes .../toast/goldens/toast_text_opened_light.png | Bin 111137 -> 82356 bytes .../toast_vertical_icon_opened_dark.png | Bin 110289 -> 81300 bytes .../toast_vertical_icon_opened_light.png | Bin 111717 -> 81826 bytes .../goldens/toast_warning_opened_dark.png | Bin 110145 -> 81128 bytes .../goldens/toast_warning_opened_light.png | Bin 111560 -> 81770 bytes .../test/upload/goldens/upload_page_dark.png | Bin 151905 -> 123458 bytes .../test/upload/goldens/upload_page_light.png | Bin 153014 -> 123923 bytes 53 files changed, 881 insertions(+), 29 deletions(-) create mode 100644 specs/069-ci-visual-determinism/golden-provenance.json diff --git a/specs/069-ci-visual-determinism/acceptance.md b/specs/069-ci-visual-determinism/acceptance.md index 26039d8b1d..54254491fe 100644 --- a/specs/069-ci-visual-determinism/acceptance.md +++ b/specs/069-ci-visual-determinism/acceptance.md @@ -21,3 +21,9 @@ Flutter3.47.7:55项调度/日历/居中通过,默认模式26项与隐藏模 发现工作流只上传example/test/failures,实际目录是example/test/<组件>/failures,日志明确No files were found,导致无artifact。按本轮“排查并修复当前CI”授权,将路径修正为example/test/**/failures,并加调度器自检。下一轮先取得Linux实际图并核对后再安装必要基线。 调度器自检最终在双SDK各17项通过。指南视觉矩阵扩展为初始/手动切换/系统切换各浅深两张,共六张,确保明暗PNG成对;场景通过真实操作从相反模式切换。待Linux产物核对并安装后才能宣称视觉验收通过。 + +## Linux图片核对与基线处置 + +修复收集路径后,43082c7b运行38712855827产物11961791330成功上传,包含54张实际图。已核对10组整页/操作后联系表,并查看Theme、Toast代表原图:48张既有Demo基线变化来自移除内部区块,公开场景保留;页面缩短后的Toast中心和刷新滚动位置随公开视口调整。仅采用Linux实际PNG原字节,未生成macOS基线、未改比较容差;来源、旧/新SHA及尺寸见golden-provenance.json。 + +六张新增主题指南实际图存在原生文字/monospace缺字,全部拒绝,不作为基线。给指南新增可选宿主Theme适配入口,仅截图测试注入固定原生文字字体/回退,不改Token名称、浅深关联或颜色。14项主题功能回归通过,包括RenderParagraph实际字体栈及双配置值不丢失;下一轮Linux必须重新核对这六张图。 diff --git a/specs/069-ci-visual-determinism/golden-provenance.json b/specs/069-ci-visual-determinism/golden-provenance.json new file mode 100644 index 0000000000..2e33897921 --- /dev/null +++ b/specs/069-ci-visual-determinism/golden-provenance.json @@ -0,0 +1,795 @@ +{ + "source_commit": "43082c7b0cb6dfe38ea4b5898d194cbc988756bb", + "linux_run": 38712855827, + "linux_job": 116348720947, + "artifact_id": 11961791330, + "artifact_url": "https://github.com/Tencent/tdesign-flutter/actions/runs/38712855827/artifacts/11961791330", + "platform": "Linux Ubuntu 24.04 / Flutter 3.32.0", + "comparison": "exact; no tolerance override", + "review": "Reviewed whole-page contact sheets for all groups and native representative Theme/Toast outputs. Public content is retained; internal modules are removed, with expected viewport/overlay placement following public page height. No component-package baseline changed.", + "accepted": [ + { + "source": "/private/tmp/tdesign-ci-43082-goldens/example/test/divider/failures/divider_page_dark_testImage.png", + "target": "/Users/rs/.codex/.chatgpt-projects/g-p-6ad03a864eec81918724e40af37fbf26/tdesign-flutter/tdesign-component/example/test/divider/goldens/divider_page_dark.png", + "size": [ + 375, + 812 + ], + "sha256": "5b05f943900162f7cf9bfc5c0941682e31a77d2c73d4a7cc4768bbc86cb60127", + "old_size": [ + 375, + 1006 + ], + "old_sha256": "49d0448832e4fac192173789385487d84a9cc1dd400add721a00a945182aa0a4", + "decision": "accepted-public-demo-without-internal-debug-module" + }, + { + "source": "/private/tmp/tdesign-ci-43082-goldens/example/test/divider/failures/divider_page_light_testImage.png", + "target": "/Users/rs/.codex/.chatgpt-projects/g-p-6ad03a864eec81918724e40af37fbf26/tdesign-flutter/tdesign-component/example/test/divider/goldens/divider_page_light.png", + "size": [ + 375, + 812 + ], + "sha256": "9b177e76124f372e6ca40b13049f57d02b04ac716b7ccd7f9171510a7ff526d3", + "old_size": [ + 375, + 1006 + ], + "old_sha256": "09995d0694f63c0a61a8603dc6c5079e3365da81bd7a0cf4392fcafd35c43a5d", + "decision": "accepted-public-demo-without-internal-debug-module" + }, + { + "source": "/private/tmp/tdesign-ci-43082-goldens/example/test/icon/failures/icon_copied_dark_testImage.png", + "target": "/Users/rs/.codex/.chatgpt-projects/g-p-6ad03a864eec81918724e40af37fbf26/tdesign-flutter/tdesign-component/example/test/icon/goldens/icon_copied_dark.png", + "size": [ + 375, + 1481 + ], + "sha256": "5b646c97ecd8975f40f338b4f553e631ef7351ebe87aa6dd10bcaf3b4872472c", + "old_size": [ + 375, + 1717 + ], + "old_sha256": "b48e3ebf2fea021c52ffe6e20f1ada4e211a0a66b2f2152f9f3deb36e989fd1b", + "decision": "accepted-public-demo-without-internal-debug-module" + }, + { + "source": "/private/tmp/tdesign-ci-43082-goldens/example/test/icon/failures/icon_copied_light_testImage.png", + "target": "/Users/rs/.codex/.chatgpt-projects/g-p-6ad03a864eec81918724e40af37fbf26/tdesign-flutter/tdesign-component/example/test/icon/goldens/icon_copied_light.png", + "size": [ + 375, + 1481 + ], + "sha256": "ef625ffe20d6d52b82f92dc532b4cd012b099dcd6df22c360d3d7194bc7a9843", + "old_size": [ + 375, + 1717 + ], + "old_sha256": "c92463076d2c4ad0e5982cb9a50d4800da881d02c8392d54e9dd5dcb5f8d2bab", + "decision": "accepted-public-demo-without-internal-debug-module" + }, + { + "source": "/private/tmp/tdesign-ci-43082-goldens/example/test/icon/failures/icon_page_dark_testImage.png", + "target": "/Users/rs/.codex/.chatgpt-projects/g-p-6ad03a864eec81918724e40af37fbf26/tdesign-flutter/tdesign-component/example/test/icon/goldens/icon_page_dark.png", + "size": [ + 375, + 1481 + ], + "sha256": "5b646c97ecd8975f40f338b4f553e631ef7351ebe87aa6dd10bcaf3b4872472c", + "old_size": [ + 375, + 1717 + ], + "old_sha256": "b48e3ebf2fea021c52ffe6e20f1ada4e211a0a66b2f2152f9f3deb36e989fd1b", + "decision": "accepted-public-demo-without-internal-debug-module" + }, + { + "source": "/private/tmp/tdesign-ci-43082-goldens/example/test/icon/failures/icon_page_light_testImage.png", + "target": "/Users/rs/.codex/.chatgpt-projects/g-p-6ad03a864eec81918724e40af37fbf26/tdesign-flutter/tdesign-component/example/test/icon/goldens/icon_page_light.png", + "size": [ + 375, + 1481 + ], + "sha256": "ef625ffe20d6d52b82f92dc532b4cd012b099dcd6df22c360d3d7194bc7a9843", + "old_size": [ + 375, + 1717 + ], + "old_sha256": "c92463076d2c4ad0e5982cb9a50d4800da881d02c8392d54e9dd5dcb5f8d2bab", + "decision": "accepted-public-demo-without-internal-debug-module" + }, + { + "source": "/private/tmp/tdesign-ci-43082-goldens/example/test/link/failures/link_feedback_dark_testImage.png", + "target": "/Users/rs/.codex/.chatgpt-projects/g-p-6ad03a864eec81918724e40af37fbf26/tdesign-flutter/tdesign-component/example/test/link/goldens/link_feedback_dark.png", + "size": [ + 375, + 1212 + ], + "sha256": "d29b4ece99daeee4c59349f197eb937b1b19560682763c1234a099a6f7e3e570", + "old_size": [ + 375, + 1449 + ], + "old_sha256": "3199812373cadfc115fb7d6ef1cb957f9938fca2bf80716f8cb73578a73d9222", + "decision": "accepted-public-demo-without-internal-debug-module" + }, + { + "source": "/private/tmp/tdesign-ci-43082-goldens/example/test/link/failures/link_feedback_light_testImage.png", + "target": "/Users/rs/.codex/.chatgpt-projects/g-p-6ad03a864eec81918724e40af37fbf26/tdesign-flutter/tdesign-component/example/test/link/goldens/link_feedback_light.png", + "size": [ + 375, + 1212 + ], + "sha256": "e559ced431e6e5e8c058b232aed76029e0f07e356feaa8578d02ca532934edfe", + "old_size": [ + 375, + 1449 + ], + "old_sha256": "6aade4754a0dfad700ccda10f72d04f9d6151325ee441b6a5744216d9d44dceb", + "decision": "accepted-public-demo-without-internal-debug-module" + }, + { + "source": "/private/tmp/tdesign-ci-43082-goldens/example/test/link/failures/link_page_dark_testImage.png", + "target": "/Users/rs/.codex/.chatgpt-projects/g-p-6ad03a864eec81918724e40af37fbf26/tdesign-flutter/tdesign-component/example/test/link/goldens/link_page_dark.png", + "size": [ + 375, + 1212 + ], + "sha256": "ab1b63ed7168f7c2c2610f5c5fa20c160cd5752cf2a1782085fa8bfe4e3b5242", + "old_size": [ + 375, + 1449 + ], + "old_sha256": "64f6816db366a57178dbcabee321301ff4b142ac2c17ee4dff4804b9d1abd14f", + "decision": "accepted-public-demo-without-internal-debug-module" + }, + { + "source": "/private/tmp/tdesign-ci-43082-goldens/example/test/link/failures/link_page_light_testImage.png", + "target": "/Users/rs/.codex/.chatgpt-projects/g-p-6ad03a864eec81918724e40af37fbf26/tdesign-flutter/tdesign-component/example/test/link/goldens/link_page_light.png", + "size": [ + 375, + 1212 + ], + "sha256": "1cd766d7aea4928e7348c484659ca47df23e171aa3698a80cd82196fa6887040", + "old_size": [ + 375, + 1449 + ], + "old_sha256": "aa9c936135961d8af0fc613a3f7f12d2eb817030a11567f378af4ba3d890fe9a", + "decision": "accepted-public-demo-without-internal-debug-module" + }, + { + "source": "/private/tmp/tdesign-ci-43082-goldens/example/test/refresh/failures/pull_down_refresh_page_dark_testImage.png", + "target": "/Users/rs/.codex/.chatgpt-projects/g-p-6ad03a864eec81918724e40af37fbf26/tdesign-flutter/tdesign-component/example/test/refresh/goldens/pull_down_refresh_page_dark.png", + "size": [ + 375, + 1720 + ], + "sha256": "d50a6f583cc8ddca16382b78a4c466b6420e0867dadde2cfdfddef5d9fa68068", + "old_size": [ + 375, + 1957 + ], + "old_sha256": "99a3fab9b9fb441d71e0f4aef626cc7fd33ba9efd926b5bdab6abaa706bb4571", + "decision": "accepted-public-demo-without-internal-debug-module" + }, + { + "source": "/private/tmp/tdesign-ci-43082-goldens/example/test/refresh/failures/pull_down_refresh_page_light_testImage.png", + "target": "/Users/rs/.codex/.chatgpt-projects/g-p-6ad03a864eec81918724e40af37fbf26/tdesign-flutter/tdesign-component/example/test/refresh/goldens/pull_down_refresh_page_light.png", + "size": [ + 375, + 1720 + ], + "sha256": "b0739049ed5a338032a7ab596b853d1980678c41dc1dee8848e2b48c676edd61", + "old_size": [ + 375, + 1957 + ], + "old_sha256": "581fa81034989ff839018863fa640c44bd1866221bced76a604b6fdf975dd4d8", + "decision": "accepted-public-demo-without-internal-debug-module" + }, + { + "source": "/private/tmp/tdesign-ci-43082-goldens/example/test/refresh/failures/pull_down_refresh_timeout_post_action_dark_testImage.png", + "target": "/Users/rs/.codex/.chatgpt-projects/g-p-6ad03a864eec81918724e40af37fbf26/tdesign-flutter/tdesign-component/example/test/refresh/goldens/pull_down_refresh_timeout_post_action_dark.png", + "size": [ + 375, + 812 + ], + "sha256": "04d0e240e7177d39048f93c499f84426eabb40c95df6173a3f910e27e11dee9d", + "old_size": [ + 375, + 812 + ], + "old_sha256": "2d3e7af439d3702a5ebe849c321acc7bb7a4e7ba35a850b97e35df56a21137d8", + "decision": "accepted-public-demo-without-internal-debug-module" + }, + { + "source": "/private/tmp/tdesign-ci-43082-goldens/example/test/refresh/failures/pull_down_refresh_timeout_post_action_light_testImage.png", + "target": "/Users/rs/.codex/.chatgpt-projects/g-p-6ad03a864eec81918724e40af37fbf26/tdesign-flutter/tdesign-component/example/test/refresh/goldens/pull_down_refresh_timeout_post_action_light.png", + "size": [ + 375, + 812 + ], + "sha256": "47b2a0b1d0eb4789680c3a34b26cfd64c18d5b0e6f2db7a38c9b3e19aa5c820d", + "old_size": [ + 375, + 812 + ], + "old_sha256": "8ed67596e621353bfd4b00bd5bde495ef31b4af4978307b2236c61d2f3a53480", + "decision": "accepted-public-demo-without-internal-debug-module" + }, + { + "source": "/private/tmp/tdesign-ci-43082-goldens/example/test/skeleton/failures/skeleton_page_dark_testImage.png", + "target": "/Users/rs/.codex/.chatgpt-projects/g-p-6ad03a864eec81918724e40af37fbf26/tdesign-flutter/tdesign-component/example/test/skeleton/goldens/skeleton_page_dark.png", + "size": [ + 375, + 1752 + ], + "sha256": "eafab1967cb1316c1c15677195fad84cccb87061f353e23ed55c9e59fdde1171", + "old_size": [ + 375, + 1988 + ], + "old_sha256": "c7b963c4b5800be4778b83de0b658bed186724be3a413f6cce89492e1d9929b1", + "decision": "accepted-public-demo-without-internal-debug-module" + }, + { + "source": "/private/tmp/tdesign-ci-43082-goldens/example/test/skeleton/failures/skeleton_page_light_testImage.png", + "target": "/Users/rs/.codex/.chatgpt-projects/g-p-6ad03a864eec81918724e40af37fbf26/tdesign-flutter/tdesign-component/example/test/skeleton/goldens/skeleton_page_light.png", + "size": [ + 375, + 1752 + ], + "sha256": "a30cc2a1fb3d7acd1b7074b4f6c02b28c2c31082b03f82c7a30c62e7efc92e40", + "old_size": [ + 375, + 1988 + ], + "old_sha256": "960bf70530f44c039a1aa13595fe6f6f47841aeb0c248bb3928de285b148c17d", + "decision": "accepted-public-demo-without-internal-debug-module" + }, + { + "source": "/private/tmp/tdesign-ci-43082-goldens/example/test/tabs/failures/tabs_content_selected_dark_testImage.png", + "target": "/Users/rs/.codex/.chatgpt-projects/g-p-6ad03a864eec81918724e40af37fbf26/tdesign-flutter/tdesign-component/example/test/tabs/goldens/tabs_content_selected_dark.png", + "size": [ + 375, + 1740 + ], + "sha256": "44634325b979ba70514790f8a25c2399a19214df08e47c6c601bdb637a015893", + "old_size": [ + 375, + 1993 + ], + "old_sha256": "cba62a5a294537895127e115f024e64f5d5d51d7cbe3e080740c5841cfd25ab5", + "decision": "accepted-public-demo-without-internal-debug-module" + }, + { + "source": "/private/tmp/tdesign-ci-43082-goldens/example/test/tabs/failures/tabs_content_selected_light_testImage.png", + "target": "/Users/rs/.codex/.chatgpt-projects/g-p-6ad03a864eec81918724e40af37fbf26/tdesign-flutter/tdesign-component/example/test/tabs/goldens/tabs_content_selected_light.png", + "size": [ + 375, + 1740 + ], + "sha256": "f3f23480a638c7b029b1be154a9b075c86b93074755120d71e576b629ae1071d", + "old_size": [ + 375, + 1993 + ], + "old_sha256": "401d3605871a9650575baed0f2ea78fb7e2a5aa8bd7a2bbb22ebe47b2b6c1386", + "decision": "accepted-public-demo-without-internal-debug-module" + }, + { + "source": "/private/tmp/tdesign-ci-43082-goldens/example/test/tabs/failures/tabs_page_dark_testImage.png", + "target": "/Users/rs/.codex/.chatgpt-projects/g-p-6ad03a864eec81918724e40af37fbf26/tdesign-flutter/tdesign-component/example/test/tabs/goldens/tabs_page_dark.png", + "size": [ + 375, + 1740 + ], + "sha256": "71c25c2cbd60a081f4016dccb603477ce151bad82779cf718e3395ce58b365e6", + "old_size": [ + 375, + 1993 + ], + "old_sha256": "87446b0c6da7b99a00bcf4dc4c9091709307c4a2186f6062e4e41a6b9f6b08ec", + "decision": "accepted-public-demo-without-internal-debug-module" + }, + { + "source": "/private/tmp/tdesign-ci-43082-goldens/example/test/tabs/failures/tabs_page_light_testImage.png", + "target": "/Users/rs/.codex/.chatgpt-projects/g-p-6ad03a864eec81918724e40af37fbf26/tdesign-flutter/tdesign-component/example/test/tabs/goldens/tabs_page_light.png", + "size": [ + 375, + 1740 + ], + "sha256": "92b42cb2e32849da0040bff9eda23d9d2502b8ce6af516bb1d67a1fb2def676a", + "old_size": [ + 375, + 1993 + ], + "old_sha256": "40a565697a904f70cd8e9eeff52684598f260eecb3a8a8016544eb57aa0040d9", + "decision": "accepted-public-demo-without-internal-debug-module" + }, + { + "source": "/private/tmp/tdesign-ci-43082-goldens/example/test/text/failures/text_page_dark_testImage.png", + "target": "/Users/rs/.codex/.chatgpt-projects/g-p-6ad03a864eec81918724e40af37fbf26/tdesign-flutter/tdesign-component/example/test/text/goldens/text_page_dark.png", + "size": [ + 375, + 1367 + ], + "sha256": "cf47802a68fcc4a74d25a7a3484a09b83fdfcf4c5ba44af0da0d155a78b76fa8", + "old_size": [ + 375, + 1604 + ], + "old_sha256": "5ccd3643af36cacc30e9f3806433ff5eb187beaf0f51514c81da0a28bd25d64e", + "decision": "accepted-public-demo-without-internal-debug-module" + }, + { + "source": "/private/tmp/tdesign-ci-43082-goldens/example/test/text/failures/text_page_light_testImage.png", + "target": "/Users/rs/.codex/.chatgpt-projects/g-p-6ad03a864eec81918724e40af37fbf26/tdesign-flutter/tdesign-component/example/test/text/goldens/text_page_light.png", + "size": [ + 375, + 1367 + ], + "sha256": "af7249e29b5f843cf32a905e3de167ffc1903bb53c561dd13653d65ca82ab904", + "old_size": [ + 375, + 1604 + ], + "old_sha256": "40f0fef8387cfe646a50eef5672511680e58853c6b294a80f73a20e9ffaa8aef", + "decision": "accepted-public-demo-without-internal-debug-module" + }, + { + "source": "/private/tmp/tdesign-ci-43082-goldens/example/test/theme/failures/theme_page_dark_testImage.png", + "target": "/Users/rs/.codex/.chatgpt-projects/g-p-6ad03a864eec81918724e40af37fbf26/tdesign-flutter/tdesign-component/example/test/theme/goldens/theme_page_dark.png", + "size": [ + 375, + 2368 + ], + "sha256": "bb6dbe6b30e105a60dbe3b7674ef7c8858d5e7a4dc58fe3b1bdc91926afc0d52", + "old_size": [ + 375, + 2833 + ], + "old_sha256": "f6e2da51427272ea675a485992fcb516369396a5009b7809d901d15c90424e7c", + "decision": "accepted-public-demo-without-internal-debug-module" + }, + { + "source": "/private/tmp/tdesign-ci-43082-goldens/example/test/theme/failures/theme_page_light_testImage.png", + "target": "/Users/rs/.codex/.chatgpt-projects/g-p-6ad03a864eec81918724e40af37fbf26/tdesign-flutter/tdesign-component/example/test/theme/goldens/theme_page_light.png", + "size": [ + 375, + 2368 + ], + "sha256": "73f3fed3610898c9175357c95c112096396963cdf0525051fad216cdad544bad", + "old_size": [ + 375, + 2833 + ], + "old_sha256": "27ae9e228f94d85d3590ad3f6b955dea68acbba56432dab69f2187aa42252227", + "decision": "accepted-public-demo-without-internal-debug-module" + }, + { + "source": "/private/tmp/tdesign-ci-43082-goldens/example/test/toast/failures/toast_cover_opened_dark_testImage.png", + "target": "/Users/rs/.codex/.chatgpt-projects/g-p-6ad03a864eec81918724e40af37fbf26/tdesign-flutter/tdesign-component/example/test/toast/goldens/toast_cover_opened_dark.png", + "size": [ + 375, + 1568 + ], + "sha256": "6addb6d70487d1028ee80a3de469d6843866decc5b8bdc56abace4aa73e098f2", + "old_size": [ + 375, + 1805 + ], + "old_sha256": "04f34b386d9b3d08ad2f0fef4a384a9e02a711d789966505bd395585e21aac9d", + "decision": "accepted-public-demo-without-internal-debug-module" + }, + { + "source": "/private/tmp/tdesign-ci-43082-goldens/example/test/toast/failures/toast_cover_opened_light_testImage.png", + "target": "/Users/rs/.codex/.chatgpt-projects/g-p-6ad03a864eec81918724e40af37fbf26/tdesign-flutter/tdesign-component/example/test/toast/goldens/toast_cover_opened_light.png", + "size": [ + 375, + 1568 + ], + "sha256": "ad6fdd421b54abfdea71db87e998c51d5ec34214e64b99e0c37da62d767d9618", + "old_size": [ + 375, + 1805 + ], + "old_sha256": "fc199cfcbfa369ce97cfd4653c3f2a86c2366cf224e95169b3dad5752a6a40ec", + "decision": "accepted-public-demo-without-internal-debug-module" + }, + { + "source": "/private/tmp/tdesign-ci-43082-goldens/example/test/toast/failures/toast_fail_opened_dark_testImage.png", + "target": "/Users/rs/.codex/.chatgpt-projects/g-p-6ad03a864eec81918724e40af37fbf26/tdesign-flutter/tdesign-component/example/test/toast/goldens/toast_fail_opened_dark.png", + "size": [ + 375, + 1568 + ], + "sha256": "175a7aba8c1e9555d136243b9bf64063ad609966f749f1178b7f5eb010b75665", + "old_size": [ + 375, + 1805 + ], + "old_sha256": "8765a41b7cfd80dd3b32d9b9055877f04614e60f76bc2fc34c4c38b5d388d899", + "decision": "accepted-public-demo-without-internal-debug-module" + }, + { + "source": "/private/tmp/tdesign-ci-43082-goldens/example/test/toast/failures/toast_fail_opened_light_testImage.png", + "target": "/Users/rs/.codex/.chatgpt-projects/g-p-6ad03a864eec81918724e40af37fbf26/tdesign-flutter/tdesign-component/example/test/toast/goldens/toast_fail_opened_light.png", + "size": [ + 375, + 1568 + ], + "sha256": "2f55a0ab895a272ce9fb68bcfb6add03c91e44405d2212bc4f6d08e087ca0f6c", + "old_size": [ + 375, + 1805 + ], + "old_sha256": "cade478ad6bcb74ffcd6af6c103922d7085abb3a1c885f7223912ddf82b7d08b", + "decision": "accepted-public-demo-without-internal-debug-module" + }, + { + "source": "/private/tmp/tdesign-ci-43082-goldens/example/test/toast/failures/toast_horizontal_icon_opened_dark_testImage.png", + "target": "/Users/rs/.codex/.chatgpt-projects/g-p-6ad03a864eec81918724e40af37fbf26/tdesign-flutter/tdesign-component/example/test/toast/goldens/toast_horizontal_icon_opened_dark.png", + "size": [ + 375, + 1568 + ], + "sha256": "f2f6541dc9dd35d6d62114f735557ec62ffaf360d5156ab4e3d56c1032df9dc3", + "old_size": [ + 375, + 1805 + ], + "old_sha256": "9e1a79083ac33fc81740cdf6a45e52865d3969f5e72da509f2c1f061c2298ba7", + "decision": "accepted-public-demo-without-internal-debug-module" + }, + { + "source": "/private/tmp/tdesign-ci-43082-goldens/example/test/toast/failures/toast_horizontal_icon_opened_light_testImage.png", + "target": "/Users/rs/.codex/.chatgpt-projects/g-p-6ad03a864eec81918724e40af37fbf26/tdesign-flutter/tdesign-component/example/test/toast/goldens/toast_horizontal_icon_opened_light.png", + "size": [ + 375, + 1568 + ], + "sha256": "1917f84ab0927303dfdd8802cf918ccd3d307fa8bf5ce2392bbcd70532d86215", + "old_size": [ + 375, + 1805 + ], + "old_sha256": "9372f2cffd0fd901263de89a985f97a4b6066d4ee6785584f6c1d4a3aabb9bdd", + "decision": "accepted-public-demo-without-internal-debug-module" + }, + { + "source": "/private/tmp/tdesign-ci-43082-goldens/example/test/toast/failures/toast_loading_opened_dark_testImage.png", + "target": "/Users/rs/.codex/.chatgpt-projects/g-p-6ad03a864eec81918724e40af37fbf26/tdesign-flutter/tdesign-component/example/test/toast/goldens/toast_loading_opened_dark.png", + "size": [ + 375, + 1568 + ], + "sha256": "6b15218c5d32a5d4ea3c1d0f0d278707c1f9d74ffec3674864e19da24b099d12", + "old_size": [ + 375, + 1805 + ], + "old_sha256": "7eee31c99dd2a1458a136eda32c95cd86719b1a0b4549892e6f8c36d0382ef81", + "decision": "accepted-public-demo-without-internal-debug-module" + }, + { + "source": "/private/tmp/tdesign-ci-43082-goldens/example/test/toast/failures/toast_loading_opened_light_testImage.png", + "target": "/Users/rs/.codex/.chatgpt-projects/g-p-6ad03a864eec81918724e40af37fbf26/tdesign-flutter/tdesign-component/example/test/toast/goldens/toast_loading_opened_light.png", + "size": [ + 375, + 1568 + ], + "sha256": "b65db65ca3e8665abf1ecfaa844c8ec75a47b28bfc497dcdcdbca946ca0914f9", + "old_size": [ + 375, + 1805 + ], + "old_sha256": "7676171b905a8b1c29752733b9475ae6d673e152a60e0bf802c70c263b978c5b", + "decision": "accepted-public-demo-without-internal-debug-module" + }, + { + "source": "/private/tmp/tdesign-ci-43082-goldens/example/test/toast/failures/toast_manual_opened_dark_testImage.png", + "target": "/Users/rs/.codex/.chatgpt-projects/g-p-6ad03a864eec81918724e40af37fbf26/tdesign-flutter/tdesign-component/example/test/toast/goldens/toast_manual_opened_dark.png", + "size": [ + 375, + 1568 + ], + "sha256": "a226125d886800d13f40a5b4bf79b554275f5d26d1e57743128d27ecb9a0c1d6", + "old_size": [ + 375, + 1805 + ], + "old_sha256": "7cfc81767b804f8d041fcdca7a5abe2474c8a66d08032233230d7fa3c3f3afe4", + "decision": "accepted-public-demo-without-internal-debug-module" + }, + { + "source": "/private/tmp/tdesign-ci-43082-goldens/example/test/toast/failures/toast_manual_opened_light_testImage.png", + "target": "/Users/rs/.codex/.chatgpt-projects/g-p-6ad03a864eec81918724e40af37fbf26/tdesign-flutter/tdesign-component/example/test/toast/goldens/toast_manual_opened_light.png", + "size": [ + 375, + 1568 + ], + "sha256": "d74e5954598ab47c129eacec2b20ddf9d95b2a203aecea3f25864728bb0e2b17", + "old_size": [ + 375, + 1805 + ], + "old_sha256": "3e88f2c315526f2f914bb124faf7d3ba4d68ffeac82b9d0a4099f559b9a84b2d", + "decision": "accepted-public-demo-without-internal-debug-module" + }, + { + "source": "/private/tmp/tdesign-ci-43082-goldens/example/test/toast/failures/toast_multiple_text_opened_dark_testImage.png", + "target": "/Users/rs/.codex/.chatgpt-projects/g-p-6ad03a864eec81918724e40af37fbf26/tdesign-flutter/tdesign-component/example/test/toast/goldens/toast_multiple_text_opened_dark.png", + "size": [ + 375, + 1568 + ], + "sha256": "8d0d04f81e39f23a8d516d013c6a05e85b5bfbd81f2d29b8150969219f200473", + "old_size": [ + 375, + 1805 + ], + "old_sha256": "c02e8847fd1cf261e60a4f20e009fd132a8fcb61150d2aff33dadba15b634151", + "decision": "accepted-public-demo-without-internal-debug-module" + }, + { + "source": "/private/tmp/tdesign-ci-43082-goldens/example/test/toast/failures/toast_multiple_text_opened_light_testImage.png", + "target": "/Users/rs/.codex/.chatgpt-projects/g-p-6ad03a864eec81918724e40af37fbf26/tdesign-flutter/tdesign-component/example/test/toast/goldens/toast_multiple_text_opened_light.png", + "size": [ + 375, + 1568 + ], + "sha256": "76ace7913a195840a53055377cbe04df82161fcabcd71a9dcc6623e082012272", + "old_size": [ + 375, + 1805 + ], + "old_sha256": "4e09e55c010f7d7787d35909dbadb1dff05d9e4799e8826c38926a3e86932fa9", + "decision": "accepted-public-demo-without-internal-debug-module" + }, + { + "source": "/private/tmp/tdesign-ci-43082-goldens/example/test/toast/failures/toast_page_dark_testImage.png", + "target": "/Users/rs/.codex/.chatgpt-projects/g-p-6ad03a864eec81918724e40af37fbf26/tdesign-flutter/tdesign-component/example/test/toast/goldens/toast_page_dark.png", + "size": [ + 375, + 1568 + ], + "sha256": "3881834abf59f32172401adc7132ec60d733405ed3d63bfe978b5194bfa7d276", + "old_size": [ + 375, + 1805 + ], + "old_sha256": "5ff204140470b7844e1e19e37826e843a2562c7d60c360524f998ce1426a9373", + "decision": "accepted-public-demo-without-internal-debug-module" + }, + { + "source": "/private/tmp/tdesign-ci-43082-goldens/example/test/toast/failures/toast_page_light_testImage.png", + "target": "/Users/rs/.codex/.chatgpt-projects/g-p-6ad03a864eec81918724e40af37fbf26/tdesign-flutter/tdesign-component/example/test/toast/goldens/toast_page_light.png", + "size": [ + 375, + 1568 + ], + "sha256": "c39cbf4199ca686b4970db2ce2223dad0aa69aa68443e5f6193cdb1027cf408f", + "old_size": [ + 375, + 1805 + ], + "old_sha256": "5ea09d53b2e5b5b1e96659497a6eb55a38ae4b2a9ab97c21b640ce9886529f84", + "decision": "accepted-public-demo-without-internal-debug-module" + }, + { + "source": "/private/tmp/tdesign-ci-43082-goldens/example/test/toast/failures/toast_success_opened_dark_testImage.png", + "target": "/Users/rs/.codex/.chatgpt-projects/g-p-6ad03a864eec81918724e40af37fbf26/tdesign-flutter/tdesign-component/example/test/toast/goldens/toast_success_opened_dark.png", + "size": [ + 375, + 1568 + ], + "sha256": "71010bcb9166a1cb34acda34fceb1a422ffa22c47e583799b5d52c6c1e1d0882", + "old_size": [ + 375, + 1805 + ], + "old_sha256": "3ad5b1cfa5f703c3e031a9b770b59d87e99caa0ba144ec645905785c7354a52e", + "decision": "accepted-public-demo-without-internal-debug-module" + }, + { + "source": "/private/tmp/tdesign-ci-43082-goldens/example/test/toast/failures/toast_success_opened_light_testImage.png", + "target": "/Users/rs/.codex/.chatgpt-projects/g-p-6ad03a864eec81918724e40af37fbf26/tdesign-flutter/tdesign-component/example/test/toast/goldens/toast_success_opened_light.png", + "size": [ + 375, + 1568 + ], + "sha256": "512441f742f0627c27602a9d9f3ea1f0f054d943c06ca7f4926c421e54838f2b", + "old_size": [ + 375, + 1805 + ], + "old_sha256": "f78df0fdf7224ca93179034af00bb2956d137cc8979c19a24bcaba1ad35066df", + "decision": "accepted-public-demo-without-internal-debug-module" + }, + { + "source": "/private/tmp/tdesign-ci-43082-goldens/example/test/toast/failures/toast_text_opened_dark_testImage.png", + "target": "/Users/rs/.codex/.chatgpt-projects/g-p-6ad03a864eec81918724e40af37fbf26/tdesign-flutter/tdesign-component/example/test/toast/goldens/toast_text_opened_dark.png", + "size": [ + 375, + 1568 + ], + "sha256": "a226125d886800d13f40a5b4bf79b554275f5d26d1e57743128d27ecb9a0c1d6", + "old_size": [ + 375, + 1805 + ], + "old_sha256": "7cfc81767b804f8d041fcdca7a5abe2474c8a66d08032233230d7fa3c3f3afe4", + "decision": "accepted-public-demo-without-internal-debug-module" + }, + { + "source": "/private/tmp/tdesign-ci-43082-goldens/example/test/toast/failures/toast_text_opened_light_testImage.png", + "target": "/Users/rs/.codex/.chatgpt-projects/g-p-6ad03a864eec81918724e40af37fbf26/tdesign-flutter/tdesign-component/example/test/toast/goldens/toast_text_opened_light.png", + "size": [ + 375, + 1568 + ], + "sha256": "d74e5954598ab47c129eacec2b20ddf9d95b2a203aecea3f25864728bb0e2b17", + "old_size": [ + 375, + 1805 + ], + "old_sha256": "3e88f2c315526f2f914bb124faf7d3ba4d68ffeac82b9d0a4099f559b9a84b2d", + "decision": "accepted-public-demo-without-internal-debug-module" + }, + { + "source": "/private/tmp/tdesign-ci-43082-goldens/example/test/toast/failures/toast_vertical_icon_opened_dark_testImage.png", + "target": "/Users/rs/.codex/.chatgpt-projects/g-p-6ad03a864eec81918724e40af37fbf26/tdesign-flutter/tdesign-component/example/test/toast/goldens/toast_vertical_icon_opened_dark.png", + "size": [ + 375, + 1568 + ], + "sha256": "3b989c1b246292c16f8f4197c9e98a2354765566fb97c15c9f169bdd9a4188e1", + "old_size": [ + 375, + 1805 + ], + "old_sha256": "df99419599c3d7aef0c3f1ff9615b9f20d28260809563aec4148e8584661aa52", + "decision": "accepted-public-demo-without-internal-debug-module" + }, + { + "source": "/private/tmp/tdesign-ci-43082-goldens/example/test/toast/failures/toast_vertical_icon_opened_light_testImage.png", + "target": "/Users/rs/.codex/.chatgpt-projects/g-p-6ad03a864eec81918724e40af37fbf26/tdesign-flutter/tdesign-component/example/test/toast/goldens/toast_vertical_icon_opened_light.png", + "size": [ + 375, + 1568 + ], + "sha256": "f93a02f04c4a6111f8f071c1c8f831c2cc1c92bcdba48930afcb372123134a55", + "old_size": [ + 375, + 1805 + ], + "old_sha256": "a71130a3bee270ad89ce2e056fb0947e27fab0aa05c1e0b6a70d0ef1f9a3c1f6", + "decision": "accepted-public-demo-without-internal-debug-module" + }, + { + "source": "/private/tmp/tdesign-ci-43082-goldens/example/test/toast/failures/toast_warning_opened_dark_testImage.png", + "target": "/Users/rs/.codex/.chatgpt-projects/g-p-6ad03a864eec81918724e40af37fbf26/tdesign-flutter/tdesign-component/example/test/toast/goldens/toast_warning_opened_dark.png", + "size": [ + 375, + 1568 + ], + "sha256": "4310974e1f71fab9572c7f080ade4dd8c64eb39aa23f7cfd9315f5241b8893be", + "old_size": [ + 375, + 1805 + ], + "old_sha256": "93dcdc9370690bdf9da9cff09f0483c11d51f0c4b8f5462b0d8f48b938496689", + "decision": "accepted-public-demo-without-internal-debug-module" + }, + { + "source": "/private/tmp/tdesign-ci-43082-goldens/example/test/toast/failures/toast_warning_opened_light_testImage.png", + "target": "/Users/rs/.codex/.chatgpt-projects/g-p-6ad03a864eec81918724e40af37fbf26/tdesign-flutter/tdesign-component/example/test/toast/goldens/toast_warning_opened_light.png", + "size": [ + 375, + 1568 + ], + "sha256": "fc54341625204d58de2f1a1ab2628cda13bec6314ccaa876504d7d05997820f5", + "old_size": [ + 375, + 1805 + ], + "old_sha256": "523bb777e17a2cf5053685954ace759cf5395864c034600d343bee8c7d3fa289", + "decision": "accepted-public-demo-without-internal-debug-module" + }, + { + "source": "/private/tmp/tdesign-ci-43082-goldens/example/test/upload/failures/upload_page_dark_testImage.png", + "target": "/Users/rs/.codex/.chatgpt-projects/g-p-6ad03a864eec81918724e40af37fbf26/tdesign-flutter/tdesign-component/example/test/upload/goldens/upload_page_dark.png", + "size": [ + 375, + 2674 + ], + "sha256": "d85dce3e670aeaa8ed9cf663c633e80f8cc876d7f11104c8b8a54be2fc9d6718", + "old_size": [ + 375, + 2911 + ], + "old_sha256": "47e30b0783c774e582dc8ba74e9f3e582dd88d0727e2a125d065fe799de374b0", + "decision": "accepted-public-demo-without-internal-debug-module" + }, + { + "source": "/private/tmp/tdesign-ci-43082-goldens/example/test/upload/failures/upload_page_light_testImage.png", + "target": "/Users/rs/.codex/.chatgpt-projects/g-p-6ad03a864eec81918724e40af37fbf26/tdesign-flutter/tdesign-component/example/test/upload/goldens/upload_page_light.png", + "size": [ + 375, + 2674 + ], + "sha256": "721f67d8b67927e5f56e6521331af4de0fac4ba433219ff0ed44614ead0836d4", + "old_size": [ + 375, + 2911 + ], + "old_sha256": "999018341a243ecd637000f0fe166784b521d68265d0523a80446fd9dedf4ddc", + "decision": "accepted-public-demo-without-internal-debug-module" + } + ], + "rejected": [ + { + "source": "/private/tmp/tdesign-ci-43082-goldens/example/test/theme/failures/custom_theme_initial_dark_actual.png", + "target": "/Users/rs/.codex/.chatgpt-projects/g-p-6ad03a864eec81918724e40af37fbf26/tdesign-flutter/tdesign-component/example/test/theme/goldens/custom_theme_initial_dark.png", + "size": [ + 375, + 1488 + ], + "sha256": "4ad7f1dd201563c42abf1cd10ce5c0acb48d95cea49e32c8591a9f1f690db2a1", + "decision": "rejected-native-text-fonts-incomplete" + }, + { + "source": "/private/tmp/tdesign-ci-43082-goldens/example/test/theme/failures/custom_theme_initial_light_actual.png", + "target": "/Users/rs/.codex/.chatgpt-projects/g-p-6ad03a864eec81918724e40af37fbf26/tdesign-flutter/tdesign-component/example/test/theme/goldens/custom_theme_initial_light.png", + "size": [ + 375, + 1488 + ], + "sha256": "7d0919e476eda3ec2f6eb24a5a4972075d1edfba629ef9c4a24b9dbab1f05e79", + "decision": "rejected-native-text-fonts-incomplete" + }, + { + "source": "/private/tmp/tdesign-ci-43082-goldens/example/test/theme/failures/custom_theme_manual_dark_actual.png", + "target": "/Users/rs/.codex/.chatgpt-projects/g-p-6ad03a864eec81918724e40af37fbf26/tdesign-flutter/tdesign-component/example/test/theme/goldens/custom_theme_manual_dark.png", + "size": [ + 375, + 1488 + ], + "sha256": "4ad7f1dd201563c42abf1cd10ce5c0acb48d95cea49e32c8591a9f1f690db2a1", + "decision": "rejected-native-text-fonts-incomplete" + }, + { + "source": "/private/tmp/tdesign-ci-43082-goldens/example/test/theme/failures/custom_theme_manual_light_actual.png", + "target": "/Users/rs/.codex/.chatgpt-projects/g-p-6ad03a864eec81918724e40af37fbf26/tdesign-flutter/tdesign-component/example/test/theme/goldens/custom_theme_manual_light.png", + "size": [ + 375, + 1488 + ], + "sha256": "7d0919e476eda3ec2f6eb24a5a4972075d1edfba629ef9c4a24b9dbab1f05e79", + "decision": "rejected-native-text-fonts-incomplete" + }, + { + "source": "/private/tmp/tdesign-ci-43082-goldens/example/test/theme/failures/custom_theme_system_dark_actual.png", + "target": "/Users/rs/.codex/.chatgpt-projects/g-p-6ad03a864eec81918724e40af37fbf26/tdesign-flutter/tdesign-component/example/test/theme/goldens/custom_theme_system_dark.png", + "size": [ + 375, + 1488 + ], + "sha256": "f39c4ad82bd2d5b79183d188f0b87ab0160efac775c8d160b0788e9cfa554166", + "decision": "rejected-native-text-fonts-incomplete" + }, + { + "source": "/private/tmp/tdesign-ci-43082-goldens/example/test/theme/failures/custom_theme_system_light_actual.png", + "target": "/Users/rs/.codex/.chatgpt-projects/g-p-6ad03a864eec81918724e40af37fbf26/tdesign-flutter/tdesign-component/example/test/theme/goldens/custom_theme_system_light.png", + "size": [ + 375, + 1488 + ], + "sha256": "d8f7ec291bd22771ddb1ec410e014829e8065d9b67ae60daef5e83748b2040e2", + "decision": "rejected-native-text-fonts-incomplete" + } + ], + "next": "Re-run against copied PNG bytes with no update flag; custom guide font adaptation still needs fresh Linux review." +} diff --git a/tdesign-component/example/lib/documentation_theme_demo.dart b/tdesign-component/example/lib/documentation_theme_demo.dart index 61b5e12897..e57b363b4e 100644 --- a/tdesign-component/example/lib/documentation_theme_demo.dart +++ b/tdesign-component/example/lib/documentation_theme_demo.dart @@ -146,7 +146,11 @@ class DocumentationThemeContent extends StatelessWidget { /// 整个指南只有一个应用主题,模式切换同时更新页面壳及所有示例。 class DocumentationThemeGuidePage extends StatefulWidget { - const DocumentationThemeGuidePage({super.key}); + const DocumentationThemeGuidePage({this.themeAdapter, super.key}); + + /// 可选的宿主主题适配;截图测试用它固定原生文字的字体与回退栈。 + /// 不修改指南的 Token 配置、明暗关联或交互状态。 + final ThemeData Function(ThemeData)? themeAdapter; @override State createState() => @@ -163,34 +167,40 @@ class _DocumentationThemeGuidePageState return documentationThemeApp( mode, Builder( - builder: (context) => ExamplePage( - title: '自定义主题', - desc: '配置全局主题、组件局部样式和明暗模式。', - exampleCodeGroup: 'theme', - backgroundColor: context.tTheme.bgColorPage, - children: [ - for (final scene in DocumentationThemeScene.values) - ExampleModule( - title: switch (scene) { - DocumentationThemeScene.json => 'JSON 配置', - DocumentationThemeScene.local => '组件局部样式', - DocumentationThemeScene.mode => '明暗模式', - }, - children: [ - ExampleItem( - ignoreCode: true, - center: false, - builder: (_) => DocumentationThemeContent( - scene: scene, - mode: mode, - onModeChanged: (mode) => - setState(() => _selection = mode), + builder: (context) { + final page = ExamplePage( + title: '自定义主题', + desc: '配置全局主题、组件局部样式和明暗模式。', + exampleCodeGroup: 'theme', + backgroundColor: context.tTheme.bgColorPage, + children: [ + for (final scene in DocumentationThemeScene.values) + ExampleModule( + title: switch (scene) { + DocumentationThemeScene.json => 'JSON 配置', + DocumentationThemeScene.local => '组件局部样式', + DocumentationThemeScene.mode => '明暗模式', + }, + children: [ + ExampleItem( + ignoreCode: true, + center: false, + builder: (_) => DocumentationThemeContent( + scene: scene, + mode: mode, + onModeChanged: (mode) => + setState(() => _selection = mode), + ), ), - ), - ], - ), - ], - ), + ], + ), + ], + ); + final adapter = widget.themeAdapter; + return adapter == null + ? page + : Theme(data: adapter(Theme.of(context)), child: page); + }, ), ); } diff --git a/tdesign-component/example/test/divider/goldens/divider_page_dark.png b/tdesign-component/example/test/divider/goldens/divider_page_dark.png index a70aa2adf651956919f4401aa483177a008de74b..e31d0975829b4197a6cdd72966cd79ee06901bb0 100644 GIT binary patch delta 8690 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 I$QV5PH&y2@F8}}l delta 37095 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 diff --git a/tdesign-component/example/test/fonts/README.md b/tdesign-component/example/test/fonts/README.md index c31ab568a6..a01dfbc140 100644 --- a/tdesign-component/example/test/fonts/README.md +++ b/tdesign-component/example/test/fonts/README.md @@ -200,3 +200,11 @@ ActionSheet、Dialog、DropdownMenu 或 NoticeBar 页面文案时,更新 feedb 生成基线。 2026-10-09 补齐源码字符“批”“逆”。沿用上述 Noto Sans SC 2.004 与 HarfBuzz,既有 cmap 字符的轮廓、横向度量和全局字体度量逐项一致。 + +## 公开页面与内部调试区块 + +公开 Demo 的功能与视觉测试分别通过组件包下的 `dart run tool/run_example_regression.dart`、`dart run tool/run_visual_regression.dart` 执行。两者自动传入 `--dart-define=TDESIGN_DEMO_TEST_MODULES=false`,让组件数量、代码入口、布局和截图只包含公开示例;功能调度器随后单独运行 `internal-demo` 标签,验证不传开关时 Debug 默认展示的契约。 + +单独运行页面 Golden 时也要传入上述编译参数;不能通过修改页面默认值来隐藏调试区块。像素测试与基线生成仍仅使用 Linux + Flutter 3.32.0,保持精确比较。首次新增基线应先检查 Linux 实际图,再安装并不带更新参数重跑。 + +自定义主题指南内部有独立的 `MaterialApp`,仅适配外层主题无法固定其原生文字字体。截图通过指南的 `themeAdapter` 注入原生文字字体与回退栈,保留原始 Token、主题名称和浅深关联;不要通过替换整个 Token 主题来修正测试字体。 diff --git a/tdesign-component/example/test/icon/goldens/icon_copied_dark.png b/tdesign-component/example/test/icon/goldens/icon_copied_dark.png index 3d14be602bc1611e72575defbc27e682b72df208..f17f676680fc812fde643c605ce86d967c6fce24 100644 GIT binary patch delta 911 zcmV;A191GgvIp+629OpD1<42o0001rPhIGNA+;d^uYdv=h_}*!0XP+Z>|I(1qcHw7 z6%!l+p@h;nDu|N^RYWos2c=SRanm7I)Iq2e6%hxKCaXv*NC&?Peo)aUD0Okt+M)gd zVipCdh>q4mZSG=2b6fBAg01G7-*}QYoHv9g=e&7yj%L5Tz17v-Q52;}*cpbw%*+fp zjspO6b#ECzzX? z!_d$WnwpxB%jF;lg09Hb%E}6yPN(_9O$izs8@2mN(==$B)`Wd;Zx4Y$0Cu|_9*+m9 zR0>B&N7~p}EQacT>gu8*PCuFa^XhiH(b3TXi^T$)%?661@c8%$Q4|r6$F=ioYHCWB zUoN~JK@cEG63@@i6`RL*gdhm*S+!cNU|AMbRaKg>=QB+28+#6xY|+z*}lNJUooHwl+LGJYaQo)r`{rf*=T>XWRz ly1M^o?~jRziHQjS;1?RKLV8(Spho}z002ovPDHLkV1hJJv+Do= delta 17371 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 diff --git a/tdesign-component/example/test/icon/goldens/icon_copied_light.png b/tdesign-component/example/test/icon/goldens/icon_copied_light.png index ef3f798435a000553d1d65be2779c2802de3eb5c..88badf862ce7bc9147bbd838b29743cc9d84f9f8 100644 GIT binary patch delta 1987 zcmV;!2R!(>y$6%M29OpD1<42o0001rPhIGNA+;d^uYdv_t+&#E0WubUzxK{Gq^UoQ z8E$+2FaF#4@2a!E^K5!P;0x#P9G>4#{p{KA@*Jnr8IT=@ zo3XPjOA?8M^m;vS@kc9v{-1>WGxiT3J_KCja=ECku5QFOQyu?t4L4)=e97f<8XO$t zE&gc5e_Th(*gcrdX3ELQ8L>^QF{$M4k0AE(CtR_Q)<(b=LF|zs9I;z0mPsden#^(^ ztJn<&1K%M>J%ZRHgCO?E5RTZxX%nkVO1TSSAAiOw_MDuYfCW~6fk6I7>^7T?@35nu zsV;V!jB@{5u?v|{X#S7bg>emyAoj>0i2YwCmD~*m!(WNr;c!qzMa8HmTc;x4(oRcD z3!06G68q=RpXtn*Gdx5c{n%`_F^RpbtV|Gl7WBfCAv)RmD|L)y8N>5KGmSySOxpOo$G{kFvqJ=+y{!nFQC9y0^ zGMS8S-@ZNOj9ply4#YbfudS`6lP6CS>sK?zyG>nPT|mY@*~T^Ia1pFdA&X=y%f($dnXwzigfdwY5A8NZlJCSqBZRlqXvMilFdzPGkPA54W4mx$}6tV6Tr_Y`}8&T|C zU0tM5D0quM62$zp%%@MEV6j-Rb?a8FS+fQJAQp>p`t)h6UAvZR7at#wYuBzpDwP5N zoK9!ZdMBP*(Ec@4rW$6m830gRT#SVa7XkoMQ&XW(J29;L|SDRE$oiLwkEWnwy&^FzV<> ztJMMkWHK41O`C?exHy!Tm!qt#3>_UEC@3i4reb6=S-@1x-Me?u)YOFc@89#(gYhTk zo3o_py2NW{Ab& z3GYiZVYk}>05fOK^m$z>m15<}mB0vMw^%H=eEBi}ps}$L7K>%V;*Mq<4hL*D8MS=bUK|+JF!@dZQHg10Jd-69#GD9suJu|jnnDGg$oy;(P(@!c9lvM zAexkv6ztx;8w|ssu&@v_X3Utt=wpk2!NEZsI&=uFt*t01D8PvmCw#5@PQCV4u&dyGu>ShqkW;5h+IS@qb4u=CREiKr&b0;=#+{j(i*w~0w zt5%`5widm;y}ZRf9!w9TO;qFgWxam=8Z|XFaJgLg@#6=Ynwr2c3@%-|gp7=T4D|H$ zpuWBy48vf_k|jt^PUh~Bo}P}v!a^={68I0TR*UZLZaAGzSglrQwOUT>3l=OuOG^tH z8yn$rxu8%exGWy-PeQ+b{leV2b9wDUG~xMsy?F5=#9}cV4hK3rJMr@6OKjP)1=ZEn zK3TncT`cHS7u?zDRG;edFfcHGfSQ^b5D|ukhVb<1Q&_E5PVC-e=y@b(uyLI}eR|Mx z!7&Hllm7pguCA`2i&0rwS=83nM&z}K<^84AYJKh_EKvCpY8OXdULKjvW*QzIrmCtc zpPxykQtIyR_PLL6h{+d)LJ@Raj~zQU>eIk177MLkzn)l@rTqMS;RLXMo8jT%kh_i4 zYBf2X&XCu-TrPV4{5jWNsZ`RpZ{H>~{zxIB7=L@R*=(>{tv=79Oh`z;{Q2{_42Xze zGMTV{|9&JUCPJlBAvHCX$Ec&9FJHa{%snO~BtRmOa8I^zI2?HLEf(go=s^ zAxj?xi^T%F-Ogp(B9RDxbLPy!ym|A&y8gj~2aw5RsIRX_US3{=qm2!S2yfrM^?6Ms z5+Nxm2}wywVcp~C(W7W+Xnd!eLaV^|pin4KT3X8O zsu74BHk%DaMMb!N{W=(i;X9m3LswT9u3WhSl}g2TDC35Ri1zRv9fW{@fPldG@(+)R VqY9C&Sl$2t002ovPDHLkV1hU6!u|jN delta 18538 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 diff --git a/tdesign-component/example/test/icon/goldens/icon_page_dark.png b/tdesign-component/example/test/icon/goldens/icon_page_dark.png index 3d14be602bc1611e72575defbc27e682b72df208..f17f676680fc812fde643c605ce86d967c6fce24 100644 GIT binary patch delta 911 zcmV;A191GgvIp+629OpD1<42o0001rPhIGNA+;d^uYdv=h_}*!0XP+Z>|I(1qcHw7 z6%!l+p@h;nDu|N^RYWos2c=SRanm7I)Iq2e6%hxKCaXv*NC&?Peo)aUD0Okt+M)gd zVipCdh>q4mZSG=2b6fBAg01G7-*}QYoHv9g=e&7yj%L5Tz17v-Q52;}*cpbw%*+fp zjspO6b#ECzzX? z!_d$WnwpxB%jF;lg09Hb%E}6yPN(_9O$izs8@2mN(==$B)`Wd;Zx4Y$0Cu|_9*+m9 zR0>B&N7~p}EQacT>gu8*PCuFa^XhiH(b3TXi^T$)%?661@c8%$Q4|r6$F=ioYHCWB zUoN~JK@cEG63@@i6`RL*gdhm*S+!cNU|AMbRaKg>=QB+28+#6xY|+z*}lNJUooHwl+LGJYaQo)r`{rf*=T>XWRz ly1M^o?~jRziHQjS;1?RKLV8(Spho}z002ovPDHLkV1hJJv+Do= delta 17371 zcmc({c{G;m+dq6uQ8HB;P^3YFQl=w=Au=a2CsU@&EFrZ^C>fH6B`UQ2iPeck7I9>?*S&c;8`#zqK7tYYi@wyEz zpC{D8e#AX8j zQHrWV1^7%F6S%afM^ct7h5Is^v^=DvT(y#ghacu-6#gl4qZYZ_yPneBoT@KabWU=4 zW##wy$BB}zuCDjx1=d5~wGKr~E)MR0_UxHda+7{nf%E6e%G4VjrJAy`G>ysHOm0%H zZ{Kp8wx(AeZf;7r;X$lUMX044ZK-b{4l{3@oc|f9zqYzEU&^_9@^wV+P%*y;=@K2ajpx?eg{Y9ULAmDe>AIz+pwq z484oc8*NUtF1^gDr>7S(Hr(G&BP=Y;-CVfP&yGjlgbxZ4cRXcmY&==YBzbZ|+_IYz z78d3pUUuhzz-Y2vm$UHOD-n#0KGgW&jqBG5o;syB)&Et*Wm!a^Q2xO1)bA?s;EF!0 z;(@6sm3SXhaqs=S!BwO2jEszr<%t8`zwH%L*dK}1{rsGsJZ5ZvD?65x!BKav=J}0$ z2ciC&h%S>{#doEJYbzFcv#lo0xi%)rsn-HICCvr74UCPCY8p3|W}3B~yj>llRiB}L z+;*(hOWS2(!%JZcZ{?!~TJ=NL%^&SfWSVz;QMh#JQgqud$L2yp^1#*$$wSw#6W8s> zGMX%BM{hix(9E{v;&7SQom_A-5@Z|g%>UT*R7CFeg9jU(W?KxM3v3tu7$j(9eLLLj zxYe&*EyH*_zkmQ0B_ktaelR-FpY6!(m+?~ZntsF5=_PfEO$8nUIq>X7H- zC+-=+(p#lJ%ggpCZsa<4j{Hgd`@jE>pSR`$Id_TL9((=zwdGiA2G_#c>*#2{+ts^1 z_gTruTzeK2MAcEVJUKTfcmDha90aOEhYkq}3esP=TzXzbWry{dJp%KahPrg-H2+%C zt67;)oGp+2>s?7z)n=lhp}|f$SbX#5&873de}?+}Y!P^w-oCQDeDYquLiWdx8rC_n zv9aPvt?mOk5`-3x9`Qfu?EbTT;nztG3nYV6T7jw<`QZR2+K|$v}o3`)ouSP$9 z@nV)Qcc!6fA3z}`CyG3H!A7J`g?lrwk<@ze$BjP zi(6x(%I*2IReJ{qex@}GW8)9)UY(nTE*-scU&IU9d3kw>YLUd*lDMAn{(kSeXt~nz@(r4rn(vd6WVN(7^78Yy z;B)ZhLY@LgbTh|&q$!!2a_!o+?!G>+Z{HN7_im)8_f&i*V{b2V z^X5$o<*&C2d~9;5?>>E!{n6N1Qd#MHM<}#+Y>dH6x_Eibz`$T~c2-t{&|p`5b;d@n z&G2yLE&g+Iavn7U(fRp%Vq#(rA35TteAMgQzM;93f=7?iadB~>S183Qf3B&K`|Gc5 z?j9anwr}4cCnwjQcmHW<;lRMl(9lgBfj*Iud(no%PTzZ5vlg9_!i-7@5xM*NdLt3( zJyqcNZs~PwZkZn6)~#E+dx_q40kWn3ekXSyVWG2kbo40gk&0F3rylk6_I9uMIm0&J zDz%q+@9ER5*VBA)Mxc1G}L!= zbd*cItvJ;lD8#Xv+W;1b0(8pZc6m#tke{!u9#fcke=WMZzlRgL9~ z8Wzn%b-&Z$JC4J}N4zc=Uv&loSQ^{4GL~33WF-Y@D5&TY}GC z=SK1J@_L_~ET^c*n46oMP{1MMWwvBa*yQBqzJB|b28Dk3=ux&z{nS%}f{~GtWZ!-t zN5r|yM)Nu9SlZdyDXXfI&G!8H^R>nqlQT13IP#8;qJRGUQPR-x`|{;td~$^nxvO$= zv}FHrm^PxET(YdORC5^d723ITC#pPJ=8zr-EiLU~7P?9MJgPmmQwvU*C$|g?s5&Ba z4Gj;~YZf=IYGsanTxsa*?mkJFQs=+x@4tP3o0~t;24^`fFz>z?hqSab^X}dB)vhpoKaV{=5)|%&L39ZNVo1dUhJP8Xk z6?|Yr#Kp%))ft_{f?zlH2@0~@xpN2D!^qUs^W#TRCuirL@o`3B;Vg;Zx`qa_VxJ~6 zZO^&MsI5(CKPcBL`}ApDhjW;OgoKQWhx`G(#nP3P6|SI*U(J10R8?j0ZMe9o_C48n z_wLMl9Ffx zD7uYa(taz2&u@vy761GlvaPg#yyENEua7HlVUG!~Z*QRx9C@Zg*hzPv!l>01iaCAn- zcJ;&^IEP9{gXAw>EWt#%yqHD1gF@L$xp3~R^6XS&W25w8me%D~^!A-ObEdYT!9a!6N>g(WfNS@_fY0=__59M3fF_@6 z(oHw?o!j5SHu;__x%tH|9<6qMaq)%C*sNvoC+8+*&0t6g;5f``FmC&d%arzI-7&3O?;=@Hy4%*HM7F z?b&yCXz`4sF6@fCapOk5i*tNjoaK1?X}=ZDp`oFC#k}*bHq9h-OZmH}luURFKKaw^t``MYGJ*OCX5#Dh)SxTTKm5UAg} zZ5xqlGos?Ox-byJr|*4vBuy0y8NzQsHq7}g`e#f6BpM`x7p$$ zq+7Cn8F;n=??g5L$^(CYR2L0~)#Im6Ju06bDy<=En7{)z0)2JZbp_1M+TP5yu59dM z(f}wfA8v@}vm3vOwhCCO5GJza$dM!6RykzzL&xa>mH^}MXA`1(%6(bd#zyEU509DV zY6_tK8Glv*8oktAK8$;Y?K%V4h4seUa{!7hZEVoh%RM)3Q@VD|{o%uh1Xp|uhuBoL z0G`eBTI@MpUERW|+Xe=@9l18>5ajE#vV>XaHrR`CSXo(lC)_sCJ)d3kQkY5qlfPSV z@J@k%s=ktz7FID1rkR*3sDuC~?x@3kzzw7u$PE)2GL1cC>|L zdyz_qi+U`XckJ*!^4D8%&FJ^`Y>llpQCu=%bV#w71{PTj+mD(iX~c4-+vs zBLNhKhXSpnjv!V~^GGON%DMZKCj5RsE2U_0W`xi1+ipq`n4=Ftz8Cm|(JHw~t?742 zS`1`I?mK2;FUqCp$$mN04~(UuTFJCNrEXfuJ|N}}myhkxuYY?P3-06L;ZbR@e*Jp- zvoW*L1Ga+8ALHYzjKYI>RC~i6$KB%Nc?8BRh$VKH)dj=dk}kW6l@aX#Hs4wQ?Z@p1 z4^*iR9#nzo_u9PEb=)PxaXg21H{-jSxznPe`uG!hd3mX`XQ|ZH)xER-^xSDoxRLF& z!0)oqx3l_%&}K6;GqqH`4d~R1VQV_F>A6>!y+m-_eJPHln+OV`-aVXS?KOg^89us5r4<+z@{ zKG=4uNfR%7Qh-6TP4?2#($AP+Eomhs=6bnCjA3nU?YuQ&bxCTDtNGH2{9DtPI(G5~ zZ^j_JQ~%bj;wRUM6BhD~x*``ZTqu5f`Q=H+S=02ate?vZQyZC>1<+=o?U=Iq$x}HbDx>Sq@%$?poE?TXmwajI3@O zVptjIa#sD*To(~2VEB#xZeJ-ob{R#NY1;CABm)ymdf$`oKYdkddG>rH&fUJ<>;3z~ z)e(}M_^#xM&bc>W*aA5uY`}eagd)AR4^T!X* z8)>(Dat6XZl#dEIhDt{R=>1qZWVE?gS__~h@u-Jd_-k)WPIN3mR4 zv;m3dc-ODXusT} zy=Ts_t*)*z(|KVWlMk=uvS5%lH`U|6ZOfJ@Vf_MK9!%@1;1h<7?{HRXJ3E1`gvrT2 z`jD^hzf=H~_!uaQS<*{Xo8er{QlEU(s1uScHk)|Iie;E+>C<)HFLMrzd}|Q()Nk z0;&S+1{mz_pI;YVHX2>9C8UMG68v@?FTrk+CGP3z*c9#aGqbVBjTXuD z0Z%lpd{~z~cJOJLSXTHgaV#E4fJK@^f|rmmpIKMIo_N*dPYY86OUrs8-$5ueKiWpU zc~cfQ(-Lpjd7oAz%X|Yx*@3I z?fGmd{XnRLZQQi{g{9owg}9hY!M#5NB|o7}ExyWv{xb0GRq4|!625btjuxMd)8)LY zIG{eEOE5DtyUvU>{cKRx_QDX~d?L>ke~CoJM}r=2n$FBTMQ6irI&G(1CYwM<*jaZi z%vBzW&>8w3Lk>2GLylkTaa5TkmzjA~5?sNO&}XZiy7%{aaBh^jBp2VH2SpGhm=>#p zaayo4t8wf0ZGhHjuo{!5B%xfI&L1YZaH9X}4fn|)~06CM=gmG3yWPeOu& zT&c!HjjO7v1TCd@$Xew7p9A6cy_-m#%YHm(V6xZm#6E6r?~;5@aboWYt-J@QTOE93 zqdRxp@SVQC6i$WicuYNgBkIf9T&6YY`EQ6(^)jvFkGa~Hj3*P-Qr&aT_#Pi!^)%ML z#m@>AH1Nj{Wm3XiTWl&!aanQrH87yxML;X9t}fHC$oDELl8RiCsrmZV>sss^!>`j( z$tOyEI9(o;`Y`=0rsXW_%y+!|ySH4T%W<%l3lRLrj~`^m*RTBhAn5%*Y#u%6k-VY%L$n3&@7a)WbSK6Me2m`)_PYHx3kREZ}kxG4cm)+oGSb^!C#wPt`x zH>R;7*HYN&2-yXmJaKDoRvT^2*vu|$?g_Bf|Mex`-QIH|XU_0X3=I$KnLF&upP4a` zn(KJJqItR=6m#I~f&CrimRDCR^iR0DQlL=f&G-6|!m#n zV$R|A7x}pg$<-|o*KV)c-n&O4AqEhQFiC;~E$YmxBvtBh^m=y%Zt7gZT5`VIgDbg% zO>O5mTfnEmoy|2hOjpEbSiaZShidd%G&Jq>UA_VU50Z=#jwkkUUYZRJv%}o7ymwDV zRdr{QcA>-@n^tPz)oEgSTB{yRE)|%mKZjfV#MjOA^kw>i;@+S%R2_j;_A4_@zwtyp zQ#F#DCBr_#rS{bCu0(wL_DYnGSanhe7h?q~Q##Cowpe}n5#@1Mm_IFtJ>|lM3)TD_ z_T5xvWo6y*$ps&l*vCg#x!-D-wS3s{^w5=4j;pAI1VST=(Xb{w!&q~6d}XdnPFi{$ z^d+(pl2e-0kf$81toU!&ga-gnVAok#Saj-MpFfp&U&LX)$0yaa<%7$>kz>coP@Ig` z+IuJCwO8oAef#G8P2=iSH?;Jfa)BHf7xQO-ftXlYS{CgO6m#$G)dL7yhVD)%XfHwB zOuhS47Q~lb{8q{dbZY3WMfid~_Q#L;*z_<`+A_^b0np7wBQD02;16*4$GKvw!WZV} zyI~dxuqCC$#B4b8it*8-N3u2JSde0z0jZiNL#3K_9R?qG;&XCXC0C}mb=v=Axcwq9 zkO?L24;rwG5Z8X2mbR_DynG%|dP)3mwhJ!vJ+$`r_T6Q^+nUo1nMlw`(o2**3J^!z zr*0XFWQZgo0sasg?F`j;YM_Qh;XkZ6lQ{1G+VbYzJD?8M3c!5?MQdQ-Q9gLtg|aqV7Iu9jZII0aA)Kp z>CWCz!|-D9x%PUK#V8q{6x~vqrxT8YQ9dbp<#d#yB+ZX%_qsNll;*#~u?EHw5fRxd zDH(D9lPK%%Qkil9^C3AaQY}nzm@)4E6{`|oPU4<6Mq&+3PdRV-PgS<<7#kk`30GWW zK?3H$wnK_2Id3dDK-7}>kVOh`5FR{w+lN{6bDpAHrB~7Xpe@|(E!&j#F-2l!`mbg5 zpdUd-x;&~$o_>Ct-Lqlo`IOPTiCn`{aVBG8AcRi6`A0X?ImnY`8{21b>?(|?Cw&g5ZEGE&D;9y#yr|8y2tC51C z(NTW@Hkm{ffr+ox)$1|2@fc98h;L!1^{wuEuPA`b#l_JL)I`YPEB~@OEud&=YnxeF zBZ;#HW;yxi&${5M^VhF$PwT2EFF(uu6cGJvqRM{+ZjVlv6;=ffe@;mb@B|3ep6ZF- z;P{Mt&Xnaf)zl<6*)_6Ye-&PyVt`b7G>C3tfz;=STe+7pIgL$B00w*p2aTX=0p&-h zr?VV9cyMK$STSJ0$3hA$pKDoFi_wrh8no}&F?wi=A`a7sA#OuntaeDg$?F54!mF9< ziRD1|A|>iU#=HMRe$IDZNKH)zK_yWRuXX`FcH7gF@C-@#4UB!5hsQ%De(c^MxRY+^ z4uGTXadAhX!oy|dq!j)9P43puiaEu$Olir|&?5@UyvBR#D*r{(`?nKCuF~z(=0`M(27ZlPfJP zE#L(B?TBzQm1}8FH-Py2goJbd@_E;B%WFr2@YR2qNfJ-wJ<$fR-49y`Iap1kV)O7J z9r=iR_Uu7vv2{OZ3n~6}_U6sqkPWa{{_gJUqU#Fj&F5Z?`PK~lMA?ft&K}#nd-vYp zs?a9X4@?PH7&Tn~(;A4clelfXCJ-bvxLTL;NurH2KD}LtjR9Qfs=7KICHwvqH*s#? zlN%F3@&}B}&2Q73Ad4PN7Xu1s6M9E2fav0)!`p@yPE}P^QX0S-LS#2|v6*=D3GfCJ zIZV{<(I#%+bL+67f&(m@6y`m9#0SSr=iT`I z6MlhBOm7$@{D5jAYASrU9kK+8#YU25G?W@U<>v+HYD^^*7M?K~m z-%o8u6_^R275|zEuC=vF;E=Bq6BE1U78Vyf>k3*Tpw^Sm0yP!(_2kr)jEM=^hVDYG zj1+yp*p`X*g5&Q=Ku%EL_CSMNUS1}BncuzVBOUWJOeWrWR8ps^`9qt(JuL{X-2Y%g z5hvsJ4b&Hup=uLh^LDBG_fOa6Ym$O={ZMUft|Mcl! z$@ga*#HWhYFWtK*Ku-L|7tzttEh{B&Gt-_v-3H--M%hPduau$TyQ`|9J#vZ%wlZYP zqGb(QpXs*<>pll!qgSExBdk@aN7Ht*&O2pI;Ew)#f&n=A1 ztO+Z7L}|Ac7e_T^Cc*)1YoJ3@2#XH?u9Nwr}4KOepK2JXbM!>Hdh3fVYIuzm7w6)8gju8ZumBV!NT8 z5NL87mI2s1ytOOjY_xLc8$R@<#W!ueEG8cl`Fza`EN7tNlUv|?&s~o2yA>$17=y7H@siNIi)dafxtWN(h7J{?50q)-NWXB`j6>)L##I2Lw zHiZqZoK}JHV5C=fg%j9J`2#S9KG=8AcvN}-z)29z$BJv!J_cb?&z)O;@zSNcL*EZV zwb{$h|0lBw<&>!xBrzAxiOKc8?)sLj`r29wd@D~cuVQe0IJ!GSG7rTD; z_J&Bz;S`~NoI8IWeVcFP>7c~=>A5){oH~MZdf;NZN!3~eyn6Kt{SnV2o6+#&hg71< zeqLV2q@<(=0Rdo=xnq@wF;L#xY{xRA*5nWTeO5aT&d^3{VgVBzB>Stm0s0?k2+S7< zn(HHKgj=6ul_4d-{YUTf!8FE!g>^&@YV;uj_8wq{)Vul_4SftQ(4K%2nhwpaSO{`@ zqyOQ|Mb!^ga~Mu5vMyHs>-y012Aed_Cctge&|t^3=6WLk_}Q~tf1Dnpo}~6>n`LiU zzrLuxe%tTgzws>2@ z?-vsb8#*)U7dtVU2pTh`uaC@%2}kL`z{CVotg>;Vi_TFK)AFM|S~qXf2VL|kD?0~i zSvuxg=$#*W@Ks zU?8C|NXULPs2AK2`us|xnuf;aD5d6+#b5ArKuk)Tns)y6PSFe72hrL;cUwYKUS8Nj z)HXV=>gz}PA-#HIryx_;do>6DYXk8&&AohGKlB)i6#6t2s%V^~CNbt51z@#oPSNqtV^S*f~rRkDNeojb*(q^t5&yy^?_ zWq7;7_3PIG^+?Gl_loqpcklK?M#Ar$c@G^u8doE;0*SU86Hg`1Wq#N~a{I>h)tRJ# zWiO^xxO8G{YR!k{Gk4iK?knN``04=Md-?dbz^*5Sy~L^yj?nZ$zhzxqB!F~!QI8|5 z7uLL&8Lvw>zb7!4&YnGs-~~{J0dLlRkH7xJ*X($&;SECfV0#BYoK%Wy1t$>}nrT$`T4LapfT3bU{lv!! z2`9)JQgcz`guESK2c)D(qzm2~goK8+43PBNSrL3%6d^we987PDLA>5lw;?9uj~0`O%@ z5oECDi3`kV`pZLC2x&l7icYcnhWVwgwMSPZSFEL~SU16+b0u?0dH1)0ecdgbI?6&P zwlZD+kMe}_{|QT>3{;vneYc*%fvviw-V6v#5wy8;+Boh@6NO!kF)bN}5zafH1_)2t zftCS#!azCwveDp9!r;9KC=L)Kh_-md(epD~9`3xH4uD%5$b#^P4=G z0wBftx%PWCW&_TDDi4L~(7Hl&NVu6}RaC|GX}oaFg}a$y-MV!rO&W<~FB{5eym`w& ze@VrI;)=*yTlUc^{qxx`d7zn6EGN6q;;(K6WkFskjm)`5Yf zR>qMD60sh9T-oQZ%sRm+NTKW!CBp=qPLovibQ5>LAk}iL4w5WkJC6#5q8KLPhFlK2 zW`%k4+qchURt=HH3^`+Sv^Jj!e4Um3l&LF%Ah2{&bc%^}fays4)ZX7L!0O&%nZEk5 zYlU%8B4YM;1?Nv>LvN4UAq%3{XKQdin|;wv5*7kbFnF0>)$`*DO+`4WZZ;#0JxJ41 zQ*Pb5C3Tpk7erasu+jpD;rZWxufs?Tx>z1&87^wa`}~A9Bc>hc&bDP)RQ%~9sz@_A z67m=@AA&BV65Z*tWcIX*Ypq_OnE@Wem-SAF^ni?*szitnvyP%sy-!T^0{5buC$(Wz zAsj&Jg0)pg6_>6XTgJUV9+(^N*bK~0RtscPeJz;GpCZhRrDQI1^9YNtvZy%+>_$`NyY5a%o5x5$l z+>IRRrP80j{oS3Lk~HUM+bn*6Vz<~UCf0tqn_(_v`dLIoAXv!Tkx${NaW$Izo=nr( zQp*(0*}V>2^j>>ssC~ai$HJ5_EyJ5W#D4DrCIwnrvHhqN;n)R*;xf(0vrxFSoM##& zv>nl}_@Fc8`gHGraH5a`QIDNiYU@%0Z5J|WjC}KEJuK+LrH%>z#cs#e?7RC_64kvd z3KnjEHpvoH5!0ZdfT^e4pX!(J$bX0M-cOhgg1N-~JB!mp6xRrs#mZru)|dEmT{sai zxWMu%@MvG!-%P^~>Zz0C^n&2?XKE@Hesc62uUZO4)NVZeYF}x+)WoqwygE8i!g$&; zMUK;%1p;cyHLuy&fmbo!I%{M)wjbY3SA7!2saD{08XzX5sU@@U1M#}g+&qOES?h@z zr4%@Mq*1SuP%F_vtgWbJnz91?ftLUNe(3~jhw~yCR)$#v%L2x41;p)uPNK_sj!)S8 zi5nU8g*tjQ<=xx2dgzYaoO36?4_TiXZAp8lni9R#V}p$MSzTSOg8AOf(K^~l7mth+ zN`~jNnGQ5ti2Gl@cu^XJ8vx;PNQhDS(XmUnZ*xCCu0aEf8_^&!G&JY%<|TxnNk>El~em`1pUN*`FDk* z7oo1sc3`V-oyD3A;4$^*m>uq?%@?;>W#jnr#PTiDp> za5mvBnl`6U?L46+czOa34k^KtKEdFs?nyD7YDgs~@+RHu?sfRy2l+9Wo zc8x7Wiv5Az*yq~6)34kfPEY8P?rrE#l`lkHZ`{rB&%rvojc>b-ZXsi8dW?jHO<*to z_{}huw4Gm+YIkzB632C(ZkG6}7in@(g#ng6OzQ>cV#gwmAQ!QiJrjn)mgAH8t>C~>wjDvDjx}s?8 z(B#M|Q1Ebk?8`ry^CRt4P@~&ziNyGL0Uqkbwumt*o}}kPr|FakUTvblALsSif+!MZ zWDF*B%S&F^U5Of5-}hg)VD%lcHFx&5B@Y6x<`<{R4{2$?k&zDa_F(UB;Gf8!<3QZJ zd^z8;N18-0pgOfig3Xx!q}9r!Vj@}X%(#@e-`%%d51#PDA=!k)#BzM#tsl-N$!c{2 z=0p;}d9?Nnso*ami)~>chsfcEk6uty_lt_MQ5F*v_Ck{qB&*;+M^ zBoZmXYXlb`g{4xCy*|=>d~__Ui(@kAROucb5+qCeU%eMZg0KIDj{eVUi2r)&_CU_P zp3}!+eY?52fdw0xnU#YjxQ-kCfRGU;a(5k!VN!1qH;gba{cgo6WX!_P&#zE0j!YbA zT}elWv-}9ZD#TN;z6U^^8o_#*{|Q(B8u>TF&HDXCbsuOTpZ+Huw7u$|p@h%F(@VW$ znTf}}z=9zNf`Os)W!aqe(3{BN`+-kN#;`#~biqMJhB`?r|6zZBKUZSaZt#300wMX? z&YWCBKSf%*_}55KP*AlFcj;wg^J$wHAHC}QpmIW;ZrjT<%4L}Ft75@oxLYBrb-2g4l+SazWHNylD z&PV=$G|mjE>Rr7`g(QGKhd3Lc5(qOHikey;xf(4?>cyo!z zBy)2UG_W`^`4DC-hG~8|NfommS4~dpf1>9xJ6+$FG*Do4vBpgFvDrJN!`+B{L3fY2 zRw*{bCnB;7Ul{bI40d$SzXCg{TjQ6Yb4U+(T#S*1YY|aAHa7N^p6+ijVWhAT@{Wew z)YP0%%D{e)DBXcH>ox?iktU|5WsF3G6G3yk^xcRs;R*?Pbpsb9WNzI$09a_bJb%~P z+8W<)7loOVlZiLj4+tbWA%PyI0~jZX?4kFO>i^TH`agP~SM@=AEJb$UG28$qra%{_ z6%%7)5aMwo@r18G7Q2W|cn_>bBofMa52!05wxhe)*x5s=Dr2r4fxD!nu1Y3XL{x6oE3M40TdFMyM5{&uG?j&~{OEAGck@W;^kakfwh9`n4Ag z8C(Cr*O!VyDkX_3Katf@B4U-RA6w!elbN2&ml;Sa1uL9$v(peB5CfTCs};X?gP;y$ z5;m=7&`2@P4u1A5^8Ndba69n=S&yqs=MZbQx_7Uxx%mOa8!{t=5Qz~2#Fs8@PHP8P zf@doQ;WlwU9%X)EAqx3^#0CK3&KnR02h&Uul!8EZGv8r5_#vXRkc4)$u9K<4`uM^G z_yN5FN1fvO{rfdUP^mFU73LnuMw7FgyorFJNZtV0bQfhoGP&GbHaMHr^WoTh02$In z!jk~GU?hWu9!uXoUae&D(c7Dbg@s^=gaUw%Mc>A2$<#MwKfLkq$O!h(BPoeD((wS_ zD@7l4Xs7|Nb8}mbEDbXw+f(S{ZL4t5K}20EexkV4ZiRXmn>enTsoDOIfVj?E(KBTF zHoB(o^qDi#2exwY@c7-oVqy}1-guAkTcVLTNxw4b9UTuUFItWb|pU+H7?<> zLk+j=DcJy&gYQ=ahBwHV8Lr7k0~Y3x&w*H_p88a2F;+1io7RXfrjT0<2;yrc4xcEhLnHL$=gNl7^wxwLr<$42n$-wKI^8Pj4n zaUQ*(AWzw0xAFXlICBM8ac%W=9j8iz?LjKvI3b`e`*6F-NutZx=7m1-KI;{iApDbi zR-x#Ri2nnjK6v!V``o^>AP7_9aY;$uQhRk2m0`O56M#;{0+Mo^UTVmY3{+B%4}P?V zg^yJjAD_eN$NAd});cKRIWat(`_o0?9;o+z^b3rO8tqC#VFoD*LSH2>^Fi2$ zyD_x}&7BMQ5y=aD43LCjr>e5D=jYGzWO@*t1<7uRTp8-G`cGzzCD>S#H#Z1q=-6Sh zTO*xxT37YvO@GA25OPOYh2MD`wT62*WK)CmSqBRa(ING8UZ{mYqX=*yyG}NK?3AUI zm9(bjtMhBg1vq(+E>|dBKg^P^z8-x77gbW`*A6mo3^BRI5Iiw6w}$%=Gsb+%xPRA! zJhAh)i16@l>52?UPlbrC^YL>_YI+5)TGmY*K|TmDXkJ-03qDrb*?-Aoj5&`cQqc|~$dZR8Eot^YX;@|)MU;9b?^A!L8KAr+3Rz&7nM)=hRQY$!cW#fYlYl0vWe;UC> zXP}sboYZwstV-Dxp13(>J%sYK0f6rjp)qKE8z|(JfY&xHAB)YKa_$iWFm9i>TF6pHm`Yohz~>C-Cl_2Hxl0}7UMV+yfXKFP;4m!2OZ1ExU0hl%#D z%xrArg+8PoN)e@kyGO?3U%q5l3>Wj2L{P9g4_DdF;%ZHQb*Kzg7ZY3)WCqD$j3Vvq z>_o34Z@J*v@%6;Xv>0XY4!LE3MXhKaB)&jyEWv`IXb|#7Wz5iUsBkyvqB8vYL3|U4! zIVRw}rRvcjit8Ps{;e(;_X9saxUhy=fdK*KFD(juVKnN;LAJuCrf8^Mq4jD($+dNLZb;T3p+M=^ehO+m7qRT7b2;K~%I1*^9;;t0+_)soZF z3J>7Pxbo3%;?sD?$0vwgB0VX!?+K+tI|)ftpY1ClnO5+b#nzUm2n=sBGTuEt{s;;H zl}4s%s?D8JEmhUv$|je^p+n11hRKBFy&7>^%0FQ|+yP$KzlDvxAYQ!+ z04N52PuZ*7ZnxSqcZ{Dm{&@YXt#igNUH?VS2v?LQh|Aq_9H2?0X`uw>FnSAsVIuHmTQ)ETg zk#~$P@ozs&N}hvt(V>M5b0*Vs;ZH6e*h&<`jT^jWq}_HHqkE(=(F2_a7urz7NU4T2 z#lp+r-;2lqRNEp%5JOb572gS*Udy{bPqkE8jlNp2;a1K$+sX1ayy$AKQ!W)=t=n8a2p2=!` zRy@I!MM!g!H|@hc;tnjxwoqK5@^Xoaw!PnAQ6u|fPn>7-cNDM=%V>YLW|p5y{GMCa zXDuMRkyk{KR3L-yI_Sx=!ZkA)3=AE-;+(s<0sVM}1lhhm{$YL@i$edTjj&0c-Y)%4 z@zwC0xVNLA><6&N$R)=55ZLG^#dk+*p)MteD((0F@#0)GA_|5eS^Fs;C&q6!r}jV4{M`PTp90 z>6AYp#V>wbGneJ%DKlw6MBF>9!@UcH+n~%9KWu0XMEa0qhzPlU0&M{ubwl$!nP@2! z;cx|bN-fKL54710xc?|8N66tKPA~p}2~xVe+*tbkaQi0KeNci*lU-(bkT#lgIF7c0 zU?yUC61c^qlJw0bAMzrZ34qB!I#jn8v56?4a;VtiozPSkRaPYrFP@{PZ=CeQzu-Z+a9;6TlC+Nd{{y|z@=yQ( diff --git a/tdesign-component/example/test/icon/goldens/icon_page_light.png b/tdesign-component/example/test/icon/goldens/icon_page_light.png index ef3f798435a000553d1d65be2779c2802de3eb5c..88badf862ce7bc9147bbd838b29743cc9d84f9f8 100644 GIT binary patch delta 1987 zcmV;!2R!(>y$6%M29OpD1<42o0001rPhIGNA+;d^uYdv_t+&#E0WubUzxK{Gq^UoQ z8E$+2FaF#4@2a!E^K5!P;0x#P9G>4#{p{KA@*Jnr8IT=@ zo3XPjOA?8M^m;vS@kc9v{-1>WGxiT3J_KCja=ECku5QFOQyu?t4L4)=e97f<8XO$t zE&gc5e_Th(*gcrdX3ELQ8L>^QF{$M4k0AE(CtR_Q)<(b=LF|zs9I;z0mPsden#^(^ ztJn<&1K%M>J%ZRHgCO?E5RTZxX%nkVO1TSSAAiOw_MDuYfCW~6fk6I7>^7T?@35nu zsV;V!jB@{5u?v|{X#S7bg>emyAoj>0i2YwCmD~*m!(WNr;c!qzMa8HmTc;x4(oRcD z3!06G68q=RpXtn*Gdx5c{n%`_F^RpbtV|Gl7WBfCAv)RmD|L)y8N>5KGmSySOxpOo$G{kFvqJ=+y{!nFQC9y0^ zGMS8S-@ZNOj9ply4#YbfudS`6lP6CS>sK?zyG>nPT|mY@*~T^Ia1pFdA&X=y%f($dnXwzigfdwY5A8NZlJCSqBZRlqXvMilFdzPGkPA54W4mx$}6tV6Tr_Y`}8&T|C zU0tM5D0quM62$zp%%@MEV6j-Rb?a8FS+fQJAQp>p`t)h6UAvZR7at#wYuBzpDwP5N zoK9!ZdMBP*(Ec@4rW$6m830gRT#SVa7XkoMQ&XW(J29;L|SDRE$oiLwkEWnwy&^FzV<> ztJMMkWHK41O`C?exHy!Tm!qt#3>_UEC@3i4reb6=S-@1x-Me?u)YOFc@89#(gYhTk zo3o_py2NW{Ab& z3GYiZVYk}>05fOK^m$z>m15<}mB0vMw^%H=eEBi}ps}$L7K>%V;*Mq<4hL*D8MS=bUK|+JF!@dZQHg10Jd-69#GD9suJu|jnnDGg$oy;(P(@!c9lvM zAexkv6ztx;8w|ssu&@v_X3Utt=wpk2!NEZsI&=uFt*t01D8PvmCw#5@PQCV4u&dyGu>ShqkW;5h+IS@qb4u=CREiKr&b0;=#+{j(i*w~0w zt5%`5widm;y}ZRf9!w9TO;qFgWxam=8Z|XFaJgLg@#6=Ynwr2c3@%-|gp7=T4D|H$ zpuWBy48vf_k|jt^PUh~Bo}P}v!a^={68I0TR*UZLZaAGzSglrQwOUT>3l=OuOG^tH z8yn$rxu8%exGWy-PeQ+b{leV2b9wDUG~xMsy?F5=#9}cV4hK3rJMr@6OKjP)1=ZEn zK3TncT`cHS7u?zDRG;edFfcHGfSQ^b5D|ukhVb<1Q&_E5PVC-e=y@b(uyLI}eR|Mx z!7&Hllm7pguCA`2i&0rwS=83nM&z}K<^84AYJKh_EKvCpY8OXdULKjvW*QzIrmCtc zpPxykQtIyR_PLL6h{+d)LJ@Raj~zQU>eIk177MLkzn)l@rTqMS;RLXMo8jT%kh_i4 zYBf2X&XCu-TrPV4{5jWNsZ`RpZ{H>~{zxIB7=L@R*=(>{tv=79Oh`z;{Q2{_42Xze zGMTV{|9&JUCPJlBAvHCX$Ec&9FJHa{%snO~BtRmOa8I^zI2?HLEf(go=s^ zAxj?xi^T%F-Ogp(B9RDxbLPy!ym|A&y8gj~2aw5RsIRX_US3{=qm2!S2yfrM^?6Ms z5+Nxm2}wywVcp~C(W7W+Xnd!eLaV^|pin4KT3X8O zsu74BHk%DaMMb!N{W=(i;X9m3LswT9u3WhSl}g2TDC35Ri1zRv9fW{@fPldG@(+)R VqY9C&Sl$2t002ovPDHLkV1hU6!u|jN delta 18538 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 diff --git a/tdesign-component/example/test/link/goldens/link_feedback_dark.png b/tdesign-component/example/test/link/goldens/link_feedback_dark.png index 4d68fd12746505007a5eb4755935096f9d37eb25..2c4b71d281428c5b92c0fb7d773d6290cb74a6fc 100644 GIT binary patch delta 47429 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

NqWF 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 Rn`H*@b59$tg}G((`hQ;2Z}I>D delta 76587 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

9bz2!g}Dnw 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 diff --git a/tdesign-component/example/test/link/goldens/link_page_dark.png b/tdesign-component/example/test/link/goldens/link_page_dark.png index 4157e68fa8dd8904232cf8f83f14f43de180d2f2..bd3dee3bfac3e4e775cd0bac2637c1cde94d2246 100644 GIT binary patch delta 13555 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 delta 42522 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 diff --git a/tdesign-component/example/test/link/goldens/link_page_light.png b/tdesign-component/example/test/link/goldens/link_page_light.png index e1a39a086f4d6691186ab1c2de938a849719f59a..21a77b6b24011ee8b44b62f6b7fc25ab22f21c4e 100644 GIT binary patch delta 11928 zcmch7WmHw)7cIz7K#>-tLlh*Wq#IOHQt9sQxb#8kMrkPl0qMAOO82Fu8$>!Top19W z@9X>e7~?Q*ogHhP)BlP$KHp1q0tp5{#hd? zCM)3=aLg0?fqu*vN;NT%e$cvh_Au&fyS`Q$k;?CE#(9ytF*oExkMdvrg;Nnbk)JL< zLmB^073Qf4!2_}p=AskqMSVyoC1P%SRPjxG8Mb{^oW&8VpW+3Zx-S{mmW#*y7dbpi z+}wvZ7q)7*r~%w6eJoeas*~=4e0SVwn&m@6v`*?)aew)Fw$e<3&&R zEeUDfb%M3r)JM4~PL|Yj9d*8DmZ-09jQMn89{g5k)P4omF6S${j&qI6sEG6TEQ0X~ zORQ?fSBIY@;w%*-e<;2qcOj!RkJt?G`tQ?BVpQv3$mwHKxxa?!lCCSWSc2@+ePH`6 zLN)P5){J@rFyi!C*^kiTtNNhoq7mmJ%u}Avk^l63%|^!A!th`%0v_0b0bcW#GrEsv zf4>UZ{ly|!zjw5IGW+UI?9pTe!2wo_w^wvtoK_=;R6bmP7ttD1i=%b?d6oS4vXa$# zr-#AokCMyN=J89o%|e{nG}r>sD$OF0693XM$(dlr&$s!-`kI`OmCxP&T*5DeF70bR zTWN+-<`6e=*%12yzJHCvwCo81ei|rY#W_hfW^F>Oll9#^Tm5X)-8~%7I9PJ6b9P1X z^2ZOn0&C3Vx(q4Aeg%tOm`bv^F_T3GnHZz{Jm34-e724Tt7nW3-eN}kO!tschoyJ9 zd`hGRsVPwVrtGU6)cec6Bdx_*JBvvrA)lG?D(-G**S~{09)%6jFc;=-m!X1%kwb4^ z)Ap5H_QLEcvG1r6ODQhjyXB_8Z=Mw;vwV14)6}Ty#(x-TY5Ik`BGAe27v^armI2cj z|3%$qd$$Ts{wpu;?RB!9A3GZpl%iQ`I0>){iUHC7+=#bNA#J%{wl_Z}nOaIPjt~ba z%g<3Z!r*07w%6{K)RNYW$Zx!;4&^U`ZJcSrOAa;G zy_Sts4zyN&W?iN~(n&Cir*K;oQJYN|2VFc{o(k%x+boIJT|gin_W6j_>HlTS$+$_J z9=1!W@ZN`7ZIt@>iRjKeU$@5OTstEJ&V6MsI?a?N&tG2jdFG%W9QZGhSj^v@iRxP? ztL)*smgp)`P-(%`bml?_4PkCgTnCSgrA{3wATe(-v=ub67`r}W=fAWY(w-*m3y577 znVV$vb@3ayQ%3~J7-Lm@IgRNX|11HtvZED+C&YxN>Jf7(SKTqjtS<^H@f3^6&)&_o zwmEB;&)CLI7e9?7mEkZms7zQXJbN+29N@KGbu&LyGho;Gw`}rAm5}Jg+#SSj!n__1 zhZ^E%V0Hy6?+Z(4=1-vv54 zT6OV!cOiNx^|FVVp3jze{mIg~q-lepc>L0O1)#CG;zMmtV zN^0`R3pskc>@CByOocj*e3CV;7Bp=~TLtljbA4pZspf3vZ%LCB!9V{eT+YAqRP%$y z$gnUMm0!ByA=g>BnQ@nRSBG9Y9yQe%wx2v{@WFW92;BS2m{H9)TUH}b<75}(*PW%4kv$$DV&SK{^e3sdCInxcz-11hEF(RQO0o`iSY4y65)`3Q zz<&}>utO!%S0C9R_U>a&@xcIVj>(vt^aQT+EltN<=5e*U6l{VhH21mb^HY^?PG93V zFpLCs?ii<8%GUKK^`sfI{i*dD02E}_dlt$(?!_e{Y?Sz?wM<-wM?LFK3&2@&K$ znWDw^Q-XUlMLlP=|lCZk5IAeV4LwOn~b*Ww8)$6jqK@AD1cuUfO1(G|*pQ z%xaQI-3{|FMSr43$PmUFqX8v_DP*swAZKMTLteJMLBUNE1mE`UsBL+m8#?OvvQ1OE zf!w0e%<2RLt0}6Cc+6D_Y`oZ?FlwS34&JspzBX?Bi7Y6QuAL0@d>yCNpzgsuow*-R z+?6{Yzwd8E^IF-`$$D=3q*?v!`<0Z~m1z6&gzUNchnTsnVzJgJ9dk46dVaxv7s6dC-MreZB}=f`Il3E)4`pZlFs`!cms zG-%HSmvSeZYiW`@zBmKATgodH>LvTPN0;%;nXsoD7n3&Nu?+LiSOb?=u?{XI|Mx=2 zUa;U=*zv)Wz*O!wS&Pkd`5rsu!UMTz2YD$gj|?sZF6R9Bv1GRY1#bmc;;f6@zR?Q~ zTaly?bc---55gxQk@of$LNOmof62fQJU2HddnYR^i;0Q(tCBLfy|p8hQ0Bvj7qqmf z*&`u|iO+!WtoJ9vttOa^jEpdGa7x_tqbT?#hSG&m|IO9Gou`jC$3jCwXdoe>xw?{0 zBg64u$~*H7i9EJ5OWWJp*&7W$S8kUl+ftgEr1<#wA2LMJ0s{VPY-+MUuOgJVcKm05 ziZl1C%6d{oLqodB^CY!j&tskF+qZ88I(M1DR4e|tBEKrH50=}D^qRhV?KeHs*Vhli zp$tn&AxCZuF}!>k*ctxpjm0qZgM2}>Sgk*di1`%@i^=8j=06t!6dVdZF%=bp^z`(A zfPis#FS5w4i<7^DDHoU9rTpIK>={0%q>he`yp51Vh-i=i?%9_w51yc-WoBl&dw8hU zDS$esM8zkgWEamiBYGare=Ly8hvIY0GGn7YwEO=2RP{E0R1oB}F^3 z2DWaE+<^}fP*4nL+c$MGmo~Nm(}#(LRXB0`n07oL(RMSO`F0>pFmW)2S1?ijJ6EU_ zwa-%+42FWp5QTR+<9WtHMdU~X(e9sNLqA0!QRoc%MA>7|n<;LZ+yC!C41VlvZ zjXuBqP~F|##XRzJ>m5YBPFWUxuU;P>9=dG*iA)oOJs7Sql~YI)STBmyZ*(77M5|6(jJ~TO*_AC;%rCrIT>iZM9d_@y*vq z{SzXPq?Q&LY|)3;=knO_??Cd-TwUzhf>(6@$GjsjX-r()J0qhkx!SY+#TFIKE;IPy z>8w56sPl2ILR#PN&uGaaJ_2vd5siDu>ucmt9k^Aq%mDRc?uU!{(n$cnWKL7r;u^Fv z=M4qYCM;T}{F9#fWrs48UIG+7=*G1RilPjc%r=}TQ2mfDlnge{X*0#ns#Cl4syI(G~~-CGc^x9FZp2J&^o{d7kR&)BnU=T(|&E|8eW<$M$xBQVEHO_-Vh` z9B)_3$4np*!aN}`heRT$D=i68aD@*1-lSqYA^E-58!ICtvpkw3cYc0;u$h;!vbnkW z#LX`Vn_R*pa?T8%IjOz?<-C+jC^Kk%;O*^wetWggK^D0)4G+c@y^aCZFE~jq;PQ|A z>;x?3!*{M;)9HlQ+R^|obG42iQu*-x6h$rqIy&9~%*v(k*fQBNfN}vmv4MJzl$r(4 z!ck05z&Qh{{IT@%-#_v5&z9Y5g66OFrA}h+hz`#I6 zY3a^`!{g(h@571jBh%O@G*e^0|70bSoY#marCfsrA#f?j*7V7=O#gzUv$K;$uaU%0 z#OIRTqz5nYq=Y-u3O>ygFIJ>hh%Cy6?rwRH8!2%xw5x4UX}G!LN#B?qfUP3O6h#do zF0xGTHH8at)4}iDh^y1BiT>$ykIQ3Ail{AS}kE`L;lP{d8FZ!4%m&jUaH4)}>b?OLq2gXy_{!>iK0U5oEk5+E+^~uW0 zN)qzm%+Jrirz(IEK(_L+biIs+-Sq z8PeUq{QGC&wllS?^QX#M-EDWKv)XnxiOZ4z)CkKG31&!=s8 z{uF7p|CEVM5^!bmN5^jK?#>&%88mwXHy<)P*_uGPJ|0v2kR}lS^XCim76I-grQ+Iu z8+{IoEs$t~+irnV%Ve>(y5)2`u4qK7fx$wf2f}oB7OG+3;Yr{y?!qG@+tNwT$iQ7E z`~{#;c*L>bzKXpuN$q=1+Z|24ao9}_Wvha!u3m~#N-5P+P-k1$I__laoI6>&3 zQh$j1hlGSUu(m7&Sg9^}Y*4Zghxb>MHeZ5LS7W!G;rh;FyXB;Pb9tf(NC-@Syf>d> zJ6kR8p?C)oW};2;D+@7{bv+P1FdXsrss>cvq%+lW;apo@EM1e@dcIQl7<;VxgQRE!NALz+-`Dnp(M3OL)7rFkGw2)`1g*xO^kBi~|UEhh?yfLxlj2Vt9-L1qN_ z_~LqcRD=u)CIDbAponlXGVvs^w|@Q=F&iN9y*`uz)Jq49Q9wpU2J-PlHZn7JFuM9 zWpnglvD&uEXT|u=HonGKLKpy;^FRu1m_6eHVn$Mq$i;E8= zakNjD;v9g;jTNewTGh1J%?sozX6#-29xSy2H$-F)+1s-aW0}E83zC(%NuHz%xQ6xg z^k_k^Gy=oy61Pge6z5|-V=aU3e1Uyz1Gb?Tfe1P(bYq_LIh+4?;(2+tKUAa%*QmB3 zZ4buXxV}ItE!Z&y;HekFadG6Nr44|bJtZbq`Sj`2dY%M2Iy$HCwR^hnr6t%Rd&;0Y zwGhbs;qAB! zFzj0ii3jp2JTF;U5$k@(e^cy_fN5s;JhpiJ_^|~@WxO*w2+{`i1vws`(mHi_?YH3I zV5BjIRhIJxLKWS)#rMWy(x^l?vKk*?dbRtiWwhK_D&6N)Q>)TK9Bwuk5*b;1%B0&T zn$E|?6$kvP^S@zQk&89Li+9qr@8Y-CKGJsH6<1Vn0zgXX=*(g3cDxKYUyX5iCV@#* z|N2g>8c!m`IyM$xTNA3^T(*NxJMgXT2V&B`(=CW~7#bQfUu^b4?90=~_U{7qd@d^5 z(sxy&RTY++nkw5rS)wbarKMFBZCNv0K5a93qy7;n9U!=>u5B#Zj^ZMPTQN6T*~e;y zL@1yE05+18!{|R>U*D-+H=snovHO%Xr0M%!1fpT!Kw=lDMqsx43SQdVLtwErF6o>B z{{)otynYtMb&LD%pUcDGc5yqqJ=aM>iI7?G;&xz_9FG4fkB*H^SKE@?&QxZC(A|SN z{280m>5iri5BXT0B5c8Y_=k8$XQ%3n8W8)s)hI!b+IR2Xp~NI7hXTjn+6uMC|DhIe zc?FyvEdI(AKApsFC}EqCjwdmf02tI9kxI+QmjsNqKw^AcoWn}TqkAjtdwXF{#$ywr zSDFW?6yX|0EsE%iXJ&l$Y6&=F(7^0DVcwkOD3!~7n&OSIqmK3fxC#Fx7z@Y>G zzvWo&;f!@D|72)%G=qppI%uTE04KJ!wV_xnH1c1a?RVSo7?*2ED=7T!WymPnwFCCt zb?|%rh{alVw8(w$Tp1uK(4lGV8qWY8yV?^3R|EOXWGsVX1t@>X zNV1pWtN}{J0*W<2-A8}Q5ULexy$2-!?@uu~%H8#bD03i)K!*W)nZvRK5RhJ7*!;ua z_ANJV^JGxNw9Q{2q5mUeQ((ksg@jTC_iD3euBw150doM3YH=76J{v!pehko^|7Y3v z_Sys3O-XTaRM1vD7ZF*QZmj@|1WhK&y$+A%%A+lTUh_FGZ{kFudiL0+`_gBO10>RT zrqWV_h4?j#vk0XM^r)929A(HSUh zxs?S5Q1?%Ne?J{FGZq9viR)U$2_Rw7pe0wUmp!%GovkT#aR8?cRlmj@hM>N_m7cG3 zpbu11QWBGq>BXKGWoM6>)Q9d54}f|k@!C_t<{UAAYOrpn0Tp1?t^YBhwr~S9IVL9N zH|QeL%<)tmVX(wUs<37rgbUq2^AB}zQgZUWOQ^fMz2bL2paB`? zvi=iseC%?%J1gbn#F@yd+cr3eO$|{~gG%}UH2dB?a&T}6T_3aq6JKUIMsH+n3|g{G zzz>M#V>+p*m~Y?O$_(3kK*(wqeY3%d%jA4181nv50%*p;!ND&VFOU>!=$ZoMyg_V3RuT7UqghrQJjg`)zi%iggxfOj#6SIt324BR_!V<& zw(p0xa%uqg&mZueKdB_cUZ5gNG~K9R@vh5{iIxn0U{KEgiq#eGpRrpcbr z$_hxf2Dha@G56~pw`W9(eA~@qwG^}_g^!kX^Qbd@;npnNvl8VON7RjBk49GabJjn3 zlKx@#RreO+;(FqIb%XnYi6fr>z^Swo7k3J(j*B83YGBd6oRpS4Jy@MLt!q59E$O#y z-#ap0w^pw59MB#?#L{~<`7GCOpV)7-N83Y^;P>#-q?OTr`_uJ?h@u5+lWFF!O1?`; zHB~VTm*?sY^NXW>1=lwYlh)GxRh-T~sP@7nI@ud4N;VrOFZs_stsE!yeIX&3K25qE znXibM(c$UySEBAD{bx-+#)^;5?&PEp$sVqTZdEmkUP2Lnu!T@waZY>u?f=l6j0ee- zw01SW$w7Q=gWvTUt;EoLe_wZdaC<6`^H$($lol~oXS2!n{@lZobbREj{)*R88Ao)7 zcV)dKf+^v)it4Q9#BhpXQ>U+ne^Ch6^~AY(y3^G9?AhvON#;IfU&!kr3%V(F48Q3W zgLBa_O{Aww4qDkf>T+~OXIW)v{}J>&HjS1#2fh<8-FEHDy%4QRn0;{a$v5b=aokx? z2$ipk^>Se6-=+13)7J@l9+j{{?MpfQ?7KAa+bsG?$_t(-ht-`T$%%#A&aMZ(Q~Em< z16I!LFl*Y-d^58WHk75~jYxMN8J^jwM2E9QR)I-dj@#6JpTYj`^#S&Qau<+VR@X~) zt=m&xenjb=$n)cR!xk%}r)PSu^e6|V3~lF=goa6d6cMRzq5EfKrFCiAUzysPrfl+j zQuB~;`?9NMru7luc`2C8CS?fEnqgl#nr<%K5>eCC+9Rlu({6L`%rc3vmv%GPTiDcb zX1zOyMgOX$Hx(4#`bN zf8O;;K5;qc-iH*w@S-l1T+IvhrPX5crl+L6H_NP2=@t9EvWqTpG$YTbc5QcCw%8+;{WiJrMIQQDz3UwDa(cS? zdSniNk)TFIuwFX|RHF#X)CKx4#s;+8rfR!f`38&mZA9LAI%wgn7fOPYe#&72{MnfdBoZyR(Yh@^OQoFpNdia--WA?(v zhGaG>+0LDucQzU$ye`H#$M@H^w&m`vQD2ej-R{YIHc8Iwl7b<32`a(uBOl4n@zl7) z@O6tvC>bKel7%F=3HzJ}Gg&rHVK(RPR+a|?>&kP@(c}d98XoVOSN$(-gmgY6{?$Wd z++F(jopBdW=nYyy&IfZlENa(Q21r4UqIvxfD;~)GnLoQU{9|9t&hxEH##+*>2ZatB zlZU#3R6Qf_1lTeA`l$-t$obAK-=afth?aCrXMVZc^9G^Ya!y>o^@b;n>Qq>mqSWsUkUVPgQcfGsn%drujM?oBh--r;FEAmFi~p z^5A^n2~P_lnjadU!=DeH&GCfK`v1+1OWr66lV0#t(Sn_P5BcNflm@qv>3?=|TIu5hR9 z@s*`(h-}Po#iRMwTKI!0P9oZlGyIKaWpM}r9IZv!T;o*s1=`F-nH$8h0WTJEwMW6h zXuMYC!RnsO{`hgo>hy=FI)+y;pW>gr7GWrgd!!f&RL>z$SFI$Q{B+aZqeLd0_`&Qm zwx5E$@HA2xZDY6ajBFE@hfC|Ln%E;kLfVHx_m)(U&fgby$zBmmt(M{sL?)36bEQ|4 zltgYfE{U=cxk%ybPDfTKPpa`rb+j(M(BH>_K_6kJVdpN$J8O%-C#aBg&noBc7Kev^ z5RB@v;k1H3^0Z{IN%}@{b=$6cNKP)+bC1iLJ{ifcme4{bQ$wtG?qxmgR2d-iR(IQ3 z3%gN(FXW36IbdibxF8AFOKjtO|M|QRjWsNZ&eOzQgMBpP`s%AOrS8b79UL%1U`=q) zsUuau`Mhshezxc3o4Y)TL*CSbxBXbooF0Y>X7RJmWB#XM zwCes!yj{m`X(ro$+OYgUQh!lr<@K0s^hX8`_=vRCA)YBp9bA0G|1Uyhl|Z`m$z!9o zFE;7*ynZLaVVk3KaKx9iBeLs^52`S)xjh%HRA(ICwtn6AY0XG?UpL}M*h0`hqWyJ> z8%0vezM;^UHUcVbb4PpeVZGav!4Hwkzxs02`Zl`%+BVJYuJCR}Ah&tg@+3UUQWCkF zGJT4frcfnrTnD^pznCf4D7LqQ;I3Yx9~`Mqd$T`}<0+@AjBtcS%`mX_8lL5EC%)OU zU2RWk_xHG_f>hwIpX@BPS3}11db;kPYp9-d**LNvv~!(iyf*zUI!XfQw&l2mLPL$b zvS1(aeKP*?s1OV8VeDS!Y_u=QM=@L;$^cQ4tl5xSQ>`l?f6W>b-^$+1xFh!}C~)$U z(&$c98zP@phXDn?F2(#w(m^zG5`!KoaBz z^Pi3MQWGDp=hW72eC%PWT;439-Me^-g5&dNc)e)Pvr(9fwN>F_NZGbvi?|@v{PN+! z`kOw~$?mt|DGF~tm8G9Lrkfz5R~NUBP?PQwJ^yoO)@5#5X#PE3zFZlN6jPVieffH* zZ*GGw6$5F!F$mlVM77vV5Sr^2sr73b?InR6or9 zvj4*XF$Ur7(~j(>>k%slg)G)t%cUNE=PIeo0su%%YDH`gTF=`vT+`A0g)`RrN=MQU zZU|Ftk0ol$0bkZH%diU-lM481z$WaW;Ckjkm%}7H00OFd5A5XC65)JU;i1#yfdw0s zaA&oIkfh?HC|k;t0A(kumN{6rFmux>#6y?eHQNN#Z+jtven4NUtC8EPzcKPFK~(N{4^yS#ecuI7 zC@lyQRlYE<0$HfkvCiR~*e#MT!bnE0qV#Y~g+QAW+6$4inXOg*cIoS{e*tqCE`PCT zqkJ29xt$t2J<^(JES)#8lv}E!Ak$mnz&hI|hlD%u(fI7Gzd1?X#;kaDs#Z3g9$9Q*p z*$l;#b1AYbMBM1}nKaZp=~bf=qS$GLu~)F>6cX3=*hV7R0i23b2(x|meey&r-TVy+ z2e&_9qh*VNM7J#CqqvWScOyFxMye zIEbkGdSfof9B=xHdL%w+m&=_#d7t6^NK=jqA{kiNZcp_^MO|`W#|VZ}REhTN1hAJ; zWq;hnX-K$~r8hv@UX$)^PKX4F^o-(E?$>i_9fTR?4%dt2h*^2l#J6=TC`#o6fHKbO zGzVss{Az*|7_R?)tMl6rQh)n0st@ zaZhsW$nFOs%%bu3^S}MisBlc@ik_I)&Qi*T&*c?D$O{+O=Kh=L)HlfOxJ!h{S$ygH z!@UX}bhm@dx2X*JHY`7Mjd3@mFSov4*}ow_tg&|rDcx598nS1z*4mF%aj_g}!S#D7 zdNhfPYf2O2HoIK#hZh#x+({p*8^9V>!z{HuF7_!Ct68OB96atl+aDX>mDT;Dq-q{& z<9sO1Q!#x#Em#5*S81VousfsulUcWoqXGN$w9C8Xfooeyy7Y{+-aj1##{$>@^M4ax z5YpYbhGr265~ujn_1h`LL za7qvLl9uyP9Q+Qpyw3NJhI{Q!dA!lpYZ3c=>ao&`EL z*l@#yvB9vl7bBNoQ^C3K>ZpPn9yYmYh%gZe3I1#3}+FW=Gg~#i%5Hk6UP)>{MnQO(lL?b*vpK zob~BjEAm$l!G<~Khw9s>Z-Q?4X6DoU>oo^4x35lveS)}w2IT@wHxYILdWGXXDUC60 z@S6vgq^pQTax6Z9*VX7}YTixRA!xlhle%nq|4x~q$gpj^M1zKSpO!7}l05LK9GF+>`30HBs9LPO1 zljV#;q~=lh=K~Z<4@vTD&-1b8U1^i(82FS>QC?-^_}`73VlKWy_S#rBf5D3iio=ET(lNYh;GpvLdDTzwz<#K+$JT=5&e?Ic^Kki-5~a&xjnHEdP@=a$C^TA0nYq zBPM6O!w$``1g_R)KS2CA8E=piLxCo1v%s2lHWmj8K@bgac9*)sbC3yeygL4rko{{d z?12TH9t>uuI`#&~9QafkgM36vj(2XXLg9GdnfJI~h?wx=9v8cFagGl(T{gGM@Yamw;_;^8BhW4|+>!zt6`>1yKp`GTa?3c=s)#b(q?r_gfW z*#LF?|4zq-scUFn2H-K#$Nq4Uf`0OnMe=%42jEGJbCA|y-9M96`~UI(>;K1OH=@7i XAjM~F_3Gg9a}=5P3hzoJ48Hsy(IP-H delta 41495 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 diff --git a/tdesign-component/example/test/refresh/goldens/pull_down_refresh_page_dark.png b/tdesign-component/example/test/refresh/goldens/pull_down_refresh_page_dark.png index 8aeef970bb5d22b6c9e51443ae220ea9b29b7478..a2c09eb4686849d8ae1d779854a7be22531963f8 100644 GIT binary patch delta 11326 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 delta 38113 zcmXtA2RN2(`+uY;Gb)KtDwQNNdt^40qJ(6RvWcv?m5?M!iWDK0BqX7-Lxrr2%#gkJ z=Ks6j@A!AT-}@a$FVAz|_jO(8`CI2bus|KwxZwdCJ#FGf8VZGC+Uxf>efLr|(e!2N z#hdpk#NQ4>y=Kd+*Vq4%__ICe?w3L?@%KR-m8N|3HG9Lqy?l64du-176`vVj_`RTT z4Uur~iG9K~cP@#YJS%Mf=7sM8-aEFu-y0OE+wv8-y@Nkd9Xr7%<)d&x$2B&uuhpw% zbWCop^%^JZ=Hlmfjw>>_@$ym$w+7u=AD))7k6>KrIGelU;>C-<8yeP8)IzyKo<8L; z`0Acs)l*kj7ZwrW|MlxvBgaDnI{yCtad~+@)kL@J%wRnm@%yVn^ieyd%a_|;G;5wZ zrR?o3$HXmrAma3M>20HvryaLaL= zIB_B^BSV?|*|ByxbGuaC^mWAnj6*Zb#z%D1C~-twoOgqq&$8ruqx}0pTlSmw{d)er zs*2~s$YSC>4skk;5SnNShsR7^%yQG4Tie=9M51AZF8R>efE z&hKG+2uC-!tmcNFKTm!uD=ThnytuebUUptyo};t#Ev+OKJG;Xl^;1;kI5{~PIFD+0 z=2_SCXXoS`i#uCzMXbnN>4uo6YXe=>xf{~ZrL+V0WEB_=Me_vqkOx?qL3 zKFKo`7D-7-SFT(sXmjgebZ{6mT+Ldon&>V|C)~!`<&9od{zUBYkwAy`42>#eEItIoc`;Kj4i~?>f{Fmz+$Wnmfxu`HPKPT9cq2_WXIswnI8E5)zd4KfQl{##5mo z<&uQ2+fu_2Rl!9gZ-0EvZZWZ~JjAk7Y`BOC=m}w6v;`w5+VGMWxx&U%!|(Y}g>_(*K~|Mn9$Dt(DmMlP6D})zVr=(JHub;X>!~ z!W3J16f-4X)z#G%PmGpz%a%luOP5-rSM$FTtBXTyRb}^f_~EWDMKJq^$}etA)=5#) z)7vpS))DGYzr6_GVC1u~uePqP=J)U4L$f|J^%p6=2en`A5)=E~HEjF)%{gqC+CJ?R zorJi!xGK9yNhj0P*tviI%=hlwXR@+5lV#w5A0k&-oyS|O!0on*n0YtX(%je+;?_z| zUyQQ4I;{rZmfzOm3^dfsD=QPzb(++^B?mnW4P(S&V#2~q>PN3t$>E62Q|;G`8FtM* zr1Q=iVLHF)4%+JpoV+&Dy`}?n`sHpr+ zB~}hKywmf0{Fn`gi9s!ag>cB7Vf&h!>t&aal(ea^urN~WD(kc7&rQTQ&RxD7g3mC> z_u=XvO?q#T!^+LgEyNKbNvz7|EscJm$_+Iuy;t}xXiK`sl;y|FOp}Glo@~d?bvJI@ zFg7#uD=k$sx3n~!?ysr+v~Bx#v+~D>wK#*>4&RE6#+FJsc2_7a2exnGrz+qCMPU88Qz}vUipFe*d)kW!b-LZt4%pDYDc@=FY-o(PuYT_hC3_jZUn{w<(-Cgb+YI?5{6 zTjz7b2a9sH+y4G!b$G2AOFS;^DF6Ah`p=)Bz8EhiMn*>WvD~?rb1D0$s(<1a8v2fs zMcgE+KKWvIkw1N{e+iD{to{)>IW9aSZ2J7Ql`-6U*u#gnu*+X8-MU&;b=Ash|LSa3 zerM4Bm6`J$G(*$XMl5aeBV+O-GL& zb-Z@1_^G&!fZ!t84V;{u9{ezWlaf-BzdCc|FhLzJ50Aq7`U_7x!=j^u#cdi2T3R@PEBtZP?%uuo(pNj_ zJiCIAtcx^PS9dq+Z<<}p(W@Fp2{ptnA))bCEoU!Yq-ADirYNeb2X1YUiz)$ggFX}!(X&hF;uT+w2xns1P(w=bq13Oua+;ciW?7*hty6#X z?stZ{9QF0}O`q&IDSvs^=4mOrcI~1}^;JCyxMx}U)W5aWfV_h8Bl*Lw&+))&3k#Oz zP-%Iao0}KqeA}$$;#-*9rW^~fOX6y-yqx5cxjx-;ts~b<0?;Sq<43WBVrVuD4h{}4 zU%q_t=FJtw?!JD4$y#)3z*}FRqqerzceKuRsw5@u3c1tn+`q5p=_ze(Z4E%?D{A%Y z_zVtwVp(r{eMm+iO+w!%EQ{W7uwiOo&6V3gDvF8}TU*=BJ9Y%&>;xZGyT?vNoO<{GZ$Jol9Q)6&u%Wfc<^!|d|&;0p0+#kN=^!>a0W zp1Zxhz3!LmDfKQX?Y1qS7;(!xt5vh}A~pDulP=?razp8_=Q8KcpTCV8bocZ$MJvHU z+A-}|Tea`V5oW9&n+5*h$$i?W=R$k<^XoarOsw1d;-V>btNUD=TjFF-`4j54?sf?@ zX(a;#;@Jfc2UDhPrL+ ziIi<9kHY%CzvU6cmRrAwFo{rk6T z|9;xOs#u=izl&Czfll5yAD~30nChrP(#x0YxwyEhuZY!N@B8=f#ivhf z*cDf7ZEx!&M+knR@_qe!KUzBO)mVsq*OT(ZzsjNG>T^^MX|uzBs8M@~if2+=D2|Pn z-3rUglN;NmK38dJ@M)*6+5h|dw|Z$jxEk@4k0RWh$ z{K9%Vf2Gf(&U^4lO-)UTz{0t?TtkhiWs5UI4mn$Hjow$fdUfE%SWkAnr%T^_iTn=h zOb-5tpIxWk>Lhpe_irTYzoeAZiHy^|Rk5LIX+kf)G&&8`CQ_yLp`{!@dGg__SD7C_ z?vj`19vK-~`8CI-!6_&x$S!KhfX)8mJb&lkzrLlVrN{F3D+JcoYOPuv=6)Q{+e0b&R)g9GW`>}{Z9+QOm-u?TjDF8#XE)7D}M?ZY{AmllHh3v9GXV^=A zc^1okAI!>_DxS-1@9gYEn^i&uxz8m-wlnaiosy1}1htT&M+dd5Yie!+CYVh1R#JR# z-CB1$Ab?j=k{x8~O>%Mud)h^9f1U8kcf);t0 zxr{CQi8Iq4k5x>+j5y9sOcXwoy5@*>gJ(=0i-?Gb+N3p<9BkA(fQdjhB)H+@D=I9c z!ag?gp4s;H?OP$IE|vAPw0jO5*of2c)Y}yBPJ0F{E!lC*?)?mC)Y6J`hr7C2)x`Ik zADsq&C&^R4%^Dey;w&C6AZ}7iI{x*&u+Ui?=!6<2KQuclb3m>yacIWVw)taHqaC%c zS=s$g@CNTZpN#gum6lh~K7bCpKsOH@K3oEAf!fH(2)pZFZ!a%e)}f2^Dkdyu)Wf)s<^=lw|19>mVq&2H*fS;su{{Ayu4(N+PB_WTwIjzID)oz zU@ILUF8&>CqnxGhAoS09;V@%XO=^c-Ai0O1Mn@+qp3u-xad(#lFr$t*39w1*4vBhN zrbtgmmxix_?s0CgZDqbYbbg|Y$AJj#S9lvAzYers^7=44o1no)?18OpY`mhPTWI{q zH2}day~DC+Gbd;8mi=c)xEmNAz6A_K2)I>#%pYh#H^VYSZ0YUCkJGOd4oG0JvcG&u zNJ%;Ubn&xU8Nq~2YFcu4TkQkw6DKy2IC>(34jlQ4g9Gj7Dt#ym2N_M;Bzq=GJ7SN` zZE*K1G@dZCkl;W8Qc_X^i>;}xH5Fd(kvv0VI^2|g{KScyg~p1iswFQ5YaRRqBqbvQ z?RX29pD839%V%7cbA$HN6x4Y}W$&&48I~~LaQeb*!vD%>i$Qt7K-nLsJZjv#jc$)*WVG1 zpBmm@ruXt%GBip~PA>jr*Rq+F_13$00uDG{Ng$DRyBLB4>tyqx*{0<nJhUqfp zz@bCMeX)d~9CoU@iAh|^gBTNg1aEc;rN zKaP9*mJaN@=X4A2qLgs!fP@7q6q_8`Hh@aa=0@9A8f^r_C%8q>*>AO*%PpX`8oRBqgm)k!rB!Nv}@_^5w)E8PYI1B3D3+L|Wl z+Z12$7fDIUBc;&c1+PhJK5kj)H~Kqki#X%0oj#HPzJ=d=nnO?Vk^- z|9uUZA+RiPOrTEkh-<51()o60%Gy-ynu@ct2<~+qHMNO@Lnr~&k)-K>(3)~HTft}S zokD{Gm;x>OFQ&YBQDCZTQFfo}`}gntnNI-28KKER?xXku7=fQ1ehj7Ok>{ZIRcmV{ z4-b#nRDk76)9r1ot*F7eO)V|TDLU6q?p@&*YCXXY>Mq32kd~f)3<}Gmlly+fDmW17 z_W)D%FI|GTEAX?&SqcxC0)n(L)_Ybjbx0SoG-a2ls5bu+ZrH@eCKzX0kuN;%&6|F! zCYkuc&NPOVUR5=7H8f}}aRy88bxSAup4v{2pJYFn=csXBm}=RSar zPh&mK=#?U_p?Q)$|74;T2Xxxg z{wXPTspVCmHKdH0=&0Z|D?mq2pGduqf=2n<^rtym93b1v9l}s!72S?-QMe&QqTCJa zXW&0{D6Vc`aXDQi-iV|4xz9ER6C908mmEGn16$V8)~>0k+096Nohap`HmpiK^~7;` zej^fJiTmT!#nhG!<06yuP@Yd;;Fzv15m%+vu|rdGVu1;}a6h3R={~&YMGT zc||3luA-8^`|FF7;Whc!39WvY&ugoi4(nI?PDct+xpjC;pu26NoK3EGbaJ|>mXN-P z?n;Xy)$b~B`SaG8n3w|x59aiYJcH5&+J5frS>to^-it24AAhF@>bx6fW@k$Qhe`1S zn1Aj|45`6`#X)%)b<2T{HNUi!@b&9Xn}&Bcm54ZBrMLo8v%!|dqaeRxW@ZMWIQzeL z);8(?T2^CWLjxPCQg}=mM4_LL4(1BB{7>trru^;eqlNu2;R&T`aB%S5AVjFRjEuT? z+r{aDJE5Ut*S?_0;ptHUn11~#3vCSRrhoY2xpOzOvn2@tw=QrB3I%2hBq!(<+fWO^ ziXl4CZl&{g@r{yj;3i=rkj^Q)keyPjxR-25?6EBty`UNR5V98YN6^vvufxv-hJ-Lq zd&+fnb^RR}2x@3(i2kH1_K1DdEt_SJnj#dyq~-ijB_JQlU+{TC(sTO2vuDr7`x8P< z(KaMq2e*JJL;vh7ep2Ti~dmwn-_4QZK~5iv)wo)pL4iXGmMm zIQIxHp()#G&*Q_F0{m#1$ubS%7Aa)14w{7wF0%+YxR_aCI5W>MwTzbMhVPfLJkE)U z3EgbR-Ffp}^rTb67j6QKluI;_*arVSINhww6laR!`@cG30{DTdn?2X=1?IW$iWmp9 zWRSPo_z*y8T?WRG9ilW8M}TvmxdpXry%oofAKyrB6FhHs4-ZmE%&@F1A{kLVTabUJ zPoOAsD%k{BSXkzlI@atbJn?`@rvEbLZAeJSbhZLeYk+~hcWyh-4Z7rk0|y=yT?QbK zl$?M3DIY>OWivbb9jGF_Xrs^=Vcm_7kF%fU^qL!0h0ljwN6I@8i_xZEeEr&L{RcwV z)jRuSWH|r)`GXU!3xy1=k7Q)%W~iQ92+DYcXjMUJDGdM)+sJTBmZo&@Mtb^UoL~y+ zctBTQ_MPhh5pGO1D%&4>gEvBMw#lq^2YXu%HnmWS&Y=x2P9}cXsOMKmo*{_)f5$tE zAx;Dq8p90e_AL#?Z#rC<{THqo|KWqyU{CZ_F%AL!k5{T&Qgw)A6NvJ7W*`V8@WUSa z@PSo7f2&oL%Q@)A$~UMb%T5I14kA6iSYLu=0Yp zR4c^T7KQstyK`q_a`3C(2M`GTPbQ*;Nx??FgUtk!h#S2)i%tT3$41i$77A#HZhi~t zK%#SGwR_T2(qLi%r*?IRDm;E1bocIH=4iH4_k(B81mqxS(o!HB?SXT!U63&FH4rQd zK9YCk!W^n6e9G6VdXA21VpAouYJ!kvIuikj(TR3SIj^T|1_=OpS5Bxgu8NU6e)_bk zg~dLcJr+pgfBza|ho0E(D~Fy2_Q5jTKbjIfM+lK1@IQ0Z@?1OQ<{SeiO-)U>YmA>S zvr-eqD@@m?`_EmyLh72Nnhyzdol6z_CPu~*954!n=f?Q4*pc-#G`vDW)$z7C7UW4Y z7l|rSt>FA&E&?G=c5QhId|E3<>H)Dh@LGOov?YsqX?7$$CV#w$9;@|$NgkFjz~Q&| zm%mUbKYsk^9~>+KM?Xtkx@1!yqm}dx5{o1B))z|^ib>~Bwusv{2>~#ks#DxXw*kJ) z_0iTK;536A=M88Nl4z{}BtqAEHAwRk;15#U&5Vqx2WJAsj9POiIPUx~U-vn%y8l;+ zV}9{z96OXS9no{Jtc5KrA`QKA0l`Y42po?;k-+@GX2E05jF+;uN@$=s6T$c%UxVub-^)dMf926sJsp z$+S24MQ_X;zJ_lDKLz&kaZ&5XfPR_!hq-k5`T5VDKTq671>+SIWHK=^fnJ{>J+vSd zr5rP=!7wNDEIK+`jFDCDmD1C)`pWJS%TU?L@4hX+e*P>1z4t?%w{82J*=TW|KSFFS z7q}C$KVSF>&(>J#N{^3Oid}DKmVvi@;Vj+w#nvg+ct#%xJ~LSjUzDd&n2kE zp*Mi)g#YaB>e{?ziyyKg@HmUw+PKh0j-NVJjIwR&RFLgH!OO%YP3q(VaMIC1%0daA zCrn!*;2l4HT+!849PsqP)2G(167SEvE`}#Yp+LwVc;Pt*4MD}$RzT;yK@hHxG;%;x z09Jncw(JtdzAy%8LK&63F)u`te3v=hrAG(5|74+y9L%?%RT zosf_S64VnhK=V)`^%xvlj|)EO?kWi;Hx3ZdOTS~5mV6Jx!<`^Q>s>xDdg66m;T5ry z+MHCo_U+q{pdPA*MZ@-@cL|Mx%54lwSND_c4xjl>+Th)xPpKJGnkC$>uj@)P78nd58_3=bxnQ!1`0s+F;Z$e{q#0Ge^STA zQ-XF35PnQqnfgOU#!~Ai@JPrhED*WiwnDSM9U98a!NHLRAvSo3Nl#A?VhUEW0LnC( z+8_}N5)8nrpp=Cm@+6WWbwYIWu&}T=cQru>OM%bz^y=taeH{kO`?QZotB@X3wcg38%&Bt6vuflfBweexD1u^KCqueh!^zkAMIJZa!3DRkGb@$u78&$NeuA?2tmB zG>D$LpC%TEQjsNKu+9Y-avw^`qELc@f`FJI85a97%in>Ex9h-xH;tYsP^760b_=)B zZe|f-t(#!!>j@efGC;C6rLb0KBLlApSWll3$PpqF%mAtmpQVu(vwn9*8I-w4k$mul zF^}Hq1TE9&i7Sk!c-3GE1^UxBT(3j(>Z{YyB&{cdB|!e)D=NrjQgxdR5B3wqc&t75 z`;Q+3nIUMA2O|7hW@3ok$y~2FUI5dz8KX4|mSJd-wVx=8xX|i0nK^8$goK0(Ux>xJ z*uP_Ap{Q8E9n|FkPjY+!8X-32KF)bKZQbUr7JmIypq{y=yx*lp=TQwlbA2&A!U9F^ zj4D&8{n#kqVppg4{|zvSZjYJM`2?{yIPNLd3^bh#KGcJO_@lx!x3ruyGCC3=AtuJ~ zL!Ko}*IuUewMG;#V~H&a0IsZmv?gz%HyXBuPUmV7{gHyk#<|ChJGO4U4Xc{so1A>8 z+B+`YDst{Veo?=9-h`-W^T8Ga2C&OwFKR+D-TiZS<1&^$-tW4e0 zP+Qv%0gLVsiS{)8*&q93zo9KUjx>u8NN->{XN2qU3g`*jqyDmN|Cwi`W&ku+a$_9y zfh2pBG@C}jtCFwtcL#GqgA z3j~)Ur9Qg3!t8pJC=eYz1`kM;0|nau$@_3=s3ar^3BdOA7cX8)X+g;Z@gO^=q0fSa zimGa-Cb75$eMqc-1tCe=&w+2aJ^ryIEr$}z2_^nlTZOhgywh)q8?Veb1uR5bs3 zhxgoWJUYmL^UyH_2B$9)Z@w;1ma|m>H{7#|@t}d?r8VY-CC4dS^?gsg7ZlJn#)!tNuBZNeYc<>-Hj+6gR0QYW7 zPfySK-HyVa^3z57a(;$}=N5MMjjg4sKbo3!Nf`;p^P!6)$M<8SmZ-7}5ROUI15P;K zu|}*Ik+BVAMEvzr0#Z{`>-AV!&S_%9gR9bh_8JFEXOozS^olxt`n3B(&y&RVH_)j9 z7&!$-S-Hfmx02p{qY=TiZ{NP$_d^hn(0SP`(3)TotHTL}@Ru@(B;{<*2#`I+7v59! zsFkiRJNm8FxyQug#{nn8`ApCZw4yxdUV4nKqzJ9O^Ia$!07G&dZIu$Z^oarPF}k^N z_Lg(``9X-m1IMgTpe8jpy8ia4mJA%1yy!hT=NA=}g6_>u85yuW_qevl=b|{iy zrj73}1GdyMn?Y$ZL*+*pCSL4x?Yq7Wm5Ym>AG5M>O}a#i8M0j|K}_Q4pvhm0cuP$6LK4=?~xdwyY|6I_CP=;)_- zbl2-Xd3p9kToi&S4sZG*|0%#`G>%N3IzxTNaC00;JV; zZ#Q&5Ht1?)Zmv81b;;DmhTf&>EtM~-hBBfL&>;euc}lTSCw|F{f!vasF|jtbwxY1y zbA(7=Oc$DZ{!T8+ssIk;DcUcj(_tmwOaBFu4aFCT`30~bAe@d{A1jN=8^JfL3spn_ zj5lj*ezL=*&qCFdT^i2FYFkCVV(G>RG6@0s`3iWBX?RjTEl$_3m!3M3yLTnK34y{C zrUToy5!*n(Z(&E%ANlJ0>J=Xu(|BDMmykfMet##3bcR^t>hC0N#knfl$iC{n-dd!+9Hr7f#ePsN}z0-fY5TpSh+s<%J`D2JeJr=yoe|QRJPG`hL!$QbbY%H?kaO77E^5>!O`c-jaF~vgfK6H51GBt0J zA70gMkAfydoYepo@fiAmIL-$m#9Eu_U9aSM1o_Q{9;WTGk z6`Vrq5x`P44GnxNo;?8Yi>;r49jcJoBQtXMcS@PMa{1laNFhah>in_Tz4(7etSod( zA+u5jq(^Qb`N39Bo=-GHnd`$3R<-IP4qYU(k84fWvDa_@=P<9{wB-%YOHsq1!DeE` zwlmLt!W6~W_^c~g=Ml>q>TBLhQABVF$E_*7c;KD4 zXV0FLcJ+*pA3w?~WRSFhKor#e>T_f%O3+>GlSa>SPAWXGvqT?7EvGud!@@%9snBSc zt}KvI(32Kx(H-^m{z#M8#|uE@MbC35JFkt6%|tW)b^`^@Jh~Mvg^ZITVhN@OPZrRX z^kiWM%9A2pzS;bG1ZZ)=H`rFjA2i`r7g~EoR54&@aoutVBYW`vQ z)Ln1_Y+^`+eZE;smM!{*hWEifva04tj}Ggd#*b`3Ados4ID6xIR9t+wv@}QlQrj4b zLZJ9jwHdvKG<0Kip)cEKMH(^(@h;C69}7ukF#S)9Lp~#X&59VgOZ?ggwvwI~DPL2N zo!JR-1Zv4G2+O*^CD<9*rJVP|NzGebw0VaJHcTP!(Q?uohpc?O>iM&0)lE$YFT!Aeg##n>QS2R%fngtrh)w)+`Wb6Ru zfDYd8HIvTk-&o_|wHJ~m+a&U~bi;U9XBTdDm^YQ8FEXZK_LsPG} zBGND(0V@VEDV!4~vZ;dAQYc87;G4y5h=$|k`M`~eb8gZoTg8FQ>JZXN+e2}&eRf%X z2LsJlGK)Xt;_Uo6WrUkwnRV1Uv)MWjk|h4Y=*i)qsYdxs@RlMYAuA4$n-T2O^K#W_ z+ZQK56-oiPk^R+6P-Pv5n}ly*uaKSsLRsT~tYQhOHg#L5=7>uv>gT~-LE%8!nB=$Q z;WzZ!i;(rZX-NeI9)!hj=jP^K*c`2}3ljzLU!gmC<{El(Z{HqBqPz|2Mx^6|(IBa7 zy#>X^)N4@o{^#6pH@a~Xq~+=#rEEOf~`u0Lq)iA1GS(5f^fuHxeca5DSEU1R%&9JOQJR^4Y5wn!2P@*LrYr zl7b=FZt&J?@b^Kuwq(TsOVSxDo2pU>1!+7P+Y^JIgT?9u-8#t@k^-=oZmwtMdFZkN z(t`MEq?}cc9lLqHp}N{PtHbA#=PLSxUWxs_I`tHBeghHEMx^?HO26p#jK@oB)F-r@afl8IvodxB_lCkA{=jh@>Jj zN(D6Ij<@aPQ9zyJ<>M>u3jNc8V~Ub6mU$mw6ZRkkq53==&(0EJyU|D8yqp}pMTS*_ zfW56KP)o9m-u-cb0x_^%Nmzm-U%UNhUELOPYmr3b$OQZqXg1`NO0w714xi4p(q%jk zI6x+DprQZAV1YiCQndB;?*cuMOayu(#h2_{WX*PweqKK*B_*XrI9NdSfge7S*~S^@ z4Ugp|^J#dKC=HH~EM#YXYhzF=qd62}^S}a%J~WV;F&~r&P8_{?(AK5P_Clxxx z&Y#~ZEiL`Om=4K>C~b0+UZXj*I1->ZU{6h7Jw&VJ1azP(B1H`(MOsCeMYvUX|*B6*$`Ghad%edP4_?}x~;)i43a5~uo-9;mE14i zN}{6}3E&$mGmTog_`GE5yy)mlvCqk%wH`xIREwRBO);m#S1QUpW^b_OWTFjoMlH>$ zH`yOLDtJu3yl})E-4$r=p=U|1aNrCApO^zq@^av(6eCG661QN`eUnW5i=`C|fY= z%+BQ_{n6E*kC8W|qjjfwfdI@W{GUN_fuMzH0o5ZWh|W2>xTsvbxSdSSKryDYy$+Kw zTNPp2cP&!q{P|X`6;u_aL_&+P|92aChJlq}2XvnU-NrB#sp8#!@?`tymoa(hiI=7g zD`D=BV^S!&F=h!zIv7t&cK)v)n=1@xSV6v{b4S2H;RKQE_TL0z6C&1VTf!cb=8#ax z<0>z2sNV;#m!3lEoPe?}L|s}{Ma3h}kt*3K2CzGt6dfDkN2WM>!mT1c%kH4a-9U!A zInMj;sdf9VYFhq!wkbqy598rM7iki2k@FOw&yaBUdFNFsi}i|rgM90Wk@LlVU<<)-jDj26D-%z*=WC3`Em7eml;L%>OBErG>LZhfc;buIq&% zAY6sW8&?>+%)mixMt1-Jem6FD1C*8&`4jXhr5%+>6p)AKZy_xYT8tdxn;Tt>rWd71 z#}voBHYt6968Y>I0}K{4Ixr~^b^T|Ph#Yj^q~%WQKQ}YXSZ*$ooIclLA|E~=_2~Af zU+-tvA%UM2uiwh~BkwCB!ipFH2}Rx+KKWseylE!8PjFBWQHY1Qy{o5v;vP zVY7g(d0Fs)$VeF+S(2#0y+T+WO?;yDTGfg2`rp6F>;(H!TXxc38XmUA@FBOnynL+) zX$v4F^}=(K0!f~X*9T*$?$SWUvxg7Y5d?v8tj_c@Za>(?WLF|?-@aXd_R_T$-?yfW z@DV~0FRRaB2ms?z5Ik>=n(!plH1+L>LZ%Tmu#(a`XJ==cOwHV@4oC#Wv1e?cXCreB z{qo;O|75&wr2mGK6oH<+J>lcWtw1mIY|F%KyXf1>LoI7-Z`bkfTEB6x3JX`A${3gS zJubr5fVJh@nXc*U-f|Ldlaq7KmJJn8Wx}In!lN`qlENh=nCuI)qmjrEqTx&nIlcYz z)^q!At{z#f)$@E%;F~VmICZ08Qoo^CyUGJj${(-T++cDvW*MWO0T{X?R~BkEDVxK9 zy%QWv|>f z7ef3i+sr$99VKBEgt|ENrs)c_esQZRy8l)yN#|ouv1FR1xw)~E6H9S%@jQ-|z^{Cu zkzhN32v|^TM?1mP$!StV-FGlIyz=w0tx~vtfgtt26LkpwDk)*r1>IqlZC+{bDiq#cNIweXref z=rGc<3@a-uh_CG~@^*G+1tq{~QE_w>f}K%QS4T|{YuoHb(Sh;Td-eZ~j|+J`;a0=h zv?Xk9g~Y}E5sDHM6Z;DvbdM+^peJY|Vq&Y7P$k^CG>{tYS;CGTKP{N5_a^3kx@~bKpYCLWE_>qDv*45w}gx=Q?I*8fnw-ebH-xO7%dn( zdh#Iy1B33y5OUZRP!%ip!uClyNzfCThR843O2+~)is?*5A587-nPj<{mEtzLjkfCP zT)Pt#L={|8G(AlovA_TRk$!6O5`k@`lu+{*bGrYeDmI9R|M=)A7HxB$PyJm^5SdE4 zfB(Lu$K>AS<>l|wf`D6Ocl^*1h{{Vv=|&C^%Rd!%{S~w8EmIWbPel ziEpL~Y{9Cwg?xKiH^Fl~(1IcMzat|d7*6O)-9$&H1i+L>tju02=zoCXCqRKDO#kKj zh!O}uRQwUzC*`VOYw2}72pC{RNgEj0E)-(R^vuk$y{sfVF@jd`cEd{#M_(yS2<=^t zC^0oLHl|=E1rZwM>(`IwEl-}p!(ffGoirgQ60u|dN%5%RE8umrV9(|*p`gXBc zhtgv_6SrV|{rck%Z8&7mED?>~-}3Y4&&``R`#v%B++=%{oV-)To&&c9K)4NxWKwpY z;BxPcvcjC5x_JmnqHxbj?DkPifp)c4{P=Mb?zNh_dU{$K1%5Zw#O~U}Q;)h4MkMp0 zU);u!8mFQNdldBF$+WyC5r(iCOgsRPvMvYKp!Haz$e0+uIGbJ#4GnU`;I6P&sG}=O z5%~&(%{-$|plGvmbJIjus%dI6V^Re{P%Gdd)PIIBT z_YVyffB(Mm&-K1vT%=mu*tmUetRu^_L&(}3&y6>1Bj`2+1$NB8+-{aTfrYPbX$b}f zq5*&U_V@4Kw_-rLp?X>sug$3K7BfRd@n0D7Cb)7(@dV) zOOX}(ddHUM=OqzQ)$x8m6ORFSF?SowLI|JZ?y?mX6)#d#Ls@0Ro;|x47REBZa6?Q& zLc79JmOJ#o7u%yPycM%2KExdb1$TjmK;mFLeqCK%#nY!5p=!c=I>>S3G;x{{nC+$3 zz~}edSXnWXZ*d__Tuh8Sd7x3*9#gMM#M=K+9+&r!2n0}TA8Xk&q-5YCAh}$G69fLE zGCtg%8y#PGgzGpP8=K?Otliz~c9n7Z=g+Udsc1a2*plTy8(WoCU44k3A92k<48brk zGU~PFpXVq1@p#C1I~({~cLH#`!zfOZ3^}_|@a9paHm=WT(yq1r5A}H^9^bQIB zpn-v_Csi=YLXQch!=qWC0VfklCLnpOmtnyRX-PQp2jW7}5SlP(i7M;_9VK`u07^<( z87md+s^yX9TGS@2S+@EAYdA|RF=ozn?dM6 zfoi!fZf;}*9@`YZzcqZ%QDS_>JmZf$9O8p5?<(1$e!qJ4Y8*~uH`4;~X*o04*BB@=WMCmB#vzwik+Q|ezg3?X@iEwEi8yvg~HBxUyX#F}Wgb7G*Yp1Mx zHLq4L62+J6ry|wsBD=|37ol2uDdx z0g+OUP=Qt;2uzEwLtDf_z7%qC6}HTY15r317y&)$r1XxoJn*^%*Z~plvne$wYk7I{ zsLDqUwc_;^!U_tZZPFr$p!AwXX zw!PDZu5RN@OT>7opl-A|u1x2C{XI!+@PPV9%4 ziWk_BlJ~!VFI8_>s+m}aCU*KJ`A2z1d#4u-|eo}wP2986x=J1U@=r$WSZd3&D$73LgHUxXT`(-km zS8rWtnQ>5G6R*}mG2xbVCnu(mlAr|;bIy4-?S;3O1X&A}!DogLT1^biz^ubUVa3Y& z`wxIGlQ;TjyyK{5%T`)^+OGV%bw0P_svU6g1VfR+L-C@Vc zz!w(w!>)s(b7A{9|KI%=-GU?=-fsZ_y^p>IBG2(b`fJf&q)sLh4=cEl^&+zt?3Dp1 zV!lxd7}BsieNZ?CQ^e~aexa=Gl{B%mq(P(KfAWI1_7*ZT0~HY>(%G#AGkLKj?jLX= zLpuNd?M1}ku;sSY{8j0Ne2@x^kf8kIv5;q$)zju_ZuAXi3Mrk58~~&zI$@b1MD6=u zR(X%!!H|8c^xB($bpH$U_rf!-_os#YWBLe_^7=>rIibV=*d^Frb8?Dn8U?(n{{34e zov;JpxqkgR-YT>=HDFU6tFsL`Ym%NG=B&UPbo<|KJ&um##-X6iQPI&EZ^cJ}0|6e` z+1b-PiPLo+I-*aJ-MCb*1-|r-yQ8V;_>PTA%F0MsC~EDdDB`6Nh%k}jds5QDT0;~@ zl&fsA8PbOL%ws6B(X~~}@WzBHa0?vKpAT1oaDgPkc8bZ#$&s&N0&n|cWnxljss<#0 zc@4#nEBGitf`~4HXJTeX6}B{#>=Osx2BB1wxghLbtZVbz+rgOTSz8@jd#Fe~HBEcS z38=+F*%@#c{`j$94vRFNUS1^MgrX2WS9jyZ<-s*_))7UEjNui`%j=7B2?z?lzjCC( zI#b7r4G*)c#n*|#xnoD+a~U^B0yr*tVij6FcC;#@GpMdVMCE@j;e7z7wsQL`9rJhv zx(NMK2);i3b1u-UKpWTW{JuJOXYD#8*O^UBFow@;%$$xv=0tX0i7E zto(Q0=a~=~gioIC^H?fiWo*&p=H`PW^ewdD!z0 zj_>_DwSWaHgWdFBD!;tkrhb6dkXUgA;(J)vyC#C~hX1qQqA)CIZ9a5O5yO;b<%&68 zbN0s*wSt|m9Ky?Mf*_R!TAuz$^Q64QCN(zzXDIOTHZt*8*y*TaP)$RD`vkdde}@YA zrvMJjlf!+prJN3m0&IKu_$(_`ORlbFy8qkuRw>T0T}sRxZ7n-)+j&3oxO5+Co~kBF^(mi>TN zB8bh8I1u!x`y`*ndmCtx+r{h+;vsuke|+$$JaJB*}kF(>KGKM5cvz*;t^^g1^^<-@=N&hi~)7$Mw~Z zljrk3ZeCY$cegAZ@-84FDr=g741PbWdDyK@K$dx|^dTLB4wj0|XZ@{3Ej( zFXwLsk)d}51k&!7R9w{WT}@k-x3I8a-?8HuUJ}Q&Q_>d=PkGno0w_Q6^`7qTyO0b+ zhbO@iCa|Ke-YGHtI$e9}&AWFm|J@E0o+0h8?+)7e(frbfRbSV2;=N&V@Z=EI;)Fj; z+$!%eH8G(gAa<}IzJt+RlC46)K%SCUjwH%J>j(kwjyQSv@c<_S4Wxa8&n`cBFVixH zNO8WB2iP?OE(L{HE&FjY6@?2Y-~aS8 zQ$zO z(?Tg$CSiSY1nIMHeVr^W&!1A$iYzzkYPeY851`aG%g^y@jn#s0!QFUbn=4Vzqj`IQ0X3C zpf&phUq6?>Fb1-k;1e5@=1cT|=j59UPDopC!QH95xk>Dhthh$|r@5KH{t~z}{JhsF zn2}`^Gy&g?3?qrgT3dI5DIll%K|d-f8$xC&<`~G=b|8@-)FetzPmdzt*zI0=^q&>LG)6O5rD}Q9Zra|zLZ%n}6 ze5vyadn}Tg6vbiBV(XAI_W!+>g$@<~`GPuB#wOdNKqiHKQ^GPbOPWs}y!-Isp+={l zpC4BI@L;&0I>MoNQy0RxW;IVBAmYaH!o(t2J>zh4-~v2c_6CwegL-5J{H(-Jut&)> z^K^z!#*6mas57ACLihGzac zN)kF-io9XTV`07CY}f8{fe2u!iA{xU+Y1a->M&1ThLL^q{;4>gw)Wu1-!hMTS=m4_?6qqtCXsNkMVz1WPY0JchwGkY)KW z*-D$lFJGe1i%;T>G?>x-?vb|>*i0FO53U6&=^ac5Y%Vl~P6v{xwd9;x--8D5uA%%{ zWMtZ4(`8-VUALNl{2+e(Uu$Oq)#Kjo{l6(gBqAO%Wu}rTQyG#WGKD13plp$OXi|4Y z(j<{$%TT7Rq*O{OQWA=UB9+PzN|TVG^nQN(IcJ?=opauIz3V({uV?LNJ=Fhy-@oCy zzS9+EqU@h3!X4lkgqu!~`XfeotE9iF6Bim~h2X%zLAsUQG#u~-t_6~u47yO-&}Ci6 z{$W$+iE9kUtrEQ=McC@)CsHpzJL$0P%XzBN*QxPx>Mv{zY!7UmAcazcZRL#PafYGq z@9JgsP zL#v7s>qD)T!6fG2&(-MarKZ~tfV(}l0H<*W`1`-EToHj(0YO2tM=bWrunf_0+P%Qy z`h_O}37d=EA)mPrFTYHU{IQHiNXqXPmZ)+;x1Z+hwwLlMx>Hs9d9ehAv>d%Q?c}q}aoxM)-5?F12i-mAt-uXDbn6~(ghmro8(Z4h*;$CIx$QO= zT^BKO_-}>qh#r;qBo1*L6QxyBl^=+wp;8?YE}Uc^s;lo3^U#VK8PA)BKwG1Yh@urd!upTf5!2GVHJkRlAf%b_0J~@7V60JIO{Ips9(!srz?C zfgB>Ou#tc~<0@FP&UpUG>LGMUb3fkW9_bEx7xAQM0qG9`xA*0|j|#u>+|Z@|L`f;4 z8jsuNsd#9Xn3@`-dD*NtvYff^7Y-=h-x47uxCWHk=5H9+aDG%%ZLP$CAxCDM{`o=B zS8mf~J;#sdfK(l2usp#mKutIYV zHX2wV2D#1Np(KC3uj<2x{^djK!yaiW%!Q3QbIjrLq-AFIWo^3Zyd{Ln-Cb(gHE(<4 z_ie9TU3y*^;|RWmsk6=LoT1JX^6iy<+E6@tyPB$_vFV(*2Q|_w=Z4ijRaqHt7dOU!xnNO#21t`CDV-$3bg z9dJGF+!>orqT8jQX7}MT%vJq{2C>#uDc!@ zI)H{(nC*Z~IX%*l{vA4gTz_94KPvZi&gs9+^T;g~KvsMC?KjN)`n&1Zx&41#v#yhA zPMmmvl_`ojE+epCdt}j2bR>e9FY!SG*$o|tM4)X;&-4KY*Bsg3SbDn^eI`-8YuB&; z5HMA9>gh%6+917QRYpwBXQNUxrqg3vtoyJBx(+#7f+ETZS7zd>h zN4;ZworjZqIUr(AWLagUJewCz0omL1L0#E&EijHwbZNZqv2+|+oik?4pf>2)Q|c)! zBN$u->V{+=UPOd?Q6dQ9LWmo%`x{!mf1UAe#H5TbYsH4?SWLoJMKP~dm9U$-n%jZTTj<)O6$wNuMaM%PV7l8UvEaZ7 z`N=4bI&ssVh1CSuqn#2SYnM77vs4l>r~r*kOIV7EGo5Us)yeJ*} zpy#H&j`USgF^H?7wPCMYSXs5^^a5Q0@Sg!Tq&jdQ2A4TMW*f}<*l*X-u@9f#9w^@c z+Q9J>3h&LGXS68>WD2=5@irxg+PTjW4hDcuh{(GzBY-(Zm%~Ak6*$sJraU5jZ{(Lj zcPNUp^Ct_xU5V7J10Wn}K{%g#yBt0gcD%+l4<23B>0Xvx?$z* zn{+{zuX@xsWqaIz($raHq73~I*Tf+`8~8(77wU5R+R_&2#f9~r@)~$fAe!&qN$((P zGw~MA{mT}EDnNqQB&08-M+ClpMzCh!N)_K9e%XJ_WWnOeUcYhU*IZO%*j_XC3m*7QV#2O z0Q^B=BBhs>p2=uAfXBl15=IqSlU%Pbd-iM^bOopoP-u1#;U6XscRhT!9kSCv`EWA+ zK1H95ks9%iftBimu?cYP_-{)5e$)Av(7!^Db#MMb4h6@M>u67Xg#N5G^$vfi4IVhK z6`Aa+^82vg@%d0e-7>XzOSMp zl?F|Be1)C~cZ}#+`3`WBavy5(S9yEW2I%m8Pj@|n4 za7&QR{tQdEocC)XH(7==QPm7T{Lu2MAd5JP(FNsYj1gs$rJ$?Fg+r77^bJ+8X_2oSNxvYnfWrz4?AGFcobGk3$rA@twS&!@xKgVI( zbD@7D9<`P_07pJKbnR#rkfO)U)lV^DbBKQM^RK3cl1wT?cKNXLBQ3JiI}5o>*1ECp zwkLL8;I;?6gb0{JuLp6;0{+g}vSk$A!-~s}<=lzv=%Sm>Ck%V#1}2s4S+#4IG=A{f z%h21|25+}d0$?ySG{m7F^J&|V?AZIC?X^F>ye6n%B)p3ZqTlGB>-QqbZWPf6;!RU` z30!z&b-&)d=Xu~EzmeIKj+mJOrR?a={WUy+(XDM-3C=&KMn^WR73jn>kV zbDKWhK?=3lbE%=KaE|wNc6(uTZ8jV?dRWgRO;<5GY-J1wY*JUHl$DO!jfACVL)-ByKl87F)5MXO~!4uY$ozt4WD1mF1;-sRy;|B}%FvOiS zw{o+Z|LPqRtZ!xAzrQl?H^s*tQvW21f8zA^0zCS78_;Q$*4e*pz^0%#W(={Z=t1!6 zltNnnZTtdr!4xm}FVVoBZf^WTHXT$NNb0@=7*UI})5nhbVoRQ0H|mDUo2Q7l!;lTH zEnJdQo72)-QsQ~ZUbI6@I@jsAt>18I`0zm!ejrM-ZpL){rJ-S|f!RiDu4a6}*D{{{ z!u6X9S3b-u{?tyVD+wjUX_Al8fg_#DD{SAfbu(%C$p2_96AZziqz{g#x1=Cs@iv;m zhovo`!d9>TlOSk$_nSPd96a-NQ%OVMX;x$I+c}|uww~Wg#C$0i;vMlM zd9d#-Qsnj5EtT8r2Ad^dC6RqY#D?I6#nc5<5gB|d{ko7thh)f_R1J_YD8L!;;Mfl$ zbBh~~=0RxnvNiazb6jqL&by9wu78rIZZJeTGDuf68-DPq*OQWt+#bZAM@vK1Pth`M z{)IyLx!zP-6pODgEFI2|4#5jjd!(A1-5yYy2$sSpHJ%IW53JN9@VAjsh!sz~Pb!dB3Y?PqKZ z>m}-=;|1+%F!(jQ`=zYu%=>*1e>zELMPUt&@IL0tbhAYc0g&B!>w%hDpMMyozZnr< zU0LZvWBMQ-Pl+VtULBs95$lB1TTG~7*2b)|-oPF_YtaD!w+7CLXz_jPzlsT7?t|06 zq?cDx(iz;3;Nvb$8;vOC!n@-pma?aYCLQD9leltZ!#F z0cA7D#hqhWNdER1i0?|ty4cjzx2|s66ALkai4P-U$M6&hj7)FLv4O!^R1R*K-Pkv8 z@G=40wm2>2WI`t9hHF(gYEJetczP3^SSQ>2%_SukKV=5McdS2?ZtpdQ4V%td8~$y{ ziWQzfDG}?u^APd5qr_9Sb#!#R+@ay0k3C;xQk~8*8|}Mo;OQ;bjFoCDhdo;asB?h@92n{|p zgLmv+Kl^FV-N!3+^h{rw?;C9*>~!o?Nf0gR>3c0J9QhG^fmxrLvbrBDtFsreEl6U? zKh#(IX;`MPcDn20VXYyMLCGknfUiXMyd^t?MhsC(?6C#LmGWMC?%=maVjhw^sXP6| zobShMt2KYF77zdrsuWc_wd+WQ4*+WjE;2ex_|&LwxBJ^_{qoAV(ad?nW`L9v6y3Rn z7cdEl!2I%Z5k$iE_@*-ImdHx=8mU8WB?|}MyOvOl{)n@<3H9W|uUwgJW%btkq(#@( zA{}ePH6q<-Abi6*!Lc*UVpV0zE9iJN6<>Dt3+dX%9yifo`vgC+nt(oS76cL(7ymin zU_M@yDX?*YTI)1>DqlDPwcTt}gMHC#X@KI=Tze%@2dr!Z<)1)e6LynQ{xh-sg0xuK#{(i*tY79N zfl{Hc`1=tpX26)7PloEYCa_oZYY8_r%Fg;vP2&{z1(!3t{UA3tK<&`REn7SC3-UpzFQYZ1IDAS|-CE%ebtTA^vjrCyJ=@%8y@B1PN*0VhWK=RP$19TgN_!!iMH&7g6>ZgKNx#mEQpHKnC8?f?X# zqT>FjBm=tJn_(#;OieYOhb`sJiNHt}`}S-+nPU18o!VL9-Wq6@^Yyax8NUCFlM53* zeVImMgPc@AobDVjOtB#WM$T; zckh|3R_f9NPi=8#K&#S;SpB)#kDc#rGYD88FAS}*W(T9C-O`TOE>f!eXt!gJv}X_1 zu$bwzsW85b`UJX6WX?YRjT982uDmR8q!1@3Qpnk;Dd*6FA`Te6_MpGN z2vZcv9z+4J*tHO50{rOqqelmi<+W_pO7QB~nFwSNXOTk;GQB`#a5{z=S* zV7`@rtvJBvEik4;=K8_KH2~vn2M_nIlX`UP)|!CJe*I2+{#lBEM?HTx?dugAXVKkp zXe;*UG3S*$xDNm&(M+y1%2bi0WL@7?sSI1<3%6vxb*mx}>Rxrpm;h7DL|1?^U7es;!8KO5>H%cgKE@rodhrrXwr`>Vw&H7|h|D z!VQ3gmO2^+n#l~aTAxhRY1WS)+BdYs zVrL`vAu(2gQV?Mp7@mrl;!BE{bgt*eFJE@JX5zSRzWX^!guOf!K zpNonjPe{<093HID#meV7xZe;1;EGn52nO)@t1GskDW{pFuX5woqZ2ktmYS(V_Ixk% z43zRio)03=AGx7Y2!PFsQ#XO1~F0rd!Eo(9R7KW`VKZn=6mxbIL=U` zyh<+{K^i95+UGF%>39n)*u(u=Bor z($2g((A>RTvozv9?H&y+KE;ZwtY`qLCZj(ccP!6BRE;A? zGW_u_!VoX&W^$B?;ciC(EFuS=ZTLD+#|$M8Zwq({(84Iv=G3Ge`wbhNq~VZ%5LGL; z1stEW;o6@s!XB>pjg3e2zqISX=`H*-XVSr~ad_8VP#M&E0y{=VEeiEdMInsI5s`T4 zRmkYu2fa!o(uD*%x*^C67z!~&kYYse!kEEOGGinKF*^`q+{^O2^k8HZiw~_;X^&gq z+q~NXKtLNS5Y^w<=Ua`u98SyS!88MY9mo2N);r;+`GD%JcLOW3JwBT+T-T)mfGV-(dub@fj4Y>1m9 z9u!-o#f5jC?UeAb`GRE*#SNYEnThbi7v_G)kkO6Kai&~3&^J+6-V^&uJ(QJ))qP4y zNkNZ8MB>+&2B3z0D9xW-Sad_@d0`FE|Dk#3L5Rg%7Iodm%_TSexJ8b%vE=>+X7O*_ z!w@m$ODb9|pQ@g_hD~Mo$lVt&ToCkGSbKE$12D|IUAxlMRByoozYN{}J2n^J@W8QR z`zrbPIVlbr1S5qItQ>C-0y={SgF1cC&IZ6NWH1-iY*lDt7G8`s-j>4TiauGhV_@Z| z&D@E=iO4hj>2k^3-^w_$2KJDDI z<9_RUvuSFhwD>ih9^QrOONos=@>YG#1EIw+9NJ3~^3u$#{q5}_QWH%VR?J7LrOVeE z_suW7(>zMMnXzO1Lsrcmanx``(=lP-tgVgC>vo>K)!VS$F^Z1;cPIN_PQ-qTxYwtO zCK0OAs99^ul==Vso|*UdTYDJ5I@;TR_x?o{zOvh=GgLXD1@>CmQu$`$iij=XSiM(K zVut9AyJhpUcj7y&H!A%j@=hE^UpM!7phj`)Q_@`dBpud({({xU}{hpq{z;z|aHHB&_RZ5kKDXjn{ zLjPqFAj6^M%Hp7aFS@>MZ$~*nB8>BYG;pJESJ0CR){OfA@q$do<I!cjk zDh@U%CKfa^ByBX8`I*Nk{| zDlo7$6BEG8_yn!EFZiwSC>PHD{YbPFZ%h|&6Xoy8&%r$X|AOlHf7Av~YgnKr&0$K1 z$S|dQ#-=P-FPt)m&&rA6Aj0W{4RI44jK%6cop(ySFiDHzHFclk4c5RH^@*H7Xr}m&7`f$!MBT zNz$E}ll$POzV7~iB2o^``h%x0Jf$HadplA=zZ$UN1341FRdF~Llu5CP47kR@gHGr63Ojg5PmPr(Xl z#nnQEEs`QR3ArSLK9MS_*r$&l9S~2Of7ob*$Dv$BUGSQ?BBQ7`sI%ZVQQ{$|r0!Hu zQTStd&fT)DlwJ3>P!(eClMl5%XcXZ=M+FafkW>yD@%|D~MjW5CNl*!UBO|NA<%08S zzdkox>XP+8axeO_%>Tr_v~B6;s=`M-6ci)}y9urNz=6{pJ(Ul4B;%1tii9GPqXZT~ z8c1Amf=Z)tAA=5>K_s zP=$cGaTWC&$Mq7`n^<|K8fIU&u_nG#FB_#ar`ul^vd;ly$0|`g0VB3Poim5?0QtYdZ$xS`&kEpGM3|fc%Ch9X8lsqSv$Vf(W1+5o- zIr`JT=XUhBzrO4Vh{>7XeNHp2J*rXE^m0@&V37Q6PA&wBqU#1w&fnE^UfAR%nu{1e zkoWsmuOky)#k{x$1xn(cnEE3!FPUn{lM?<}KSK2Go6XG7ln51bFU zRwsZfLSI~CZt1CtqL=GNDDaAINvA(I5L+j;z@XAdZVpiW_nhX&MG;lhf4)>DI}5%! zhBOU@USe&N0JSFqM7?93S% zz%wYaRiOZRy`OFe^jYk}@DU-OVsy-2J=NQiD08toDysh`)J6=ycy|o38c0KweV@Mm zq6t_Mue0ISl!+6KhXsSt!deFI5KS^M9_i>x`-ayZudXMv$LbIgbeVro0lx9)(e%C%5dpM!{!M4S9qrWc#z=$so)Q`3576Os-o9394A}qXeE0AGLl;X z!qP%UGyR?MJjqw$+sc4gY2cQ~86GMBO)RqEw_?JK5ZDbXMAmu`?T2hSAU5gz%Xi!} z#GnM`QY+4S>f_fngdVi;b?`FqD#x@y#G+1&wzlWiKXgoSnf35HA78MiC?~k(kVbC|Saw-TP7WEP>hdLb&c8@*H~={r zNyQWyoXJct5S1_4J-!0Cr7iBPLH0Ps(_3wBFqtb4T=iM@aOAvXkx%{gX)IY4LN>s) zD)cjukIWn+3to3zLRDb`{gR()4c|!KT;&})5mz_Kt%Y~~G9D#>H!%{n%XN2NL-26u z+n9p9rG|#lHcyA7df#2lF@PC*eET!!1#rsgcj1_htn^>VsmITs&ndX_^kZ#ONt1$R z{N8I}m08&F(6Vj$x;EzSk?LtE1-at6ng}=Q$W0t^Wk3il7J>o^_>0Zm#mN~MgJy-( zQT#G442r!g^AvA?KZrN&?2Q|L+A8^En8&Ud)s@QuAGpv@0JV?RKW`Y;23tnhzLn{5 zHIBv`Z?zKIl;7l!w3G=^FLEH%=_})UAGu$o_%wJD8E|@c0h0l3KLs>Nqej-THF3ne zD|gWD%iT+F6br)5(-zxN*Q6L8l7qI(Spa08^FN_~xW?@l0!WM8(U zj8P*4tviU&um{VQa4&vT0PPI+ok2xJJH^sRz>3laF-b=$WzC}8W#rW% zW7tp^f^dV(<(cD~oFHhQzv+l|fcKWm}e z_91SvvK0MqQuGejGk?`2l)SggTQ}6=#I<^>s%yWUqI^4oBekl(TNKIElVKf4@5gb@ zfldjy`&a#k+=0MpBEnuE=cYdm*v_AZEMZ`FwBy$e!D~9tU)&e|iMly#?eg=6GZ2e| zHNX<>Hoh0F67;hAAZ6%`OUquKoFqXa$(OXvuKZdE(w$C>R*&Kp=-L2@gg{CLtma8G zD)O%p$ot&p-8xF;FJVZ%7-u{GNu^nqJtGuvI3ObvC|xqE*Y5`}#g*JlA3d z(IA0C=lyVXGX*D9!P z`5&mAKkb)77929^v2_w5D12lwwp`os%iNu_83eY)oLS#^gwk=lj`*2uF)8Sk)a;zp z;1W>v9CnPB0w$OP>_)8SFGord-2M}<;hZ*0$DnU{55{(y%N zliEY3I=}p=w`0y6&&NiCAg@iab3{qOk`j$-s4QNaM-(fg9d zABcnl+vn?kKITDp_%ngV7!09tp9y3Qu-lf&k}xP@wg)9kPSNq$uW4yI5-~RXVS*;g z-TnFy?TF8a1b{L|jf%;PWJtl!c_0oFB0*{iP?9vonSeMj1d9o`D=V`IeV(%I&1`L# z#-1Xb9J~z!ir%|L@qC@paPXLvfTPMpjv-7E^DElN7N}Kh3STw?gWp;aq5?3@^SA%} zwmtN+Fcp?LK$pwP7hGqLbDdb?*+@+`r;j?LX=)v*m%HH_0w|}7!}l2VleO7J*c^c* zkYp+AtRdi#Vz@)>S9(Mm#;p^z--W{^(a)BZ04aaeEMf`HT3emp*OtytCY?!0=)vNR z&Q3Qj6eFCOHI#;uNeog3#-o(>epOh|In&4XmYDlQ^TaE;&hX5vKh#O8w)^N1o!vHZ z^0QW1{)fMgy>=8M07xS2f6^w903rp_w7bg);vOZegDqriNddMvI!Z|Lf;m>eXHi5fZ+CU~O9dh)Je@A=FPzXopPalQT0b{NeA^Gg*ye(m8s5|YDL z7~(to?EINyXlUejf4B9NI~`waaa=RL&yKbPj86`2{E2-OH@kiL)=}&p?nhyvqwVU0 z;tAi~mk<)TY24Vjp$K{?2PKCKwmmjM)7?`gDms1?b{8a)wbN1jv{3W2#n}dX zjfw(_1gZR-o!&vmq+_JwDujNCxpHOUi(q0%$}kGLAu|5eps{QB9v5T!3(Mx;P0(k? zPg-!O4*4@AE~w8-g_8yg7kZD_K`a5nACH`DtkNqT$B<*I@fXNRpPLPgW~tIJJ`oiY z^ZC-ZvRMgcz_rwU`zj7zD0XM4U4oc5JxZ!HNsnHZYn)kRG3l$_Ii!XbH3V~Z=TtX) z;&OY8*}K1XPXS)##233R{dsY+gA&O{v&mN=7j{%q6>b&RcM}Vf9qQdrCZ4AV)&+@L zczSBnv#OiNz**PgNgz)YWtAoF zPr@c}Wp$D!d;!{?0U8<$Uue-kpoF1?;1z?CiH^^8@IB}Yaoe&L5fh7Xw3M8J6#*@- z8lut!hRhYnmf-ee7q(0B7xgE>HL&v{;HI)Y$y=&gl9th5(`EhDUKX=rsrv^Mu?0}6 z2}X`E%oah0IwLol^Gm3G4}=e4k|Ms8kF~MepJiQ_nr}XyxpT*ky>Q$(6%pIM-|oRQ zvpEof;=V^bBUHXUT0SE0@Q^iP29>F4a_NpW zvwx9Xbmrp4%(CHjm|n7WRcC#~IU*LLb3bT6TvF~7winMIMeCim_~O~E35O-%#D4uU zL6lm|-s}2_R?XdSk-rIeFPT zIyFF_huR6dPp(#Fn~rb<_Kn}K{x#VevJVteoD^_f9?=O#9mKJGH5qHS1zg?>1O(aZ zq}a!;<}F$ze3Jqe#|UV_Z9^X%SUb6LPyv+-tl1#PMU{F%xE34_v5$d^6w=ot6&0En zOoZrxD8^kKjvR~cKH`|&PkZJdwaF|L7v%Eg9;nxoyrSPJGdK=M7oUI?l#ZcV#6qXaW(SB%cyQn-f$L+ofixUtpb#7wNS^AZ+^@d9d-bYCi!*SF zG^Nm@^E8yEoKDNsty50j&c{hBh-&~hP6p4a!=yNp-8wO)^#0M^3ERh&Z=QcPmmjm> z%PEjw_!Nf<`MYcOzwcEIQR9<8uO!9kdG%E~R;0t0O+UZlr}7{^lGP4@SW#=qXd)l> z1f#rAa{WW%?xp^Kd6@w@B7&kwKk|i7W~H@NP+?+s8(aqrQ1&FsDAd!oJHB!L4Z2oD zY3PSkeK!a0q-(;B@5bT^nYgVb>I5;E8i|S+5c`#`mXy>Rtu22|%iJc4H_I6) z6z7a&+x(eyz<%pu3(D%Qc00Jg@0y*z`p|~L3MnZu7Ne)4tbSZOU>l)e*`NlygHPoo?5;B5x(d;8GO}L- ztRXrw5~k(bW?&)`oGLXm|3A%$_x|Ktpa z={t5M&YqMUA~xy8hxozLih~#efhebcuugnnHKx5%=SX&n0PmznqLfEMRS2B1D%ywJC~7_ zn`Gq)KDq06Iuw~j>TmxM+pG%9M*#3>6FE$UIOZJSxtq7-phkG#4? z3l<2iVOhp>3RLoQ0!|wm!t0f2TvXk_U?q5tyPCA>re&2(jA2WA7qS%Ew zBiErVUrJ-S+VO|$#2xFRcDe_1PF1zN<#nYl`iki%56pG%S*@qn zRk|bo#F=2_Y78z4TU-|D>E&!*d1bK@ zrr0I*#^smr^`2B(6O*%6ZrBhW{bT_+22vwLy52!SL4!v>3#E}wdX*^Ax^ln;$EE4;GpZBS z58)~CMq>cprwY;qzlLw#|HC9PTMB=#g#P>g`#<}?_(%I9 zwjJfv@4x|R{c#5n`{0z$dU|o$6V+z^$B*~F_$&X*<$q_@-y7ur>r3BjmD-&0>12P^ cuyD(fv0)i+aA|Rro!b3=R38*OD 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%0A$ekChr1Vf|Lw2(?3tH@X`hkmRKP=2RqnM6)cPaA zV8K|0#N_8-7aR0BBq6aB56n%*CU&2IGfQ;D&?D8jl7AMl>X!GYF=H;2y~&J^@6PM@ z4fo3?kHHl(4RIx7K-s6^nee&G2(to4 zW<;?3^fLv2yLC*~{j(Y3N&GgdB=H3R*10{)5ZZXhrG{Vo1myPZzKc(etmcAP^PVYQ zITuH=>?ZG&F&R-vp*l!^&mJP*g>kYIh3|xJHR(m@#KSFzy~s_J9Nh_%=pd)X6xy}? z{2q!!1wFqwLe4J$nAX3!8GhVRZ!QF#lZ&I{i1D33g4iq~4m#z8*RN9hF=w(~78m!W z3aKhe;d*Cgxn@7UeXI911xw=E2z@%}0?tl@_4N7)k1+sH zT+R%|&JT_OLATsz9SI*cKcrj<4Z!^YFOaRY0kk-`=t5ii?0@2`P?f+V5U!sApbOD# zRU^V51m-tBj3$n7h;0{3edrp=NjG3jQa?)dJ^ z@XHQDw<;bEV3Zb1b$bldXLVX-)wRC<7eX7yPFLMOMg5T2Ys>`+)wF9Xb387tEA5Uu z--eefMhkbBnJrwn4HkcQR>m-I4Y!RMnZ@R^nNq8y4|omVdV9q5jeq)fys8#o_)bXs z6J9-k@G+A&f8+;y3HmtGVo&9xU;rslPhlL?txGEjmiw zL<|sq<)z(s+9?UTs>ElG_FiIgLId@3eJEa0~A9$>S2HwD@&2&HtHh-1h0p?Sh%yc|U5?(q(Z*AAym zfa6c`YDy^Y=cOkaokq*UYCT&b=Ivi)%xYQqajiqkF`IPFLHWJ285T1HUg?(*PZZ*V1ko-7hYSC>D4rf!_jl#!2F2~r>_sdCzI(Bp^`+xV#F{K zcrCsH-O;Bohw^$SgVAE;Iv5QP+ULmW-=5Sp!z^!slYN?Sk5$2P!)F>zHHY_+ff687 z*)cOL%|ON|*kKs}#`Ggr_V&XF(RdQ<(RO?yW20C>*PrN6pei$k;zmRU&T-Q@b8A|7Mi~lT09^%QiWQ|Y8H}DJ=%YowGRTWZ7d<` z*RP+j3WcDko9J~XwNr-m!4%tmUZD zAh4d^>f!UT)aZs@Ued&ee>$={09zynCnp9@m!H=z$65gA=0)D`-TgO6;Vdv);{D~% z1bK&98Z05pTAz<+5w(vKXFuVwvGiw;WHK0;JON+_^)AXC<;)*N=htzJf1j|SJtNB1{?!YMrDi1?K()p(dI~wQu z&{Lq~?V4)6mmDY-v_l{A_T0bKt0*R#N|CN3@2Udf0P_Xx-FpiwzHE(7TZD3?xdo{7 zHSi$9fh-{HA4l403-FeaMvuFq&cj~6%Z3W(vZj!}{|esZ>MGJ;i0j85>`@ZMZgg}z zN)Fl{(x#X@b>gzSPjDl^Qa~BvhM*QK(b}$mW1_l$U26-plPuSQ;Jb{z`&pXX`9W3o z?{1AbSfz_d0G1y7UXH5#YLUUKy7+sgXm}QBZ+?0*refdy`}eU?5`#XrHkcU_blkV< zqZ4(!z;xwc&ITY2spMkK&`Erp(8*rO#hX}B8XGIcrmxIjP$!yA=i{e;TfI=H9Oc1H z2wm|80kD=dcRSbctzkKDn2%e5sov}E&zOqH5sovY`=3~o1q22vKXkL~Hglcy^V=99 z9fJfxENEGhz|uFYca505V2V!IMFHY3!z`O}SvUv3mx`0vbdZRa6^Yey-XsPkS#T8d z7ccHY%okfyX-$O0kWr+bcrQ~TL5gO-nw_%v@J;3t#Fl8qCGKq~D22V3aMMMLRrtg8Xq}CoEbSTxNVJ2ez(UOc-qRl^$Uue@pxJoJif%{r-9TBc2KAx~gha z*;Zv4rbg6K!srewQ04gk_NOc4UTR}a>46J}2`ge)R9Kv2#fHU#gR^s=^aTajAX6wI zS=4YzwT!<-2pC!S7wo9=9+`T)GcEtz*1x84T!%9-;s_)q;p+h%e(A@g0a$5*-mThp zAOCC!3yLYQ~Qr=WoXFF)A>ghdyZ{MzMTf{8&c-qO5 zjI0M-8@3?!@v`mn*vFYr)N**@RZEL`Z%W!+$3C7a{T7WgwXxQq<*iVqf@ixY9WxjR zx(J6Px91kK3)ea5q9nkfc*(=*Uq*JEoKm|{Pw212klM!+ZCu5UHU$L+AM#)RiG+c^ zbsx`D1;rH?3&{FSc&d!%$~(P)r{NX{Q9^O{#xvgjw1gRaE!H$*ZRWhbjCdO~V~7Of z;A^Cs#fU^AT2W>!+5kfRHR39IZlTwp5Ia7isNm6~wi|6qfMtXSX4R!OpHtn^y%KGe zI*PeJ&vO>)s;^Wa+*@eERL#zT>7UHVzBRRuatHaeb6Ap)0d1HikD{_QF#uAt0 zC&k!zE|>0~_wtM$?SJ(r<5LI)JJXXUj@(UF-LN&f`P&E1Ql0jpc~+S|8N~;e@znOM z)|^dT2KYjJ?S3~RJY0C})6(33|3<8<6wPz!`1Mi67spf`V~%teW5jE(FYyF^-*@$@ zUi#-pvww|hDiveM#O8<6yNwixz9+6IjHqKda7m9tu0HPobi$ZP@{Bhv*Y}2 z6YpLW@e*(cfFir9>Y?_E06Qfx`%Wkjg6>vX@6*oFOu_k`3X_%a`$!GIZv#kB;zCi{ z3!uJq+E}Or7;X~=E$GetJIG3X)?H5EA%nY@lbq<%}B!;4Vw=uKTlmo7`!$@_j^{5?4Z;OPlgRt36dUMBG<2AlSuQ$!8{o;8< z-@6|Yz{^+jKuW~MM8cmcZq_VRl*BR+$Q}SSUjP~{U0vA?N0}$Xy@d+>Holsq_&|7w zES!a5+nJ*w$zK^HmD*6fyWE&FeR?Ne2iJ0ILX4GAM@;f)ys>t74RPByece2o2n~mK zlU`1e22?4s1O)0L!fAuc^GkU(>+9OBE|F5!i?hj_%d`2^EvKAH2Z_nGo4>hG&5PQ4 z+_*(CknOTH`PJn3H8tywFk5cB!f$ox zA^?XbqjQLNg>jG0pY@e_3PJ$IAMp0=+v|`K7ce+ac*rWy<4vW~d3H!e5(D0J) z#K2TLeWTjdWCzH~oc=E9ZAhH}O0UpaiuTXdb=+UB8xS(CUw@(e6Q{xYgD#g}TyppN zL7-ej7(bXO72M)*ILslP1j1%ay}H*<2_~THn*7P%8Ne-b{Pfe~;4$=BN`IzY+QSOaLJu#*{^60kJ^P~OJ(!9<~ z)AnEOv3eZZazUeugJ@>9m2#L0o{*NkRv`vDo%2{yxRq26*L)^EUN}cxU|tVDHL>JT z5Jv)=K|_7%$`!#0E9q}eDbF+BmL(Hw-qqiZvz_e~_2FGP(>MErgL8`Fa&mIAG`k7t zOM(Nn1DA)9@~M`EYVAJj{EtG9>sZLSdwJ#X6mU!vR+mEAN!bc+*$W!pI@tRB(@%S2 zXfo(|K{UjaE|u33pYJQN%GsbhgBeS7S8ed4roLghH8pdk@-#>(CPD6X+;(tj$?2+a|q6XQWOfp)j?b?J@_b-lAJZl=++B!Q+nz6&sa>U@l?SPq>0lneZMIq5P ztL^T>PRAV&?#9JN$GIfe3G4gqWF8pc(((oEgd;A^5#(;?okss4X37)$aEp3t)e;;< zvvu52YfGwZc0qyM-x3vk?Uyrf%IGgr)RN8BjgeyuNe=!<17u%@PcSs?u^njV(o?52 z*LCa4TU-c+)*l{$;Zj9{2MK#?mveQDE~lsjL(VaS`)17&fVf=dPtlt;AiWfJ5FvlT zF|`*{qN7$;*Vc|0f12{`cL`T~Dl*%}qPO-<^(C0F(euU##qEZ6oAhQeQnUP=#+(V7 z=2eQsO{SUap3~=4RxcgXlxRU%5N=DqKGf9g0#uC1D7c)QESj~+b!7*5QG?Xgy9&WD z|HLEz7;UQ^S6U1Vp_1;9X)xR4qrm^Co`1TW6PR8Fe|du|AX0n(C2KIuB!41d3iDR~ z-Fx%M%$N-WIoHMSWK0Djz*R-}kJRkMQ}3BWrb{kT64KiM0{ndV`8gp)n{q;$~C{j^a6L(=$+bdWsmPf6~BO< z8Rxe3G&BnM*WYw-Gwdv<(zVX7r>bGEk}fJne#27~39&9N3y!Gs*4_^XWaFauHY<1}d!_F$3+sT`?Yu63~4fM4rft}Y6P{KYa z!r=McyRtyu*(kL;zS8Wh;GUjdYGMM-I2HCSfcTCz{8yEV zE>rBco1ZNT*emT#9xr=r0ts5=x<&1(0q2X>{J{gwmFXW8-pqeOIX*I>jDj1po%`2n zFR*(Xxz=Z$-iDp~PH87!!ayoDx5N63EZZpnkjxc(-0kZxYW5$W{k?ct8T~IQuIS&b z#=1+o{#D|bj9^?yDEX6uIe^^}V$pW9hQ)hH|S|9))#(+^1h&p+|s{lJQT zfz=)Z+o|{kwNbNMeAv6R)6~u?D{Rdy{r{_RqTyvWDT}5My!fUIl zsyr?or>0olKii+bZR^8J$46bga(8dvdYMt&uK<5DfBApomoG}}$fsB?T)1#vJ@?s{ zFPA1JCqHFoieCs12@Wo+xmZH^#b?ja2ji(Z%fsPXZsSwCwr?#>lU#Im9G=GC*1qJ> z9c@pGm2uM7KP4M>{&IZNOa-k1H9dV@*8TR5be(Nt>+>xZZCbdCTza=#8BYTO_At7y zaaa_ujL@46dF~a}?#eWtA8!w8ZdRl^#(&ApO_XHV5Oa!^)i>^{FQ?_eC6cL`*%3~? zZ}j6KxcMGqH!dp&OH1v#NS@{8W#TtIK5%YIS}5gCn!&ecC%AcdJ~>QlGCUaAqWn?a zKQZwXDLFZrSrHa9e_a&c9OLF+#!*{A()sh}N&M~`g)d4nGhf_JQU0V` zMRmq(V{N6V?_#M%P(VPPMX$F|+4sNAF?-hLX z=uwx*9W5<|d-qO0IdpMkqBG-_pxrJlEiL2VAHk0vZIui>=8tRPv*_D?TvRm1%WJ!^ zu&||-mChHBEiYcYV0V~O=QZtU92!4pTc>egsjVyqmx*`eq|vd3!SNT(>cY6x-MdF{ zi;_`ug3(mx&Yin*{Qi@$#9HMg`l{`6CT-fKWD>N!j8c= z<0a#oj1mr*-mi}pYj`UkCD;7O(=$TURggPPFZ7yz)bv0`gJ=z&rF?Vo#_E02<0nr9 zoEOi3`t(V?*d+qDZ2jlQ8T-ku*7*Ae=ARa@Oik|mxBFt@rOTH~>5Uuk3M1*?R(4*M zot>Rc|NQwRH}`yCrh5UdAj7bMf%MB-puWD|%g5)lN$c4dmsuHWYip;})Se!7+=Gu| za>duL-ZL|nn(pg%*c8=YpB!>djqcW|3Z(z>s+FCcM10fn@R|sA zovq&9-fNQbL zB&!Nm`r2>z4c40Qi%IX^`LV{je6GpgUR16@vsAz~K?)2EB)t-H_}DvF6~tK8&=7=o z^K)oO;K9u6>Xmj)=K$I83!mt#7S(>Zn;~bgvALkN`Sm%IluCv{Kqlw?ptg1s0|QAHmqHoU@tMKE zKLXajD2Sze^X5&{?(6`RRs8bl(P{NY4hQufwcY<(Q|?UXrf+-KYGM=$jMg;7%#W73LOcfFS4 z>S`luo7^k@=N=xUo}QkB+hyf@#pDzf_bo0iq8dKO?!)H`*!|g0yf&MW+Q9(6zGq=W z7A5PvadC0NYcu6~`udkMs%7Gv*j-m`Mc3zVp~&Uhj_rH?{5dXhc5ZG37gM1ASqp3R z<;%nB>goxZV(ViH6;)O7ttQFu-VI>O{H){ae^Gl=l8RAOPF0mINNj_@y1H7=&`{UR zETE`JWV|hPC`3V2XRyp$E>@IYNJ!|q8eRrvbM2V z8I2E;Gbq~S{b*sleQ11qcU?$i$;LujbJ6HdPqICKY)8yrt)!`DJ;uTg4h~MRabF+T z%Cj2}liA*ZQb074w8GiPG9nKjKAenX93LMSnv6wBG%zs0mOEl-Xz1eNVrgfm-~Lg9 zpPzqz#$-oPsYXy3$Kk1Zu3OeCn;NQic6Ppw#N)t)&dkgV;0Bp_d9&qX8btq11TJQ< z9*)+D*0^P1weaV5ZC%|F0c&QG&F^~szdyeorX}s~Gbh{5^Tqhf=3H_*BWCxd)4#hARV}d!^;%CamsCNlC4(ugf>TijGd~ zmzGt$b;~~>;1n-!7;2B(@*w#=UEKoHr3Uv6u73ATk;|7a3(tOIa#{OZg`GugzQ5~B z{krDnfhj5HeD^Y%&$T-x9v`KjTCOd6{o3Pqth;7pk+ZY&-0FB*|KCn$^eJU!<=}0p zBE&;DMo%9hE&7Xv`ilQ%e9Fl19QlUEA&43$V9ZkDvSK|_A6*k4B>KI7bHf1-k6CKw+jAy- zV|;GzOKf7Jn9298Ce6*w3HFhZkq;)b+L=RY^6kbGBFtq!q^9oNx$|;LE2qn{<-UFU zPM<&j3mVO*vV!8%nQ2VB)a$^=8Sx?D2rC!Yt+V7a z)vU2M?%b)0-I!;sPA;?>l013x!T;U4tSwbdMovzz_5JN*Vs5Ya`dun3;gimeD!4!>tE6+odT|_+~vM|$&a5t?S~ge%XR1W?NEQVqBn1@a3*K{QgB}l zskSmVzkuJ)z`a+PF2HB^p$jiv`c_s}dO3GyYVO2M24k~biF@{^z-?X7&CLy^%VuNE z(Zs~$FqZ-4!Gi}UdJEbs40RIH(;F+^rnZcA?V+Eb65Cwk(sEllh0eq(C>V)KlwsWR zmiL@&faKK@xAo)Y+XskoHOcc^yOw($@jnz-89hB_v`eEb)feA4 z3q;rqBORW+e}5KW`=}AsCT@LI!?iu2>7$mCk{4j++0e&m)VwRIyV@eS4E>%w(FGV^ zURfc~6;X(AZx03@k{{+aqIPt2EHSyXITB?7DD_6G#H|PD>({Se(u-zlYHFmnauH=O z&fMynPh&OWrXz|Wr=FjGbe|u73;A9KJ-pW1R{|kcLzNu*-}jsM6;?0xySq!(J-B=K zuJBTiO>MML_>SEN*=Ey$ni15?{ajdOKjcT!cq;@022dzZ_k z&|oitnu6vv&KYav)7$;P(eWmB=wP|;nbW6V$HiTC(!VOpO}B^7yvJk2x%k1~d)Tt5 zp~ughIm67#dP_-3TuEs^T04E@xBQ>We}|eW-N945e0^z;9I5uFWqp^N{BY#udRzT> zA0HovEUW?}Q&VOxu8^y~R9ONR+$T&sKYO#OWozr|mJ>}<(C#dl)*v2;nL$NS-61WP z(&`Xa`78V9=H`fvVvA6z#SOEQp(q&Q&D^t zl5sbr1KV*Yf5yiX!z+$#qWX3n82$LIp`og+EeteL^8I*}Me!hL6@jETmo_&Tg&d}s zg@s>%QGz14Vj*9wTb?GvDqwjo!00+pbFpNNQ(s?yawP5j`?BilosoC+C+jM+RN01y zhoiHdr+V_Jm>SUw&PCia(!5!Rr3s9YshUc?R8VU%E4qYQ8g@~uzT2WC01L6WxH$OM zM?S}e);oXa=b8EWU*63y7(_waTx;00&ArxW#7%T>tlZZ(PV?gh0l1l@Ehh6-*Vk9} z_s0SY-cnYUl$NH*&dzR@%P%0 z7D&}MppzS?_dh+%@d&Vpw?Ve&oRX4~^k#Q=cg_*LZCkf8v)-@yMi(LHQ&d!BYwB_- zndiwtwv)$?d*DW8uMc6XJpyN*ZM?d7aCG#v$P3n7p*4djyBA?$v$b3eGmG68x75{p z#>>nr4kyzdJ0|DiA{@nQ_OmvEE8*>1f+nH&9_BSYtfQj?#&hkQ-;Wcwk^~@I;Z@aUPyf++Pq1x~!w<$}idPtiOvW7LHNBLq#A)2jj31D^b&D3&0sBeRW8~c-a&q#w z*Q3AVy%?F8yg_wu5Zf%gllIr%KPV{4eRHGHrDWboWUt6PwQ6cuaPU5S^RBwLZ&5mL z-oD*hnfCL~pYN!N1(atS$7})K_fGT`b?dRO124biw>nAYS^CS{<&jXsv`I!F9(4A7 zK6C%SgW*Cv9TeL|;tJ9ju^_#?yx5%=O$!SPU-FvKVf#&Rsy-dLL(a^?qNt`;qqVtu z$HmoE=K6Jmxske8qOM)clpP>mG)$7O+s6r7C4kj~n}1PXve2d`E-r34{QUqy?u{5! zKv5rntS7pNZ7eep4RrHg$)@vB2dTy*B~fOJnyw4Cfl!Gj2#xJaY3Y{TyLVHPZR6qL z*}s3kN>sGkq=Gt$uc*SIXw>5t5lJ3O+Y?7Zp?}6yb zDKn-r3Zhx)_Z2#x4!w5v?Ae6ur-%E4TC90;oEHA@D&(TQ+Z*>E>R~8}iXarUwU}l3 zoK9K_Xj##h|MzQZ|8sfn*T*LX(b3WKn=^yue`ja^aBo7Bfxwi%TZA^V3b4U(bu6jL zh+E_=pHA8KgBLY>h87L#U&$ycDhAc`QekgmAMY$uyaQ_Y_wQd8W2iwoxMljVoqP8h z*1r}1z`@O( z*>Zo}>}izC?);H#hkMON+~-x&J%F90qqd1H{J8ZJ4CPlywcb0Wvu-QHhuqfwN|6Bf z{r&v30aECvM2vNG9x8TP@!{9|1Hyw+E>3D*D-hmXo6|Ee_^e-ZkofJW-76s6<|*}{ z-s}%%2B;chA)3Uxt&U}Pjk1AGp1yc-`fvRLcFA#W?iXkQDD#4~?IrH+AQlAwAW29_ zczJurDJCcMIvX^^$b$-W=U9+yPjr03^0O_t2$V5lIrN99y`!Vjw{PF}9Y#fmG$4`I z9+gm|#|chJd=mKIF(G?Oa&lkZ;knsairu@*>+0lJWA-wN9z&B{U78NUFM0QlB2{_! zmrUapEYfG+!^6Wf>?c)?4r&AJ;F7v0#}i~iENyJcySgILXT}_sn`JM`tcO?YO`2PP zTegqT_4f40@wS@>NXD18wJ8f~qC;LwY))W6WmLcLn;^^0`Kx;l=UET$>UWvj!|i^D zxGw_(7TlL1-fM1N-WI4T9ET}cgrxNK^kyb=`t3UfU+D_;rNykysTl({lfBzOHf)t)_jax@f7 zOwM+8c9KAUsgE72MPUaP*>YS=Z1YaL2w>XQty|p|7}BxW%nV{YszoC*SDWNPLce_Z zLiLXe-w=`sa4gYvUf}%sr_Y{If7B`oyq=`Hxv`G=LVf5^734Q72ZyTia!)8+kw0!~ zXw*qDx^A!As&VsX=~Qn)1UT%00|y|Bk$Zri+CE5aNm8il?Tw~oy-rO>_kDh>Wo6^v zba!2MM@Pp<4EWtqE-o%%5s^>n>4Xl-^7{~*YK6y^ZKTHWgW~7k&2qgC79>S^oDg z1Bx{%@R-0A^g3upfbSR7bG1)SaJxU;3r!sVByHtDQDBjK`31PS0aVE;zNX}HU!**6 z*z?fP9mgZKL8if4x|a6Cy#R%C7BaB?12u>U{q@NQL zwRo*E^74tFKL?m~P!cN3b zd~P|=^z6jd^iQ93mZo}1XzJvirC;u7xqf|jGu|&CAQ3I8ZfRtsE{dg$ftvbwFXQgr zPk1MvGK$3jgP||l+uIke&DKEfumS)=WpVr+?T}D7_q!o{Y78nfpb1Dn@W3geVv*jw zc>}EQQc3cH#r<`*GiTxw5)ynJ_M^O@q;bT@!izSY(8FSG!vC%Jg@;#Vn|0$k5RT65tTi+<_br4ggJNQAYWgDV8yfd7Y%So1 zD5!a5<>e?C3B|=R5FTft9olvk-#q60NHYF%+zs0Y#qshn7d7(5wY87a1&~EwXI+qw zZyEr9jW89w5_bcVQb(#N)lpsobIGREmX%$Jar$$nc=_jUf?M;L>_T$ z1=X27;u8xC%QdcHF2nlQN@o)uDEn~tuAWrf8$nO;k<{bZ$J`Qju%Oej64+4?6YCMYN=^}wVF z;syx>5142?chWS!wzr3)BjW;PWMy@KeS5yVx(ZzaIExAu$?Vl#Hb@8jf`Zn+zR{o& zDcrb0?eFhTyr+r^aR9RFZ{Lpd@g1_TumIdCaAgB>#XCxO-*m&*1PXv3=YpM%hvkDe zi>riLP=*!-0|Q9O@9EPDpg7PU#Yor6ii#U5Dg>H`w0Rux93m>!WTVJe{?iv#(qCUq zIu7&Up`MU=HSnq2rAwp`R)rBfqOfK-gDAI?^<8Rjlv9MVB97k8wLEeC`gN#0!LMG) zL3qWIh9DHDbQZS>M1GXmz7R*Sw_yo-az8j+#|a91f{E$szD)=Z+1-7BLjPqu&aKTg z0OvuA2-&)w;P7sHVOACXtvuRnrJ+HOH4flRcIOUIkYYloIeHBNMbShk=>>m?_ozh* zU%7hqh=@}rcgh89_xJA~57&ePLADH<)b#Was#kTPzBm>(zw|bkAJhj9NGK`2ka4Ox z@EvRJl+A4ib}C_9Tq(ZULqTj^iS7aRn*5(Tr}tyy+7)aRe>Z#b54-2@(vt7U@Br`> z<(FU8A!yT(G<7X38o(CJJ_|>|41v0iT2x)Ea_iRB2M_q6M&ZT0t#aMDd-qjz8M|@i zYI`GN<1-S!_8&Twfwzbju(dA52bBK#!)@d!Ek59vaQ~X+HnGqOA^p*38?qnn$g@e( z6I+^{#eydzVKty`Gk+3taT)`5s#c4zH*;ER}&SV zM@7{@czE5JE&Jq1VpP;oki5b|VeGMTybZ9DVC6%Tamp#^x@s+b!K=8V(2b?}c|ClG zX-9fo0DX=Kv_oR?6JjGaHh9C&si_NfNEcC#Xytqg$SM9v@IGvY zGoNJ>6?NDTKY*DAA_BY)xrAcx-rpdxXj|E8cVulUWiJ+0{Ao=|973bBo*B4IMK4$p zd`dRgZv3EHjycbnO`xZAz3P47zss{V7xB8eAu7OX7#bUsxp(i4f5>MMrLzYJ#?SH< zmlDbUp*tQ04t15wenJI>spGT$Zd={Z9}xl#($3o+1G_>?AHecvVPcB!wXVGH3e8Tw z`QO60A!lw>M1(%~$=?5w1=wjdy~m1A@HN1>F(+5=Ctax|t|g5E`%m}VFJKcvy7w{= zDuP97Wo4C+l(fWug+Phlzh9%}sD^A&RYiX2(4mi-MUU}v0i&;`Dl>&tqh1G}DJ?5| zgaR5OSfJW>#5>v`!_z8n<^CVedr!TjuU!i++ltER&&7A@ls8=8`1bKrHY(20;GTtq z5bF!Ot|#B_30C#>x}8~BSuAfe+SUg5x*PGi;>7{OgYSlzYZ%Ic%?HHCGttn{{Ah3I zGVNdo+W3OrF35I>kum6cQiv#;@^J~jOsc5+BD*IkhqPtp42`)tiiurVtC6T^cQ~v0 zfOVd_^=k(LZxMFP^N^yfyOr(j?aZo@7s7AdzWo)w>0IcitgKM+TPz{ZV`CdiJ<0t8 z16km?K6c_<<$DTi2}0pYIpfA9SJ$HIr|OA{G9z~*T}>;i8S6Io2S^gGT(|mFb@gMg z74alG&bG<0^qm$xgE6PgUY8j^7KVtCp*?D$*vwHH?J8^hib6@ zo`L#%`wH}VNjzIDuiSzH*ibdtVrwbNQqelPx-ABmoPRx+lA9{WtqDN)FBo>1>hXuy z#U%NZP-TKWv+(~8Kg5epQiu&}M&SqH`{{j1bM%KxBP|LG%*toQvc39a&56x(TkuHt zHLR_vpR2#?W-WV!VGXu|F}Rkbp+{?sdRV3D!D6}s2JC3 z((TuP&QhQs7AIhBgy;cq0udB}n2#4^8z9LpO0QH$m|bYeuf*IL1XcEA`@%q|y#}S? z7{8?lI_JJahoqn{1Cz3x3;EblA4<2M$kpOX# zKiL&_{_aT$_SCx>lGlO)11r0_x+;u&gJEyjz=q*)nl}n*$S89D(e!)P`Ou~i;0FK( zLB#!nt|g+E)4{0&Hn=E2!jcM%jb-E(x|gr3u!A5MeSLj$QM>{0AUU+ZkPypY9!z=n z?n`%f6le&1l)rOxS0SjLdkkdxCO-ZMZvA(CG?SoU{w-e*M7lLA&fy1vrmXLv$@+fOGZOy`|k!w17s z#kPSqP)(;?OZ*8QRN2$>3T{1=Em_D0?P*#`SiA^M>_hVhriTU5?9oIICnVw9`Os^p z77DWJ`q0L(6hg@JM3)CVdHZ?5`(b6}InJ?Qv6$!7p|9D%CGnv=()=-3O;wff&@N}> zrRsA>W4Ch|)Q&DLEZlaI=n(;1&B>8UROHb6Mr|t?oypubW{VolZqX-<0+2X!1#$t@ zUD5r!b_hlX60r!}2PY>del78Hx#0W1*9q^12{q#*$XUhui*J_0jt zIcWt1enMR%BzL3}&a9)>vZTc!78E=&R5^Yg9xpyX(S^6p(+#dej{I%X)YKI8_~7vH z_GDc<_{5Y9!X3gPF~4Q2WxnzoCD34%-w!5?(*Roz|tft0y-$HejX` z2`E(dz7_3EdCkHH&qbUU;fdTHtI3BPZ(lUB`SB?o&tn7t&?7vrClT?M!OqP;^$bGMq!M+;=g)Fi_N&D=8RfdIJ0(q5#W@;G4h&pEbKUQ5w!a(Z=nZxC z^I3c*KTgy78p_KD_@}*ziz^jxL}D`;j}>)TQB@ali!J2DTThW6S|ZqyVifW(kmICB zLO`wUS5*U0e8H>0;M8+1FJIHjG@=2i0(PdQrM-$JLMZkN3ky%_g$^<@G7`xee^nGo zpeZg6-5oo25Wcf!T2exSIAVCQ+!A_*vGvWncdJomq(lg9yJKzn4Kp zL|;8AtPW9Ze!Nb>Qj^ zVE3u0ysYlaz=j4fyQ!qKz3ylRbb7@uBSBu?gAk;_+Y>m!B=Cy{e*Hpb=m-i8)46j` z2t(-Bt#UsarqdTLRF;-L1mj2Bkeh<}$Nll+$DUlPZIL;_yD2CJV5mNDazZj?hF5?4 zqrQ>sr5gt*RI$foZr-H9`e^nUz`lTjA?=*`_U&86yLWfi{d*`VAb_j&S54*Z-1b8n zJQdpIR&7A7=9mPBt=?C3KHs!)fYedZ+e;tGM@{}x*pZXl;ze)E>h?$75`F~(fp{_( z{5k3##fFATpbHT2*4|@v)d_0Fmh|-W;}XwXgE|k?LX@xCS~&>6=#Yqc%pnPFTd=ux z%axuTOIrm51b{^WzKl#wO_>^Zd2a<`13p6X25~$NB${PIUD9;pC2Z}kh|wQ{M1d=B!6_A@vsHKC06ibMmp!S}_?3YyKfoQ=* zJVQedfFq%I9uI$#OMbb5=I4dnl*8WN5h@!U9kriBcITTYil6_TuD}ntj#8;IwlR!gtTu(Z7n6NI@01)@44Y7 zlPncg)q6TRC;Y7ukH9?#U+vUpCu~6A7!bnXS1FSOAs*XA;wOSXHIMv!3!Cr zpP;UQQzQhnIXW+Sj<{-#|M`Q>`wKRTqLYfsVYKg#uC9B?YUbq$po73cxlK_x@DY#0 z@{T{0!_v~Ys$r~o`HCVg6eV^pu5oS!1U>P}Sl|Qd00p7C`}zAnuP7q!wW_YJj@fMZ zdngIQAe2H_o6xbJMMcRvIpt?s`Qm>5vq}j?sdxUrGZT?K_XXLehljD4cOayes8|h- z&%wn-AOW*kI*IU+fGmRFjpcs)7zkn;@oO(7<;3Srpl^BrLQ3q3E}64u&iF%aaoboi zWN?|e42aoT=x7sew{yG0z7tcA+|NPimp9k|$2cbH(xJ!Lyojg|yMS`C5{m50gfpQU zo5ySg>ER&~&=#L$)R#RC0y1iw&!8D_$?`Wfc9$Wnn+ML$IUM1c75sDV^G#AjSc#Cz z>e*B?{U9|(@!t(+QzK9_+!CH-LeU3<=3NMX@xr!CDpeWJK@h+gO<{0i;;H%tRyMXh zsmk5);|D0Fn2AzC#L}SXdV*)eVUdC}6!abVh!N_iOb^l(NG`=@3fReBj}fkhRJr{N zp_}FOyU8L9MM9StPY(cmymnF)R{t4Sq*5Up5VRa_roRlu>$h)x@XZBM?M&1?RR8&X z;2+3sqPbbw*bD(>X+)|S@qWU#xuu~26*l0-6fU$>`!s>{2^)Y=$O?FrYHI_X zU`XM8%?1k5AaEft7gkS%91Fb=KR;qOz?~!TAf9)zojy&#$0A$b?T@BT7)(8KCRUNv zSo5jMAVvlBC_Lm~dN+)7fGH6_n4CO_?%A9NBL#WWL??6}e3<#Ik}GkqKYgMp(p12{ zBlCQSSR%Zh{E2Q@#&XK!++x4BTf(P7`FWR?Rx;^~$(0MlGd>TD&%(-D^{cuO1q&4p zt^IOR3z37B{f#d%u7GX(x@8RQVzO&8^xAOR!2!GRHX1asQtdC$77#te!hzzQkeK)v ziJ2Q}YX8oqsT>~_@wzK%sbKT>rvz=rcLe_tCR8iPn1Et>BD@BPgRNhXA|>QSVI<2! z4gSyru*o1j>-!sVLpg(Kz`%;i$~R3$HOeoFoy^vlC-h)PXm zrXtBmgv(uBMG()f3&0iypF#fz%;?kqP)HQWpBI*M2niYq(-+qg^|~4O%#WF5<@c_^ zy&$`k)-L-K@7D2xMn3Z%3KBdyzMT>COG{OKeVUK`V2*i>+!g$S9HqZ8!U6*3#NtS-(g$L?3t9nJ0bUqG_}>3Arr_FM?EM~# zG&Jz(?}pfEE48ABzP{uL-I36F2>cTeAn)src7~*)R%;vV1vn)`7~5ePqh*mhe&IqO zL>qgRHcYc1i3I0S8q!VDr10u!d`EXT;B2RHG5kNsq~Ztzqatzxe0g8Fj7cV}H1wyD z+K8*h#>uup+e`KmgKyi-u=`3oJ0oBaYTXv);|uTVQU!G`0|RwdFV4)|5BP`*REo}- zFb{8Z*aMrL!&qK zKH^wEVJdUWw3uXJx+PP-4^H5*W5@DuTj=P-`R6hUSZ@c-0VM@q)&s>?4glo?G3(6ATy+3;dsU)R*h_u+*u%m z3gDi^A^bT3kAbkEpAK{y#_|{g{AYD1?K#S8n=(!R$#Kr$Ae*WeC?+u*g%tzh18WE6 z6uRLc^!jUwSJK*T5NrvVCG(7{6G`;Wbr46(nl7B9+AF$z9I+{8A)%w#qr^JLfR_hK zJJ58H=<2)PSu9^XS5A0lxH)3t1WC-YzCL7_D$zx|*$j`pg5)40Eltw?FR2EzQ|yN+ zi8ME0zmBo74D^fY-{Nx)ZxfAAv#^jwlGntrW7H33HX$-YeuOT_g;^CAg_v6OEGMP# z*A6s4-Ga~oFO?Ao#zLTW}7VHroeh8(CSQUBd*HKg;clN#?LOS;iibM2uUkuKH5JEWz zuI*;A5Eu8-yT=g;0sH_$F!#Wfkt(%BW)=92{EJP4h%dl3a3{+GqT#YB6qr{e08ZVx zk1@-RMBPGgDAr}x|HUHm8Utfvos)vw9mq~hxq4x^i<=IQ1DRVvVMvbxn1BQOe4)Gr zaWUVKEu~19i+31jPyQYm`8hcFP%|z3SUM~fR13_;J-+@A$`auI#3E1j6nvgke-FC4 z!_&q8E)e4egi(tqHJOLw+(?#l5a@XX&wb^ff7lo7e0;28VvOEb9xA7Ng&qmQ3a!)H zamlmksr@QYJG@+e%K;LUAtLn$moCGso42R87kaMgP_7$fRg^YBrRP9v*q5-5P9nkp zIPp=Vpb}2^WpVNCNQW6rc4alc7N7fGXJmfv!i6dOSRT4PVPRpQA+5|sxw(fG6cnoE zn3l~@p@LpF8Fgg^<-E-bX*CkkDturSZa@C{GiRUkbdh}ny`Zfhv^o?NX$6IFw-=ZO zLAM}^QRVY48i-(1%A!#7C4(4xQwviGMIS04P=qv5(}Lp_fxeoIPP4Iv*2DMBqCuw2 z;HNfpYhEZp7~)a+-qJ+c&&a5N*nq7mcWP%x$H4eF0lBU73VRzCAV~yUe1RDfw14GZ zCUhQa<1FBKNm!hEbVr3Bup=g41|SBJk=?w9A8A<#e#Aryp(LrPofGh&r>BRY$4g@$ zX*gavKD`rf79uFhkbEI0MO@j<{CPt7rGfn z1RomA`Q22(SSfZ*aJ59LG7MdBz%=l}{Ra-52&u*#CL8R7PnFNTDK z$WPS}Q{l)TB}CZa#lkjSL#&(xjT9zE1w3X<2btW8g-eN%Dqz6NbKen^zPA1cLl_Wq zA)FZ5$9&i0L^?_as2_pQ*BG+~o5UDq4Wt`>+fiyl3|n2rWLZnf;4{hJA2rkXWcUtK zl90bxQdN5t!-S_&s?Ba|%(r*s1R*QPqVqzF;=)3<%79a*_@L6nZ zzi|;dO}IF@HuxILZ!0P6!kL=eMnuw4JXkzGHSIKc<>(F@lBL}q$i8|%kNbv;(%De%^qxY; zkokFADh6R`paU!*V4(h1Lz<^2FA}??PYSsnBc?U1O8FP!5DKDy8yfg6Ps3qn!WphK8N_J)yt=%S|H{Ad#d^uF zWeh=N%qF_v;-cH;Dvw$a`Xn(>?g;#r@bD{!xH0W$6zGOe1ydN?tf$zsC-m5J$)`Hc zxc7!t<_jTtyT{#qlQ;HB6Rd1q&(u^l>_M~IYeXd8f8gkyV*rPk*;dZKfRUE{yS!yi zk4)a1AIwz$n<+e1Tg8++M`2YWwVcK4z@(a*UH74_udi7CMa9b8Z=nMY9$-EkMvce! z?~+L3(#MPtq`@5XUX0{P+ndC{&N-CS%K*6+kImtW|km2n+XMfMmdO??cK+X&5nZU^mkJ(?gP_fU-(~a@i|GKKyg-n>%AbAcovqXEN1h44jD&jZ}C;n zO%(A({qECSdTYwTQO(ks86flVE^R=iCdFCa57IPenx9ZKlO28;(a%`(igAciqV!$W z(zv4w!-&xDS1a`t(>C?L|A`oOkx`oN&QcA4(6oK~_6}jgl@C~^CJw#0ZMah^t)JlE z-n?!8pu!1u)xua675SYh!Fd2ymRi%xM7GoVl zqb&z~e~ODk(JkxjJc8H(!#wY3rFL%rN#=b!D+B4fr#U$zY7GpC2|)D1CvZEU(C)(M zNI6nl+T3(aU0sjgy*my0yOZrJP?|2zP(ZHU<4PPM?Qn8&d5?LK(xDE)7&-w>02SUZ zFi;X;2#I0n?j{*^5>F0p5jo`ppZRri^3Hw!+mTP;mD)guD|=B|+OzF9bWF@bT>=8T zo%?TjnIyvV2PW&6h6alpHnj+Y5XI@wACr`SP11>q1XN+C3s?_JOi(<72lNRe_Nc_W zggjAEnNOV>{8%vcIZywxg=*?SmXPW{@B2aPP(0(~e=BgbRTTJ|*0;IIp&Uaz5r%KL6NY>(YQe(p%>B@i@qOz?t7QxC|CB2m(WlE)Gsj z1)`sI_0~ggY3%J~d!Zf3AY!ugSb9D(lu(RNt?||n)1{Ca19WANs(ZPHmdvBBmP*9t}>y~}e zcm|iD*)uqeo&ap2E51RtyhM@IJ4HU$jDv(;#&hGnbdcxDJnj~Bokpm zK(R5hu#kdwjamnoNMswpj6}5ng&EOJ04$(IKo{ZXHd-w{OI1!Ga|a z3ntm(@FoDHXXfX{)zprnsd}QCp5);<0BS|79Z)93hN(PDJs91Vw-7NqaDZRdc{j*v z8X69XE)^S`TQEdgr@fG>_W|XSn#b_LbXN^+y-&7diYcFKVU1weQP++`PFD8GOx4KX z;1;|Z3`(f9s?`}}us=Y}ufDvLvGhY|-s=yzkPdGY+&ktTw=esQutN@BZ?F@LZe`no z{RM>lVRdR`#0P5#``6aqzN_fmo1$4_W>t;V2#5@z86a-xdx7 z`$Y_IqMkyEF9qTPoqsqrWv*jr@)su8Jxl~(Ha#={VL0SO@M|Ap0eLNJf4^tz{2cAu zit{YZ^KUazFa7+){RXd#Ghd-}IC+xhUM?+-KXrMupS0KEDRJ?W6_%_g_nq(&qIpii z(c}MrzxDqXGxLiPci+Uvp6pr! zF4S*9At6{-l-^gYG77|V1loFxzu}LLOq5p`algsPm@{zj6!#dse)S$_L}Oo{TSmc& zv#=;xLdNhH<~EcLbivS!qk4DT{4+IG+^O-p`&fCjkJq4^E_;vhyTeo5%&$7FbS*1s z_8j@d2uf(v=z7rqwvmXrYr-;s zk|E-P!;0YDlSue&5Ms4UAMGG{U^xHiVxONmw~tWoXNb1xAgfT&hTJ!PyH8x8Wn{Ey zSsd5eq$AB>9`OW>6eJO;W7P7jPk|4lLzy8F`X0dazln03Nc9AYN&DM%98vZa2bLjx zIy&xTApy!OaABviDq+jS-Xmj+(fhs8*U9H!Ac1R5BEb+gx_`g?Tw39yJDQF=;Md}i zpYZf-}-#;m7U9R{aya#rS$$7w^d`8nNo5RDL`@?{)OU(u~DFQ z#B=E|uGwC+P8=vu0c9Lm(dSdUI3HC|kIa4uv($JcB%r3l9QU^4d@tjSSD<1@0h|z4 zPH9zc@b&d&g2X#|+lJgDJDZm{Zi8=zo_fzkJe6iVChDU{pCGJ%R4VY;Wi_>^I!;V% ziG#di+;TU`58*<{IqaA|#PTOJADq;-A338LESiOXPDS^p#B;caPa>>X%$wiC0zmPw z59go@KmfWNQQ@b4eiR5r4VGXM{O?#&>^-=~IAM!{fRFglf^H1Kl!7||>F>(uG+p8W zqk(0K+k^uPBIvVTgl#H=q||!9!JEriLmAH8u1v%r&@S(?x9fjO+xj;*mWTs+Cd|v> zA-_#UwL{)#YALHdRm~Ur7wQ%g>kJq|If)?~>$+*3^dBZ!^3{H$s;D*6ZuOQWAw<#P zSM&LQg>aHid~!%TL?`I>ky{CMZC~CizJooAxfCyy+6qui|wX=&WC@5&K;CZvDaPs-33*k#EY&XT*pA23vzlN`qm5|~=!KUtQ zQVBcpe+*#jZ5k}bcmlMF-U)MRnms}*byHuo*);NPzZ}1C_H0>ww2*gI$>#br2SU=A zjne)4_<(ZF22P*2gtJtTNt_{0W3f|%l|!xC0U8z{s>$cR$bi`ClYmK7`Y;IVLN%!*+--Y zs?r`PT?ot&C&k!@V_rrQDjQlYNU~X=&p+bKBD7(ZtQ}-zyL2L-JtLuw!z_=oYiVxA z{Gm}R(nIN{ot%SzF+26)QC?9IJv6j$b#-6iu8>Hu&tj>O3hN`0py3del!Wu9d=W)} z^oqhYfGdXf?TxrO_(fA|>kblxf=q$`B{mKIurjJ$q399o0J zkbEFm;rNy#Q2$6C7}$i~jYR6zl-8}J>(PSV(6$IUD!k5q>$YuX_WPi5;9pWY@@2$; z6G3ChNQ4UkC!S6C-$Vum%A^bplUnm}-~#4v$p``ZGUlvKpO!v7HxEWnBEf$rX3#JL z=?6t=&vG73Q?$NH*?P&wcnNVf#_OaQQ*Js;!O<`<1QN%w5Qook;6xANz&xxr5>ZQm z1&{`XIy!)|#-K#Fo*iB>`o1ThORs7y6)p9ZgMbmrDJVE`VkyDC5k6|_?DQv^7tn|x z>2+>yhk5$8FQ}cUbsjPFS8?nL6jV!?#jk%)TuEv;rQcDE5NUh*1~<%co2?|`^pF!DCW)hXu&Bt8OabvduUU8)XY`Or zNH!8$^646+Tz2uy_hCzYLKVUc%H1qqA0Hg5`Qv>mWCa{hSw*NJ(0g`I!d6$Vsn+8h zG!;))+7+7!c>_C>$lXxXs2bFm_T)a#(D!?%aFxmd0>R*KSXsNoV)?DMA_M`S9Y?hM z=VV#vzT5t@I*|hho`bAO5{VPJk-m)(zyQb4?r?&P-^hpolI`0>Jmc1n@R`55afqA{ z{RV&I9#cB`?~vO~w~IMUy|SF2gqj6p6rY$VF}jIEc#l7qCK|F1G&f?(7ut}wsHVo$ z&6HN&Z7GmoRdD(QOi5xcer=F3mvP-d#f+=!j>GtdO{s z)u)+d%m$$3NMHs9XMC{gte_U%gP3GwZhr93$bSku^dgL+9Y1yI>-)XLxNw$9XzT0r zqAjg~fmFu?Z7GO@ATT=g3CHz`8Zy$*XqbH)yb!wa?_~Q18CROyM+ncjEr6b9HN!AE zzF_V?2qmK3)x4ZjcDu-21uQ=A&vMSr#N-S4#QjT`JS=~icitr)zNF-?8b~=LkwfA| zILqb=e|uZoPi$7&u=*bgxHD`5_UG+y>^j}jZGz8 zdkdka_4Qq#+#VJlt_u)~-R~=Y@-m$3*g^B@Hwh_wxDQwptLO3KE6B@06QwzNbTQ&JwrJezjS6mwf!-qK&*ieuFNgDCN0 z+p|PzdLw*}O@&3A9Zf!@R_2PUy)uSj4hCd;h{yNm5gUM?2W;V4i?=d)5r0i-seeqRKmJT+)H}f(`(}`%+0g&w;mMPmLHa1(rHQz z3;mlIhwTf&_5W$_%;S2_*Z%)WBNAh2Fm}aYtW69O7wBHrEd&Ml9fn55!OfzTaEzyM2T83)h62n3}3842cd|#kvdC6tuf-HPv8%%>6!yQ6k&!Z+m@v zB;&~M&I`|@Ui3^}b!U?0cB0{-BKbh9hF-YP>zA120!H&-YGPs+jcy1oeQ$EMy5;1!jftj%w_LMN zBO^iC{$>4Fr}T>A?gnikF1LY{u~p3E^$iW+#Xj?jw_;dg8+Jms${GF{)d8`f#*{}F zMrvzIDW`JX(5p)umhh2&L)ogfI>e)SX;^w%+CXtlEv_lt@Wp%bd7f~NUT3D>Ne>fR zsq3XkFO|F2m@;&k$nP0#B=qHl^at3nEoHq$J%3b$(>MSz z#?nL=SJ#ygblbNM(oUJ!t!>e*%*WSWQW&>iK2gJ}XecWEu;lD23xszaA(1CX948?b zOLzv_CcF54s6^iqI=(XT4&K1r;$rClkOp*6W-!ZA3Wf7<3rH9_dUO|_qEDuEkC;g- z;_bSLP=g$aVMB*1m?>Zmvdq2pgTC46^B!=amz`$Vn#VRswa!LH4tUVYLHs@eXgO3BazpT@?nL-8 zopRuWWzl(FQ3wD4f4Ck>B&-Io zX2<+9SIN_KbUX3(?Pi=`UFcltZT$a63HKZE9ouMs^B?T=kqXi?d-a_E)&hXzpg0-w zdMnZ&BP^QK`W=b;Hnn}Z;iBHusW!|ooQb_ZI7^Sj*c;#(IqRj`fbxzeZU&${1tBeVAlBGBGa_Y`%rbD}d;ghne6_pBiK6dGa z&*JUw%4{bs=phO6l3e)weu)?_fylmOlyQY_C z?&KsQaHj_k{wkgPtMMX(n$C7MM;R++Q_;5xK5-(Dc%PntSF{EHEOsHyW*3ZR1~eap zK9W#6M*0~5ro>_weu##L7EVhO$I-wdWF-iaC6Mq=`wgnVEIe0=weB&&|GppI3ma1= z6BYcK1U84|S4Tf|2TSS+qp0jRi;w_XpgXC0s-IN#l7NP9!~FcpjyQ__R>L0o% z8hGuDM|-tO2F8E@zKu4A4j|U-kZgV8;I@~HD7M`3Y`^eOEFV#qUGbW!l#!Vv$%D-0 zD5ns@{o0#;9c2wJbLOsc@|6v_cc8c?2eW`YX)+N-GqYwU#meEs(3{DC^fQw;aMTWJblBa@Oq-04T&?hI!jgUX zi}v%??#~!F1A9o+@=LwYD#?#0$>~JutVBL5z#VwktL7HUbVo&+R*sP+#D?75hqb?l z=SEcGq0=1lbfnSBNe)eW8B8@YKV)f4 z2nBFrQ<+8dA~B02WixrnO2*4W)AjT$&Yp29PRX-Nosd@F0rOM5qIxd~1EiFYl~KNHK9f^(=_;b7xK(!Fh^s@ZfDf zqTl+;UP#Wpch46MgOIE!JamrD#UOVboN_&$tkBBuo4}lRAZG-wAnrq0QJbGaRzZpq z-RnznAP+!QJVTtM97ibs{(k%z(f%fxf;`3m%JA0w9H#@AA|v#pb%bH%QUtLqHXctj zcfH6b;gK7yy-N-o*l{LE_ty@;Vp%4S-y5!xfG=;$@`u0Ny_A-=eAGsH`f{**JRdPh zRiT{*P;3xJ^E~57{gq-vS_LXk zYn)D!<^~WD3TQx(ieRd^+OE>co+qq^5Q!4|og`PRM}>{nNWJQuTVc@+9;*(@)<>ejn|d z#OY!F%b>|{4BCRc+y8vfyx_@N^h0bKa{KrEca^rHS^v={)^?uD8`)DXra#@0%o$9Via?xjP|O2GJKJx2m5`O}l$x zad9Au_#A;|{FbFgj8#=QrJzU1JQ^vTF8F#vQc|Z300^BOg#obDT^bT=_(bQa^A#drd-m(6uFz8Udg;yy>W`+uEW#J>9ksB8RK=#Yk*p4Uu<^V z>>4h7l|8cDS05&^YWv#5rMITVEs z)yTZX?wtO|TDL2zima|9<5w8j*`1CPyG+TJ%0cCOVv^W@6;$!A?-{Z3D!+@?*N)>`bd zqHe1(W9yu$WuSsPDFcO)rB`>L4Gfr8Xa1d#nO2xd zO_$D%{K4*x$73wil6R~cfaqQ-r7(RMvS?2vCOfMY@GL7Q2nuvf_Z0yp9uxZqE~z5{ z=Bll(d{%6}qYrmsR!29IRA@rf8M->$Su4Lax4mv zId0+n7tO9$|J0=@X@00DQ|3Gu8U?>t)=b=7N3^^B9t>S>b;mCL?t}5+x!*YyN$sRe zaZ^$^%%SoT(2C|SpP%ych4^@ax_`|>tG9!g1atqfTYdZJ-*4Md#7iT?W1qMa5PyA9 z2yp#*sa%lt73a+QnYKY;<+4ZP|0jR=41e zkLiy~880Ww4OkqwKoEfp-0w+_h8otqu_6YPo+Fn2QJ~-{C7V@0^%z6^LMsiz5)vAJ zk9~Hrq^at!hWK_nP6nA4W-f?Wpw2VrCy=QveqL>Qi{&RA(R2_h-GPnO$3Y#L6S5vq z6DQ*~3X6}AFMW48|3Wu#TfjE*cUbOMp*%QN^4}kO+!-(X&^~i(aw{ ztEqf)m^NQt3XwxY!Gj@VYB!oy^BbL31Yt1UZW&t_e@F1cB1cTT#`Ly2b~q;v?BDNA zzYVlr-coOm`-jsOv18iZjkF8xK{IgH`%UyKSrZqu{n+K@bz6UFNo~n(4g79SxJ6E! zpF18-_5|63LMRiO73N1fEX5oQGVA*F*`0fU(-L#6fXE<55cmb8PiO%8GA*nLfJk6B zf()Ru1>sb4>7T-zhp_1eW}|rHT{k@OZCBR;sKzma-N5ikw;`kC-6MNSN6Crr+fhRz zlYnk{6~g4Opm2@ez(%G+7b&d|75gHwNZeM{SwU?p`E8u-1VV@bEV37=1A}mb3fWH3 z!j#AQ)2Fjogmkem$#8kF(<47n6>cpXnLId>cGWrQy;g# zfA5^5-y-A?xgjFX1M>4<_>qL&t8^)Zs4?B~ACVHm95K{_c35z9S|fWVVR;sqjjir6 zowjQZlQqt~WV0ryySZ*WJuLo=g@xrIUs0!DJh0fPmJ<2 zWCR7g2WgUpE<#quRxAt!pZ&RXoF#lWlSH;Am|!raf}I=g$A}PZ0BGEon!Wx z3?o4J@5;m;Oe#O>HyzSx`y(M?Q^tTl=fRbN3eag~J;+CJsm0ib;-iPze8w=r2lE_z z7Zw#!tJLZBaax;=vRR@3tl?!_PUsq?#9GI^IO>%>T3pF{rNFUkqRjT^rhHL>q<-!w-00i05U|OWuzDUJyJEB#o>JI9`UjCunS>^G3wu z@KCGuQnz<{i*~R37u8y%xS+!LL5$q-71c*Ppb5-!+x4<(tHgjSSgvRv7XMAp)WzzM z$2jp=a~voLEsk;pk|LVu1?Rrt1V7HX=zg@ujG41}8~#TkWCtjesG$kf zO*aQ*V#nO|lx3Mi3ZqLOD@!J!I3&Lfwnp zzv}<_^bKcEKz3iwg}^s?=XcUKzz>3r|lk{)6+W8-J}`Z4>v|0L?)Ws3~j% zlV5)63pDAFWV&fg*#W)cBtU2th1JXwGm0Lh@Mnrb;v)3@P-W=EiJFX4oN-t?`vy5W zI2h9p*PEZYPtRaL$M@CmK|y^`R?$BgnvX|*%v>|}_TS@nBRd+%WQ{h>^GHALWfSfM zVI2Q9%+%V98iH~77?wxZ-#@~cDM0~|k#o*g66P$adBm)DSY~0NqDTjhTmdS@-=&+{ ztSjGooC*mTK6dOK*T!ADcCGt0>e9bMQrn<$;YCsc7v6vYf^g;hK{$N*`J02c-?lXZ z#*a&T2vi6?DBiM!uMe9^zYZctq4S6dK6J=-qlNXU5Y@WM`72lU8ovZkHa0=L-w zs;q42HbYk@j1yE<%sbbqw>9g2g~-N2b)jv!fH4jQz5v=+@V9;LH3osn44*8Qb=*ZU1`0gua(e z6DN>Nk6G-3J%_}0lW-p_u53v^=Q_uCub(m3CfmD%!>TAi+|JIfIGB02|@7}kLELavGy5C4`*GSati9=}M^ z<*1Gv_ECr%)*;5PS8nN%S1K0~t-uQSW8U~7Z*vS|^TQJpdoy`t9dY8CvvBM*r4t^F zXuZT&2twsU4`#n`{ENFAo_^$7F8Vo5^7bR@A5%x<v9<&zdKeeL(-f=f9Us$PK*ae8yr2USaVMBhJUU2`TsC z_lIsSF2GJ9J!(-%2-i!ca16Tp=bu?8_1zUk6jU+^bCGHXg)-W@EpX=$PxHYzE1;AVNfjxneJVP^v|ENi(W)} z5h?+w-<6-TsIT?fBT^!^K~&3d`g?G2&%S+ka$~C&M8ADMBzAyIyiHMkN_3SH%Dcd8 znYDqD4v#|e*NGsjltrnAWJ35bA>;ONrZG}!tE{Q%1{47~YzP*leW3F`YAQM*K7%vx zPPq%|I^Z>Wb3=OMmet=nv2H3>XSuY9-c8Ipcudq?-XeRHv6fD>rltm}sQ1ZV?d^Su zXNemG_nVNISm0na;vfpI0V58o%PtJQi+RK^ckRG9C&;;kX?g}Zv*#;pZ4G}TmF<~2 zPjkH2BAnfnO{#xi`p4*)u2T27fCj@g_5M65^5vI6(3v7+(vQub6`uPjx+weE>*~+T zgu?^p@-1+X+lT;Xf5LP`f#=ay0Bb=f-gLRV>QwpF3tfxv!EQwTIa<11UP;a1)o|!W zEU@9jKU0{kBvB=DHJGCRuqJX85|C${%BdtdJZf(ViI{SkfqegSi#C`IFYfha?eP9I zk#q?NYh-}Oc`7#`B<{gLM&p4pIl7SOcpk74%4vZ@Be|_VG)o7CWvk&RjukE%l@!gNGiN)$ zil0G?X()U%ql=YKpK_Om)gvuM=BcRDb4^T4vhLqsc(mtzn7GD)5vm#N3=0HA<$cuf zYfvFQN}~2uRo-A{`cg#Q-P^pg5qfE(;}wMGT}3RHT!vaz5{W@m+P}W4P}j70?W8Vl zF0X3v-5Mj6(b2I0ZIQqyG%`!-&Rx3HkH5OTc1W(XxI2z@IzO;y&tjABLe2iqoE^6l zmemYd=Q^_Lc`)0KR>p_POGRO7zz+mu>-a&i+1PxmH@^xu!;wn=aH-al*y=$z!NbF5F`a%ACjs?IGj6LZy&JMP zMixohk`9AVm%zH9s@B_1uAQnLO42c=@y`25H~5Co&eUwzO`FPi`eT%#h_O(ezI?}= z2JHJNsuB$nGNZ^Ofe^V^C&x2_QVJhHFU}dpTcx9nTS{zM7cSjoM9N@_P!zC3t`P7i z0A=}#6%qgy6EmKl%%)SkbGZ@e7TWY~k0b*{?0JZ-nhPdqP!!NE$yHcF6ya7zTmnLY zJP;JSyrw3Q2p>+MNyopeb-Re8S3c~sj~^B@`=}{Y>?bsJTzPsO4Zz+LdTvjcx1@a} zG2g$b^3E|;f~By40gAAp`fn0>PaKnPa5Kg=MS)iZ6!T@zL{?Jl275IA9GQe)i5Mak zMYvYB2T>tpOjYnQNTog+7saVe>k6?ci6w{?2J=j8Y;34wlh<^rni{Tx9876^wT++P z8#-{s8zC&e>OEojITlG(N-^{roWJVczkXozZkK3=Azs^NSp}@?-nB*Vu?Q>aQKnn+ z5|uKLibp9fW6&+y=pLi^YBc%<-?qI_cmo(Cj;l1449<&giWnz{_u8Gefrc3gk)*%^ zkLe-ClRe`7+^y&);y^vQO{^;!84}EZ_7JPDE%LwaH2phJf}uOKbMt^xXEyu- zrM&?lt?*4E-N%^*OOnaR>EM>mTG<9%D6Juppr0wCDh17@p|PGEjB4n82Ou2G7L?dd z6wT-)qM81&xWCyCKd2~VlwB-s*_H?%xRUV%4)8MtQJv-e*5Q^sgyRuua?6S^Q&f}S zyf>Vz09rlvE?PYLaQ#Lv_yx6d4_wnqKoBv8vU@bMR%jmpk$IKUT6*tZ2Zd{;3{h(F z4xpfzLR5%lG;~~r!5O)VpJl8mqa<&UF@Qg`iFY7i|EHC=k$RDa$fiYcuFf$E7FZ5s z00Z7h5eX)h9A*9GJXg$(Baf4xXl#vTPLcRWf=6xsuCqFGKa2z|k#ua^_C7R!Si`D| zrI~x^J%lbc&OoHXZxjCf3heC6>t1SBYf-#p6Y-g3R5&6&>>;87C`i@Bqg#^4pG z|H0UBQE>g6#43*^*lJ4Hi*b;{!G;Ux+)7GL1`QLfB5Uf}uzk}zKw*d>&<~PZ)4nM^ zaLCNTO!ali-C-h#>DWy7qN1?d>Og1z z#!SOWfx&XtmrC>N*Km!&i{rv8*A~D2uzQEb)%MTPOMMeI3A^eZ65h(VeO2@CiL1DA zaUkh19h7ZcW9G4LB#i)s_7X=>0qL$}#|?d+$D-%?d$y#O8q(6#1R2bL!V9S;_^3O~ zx#r+2jrZp8J|g4ZaI=IlU5IG26lqFw*Rr}sLMuDP>(jLZJXR2qV~}&q2b`w$TeJ`) z)OWsbuv)jD@FY&9dpX3Zqo-J74AVGiG8p8Y8D#%;`t+xbM8@5w?^_FW9@jaGaEiKf zckUs8X`s?a`Y*>#m~a#3&i`h!+9HADdC+1ErpS2w6>x+xMyU}gH{cn>yo9ja3;BTz$!|P&f^gh|35}vz@*s4#>vRHJd*E(Vs0#Z#b+`UxIaGYrg-ArG*Y{kIR z@}y3<9n%efXV%^b&I=Z&Xviq;(0VGM6~Xa?PYv)d_uToWvGI%3hNtoueLrVK@q!6S zZ}Vb3zpZj4!@Z2|Tq5@%^Bmmz`5S57@raF#+z#JW;Lyjjmf-y;ogV+NIi|Mzn9yo?LN&#meGHt2*6?W3&pau0t$KZ6kmo80@%`gFv6 zcWL>$ZxeHMdtZo(a=2B5a^DDWolY#eL)?^z1yj!!OldZ^ixegix+7Cg9U|dSb+4qh zaPZWIW))x94twIgIF&|^^y;qA2;gbAYd?PpnV1DIUH0UOuXu7G!a)0HW3Y;wi&g;o zi&^iRvcu<%ugdc{m@S8SR%lqn^SvkM)OSklmOVB&vNEX-PL&42L+#?S=)v_%)LKxWn2@BTmHvy&ANd2XMq2zooYk%i($b{0D9g5`Ujau{>4 zqG02yXKgJl(6)Q_Lkku>ywqxDd1}CJew2mh7E$|_#LwTV(WT3UbE#H?5?CRwYqCQ_ zEP9%QkjUXabZEx&so8s15?tt--wpH|fyClLsZ4mhbBwzT8?`N`29q$v$c@UkBS{iH z3#A+R_dET!Z2Ix4Z@FiujSPOvqHiF%`v#CYv~pMC>CeWSKNO;ouW#i24`%v)qiW|x=4ILHsxKU%BGw6v;IbzfD!ots{!Ror z$B*w>ogHMuK+WA;eII^3Zrp5G1|S~k1gLsIMMe<|wD`N=L*`dJ^-0|JCh|+>VzBtE zRv=9K#AR=fVSe%9^UT3{kMK^4J?sX0B+kf!*nWfe0LZ zcv-iT9faRydR?cPL3twGD`}q9SH09B`T;1JY! zG>`iqZ0v!0$ZZW^Ly!gs^!<3Hxz_xvePg?3)Gz(vpiz%`8TX79to?0~@8(Ybc$HM2 z6_u_su0!UC-~7{qX0FW8-amfw=-0z;Pj1r~aZw|Ca$D`22NMVG@Ht}h_W7N<3YhB0 zrKS6LTMZPg^?d9Z+%yY^XHo(Ybw61 zWVGVG1F)DOM72M0sx5ru>gM*b;ZozSwvUfE-v-Zm2bOWO#*yjtCQQX<>QubdmcL9C zuMa({*6`8>VCAT2YpJUsNp^j;O}bQ#PN`j znOmL|mzEB3q8M&?%nPk(`s>cak2DKJ@C-P3`)R@LlcX&)pd@JEH`gOHwM4!{*L;IJ zRu67@zi-IQy@a9e%O*n8*}2{}Iz2u8e0qBOoNH_1o9dn3Il8zs#a7-`-sUun9N|55 seW%X7-2U@F|9J%eSq1;zjnJx^IxpY0YSoYf3cr4sJ>NLS$lCY+0g!vJC;$Ke literal 50226 zcmeFZcT~^+|3Ca9A~Y09(=3%#s8lLKNDJ*WNJ)F|MGHx2P^nZ>+I#O*lq4G3OWIR= zUbpAxdw%C!|6S)g*ZSl7IOpws-rjk=p5yVj-*4;wc&Z?Gm2wy3E)t1EdHveuTO`sJ zI}(ZPef|BQp$Jc5&XwCE6MAMJMqhT=lv%n(jn6I%NG^x-;H=H!{@F-s7wNDkjfs4P=FY>4*Z!~nzG@`Yt2H|}cfY&H!FsBj<-mah#>U2c z0s@0yUL7r(uGmd7?k)-u>TwRR8v4H8UcX=RNr(RI)%?M!-MmF*(|wic+1Uc>T6gYz zd%S&jT29X2ryLQzC99JIwL#p(-(+)Jn^7@JrIGA>s-1muV0icoN2GHFlUb34ihugU zU+nC%p`OXfJj=_=%;L^(lafx7zDJ1NaC8*uDzJ&UU|CoJ5UZPZ%W!hYB@ufsLl z+|I^EZ=yYWX?4}A$7OM5JhP!YXdp?eI5b7G@Ye0ym5<1F*iV=5P)onJT~JVv^!f8= z(saF0Pnvn3WQum__x5ZfwL;qo&4>QDrro8|d4&Z98T$2%YinzyYceu_JgCJD{tXa! z?&;~NfX@r&(OBx}+3=Q&BP*+|-Q~Xfz^M~sLqkKEmV?r^6Ya4l!^E6y!*Xw|tuV8& zxJ|Hk?&nrc>J5+=e>j)#FTV1`ZF9B9#5Rfe*GbKStn%61Zb#oBZWY182|PZBnW_Wn zIXR}83p;feoi8*uHwU$9yRm3%YsXVA=+yuA`_F6?tgiC`25On%sVls z;M;L>jj=Zl#0Ds8%gIr_diBcQ(eZUi2t`@hBeH{M4QRy0#qlRUOI)00XJ_9ETd{`; znUxH-@~GR&SFZonk(ZY4Z+j4F@=s@n{hwD?)3UQ;-@kXqJrC+av$fnN-QTO7Hfx*GAU%o7Jnks%^J=pyE_>Ev1TH1=4ftu^rujeP0 zm$+@Z($dn}_dn%O&)$f?8N(pvILE_=Z*4l!8Aiv#QvW0B65gS5ijJ9WU&Z#4rT*P9 zdQnkPG7;ww8m8XQRyXnJDIctRbH-)GIz~_1ZC!vQWZKy~-j+Ex)f0K+&8Zn&jrnL3 z=fZfK)s0l8&QK@%Nx$u@XBy65l9T(cDXgWVbEt{xZOc6CD3&hc!oq^5mseNNK+mV2 zKW{BebnI~d^of&|l@))Qj#U}qJbV4;uU{SGss|4q#FAl7R`!jHnYeNza*gP7=)L4PLcI~oX8Ht-R)G({T6KCSl zJHIwvd46MQ;G{;*^8gNc!F-oo)2`{+*^2gd#@n}VOZl_b&yTgLWgG6tHA;=OL~aib z2#DDxlr1*5zPiYi+>@?bL*KF4?KJfY54WLoo@`77LRpK*`$%><>zlP-&k9gij=VE--cCNEL1k4#(4_rr zOvI+d#tiif7SU>ylOXQQ>drOw`fuMD&Y8b&%m|C47Rrv)t$8tn^^7gbW;@w=eQ~mj z^W@2*M7N>nhjwC}W>gD*{`@Iq9VZ0`2P<@3GW+ID$;7~aZyVm?Nv)!{_@CrrYf~kw zRHCAVJu<~EQ{Bbqr_0D{pN{pGdwj00&ba@TRxdoYWMx-xuw$0c>fbOkhBNwm%FD~` zot(H;D5xdY_~_VW%BrfoLPHr}zkdBY?JilIT=>1V483n}`8}`!HS?L>#*%Y)?%qAn z=flQ+{P=dm8*(izEm*c8@)GO&xVgFUSg+xm)3dUUadZ1pi!Z&ey0L%-+nA~?ab8R; zNY8D3O#9$D^Fy|_w)^()pBeC%n5||qJ24n9a`Wa*;xbWn7p8jT)zulPsHpPt@}?&X zr)GOLH{Lk>`^)bzd;eW{_^0^z-ftmi&M$Ua)rxrer%-!5WP9|zQ-aFhFv$VWSTuDD# z;AB_fr<9bBSN&OQ#YJpJJyFbW{>UpV3@44d3kS?0hR^rsX@4 zxO<*S$dojVk2vkRW{>^7ywG9xwXRNgwCNKbpU>Q!bxX2F4SHps#Q^zOOR{cVFi&mC z)~#E=eEoX2HAV9nJNs!YUiy=&7i??$I+u6Sj8_k)>m`wJBig|+>zt=@+A$c!=Jt4%YW!jo;*p^ z`i>lv%8H7uyu7^8(b0@+h0D?xv-}FXts1_5?Q3w`$o%QF`0t-?eW-w4@uHTx`m^HV z;?wReZ_P^A>4k)Z^uND*nwu+>sGNLDe=E_mMn?@LFI_^(fB5V4HKVt0-=4Vm@ZrPj z*RJiPhAJI$!|)F7FC!}))E z)>r0Zu#Rxk$_~^APTh$Q6i2yvcviuc+jjhS`OCwXRP!y5bI85x^%Lqgus->zq~Ou7 zckh^E7MoDBQC!Fe1V4WKh{r&;e}C-Bf7l59pP!QaY+Xm2N*$foW@+RC5ett7} z9aqH8&3z-}V5V`~Y1ie!125PlTyJ>vN6$}QuP;8;JN7rH$Jf1~uCB7XTkD{zNo}E)rwo`8-ccvTmQ zxq0N}Dns)BY=3q54GV1T|f4)(gnUSHcM4PuP{iUwX_rr%{ zXBqu6N}HM#w~~<&H4IPheNxi%zDgfmJ-sTx$mi83NAHxncEx{8{x!lFF7lgEVttNo zbJ1YqP*NuQ`gYYH8QHp?QyMZPE>Ii{S~_mRL1PB> zWMyHBW_|&I*pDB*$H$E$oF;{pQ?+DeWcHvwD0Gi~BvF_odh-5IXHYCL^yoBSjMYaFqb0Z_1xDt20)EidMYZd`tnBz zltKI>FTQ-N*lDr4zMc|mGOK;FSZv-YbWs|JNF&$Ot9``n)2C01b6P?+HtU_8ckXCv z@(T&Yp-`7Q&XbLyuIyppbH5(IzL$aF3qb2R>tULsS6}=o-@*0)-**QHB1di*pA`Gy z!!`{K4OaW!EhtSvD>(rHbfkf5Ki$qe3(9so?xf^o)Ry;npHem}A}J{;YiN#1nuWnY zey1(}T*Feis;|$EI#8IXSA<zkB)L zP>87ADGzeWe$W+Af|y?;&mD)GsLrV1pSrT0 z%BG$uYuZ~{*UFs&0pP!FDw}YD6pZ&&t9$|}q&!3f3?b+NwX>*fZVL(^6 zl$FV|trpB!ladk=3StMa6cQ2>uLDn`n@~oiavwJCDG8tG$R$`+*27;660YZW)1T~J zTmDDs_}OFvpz@fANV~zad&6>rWuIcCq0|;=J4HH~H_2BS&MAyG9 z%?0j&_*=_*dLqFRGwUU&B3{3ap0i$EoN55X(kPz5(yanQjuPZkPcYd~udS;~M=@2m zEqt>+kBaV#%Q&T3@WFEst!sLIUVzK$q_tZ4O5 zOE=f2fM2OSeS88UBO6wyN*kgs`2@0V7QcM^*5K@!p%{Phey;;s@A0c~{)V))xt*O) zdtyel;{X9~=;;NWI{ytd2nmy!{QVXp&FS6Foe*;70WB-*i}3Jp&sDL7#LfmW?9A93 zZ)RIG%=)ILe+&R^Q_md?ut3Q9<2CZSxqH9N>si512^J5PWfb{Is25W+uwqKpd^^*(6jS^7$*s)_L>crRQZvSln zRgX+qM?Y9w?ER+TP^lNp;H=j@EcOFQ2^#+msjy_D~C zaf|021MRpRV>7TaD!yi!D<>$~`K+bewG0cBSQwzJAZHXv1oc9Jh7jX5yB20va{cn0FDdTw8O-M|vqI#$r(lD~A`X4m6d9YJeVk$meO5x)xWhl;oXp zdmB+mBf0i!EkQez!;_|e@}>C!$({RO|M&O*K7s!}f&ZU9ft5=>tEeXy*4As;VTAZD z2hsd}Hp)ozJsOVV$I~A)unx}jY%B;7AQlb9>hCvx^+gEDht8dQEAFyFaCX50iK|zy zew2@tL(2xPPl93r#vWs{ff`72@ZeV<34#cdfG}#Rt3Q6V4Sw?`6C#On@nqOUcQF%$ z(r&j+7YLk{9qm3elIyNQed6GZ&d$!EnnS=>&kvp<_mirGFy&9)Ape$cil#bgo!702Kc4?O4blsnH%wti#y82 zm2lB4PZ+o-Ixp|HL5RP$X$flx650?>#dL3q?u5N}vh!?%=FY_n`~LLRkYV3kPu4^B@_QgSP_GA>X&QZM??-3m_%=|fuy z9Pr`e#|+nXM*w&A^WPg|uC`@83~0=tWD@M{?|)pbV_@6idw>vao#=enamxa z;w&R&dU`rA*%ktGfGjSpjHNP-*VNR+m0z!DZr-n=qC#4j?5dO4T$UGK89qt^)UJS{ zPz@bP_QC}cL0mhO6%}cin08-4hl5u^DBPU?n&KJ_NYhX|8l$g3vdIAMqVEwp{F&`W zm?s$chF$gZgJjwBe?V%$h2Ti(K++>b**%PBpJ2h}V(LA8{c2#HgJOfyOku+o>I?3n&?NORCXZckkF{JqjKzL?pcelOcnj35_4KOcH+bn2zibR z;!l&QO$-B3*(?54-Xq~ad8Fe?8tMR=fWd{#ZpvUoDbnB zvnDYyzc4Sa7swo(3tvpSQ{t>fF;7 zTdA#tsuIkrosy&>q@fSt@3e;0&c+XT$arFdLjyJb+!B!@HqQWF;jEa$K5I@;B9t9c z(L%csh(ru-ZOqPEO88yrz8z4scIUQ&5zD{_MHf;}!{WO1E#{WgjY*K*8=i zlh`p2`O*v@KKy!#S`22zcHW}ttpwrmo${lRY|0-nPYrX@0+4&3bW=_3X-J5gN4rI; zR&gLLWwze4;EF_3>HhlLJIJm=MlMa2(I^_vU1rP%k>unw-4x~@NO$HuRK znfaXDi-}2r2RIjWdk>S~^P4eJ>28}F><`!|4u7tnJl81;arkiSU-C0%uBSvrnXm!g zy?gh=FdJgpzi($6rk4i%h4TFi)Q&WLr{m@1yjgo%PfyQ!vNOLb2in}tk^I*1lUNZ@ zPHRO78({TOJnGJgK4{|gxSF7O)DPd}WD}1NQ4-|K=S)IWyu7JW9XFMg_2=@^wfy`SJLPiHRUamoAym ziV8_we3bDSc!ca^rTik{FQ6}>=gAbAn!KIYyItX1XgE^} zX%yP>RQgcYR8nLiv(^WZF4gFX>AATo`tx`kka66lV)`cNI^NR$uPi`rkA6#%T2oWg z39A++I%ejiqMU+@Z74c}bV=y7GVjjqwX(8`5nh(mgXGS} zccN5_P|Pz?51E;n-{LtzbeD?z#SgVVKAB?^t4W%n{rB(b&vf!>Ai(j(nisnqcTh1K z%rV&f8}@zn?78@s8x!uPnq56QeBj@`>>VO#)Od=Y;OK5{tP?khCq=ks)h}4;VBq5} zqT=J9!24!jB(8a_6LwYXx=rz1zSYpy-rn9Heu_ z+USUlpKf!+tkyw55)c{tAgAe0RKw`#Bft|uBSA15*KGMR`j}31aYGl=|Djo4}8r?HAkPB3;$h zQ1iY&+t2;nu+^rx7l7v(@edqXI(mBYY_@+puF1+0J18ULbjiwSB729fiHR(r+IzuH zm1OlQ^iFi5%DTG5=FGcc@iPK;(H96Ej(%5WK6{OX9x(T zi{Kq6nmuqD`FWf$o?~BV#=+oEN=hP+eTS@sIUI4^6d%K$`}glp!yIHt&NS;02W&tm zH|{Ff?~X>nmaKdOszzYp6+w1jW;{MFZtfuYQ0RhzaP>dRg-gSgLi;GMt(88w+d!u4 z?WG$f8!JY7f_t+EsGJtY4|8zDDRt~Vyzy2BT|O+5`4poKWUhlj;X3yJ*zZk$d!pKDfwkdfZyD~$=lJd@QE_2_4>P>jIbHVLDURU`Zu);%!o@ZavAq#Bk>4dQqNve+ zlRXH&B>5IF{ajU*tyVZ0ge9%3t6K?J7Zk7rvGp15h}>ff9UUDsVTXV9LVh`!nVAEG!3}8o zTi5>;wi}G>vZa{;wC_H6V4uH#e}VhsE~U2dpLZ;7EWveu`SRtExHv0r1AY{ql95M_ zR-vsQF0OxKB6)2CmG%I*5S)4+<;3GcLWE=%GlBL2;Go3X5Glb1Arg2VfZ3y*NK&BJ z5(ydf+ZR9yj1#)>F@S8Cczzk2mC{adE$nFKVG_1H=H=z}oPmF#oJ2pwgSZ4wRv5?xl~g&WE8mLa zjQ%$rI5@`bStD{`KMlc}qTw;b$DhDe*fzXiqNBS6ADsj(%+uT366SDiZ7u0bZEZzU zQy?0T#^iGMZgg9j(6dj`NUY%FNwv0R8y$dTe<*-mwjYety*^Rk=^<{SQelaHzHy;`8+5{$%FTFq=cI| zdf1K&sjWn?1ux>-jT@E78~pimzhra63FWHMmiX#$Q9JT7Tp|=$!ihnbBrAh6K#0f) z2@uvbkf~l*QPKIqb$bMTG-gbDHf%}SF7x|AhB*!$a)*ia;p=?xNwuG&F3)=22#(OQ zowo-K@j3He5(&jYx3}yOVW{Bc5^mpPmP0~9Z_xPB*1lo=j9~G_tg?aRz%JE? z&2*>8KK-k$s)mNpl7}&FX+H#DW--UCaw~}al#Ws+$B!TPf)7PH-kXt;k>|Xe(dcNy z;ocL2>qPA93IR*?fZBLAN{eQynWX$zfggKHT$oOp?Zz_TCoY|b$B%3W6`#$hBFf?K z487f;k{{u%H7>Z$H>;2cQ0eYYib>2Qc80$G$2Hf`u&~>zs=x0u9XWcGY29V&R~$7M z1`&hGE!G60p`fDri;#uspy-jN`1(;6ygP-*>&REdf&^pr=I09s1qFdfK1JS$j6w4? zv;?mCIlKbF-%~_D21SCfnPY0g&pd$BLxpvNHeZGS*>kM?7%9Js|4EEs$yH;E6Tyg| zAFh)SxS_#=B={@xQNY<%EiLrWc!9S4;^H2}te!Y^su~v1;Y;4V;L2L59HOFO_|{tr z3Z!hYW;Efxzkj{8Qit&3one(HJF*ea>;C;?gm+j}^sX)Q0pU@+d2;~b2rM>>>E4U* zcoVaDI60r1bmVZZzJ+lD-T{aBC7b|&H8^39+Y^He=uDxVW6w$(_#Hgsjcfq{sr0n* ztl4>a{n0R>cx;`oNd6RR<>**&>n{WBSY>79+D!}1hva2nzdpqqB>*M5)bjf1reQcwOFBf!rO+5Ciwft-Z}KZ}SpsjRZnV|aL&e&a#t-#>pY zBR&Nv0ptJ@kd~f)Q|^!7(-$w`6rGW(`-r>|%2pUpO}4%$iYI=Agxrnp@Q*0U1uLvv z^3}bgmaXK9rPw$?4uq)*Hc0q;;4VK(-8R{C2^abA-@nqbCE4TS;{XXnXy(u0AV16# zR4;I>it1`_U}^Myo3tpBA|brNUyeQy2+Is_gmi)eGq+9fDY6FnfoP zi%C{?H- zLLJ`NCodr_;DW(WcH){1)4n7B7V|ut2#f#&AjfjfX(8#BoBWL%F(`|`$g;Mqzvl)Afn#MWl25x_A}ukH=+)tJV!4tt`g?3gFv-?E=LvD5wAH<{QHA=`0P1cC72 zu=&%F+={sv3Camn=Kb_31?UG#{!@Umipt8bwY3GYS_Hc5asEe1LelU(dM*}%=JJ3g z9vb+oqOvlVm`Jgf*<8&_1f)A0O9UegaXb*<)&W-6$d9N>6Q5Q1 zFhS*p&;!6NgATF|eGk`#iHO{$CEge$L@XzTt>3?Wdk(*^4~rSrAYur2QCFp9d#bC+ zwY7WbJ6^tdo_)i_Xdp_Oo|SkKp^uL88j zyP!{t0S78Z@N#pXNnnGer_0Acgej30mP%}f7l;w`H#{!lrQ*lH7|Gm$X~}-TP-T~oND6#Tuo(~*NIOW(^7yg-YHL#yKG?L* zf+W^0fT?kcaob$Feo)dBW}+HHHwzpD-Zab^DuH;5*kz?B1zq5ebGG9QfY3zb0R>OF zx#1J#sEEy*MFi<|fW{P@^0kEWn(0@O6Nc;Oi5(pf5OB%a`8<>+m7LU+6lK?xG0m>? zPQ%JgW*V}xevL)|xhM%>`Pd}YkUX(T8ljfPxLA+>-n(PR4p3r0aw8;DrWY5@Yz3<( zxHviQ;uhhdsdBzim@0Ng#N>Ik5E8w@*cjMVhH0tTKyaN+v%aCYajq9{tc*!Fbai$X zT?~oKmXVbW+AmfiM++yG4fG*6XoM!<)B9Ud-w>lQ8knn1yMGig1&<4DJG@bXea z#ErR_(LyY7c6N4Eb#)?oBo`@OkM3&r(D1I+Dj}y~{h+!`ciHvK5Xsi?@MM`+s{%;G z;JUp4w|-6{1sV_*c0)^x6;&O@mea$81RRK+3_Dp8--ig6^z=>MwNGMwT?yFm5OK>v ztEtOe7Q1|We6Ge6TN$R_+CzRRX46#P%&cd8e~4D98Q+eG_Ka_6olt;xBjHrEK-jP65SuWiag`WQ;>b=*_tKNmAS zHk9%>?NV1&Rn_;+hEPl5;^T*ddjbj%3kU=OOq?<8JeQ(XER8g?si~=PXWlF5FTF!U zH6N}AoO9bakG~H6{Ax(^O`#!z{UG!81JvEv#3Uby#-?C45)qb^i#x-0rRy7d-N>&v z!XhTtI5{=zb6h;AJMuywzj7uc?_z4BR^8aRH(ajuen=mHiivf;zdtqR3T{`+paqOH zCmsN5AgKQ0v_94qlu#(CQ{)X;S^^p?Xi>^3G^5((EjIe0mW3T%os%oY^Mw{c?5p55$h8!D|1^8Nl26`sZb_&)gX>G0tSh?PXuD$ zys@ieJ6Ng#1X=~HjbhiXXtdG5z(DiaKi9#T^C5o`i5Qp$1iA#UPPvm`0milEiN8Of zG|A1)4PrH7qi48oB4qqBB0>%|1(3(+Y$pUX1l07Pt=HODVpRcb{zuf^x9_Z|sw=nN zK`7Wzgbi9#!ZVU^LFk17PB(nNe7OeEI4Gd`DIEs^Y5-^IU8~FM>-_-1e&PiJo#3Yj z5oIAraC~J?lIz5pa_6M24FbH)f0SM;wZ-H$bIZh1{akUBxm4R?k7H4A|1F>NMI=9dCuiH+-3&I?GUXQ2kW{Is|Rm0$2Y1guydAMeQZ#~$G`_;Cp8sx&yq4}-IQE$iG|T=qlZc3&DA%x2dyy>mIH5j(CC z^i=m!Zedq4HhgiiW!Tb0;eh#6XZ{&*8R_?sk%+7nXs8di3ZtLYr;wKB3s8XDa?RMj ze*G#vHHq(MhPe4%`_+$IAtE+hFJ8O=V|s<$>@6tspc#0hgcAq8>VZfR zzun{=5bUc!;-H>pvzau=2Vs!nL}n`Lj7Cw^9lRtESM+%9+uC;EPq4rs9Nd(a!#u|x z7LlgmoL$&Fu%9kWDBX~ed48*+z@c`aelar2mQ<3F@pD*TPiPFee3bKxsjY-itN6I6 zYeGE+l04C{(F(B&%^qsZtm^bnP4UK=99H~m+AVcyP5jGxr&aS>icV@s+9OQwY7zSwh8=S!MIc@Ys&cW_1>A|_HUXlX@c+==_ed3bzuRQk%5?IPiF4&Al2&qhZ_ z+5KZ$$M_i-U6ZH%B{r@>(?CACOotC69u6Qs!j5w%&<{ZZv)hdJNAp~3&|EvUAMv|_ zqWE}1t%_fNJ-kv*r2`2CtyA4(pmc@6Mb`O<6~bFU+aO^#j5K|s!_H#Z<4s<(x4)HL z%r1)XIRM-)n7r&+yV3}M5;nv^9xH3>&(J*E+^Kf$IwBzviLORipPv#Ej_~oNm2Y@1 z@w|*ETrPvl04H!0XqK!5}iafg534zkL0CNfwEsQehMi46Nw4QczM>A(@Qt2P(ug4V_(kZT@CD)%5^jwyKWK=kLZTX}`rEf|Z7oC1M6G5Q7FKJ^fmqQNT0*n< z>}hGKTV>->1Qtq-Zdv``8eii5LSK3#^FaeUv>AwtF@xCI=NEqKqL*S1cKlH#Btck! z$T{nUVC5i{dLgmda(=X#J$C|F$fINHZVO&)%PO(`w6yo;uCyjAsjEvH8z;^F#@#PJ z9$!J#{xLR>nr?ykx71=b+*O#rOfIKD=~+Z=e_#huv5D_-hle%0z0(G*4`U>RIf;3v zJ8IpT59Be@^aREjswnUXXeXk68QY5T;*Q~4o8g!u>TKpvh?2tOi15qJ&27v;44DMl^(Z#>I4}dzLSMbQhLR+#^ zmUgn=j_BM{Vw?CW8lXVvpP^lof2V{6goJ8(dU^~(lsjf4kQidU&?Y2UD0JnJ{1eU#L1vJ9ckb@lFDp&AYt{}Cn*9XqxSG9sb+3kVz+6r@K4K*O>4f38xf5=DUX z_Q#j6Uss^KVLqTZc7nk0Z{ED2opg0|{oUSOU?L`hwjT>gC0GJeikRO+R@yr?HTCB8okWBm6P9DaTK+V4k`_3ESh~ZW!(2Bu4s%h?s?%dPWwJ822p*uE3)@Y;v+P7X2B@-qn1wdl=EKk_S1V#7 z4uytLoZ;z08NK?c60DvH!2{qiv|0pTxEfGa`~Uv^I8KCxfByVQzS?SVRuQD9bqs(2 za+ku*n-@Xud`-g6K78HSyd|5>aw}ZdYVb&i&!Vo>o_V*i^n{F{O%fqXm(yoaLD3*E z9R?T&?MBuiB`u8xJmi0}8z4Ud>bb3k*|{ub7@#->u#2zh#qPiyF$Dz$s{URkraAwrBdXWx>TNBp7wAg3TG+fA4R6kG*z zeSq6Gco&4q=qL*&sHmirUEm^_wVw`D;}UlZo#f6L(IaFDk~^a$X(#``|D6#=q1#5g zA5Ccq%Fh`D%~8il@V??uWkKW5EbFoY|MjUHy)iu(hIiO$G)4M!aB8(7mcO$$>t0HXvM z0EFDqJ3cO>s>*-`nq|~VOk)FypiI?L=tK4=tZY1189#>g7GWaRl>9e=^2Q0(0J1x{`y$xcyea- zP~XN5A*3dWpRR#>MdZNcK{!`nGIcEOHef^Uok(Vph#(qtT5zl%y{h>C zfQ7%JF6{uThL6_|1D+6fizik_Ygrim2%jDW{yNk~MBV|6@Jki5)v#4zsaha62@EsR zk{o7v57<DX}mqdMe>eBirT!E}IjV%($dqY3+;tePyqJt*mikqinO^$Y4-s zq0?gbpKQ*sFwIQ%{OgmUZ;kI+%0@pGQ@)qFlk4844^ONa7<6|1TOAO!a%I-PpzuxK zKXOsq{BNKz-#_67hlru`@_SHi&|w~7Tytq@>B+*)+qXUb{?-3-|MZC<>F3PCw7a~v z!X2ILbDP{G#t>mx^!4{|CB-Kujx{eF)7-P@^e)-)I5+oh;OwO_?M*I6mmlvh#wRE5 zmrjtAldEW8Q9DV0R!C?7^3N4b&G5>E0Pyym5@GfF#Ghgj;-ly$nMGhgSNbsty>A`6 zdzR75+|Jfk%F61D4&^Xd6i_W%Vr5qs%l7Tt;d8;p@{wVuYniCU2D6yyzw%aw9hZ#G zbusRjaOZa<_uy*R*Vm&CZ^HuI;wAYAHfyS#v+m^J z5S5f9ljo7AB<6M%Y6h;W5}Nm`(9rgQiEAqilZ$+QQXW`WBzNi9$1?1fFifG7Y>U@? z1%YA$3ZvYj$3W6=Z)PKO%bXl~{Y*90;IJ?wyCR@;+y?fuQr4YMio2RG7T+~0%JRxn zPxgk=fVJ9WC~*I@n*SmS|8^1srXfkaAe06VA6~==9U~(naOWP>!fo5Pw`Fq>u}-`i zdf)B91^`wb_>9od&_i$P8k?FtVT4rT8NgnFs8=++wXMBFv-kxN)3s(cDV4v3F!h&s{CIm)Anml_spkP_GehRSgVKx-xoD9Hik&;Ar&)XDdr`4_rO~* zCDb_F2bv~E6=_kcu)4ee3sKyOlN1U~!(RMO@HcMe7bH-_x=k~W8H$8E%sqVa zkEW($?Wx#=5LcjE0=8^HK&CK4GKa%SLtP#65W((F?AvvdqDwisQp9@YIPn}%Z_O<& zC1J5ww(i)&prbN18NX7Y?A54dWRzH0eS;}T+6%?K@y8CqoZaxy(<@B`7%3q}U!k7N z%FT_5irRwEF{yxu6A9`v6cA*bt@q%Y&>G%jx8*Uvl%*!bkhlM5(! ze=PHV_+^%qXxT^RGA3t;!h72=F}v}z(!A6sC^&eR(jJwRJ9}B3sQ2vIS1@U#ByY^5 zIEL|(F7fWEfq|pjGQQrYWj*;gyYM~FxXG3trAyJ!W2WuhhGuS~djmQg<(kndc5F7i za3-eFAlI#9IX5Rql06^_#l0><422GY5^_!PDJkCAdnf64BgJq2@2~9LVu(O7@U5U@ z&`_Eg3x?fPReiFBjQls{W=GeRC&RX1h%DSm`P}6E{N-TXT!pE&>hBx{n#Ls@M_wQD z7Tx=58-M51C&!-j$z48nagW`RBNX@Y==NTxsSH16gwfBX(Ztjh=Tb~W*C5Q-Gqieq z^oH}3r>@z`NveO7>N3+$tCJf$QE+yY%x6-_V<5kR&IWcV|=2?Myc+?jFk?&&Z zU_~gL*oQvKj3@$-BvMlt5(WgC*;t(#NK7rEB^SJn#>d4~0kvSunCJ1!n+Xh)bBRRt z+QDj1!qGJLh=MVv3>e%R#z6Z%5-}-q7pVL#-`&U4?XZXY#>by0YvgWi;qMTYYi?~r zg2MxYP3=6|I4&gkl;$%KtPT;O=t93fxl%*)6yTSM02fLIJ`%hlDfpw`^v{s*VIUL} zs4DO4OkiF4q?T@|XBlHu{6AAAX5F0}Q@+EdI(Y$q#=*p~1KqO|24S$d+wA*_3bWQn z?N-LNF}(u{M>Hn!PgIG*gYWMU}&{hK;z;Im!I0LO~J-Mn9^S`Zx#`bRb3ax?3& z{IrKg$#DAqPEs#1?vBG8e6cZ!<8f^BOcWIZY5H@denAdn#K~1SIB3)(^YDru8iC3b zxXjW3+vf1J0HTJ(6}UGV> zj1<<9@1DU7kuDaDDh?mg6uuf=Qf(fmT@1Qqns@X#>Q|tVl;o`yP!k*v`}#(Y@(CVa4-mma`W(WUwoBzqR#|)E~ zFVlWD|39n~lTTvOwT8dXOi9~4>yxv){OM0wv>n-Iigg^rr1jN5mcnSnn{8&7ZsFgD z-~3CwZs#3&s6ZDc-dUr)UE*GnTl}Q{HMlYz+k(r{MZ-cX1(wj1i@(?v@bx}Y3K)4F z?0LDeje8-Uzy_e{l{gbbDrPTxz^6Jjzu`>|bT&nz{}cD~-yi+&6Zr2F`0o?=fAI;J-G)+u*$&y0?85wadmhkAlhqs3*X>4k-A;GbQ~Ibq(?(UFL_AWH3U!6*QbM?Qk5(FL4Q>Bd@*P z^35?1c@eQ$6mjBHopHQkbSsS$_dy6V71Tih4&EOvrSD^P2UO@^ck^Qh+~g8*BUmh^Vnh< zcajtmo6)^haq1BS9AZjqarFF?;qD(peG%c|1T}dl;l>IOIAyB|+Cm&ALLv_FU>0{? z3SI>s7K3fZhe<4C2brM2Ucy9&4o@~Un>aIxIDzb)hz)uzG6q{?GwkBJ(-lkbhlr2t z+*~l*WZ$&_DArd@Dnq7Zi_yq=K0X?VF1D*K>+`Mru+X7k9>&llWHKVjGTw3~te)f! z{qmitom`%WFb+<^jXK$!x_r#Vg?N}{-8R@-GdTNh0FaL=*P+kr03TF* zlDlM7o?c$*zwe?7pA;oOb)dTuC;r?d1g-x8F+L#f3JNqhcFPYEa$y>j4&K9W7E|)0 zva%HC3bj&exKoQB!w9M*#PtW?FGB)^0EG8CjchSRpDVZj`PrQtLv9;809|psR}E&Z z##_=g8KACU5ShAIiyEN8({meUXbM$^BrpGL<>(_0a$|+WLUM0uQ3hiI`8>?UwTqa@ zCk_ZKG|9-!Bu?a+A3cYV2k0R^&lnER!*n#S`bR}BFC7~ztIUoDge!k14%iM&xowJ) zbO3KiBv3mHgCVeAWvc00^>fgb)oGlcnCayUs|NzKcr#{mUK>&%2Cw)!pMLqy;#0_@ zLwXN84nn>sZWl*g!iIee8S|)sKy%8o`^XU%r!b}yCkr*^&<{<1z}_@w{;ujbaGmUh{IsZ)UV8cIqJW&PTOfh;AZ7n5gV^#M+$J$b{eU4 zS8cut=CtBONFv68wMk5xN1GIMl%y76J}|mxs6LE1XO5gb;Q9#{yvBjW(oHc?G^8QA zCN_-cC(O-<`i2oivg1H(0^-G9o=nX^SWS*u)JF<(*N;&1XXoY;iX)!5rwn@~BAdji z<t*YT3Xu(#@4gY_{#F`}_)-=B;)=PJ{#odhTFzrXfyMG`AT2dSz0%WPL#cCv)Dz z3DppoDv;Fog9=JmYbbCqo-zw>962&NjC41Ii?rZg-Fx>gQ_uXC4gpES{9}Rwqtc0e zsyJI}n6nW9WE>UENI1{%T$ou2fdSs5iQb+?;hCeB= zsp;#U>5F*Lhd~bOs6<_yriRUXH0jOj*Y|QGaV8uoEz!t3d*w3}F9;y%PA1d6<;11z zA@`^>_nF_jiQ;~UmsegjI56-Sb7rDXl87Uwq#8RrpMwBWh`HfxVs|RP@U(?QP|q3^ zN3;Bf6g=TR%!k<4B_<@`Y)|6IO`^a<1rc*hc=KdZ3^NLFfy!Yy^^J@?#e303iHAZ` zQKkyH{Wr$Oh|9DN$Qt?mUQI>CCnrY`LQtVDk<7&Lc;gE$oeAn6Q&QyiP2z+rcQ7ou zxJrx>IoJK0o1VS^a*0Q1fkTZ^eF%#k1LVXwAqEknTE`ko-P|yFM1&^@eOgwwo@cSE z5t{iUuyh=cps7k6vr8NZ{U7C?`gA@HRS+s&ro^F7oiU5@mlshy?25Jg5qppc6Qo2+ zg&41rVGo$TKa2yw6ciQz@Yy49<@u;I$E@cC%1T2YKO)Gjdc{l033|q+oq31X)*xR{ z#7+VP_)2#Z_Bwe|u^~wZ%M#KVB-$$2iTn?~GZROK!4jCBo-TtXezj=%Zp&!vuH5_A`SIx5u#2?re(@v;^lairG~E+9OA3%LD-1uHKg_VL32 z>|6Z!ksVElLP;g(R0vF$N;o1&B|kw1k>Y@7N;?NILd%0BZ4#y}rC9q@)gB9HHgeSB5pYRwN#UH6=o>r=1yy&l!I=@ zWM}V>blVVCPPy|GJ6u6^=u=z-aT5F^_*?@xcdraD&Qp95b_PS=-j-^;j$c_AT(HMn z=nPIbuDE|X>iv5Xg82vhQiy7eq3t7>umOM|^tH*K+P+UVg617mz91m7VBdv2C~-u% z%Q}5QmhFT(QO~eMd@HZ6nGhB!u^Ili+TH{j>$YwCKBbUUnx&HF(nM(@4I(8;^B_eE z4Wdj%B~t^@JV?sWJQ5O8hUDr}qLL}35)mp%W%_={b>H{;*7vRZoz}O$XWj2w&->ir zJpcdW*oSS~_HE~O>o%mpO<44SS%Di6^$Pm6FpzW%7#uXaVf`s0q#r0|!cu zfM5S;igWJ@B8)LZA1W^cXXlA9Z(_(STMKsFholVRffHF3y4RcHjZ%Ug5BXgJZL`qZ$&gT);Q z+kk;xD)G~8S5vzVJOjL@T$)**B&z_v!>Q&y!f%{QCM5fbawt}+i(1!LDFQY2e)h+S6x_e#P$PBb5#D@ z5B1~|wX57BBE6V(?Mq8F4Dy5KpM_x?2tAZr!Y3W@bChefC_W?-q8*q^I|;gO zN~<0eb&LUURGG7y!Nr$^Pz)iIuKl+2dd?<`m(?}mA3~x5^2QXd2{p;PHJz)9gx@Io zCiNO8HDbl%@gx2&+s?$F1>>tadrD$m?{L@7On2XN+T9N*jtVVjYaF@;CJO9%8*BP4 zzVZqdR*EeI!$lMX=9Ydlb~z4J51YQvd!3s*NK^B5O~z1Y+v4J_4N=dzmV2|ZOpJoH zmae#LGCYFWC}AHjQAb}v1|B$WTvvn)J#FpOm4s~(gtREW7$lQZQ26qFH4vpg6_orV z!Dcf7`AdhQzqq*gJ|^I&8xI5o%oa+Mb5o=x!mf~4sb9|DK6?DP7h>}E8Nz!Op*sT{ zGSDqzt{KDGcb`7V9Dn+{>>KP>MPqJW-T^8V;T?;ifB&-+#>Z<3 z1Mj_G6RUsi9;c+RgK<^;^dF2eg*Ox}|1|E1VmuwA$~KG!@7E1Y5*G4Fu4zB(>(iKU8+Ee; zo}4(eZ=Vc=4P9K*;nc2A@vtA(vHdd@SqH10*9lD$1DUm6!qc9XL&WeV}bd{>?X>KV$^`~Ow%ecj1!nrxR zxiF_a4GAUfr*pRt)HrUraGbftgku+;lQNG61&v$7L;ru z*RHj%udn~7b$d|%#x%tl$XAae)`G2$lw{40(st;Uq!5OMHTUY?9aWTsn?PkIuKcW7 z(&nQBW!tuWM;M`+)?2!?2ZD(KTNo1bgUJ^me!zg_n%ZwE9mbk7E}vo@7ykIM9(3Uc z#>-OfQY`=@3vZ;9aeiq7)$SvdVK`J7p+?GG9;9ftQ)+3oP85AZ7v<0I6qEsw{4Cfn zQDL>tauHvKI*f+26ygIVjKR*GaTT7ge~-7bOps7{nA74=ZfI`Mv6lARw#|fG zrNa4!m|p(Q^K(n@qvQ`6cvAQKy7H;d~v=1(&%GoGI_kfH(fVDz=*n-E>23qhd_x}=^R9Zi?(PG4UDkGk_ea_753g`H)2d%X_Is} zZV+W^eZABDlFXcGbVw=thZ2bCml%*yIPY3Hf)A7zoX(JuPYH4|KdK}bHx(pfJ{X}1 zd}C{FRYxKKuYkfN9ND=+Ap*7zE;>jqko8Z-yW@3L!U3W*EGm~kg^n8M3R&iZ+kmv7 zoim88IWb}}%P8oY<>FR%;_8ZKBjVIw*3Zwj^Gj<3V@#*|4wR+c&75^Kk9qMblEVcn5raw1;aj;B-bLyc*oM zui;x*(l9k29PSwOH0S#foocqJ7t~Belq-?YU;!C~sorf~y>{(kEGSIw&x$rXA?!Dh z`3&GeNsgR6>4PtJdk^9F`X2A-6cko=D{sAyQ$|C(jw7R^b^12msQp3XMU_QZ5MR~t zzVyA_oiPrX)D zjbX$eTy|`i%ZuF=&#a?H``tZF=p_o&DJ8 zL4|mmUgzr)I=HpM#SSHBr$+~vF4Ehy>AK1LJ)bX~hSrvcZx&6AxNPwYrhaS7nbj-g z<{r4+f;P?vR_o+Ita(TN(M9mm6TFLYt0jhlZ~_Fem>48>K!~Lx5yi8MeXBF_PH(YT zwPwv8(?V-2D;n$iiZ?|=k%S9-VJanzV|3XU<|*UXHa_ad=bMJPLY7z>wjiT$p|ZxDt>JL`tx*b>QrHW8+w!hIYID*maI z{kT`to4!iphM}?X8(A$|LJv3PAN_+DJ0b|l_j>qX159H?h4kf@US9bwvq}eoF?&;DxCS0Tandm&M>2N zX;FK^40)83cW~>@W;SGiq8>C{(r;d>__j68#(6dCwU!M@cFo?!)zZ({5_`QLL4LrP zF`WP?s5q_`RdMjarot*?`D#r1KehP0kywSkWtN#)KTt29uZi6_K$JytojdQ(-y+Hb zy7G`^H^kpFIwI zqBLqMP$1)A5{}OfEbas%$~{x1ashn|Yt>J0orR)Xrlay;@1KO(Yzhh@wDg-z7ob_k z)c!?7MQI>@Cmj2l;Nyd6hIcROVL6`3WEgp=H-29THy)YO!VH5SU3tqBhv zJkZOT9=uUgnX+cawI%ERJ~2W>NpMRs6H8L?ds97kM7%cg9H{-fn{VLSnTlRYu}c?^ z8_VwuoHC_1hnvT>cY--%6QdKfTuhtqp)t(1c@W<4<|u^=tEE3PeF1>o~r&0+0v1wf3yPBE+ zL7qpnj6RQ~p5Kvbqv>0)1B}c2LNL~Od3kbRngqOEG<{(oa4^cV7<47s{C?SKS1J!m zLeHn`Q?zRzyee}AC-+V^PomBE#^7}+k{Oa<*ObJ_$Sxc@U;}JU6u#Hh;nv`ZL(tZ$ zw}S=^;&l%{F%U?^`^C#!%qt+jY>#YCID#-|K@YlP=Kb*}GRji)#XbY!KqE27MzoW3 z6a2RjW(5VA9u6q!c2B#7*e}Kkgj|BbR=4PCq|9QW4eYx#8IU@7wy9|!lqsUMroI&` z9cV0PxVdT5Ne|z0V~N_OZZ#x^s18ps*BSss67goG%gwDG^@j8W8k^sY5=}GZRm7Xc z`7Oz4zr+pQe-TJ^jHWQzpjmmxpAIYIMxe1#%*n--M2_l;CQ3=$c@$J}HYFthFmaBU z?!0ol7%wL5AgvPvD4ZApQIy8h%91|B$gfXbh0^Qoac^&j##tWx`;B5@q_67Gp)wTl zzu-@p`X2DM*dNa$j&*oyLw4ZturUq&0hwfI4Mz!~8s0dO8; zx**g<&MA4~zhtf5Mh8vZIZoiDoM5@?2@oq!1WkkBLi&wNKHYm83E=l(G|TTP3sXkB zE+^C$iYh_!tHcMsL6pbZ@?jbxbX@>Xwe-D zVJihCPmda=gMWhA(u|~n_PW=W3?!L>ed<=kMn{|DZKT^dCSeE#Lg%SpB`Cb~GC0`6 zI0GHLT*f`y!hJ}AN3DI>7o33+ay_a@{+0L#6j+x0{F!OHwL}fP-k-c=a-$qIQraT63T0>+Rc7j%HO?5!>N~JAq6YG*U>r{smj30TnO>m4L&q zVo?z;T)_ai_Lixi-)6o2_A}ODX*%%=Gs=Cyu@);?9l;+EqsrI>q?I=Ai_x=ER}#`$ zI1#Eq@V*1_1K@VDQ6%KE_ z4SZ=7jL%Qq*s!NFQf`V7;0y(U->tczZqWwg3q7;`sVOPy;59T3AIJ=MwYQ4o+^Mfz zpb=faH<{UziUHnJk$i?!6ymcoqDwCch-LZLIPYS(k`!L8kf?ekt1gMWbma;b3tdpP zP&r-YC1D1_mn3i1enEQItN9^`RLCL6q=UBU^DQghf2X&UYplupmh_3d8~dexJA)Ns zg#n|){EA*nr-XH$eu3)>%&o|yG|H*Yn@}HH_MfLDPek~2O=qZh- zjP5T8*6P802NU|j!NDh>6@MmAPBG?8o&0AHn)=rw%5+Qs3gsJEdI>$&-b}e)J~bj+ zBo1p>KAGI~GNmAQ$)!c1_wOr3>`Brp`6>Ejx~5K#lu#>A<|K&aE#&5c`V%V?oNW(h zUa_=08z7z%L*b0zg;oWv9@FcOcP}~?vI{=I>5v!VLQ?wj7cFo_x{pknl2-$tP|b-G zeO0vLz)VFsRq8qTbVlf+Ye3nLR1&QXwwC9M>4SwIF8cFJRg64iYPaE*iz(P4IJ{Y0 zS=4P|#fA|-OG_9BqbwdAuPwGJ@t%b=6!eWK!3@N|Nnhs+M;QW@>-=CTcVzvz_BpHQ zgqW7?UeI@m+R0Qkm0`n%;iOS@Z;Tb%=#Jv6PJMevk^o*jD;9yR>PU03@JoirfwaaS#db#>iq^A!nVlsy`;Fd)a zd`GlVLjOnMC%jQhr4j*;0ptY6fV8m5+A}b`E0=0K3?|=Wn}5qyFEr}-xm9m_^eNM+CSZq~8xhpBF%$D|HfpvZDs#vR>LWgny!XhU zyk@V?rDZpKI=r`YZ!{G*z~w&EC*rb$VxfE(RT=M=aA5)3HqNU8sss9ZXc*^?O~Gz| zcf{Ep6p1QO&&ukuS>YUg{dTa;M*xm^90Ny>?#LGwyKLACGU%(+kb>vB=xy&(Mkg-jx>Io zUZNw#2oMBO#qG7?`>X4xG0IgqZIXf3^uYYU>WpPvYi5SfMi^FXoy0r^^p{}V8Q7d@ zXy|M2f)C!%c%>o3L<&l>$f|$LO!2Oa*3HP(uWJ3>C1zDeuVl%kMI+Se*KgP`fa)A| zNgAy-%O5+>2+vm4)LioG(Xb&y+9xV&A*1vr$TEz?e-JdoRPuGD5lINWB0UmWV+z+{ z;gThT-|mx@l?A61DV@wG0Be1h8H6>evI7SXCUb1;-z7tv{7*SCu)++zTPR zh+7>%oGP6ejc=|+g&#W2etd@xE}ii|5T48Cw^MRC|sND6#X+;(z@iY9! zPzO(l4bWU~-KA)J1s^~TPGtgNiR3}i3v2p5SS&H}PdmoFO-S&CNnHJFB?bIO~8AGh+Vr|zdXRQtsVnBz2^E;KLvK7{fITuNXi0t&+RJKOp`RLO;1-w$SGJb!a_*QBQutSvitJGHcDyoZDR zF+y|fgnQc-x(;O5nZ=9ngs01VtA1@5u>IqOZ@<6X%Jffa-O{icIet-x$tz|5=LA~! zRkwal-*e3iT18BxhV4Jn63DQ;5Uvx_fjI}ESnBDQX0di@;p1chhf!72`-|5@FTIW( z7*L?#?I<0)`k}bnMsHfopuAcyY09`!}AL1BMU(YpYgtjc|5{ zF^cUwA)5f;pRVGjz<5{exn;oD{k;t@RsQstC=p{6n5caXW^82^Md0aIaXQ}~cLS%S ztFyT?tj86%jDFKYuV>rD2iyPVR0#17wOa=QGm%*OO`rphPEWc|QAZ|WR{$Rt@2Z=h zy`4V@`yUQJu)}llwI%PF21sWXOy5$QIidvHQC)#$F>aI#WliJYshx_uF}xLKkk@#u z`T@MNFVkj>17>agavarKEPZ!(m7VT2~&BV2sv+Z#HfN7lNDf zM80hQg7Iq4rusYXF{XQvPPKnE(wVv38AFeYX#^x8v(~S_Sh3ME&}bhUS`|b=O9Hkj z_zV0Wj7~5^rF*vnJ&}I}-hxmfk{*0(Nr$3@n#mT($6MIXX2~e2AUp8dY6m(^7X!&g zaCDhs9A7=JU$<^vSc41fxKnyg#VrABV1p=jZOH~2S@lw(Sr$bFBlzzSSd=u^xS%TF zKMY||5qRS2rno1-6% zUqwINW1m;N4$QWBoKX9)0~!UMarHFEK>x~gxK3JC6B6{ks z0+hmFH8ZbWPxa{4>jMo3Q#!OKLudyz0HWa1MSl+qIt|cM6%G5c8^BIX@qWX-WB>`A z*Nplu?6b`DU+<*x0-1_qNSI~*hfxLmtqbqFbi~y0}l$q)_ zo83k^E^Q}jV~g`9%zuJm&dtlTqF>UTL$~vE>*Wvu?2H}zqO_&o{IINr&|a7&uyIY; zh6)IpVa5Sj@Amyi3t(ew+oNN4P#qn!`|4vEA_5p- zN+u}vb8AKM%VDMGPo3Ha>MvMa%xU+=R8oE?WE{L>8zuidaJ+$1<8GvL2Yh`~SVHK* zKjc>?zhHaNiXAkKAkDnqGkDR8M|(PBA+-&dO;Se2ykDNP_4P}c#ds`O%!R=>$On}JH074MEH!lzXn=@*t5%&=tWi68J^e!*lW&f_Yv|B)Cld;E@8tSf zy>i9aN?hYH^J*|%6w9t>#(r{H|C`}rq36%xdFlRrWLfIIJSMjfp5YX{ zJ@$p)TM3*bCU#d()(YtN5#8=d!<@49wT^b5kJ}#(2-vrJj93jtUd$>e@MU%m7|CU& zTGae8LR(PwcMqhLA8Z{h++TKzhDug%sUdDp7Ou%XjgIEz65#O zrp=p~>JT`5B z3z4xHawB4hQTIu9#d`GBoK*Lt+s?XGQ7oj~oQ>lHm(khsyh|B*Mm#O(lP>-G`NJu6 zNPf?JI93rBH5unK$4uvx?62D}QB!mBmb?i;&vi{2fBnjPeyXgp(ihzf45>Mwv(R)w z`$hQE35o65RFstOO3+U|eB4~R^@gk)2uBEzBB*qub^V;qH(3z2MX8T)gK5iG;g8yD z89C){+x{aH3@mGJwVYS*7U)UsJt5Q?_8e(^nMlXoFwLl~Z`rcAmbI}Rq28r$I{mme zJBcnyCDOxmm;7x?vjzoiy=LmeyTfZ?8UI_LCh>v#VA_Gk766w^Z8PT|~} zI$YF0hzSn~p1gbaymr;|#wMt{he0G)?A&>zR9c0 z%`_9%1yvyaoyp}Z+NXVV{sr$w(iai1!wS2F+ zHZ>(e0ckXaV~>PzPllxcerZpUCIEt`0_9{eFAo(wX!`X2qF*HylLwCi27oyuN$-Oc zUgl()f@A&fJsiQ}wC=oHo z832g}5#W6M?2pF)*#gAHM5#2uhGXsg>K0BL`-l93LP_2l_%9iAU*o)vnl;jnSAD_hk9?s<60n`oMKd*LeeuC%oDU7_KfpBAU?J7ZN*lcsC=#sVr}U{ zvdTk)Aud6Jbnn$|(xh0G=QTO`XeWJyUKlS5VVEs&BFAAvD~)-sCG1KoEypLkCmXgE zl_OjiZLe(#MU#z6&x=J9>Whytjtx0(KKdHQ5b`=>w?s|Ozid-w%y|S`mVyPPb`E{G z3paRCbs!lLvy1;`&BRURD*#M_=>;IgO-AM{pjKrIcJX*uUI{p^mFhaPAki)M>e=*# zUX@t34gR5mh**f`eAbKxpy;X`VwX12znEf6gXJ%RYi{);h0P2#F{kVPF`JC5i=r%=9R zs%$RhqFZ5YPHt{5rWSPTPcOSseZ1I${N0-CRVpTI(|grG2_61BZ~Xf2YEg7 zvgo;_t^T%(rQ5E@+=@-Dtn9tDwW(!iOUS95u)Pzr^oHlGF4m(wRaHY& zhyOiwmeRnsZ3aJ@zUOJwjyZePuO_~Iv3c~HfiIeNO?we_p*i2p{pX%`2leiL{GhmO z+8yhm&ovRfCui**`lnY0X)ZiGoMd!G{>9z=EvWs3Vi;%AUo;~Y8#c6q+Qo5l=Cvg$ z82Yk0<8_Cr8X6wRWP4A}`O!rtYw3~Ga|XY&pIlK@l}g?eoCK>Iw&dS!M@fDqzoP!= z6p%SD4EX*uHeRbZPNjp*TpP&{qaRIWW8F2b1z+C(*DW+MMMXuT5(On^kYK?SpK{3C zu37nS`t<3ut+i$Mj~_owGE2y8gTTo#5EtO{e63HqD-L|Rz37^1Prnh*PiK_r-deU; z*WPOG%;vtnNl7zEo?KCa;mf{>GzEl1F<9JzNO$)AkyEE+j?VF>mGpSJ9z$3`{C=9Xmq z*s+_w$HPNPO?fDtCxIrqbF1AgWyR9!$eSrd4#L+4eDuL{x zB7X*m`RZ&vkpk_KI-EXBU*Biu=uB=mA{*9t^=7nw`;W>AAL;u&Gs=*5N$Ke5%yUh~ zdF<-KnFa>3plb7rbJ;?|Ru%)sjR456#z!o=)*Wd9FvH`&{*n`e#W*geZ5!LGL-yMX zQ+KwZf5e{botUmhDts-Wk;eMw4&~)))%eyO|;Ai}@fC*@OGC$rRLen9R zXXvsUV(S5YVV^G<>&Fc^X(-qTj~S9_7dopPmL<_|(qvY;9mKYgvGJl5vkQjAXZMAd zC#C$o?rDmd+R1?kMDZexh>oVJZF_(9m>%8U=I6KP=P~%QpL}j*b-?)QvaxF)YMz;R z=Sq0E*F^u_LqU4Otqv>mk)=VtFmc3{Pv*jlbX@BMpNQ$tyY3z3E0_w+C^X6sSaW-fy3*!a`vZjKyFQy2g(Y`p<0Axh;b1pplB* zS`;>0nRZQ4t}P`R$Z65dokl&qG@b{ie-Qh5E`BM%KSylmn=@FK%4Wm)m)a-c+wp4k z;@4mwR7$SIL}~W2Wj*=p%yJ>w{{ctm;N2+( z!@mCB#q$xqXZ*_(UJo8U>Q5dQ>tE=(#@&#a-mlYsOGR6;>WbTnOm^n*?t)I^5ebJG zq4J|zT3mjv_wkzYa)XT}oGBspTf4Tupd=SAB;Fqc=HaX+y?lA>XF!GD%dt+U##?NN zSYKNF=FPsyNDW74XGU;}uFiL+SAkPb0%E_br#R{)`ayP&S*~B-mJdg!KNEF59(jJ= zmWegRiSyFR;b2M$@;m;@=g+Hntqi`5 zN7-DzKY^Lh!l-{WZkVGgbNIA7@L`do#W;sXqTH2Clqmw?^a-Dm8nbFN(*Pb!_#vX;TYLL{ zg8l1SfAponZ=(gO4e!%BFs-yG;P>a_B|k9P#rV3%?%lhi=fn`$UhI7C-D-NIO@3R? z_Hu389P;;X{xtMz7rCf!1^uqKO)=a%c|`lxLe(@a{!5E?y58CzGgNQRIAA|aQO>)E zT$h@*Z9F2{3`hx{p{lq{RquW`xwa|t-a{1ST1pBZ9>`}1DO7$03!_bHh1a00bS4L;=j;#qUbp@1`lkCXJb7H#oD1Psy!4GH3A6VK291 z6+o{FaSFN0HB2h6i)3FLfNhq%)_5faVPX^)*Sl{gS^mRMF(=b*f2zldQBOFM{^!$^ zlcjK-inx1Mm;N7PJpWJS=Q9^&PC6bC(24F1$@z)1&GF}+or~csiq*+YtnWMT)Sm*5 z#W*2b(514ggsR*U2I{-7dAPDyElDHEfZ z2&$0+J~iF=BJD?`Bbm$G!omZ3POY_zVZ%E0#QCSHT8uVu4;atdhb=LDAMwXO zbIF?Fi>|%4(H_xV9)gb;)w_H1M46!H=O-<`Izx3Y42#Ot9gx70Ob=IcyH^RTRrqEGPA@#l;1x?Upq=TYCHU z7@_J#N`wt;)TZ^q1nl0i>#d$4mn*!Us&dzYqO z@Ed?UjHYhK@9#rU9|^>Vm!mmhLhp+gC-#6CWO(7^pXRh)Yt0=UyOW)wU!Ke=E0x{L zu;|LD!0nUI?Od!%pV5b#w`5ya%3Ip>Fqi?(n!_@ky02gNCMN12B(u5Hr9Q6l%Gi-( z#$4WT2>a~I{zfFg9aB}XjO2P~SM71VY<;|JdmJ!|Y}+F-qGJI^6*H8mdlGb|9H z@ovtXJuB4hU>r767JzxPZgC_D3=>+sWd#LCG!cvNzJ19bUvR_-aIy32P4!_fP6r0I zXFPNl1GRPc3dKAI#`{CsyX>wx_PL;O%h^U0KN{1fZ8e!Zhzgl%l9#tvZ=k51_?B8) zTGXH#>gp2KxD-ftESiDIiKuE40#a2aZDF$~rWOZWo zm*&x@+<%{T_ux4SoM^^rS+P|-$|`2HoFFfebj*Ah&S?r~%$-eX8IPB5RuX?@6j`g4*O^*78F07O)d-ii@;v?#s zuxa0s;~NgM-LOI5ZPK)sUzRAhLZYHXR17;-Ol#eQH4B`iCx``@w;ab$jH1Dc)kW8Q z|6VY`W%thnivHvGM2ClanY+7K%E=?LFgZGcj(GK$(|*>Fy0R|}KOCgw9f*7QUB59uTY3tUidjo)Bd8^p+6y->q(q6a4Bh>{c}eOK+BdHa6xM>> z`L?#Te(e&g#XQAt-?lN)Ey0FBYz!0Xab~yIHPjSwhQk(3Me@b`?#Zr~MO|^_$}pAy zfLIDqBSdXP{uWA(V-w?dv@}hrZ$yaM&hc}Qb_9S!AZ?S~V&fcABNo+2+&0kk*7g;fWsj)T8+{|h1EEyqM zw`*5lawLN;VW-gUF!JU9=ZwzoKiy&6@4M8hP@xHHZ9KZ;srhIOCAzP{s34pH3OGiO_H7mVh)+lxQh z$wmfh$Ddy8aV*f7%@LQjpxpX^`svE8JGXA7!8w1@X;}1oetVZ@lO=<@4q!xto63mk zUd#qehI>P45-nlAH^$wgTnIH8j-gm@F-uwT<%=EzrpPSR2{AM`+!YMHlt!E1GH7+O z!(;Pw#-(wR$_XloiCf|_WrM3V_~r1>FvkXa_B?z#r2bPl`dl7b|6O0DVvOvZ5hI89 z@C9M()FV-#7og&3ayQN_e^tJ%mE&ktWJN#);*Z{7m!LDhx&hgil-7{-S}?-x5gL!* z-1f=#;tL}l++J5j>s(P&b9uDziUf_eX;;}nUS7;TgUtw%CgiI><0q6P*}1uBA!G{- zRvo6KT6*w0VTJ}wdV| z5aWcgxX`zTvmQ13Aq7$hbrE?RwQ&*}ac{H_P{x*Y3U)?*tvv6FhmHVlvR=taluD6I zi&yIFV8;fO3uNO19$LA9^_qQYdc|-_a`MdUsluy*4)YQ>OZpvIo-_YYctYYjKF1 z*1)3&u4iYMtAB<2!IiNGCWUzs7SbZ8vo?gUJatdgnThfj0ysw8X5oQ|9|psNFSi%W zvYy_0q4jtFANBRZe({7e6K}o%6>rJwWPuZL820s)h##R=WNOUA`9V$1*5jHkq{r)n z2XmyK9j9_;;u2v49+}ueXsTOR_U_j&4VO0dZi%0h^U);@3)LK@!IF>pRi7pec?*1@ zKm)FzpdchPG=-x7W!i%Z5Hx#R)tk|Le=6z$3@i%8zIe1yI1__95?cksLiH&h`0?8g zfxm*c+$#R$$R&BaPJ@XM^tE!_1Uez1VPwU}kmr4)slu$S7h4?-6tg?5u)KE@yY{*5 zlzy}Xd=~01N&wtjf?Qew#TV-OJzYO$#pH_l(}l?&$`D~d$Q)gk?yzsC3LOSCZ&e@+ zW5qSaKsMvst}$&bhbm1B(z($)c}XUtS(%x}V!jGqUUP9SZ5wIKD8JEqqgfb3=1u>lRwAbZq%D*9{KZU z&rD2B{nqaJ?Q{J&nUvdv8Nki!ws8o{ znYKIA-G{#yH9V-%5jF(HWLt1NmawzOI&0`6m{X zI@K-nNgy^**-_025fv%CP5e_~i!BOrm}4M1208sW3Jg_xz9<*V`a*QRatcVlqJIJh zpRlV9dk@=E$WER-d2ec|lA~DFCOo>$%;s0uRb&rh>6U26I07a>%~VPhh9R0%!9nkf{&odQcK?WY1jGR&=va_hPpJ9Bd}$tMP)P?}rbjj9I`%_ZDsEr%<0g6ukbi#Mhigh;Bfsg42qYjEYlm6IR}U? zWKsXSgl=?OV)luWCHiaxDUToa)*C1`s1G>))aIxI5{s-&i%V<%`i~YsxGG-AZCeg1 zrXCA7y>4b*2N6t&eso5aaTsj#%>`9K4+vTVF81}~({67Q-FksP8@RYkIzQdL6QXin z*YQntV`S|n#2(`5U0ig{!)!&UNyv>G9oPbwwzl=paxs&_2iU=6aOt~udr^8RJ;-CH z*~MsCeESXOv8Q$)_llyGLt2k7YZ<2j0wlGT6Wz0&gwd{QQSU)tNXa4x(F z>1h|l9-uS3?3i6;+S8LJ$k0&!*RE;k3$C?a&J?UJsuu=D#4k7=kY7@Am{c=$=l8bE zPx>&`M6q@4bqCsuHYm+eu4Qk|F*rj1*XNKDJbou+FdWo^i_s{J#5Qmal~|fZ@ZWF; zCz|o1b)>u?>48d4x$`I?K?L;h=H3o#s%&fAf2H;xo{?n4*(Aq=9Jk;c3N(!oZ6xsr zNmq;O-GA?z#vYz_6}z;dI_z#<&+YT-ErX#O74NKBxX{AUcL(Bo76u9XZ;k|&mO1z$ z!`8Fg`GVhb@`bOsTl#U;Vaf;o zH?T=>-2u-VALiA~Z&m&FdlzYwJ?=fvq^%FZ?WQ|)tC)E5@=86oQ=@09(W}`@mUQRK zs7%`>hc-)0TI06^Z!Y}1ghyJXNAQ%Y$sm0s0Z?}zEMefM=t&7kbM%$Tu%J6$UC&WW zGf>zorxqC+g9lzL@8q=sRvtZlS{C60Gsel#=b-!uAH-qWTJo@?k8b3}#*t&k?k5z| zMR2K%-e}%2OPD>fMdvsJW<;hJQ=V?olK1hvtH0pF@2c{0SzplbXzhh_FirB6FM8H33`0Z=yEFxG6gdSpdaAJE$M{jx`vXe*$ zwZ%GMnjSC87jIu@b)XcXBp?|8!B?!M0`3K*t(%D)9=P-uHd-E2ta4m;>_`GeL2QP} z^5wQa=m4QhY*iy(y?iM)->`IY9dDLifxzLAdEIR5p2ZVgbeQz%Pb&oK;2 zZF6=pIMMPYzgA(1kAeNQ&UH`*3}YBhQMq#YvdyXx~&E^`0(z&LrS>PM`x<-FPkyF{l-wj>r1OI z4_)i!xx!(ZrCeGj^B4YJK@uamDGY5hzZ`x_ptulHCtvESofNKEoWs|1hC|lzSi}$N zx^Ou5(c2b0e!{PS&ro`H|GXc`f90T+G=U(5pjnV+8+T7%9Dx`QHFCFDyOP;R%P>d2 zs@ZK`pwfMlHEw@ATAx?UI@2;~ebt~*{V$fZA1O8PZTo+aXy`I&l6xx5u#l7DTf90? zV^wV0_TT{VTOGbG8>zu4q-+}x;YEPZnAq$Zbb6L}GW#}ktN9auT=*+WlHR`Un{`qx z=%K&L?jiN=O&|ITg%?oEzwmvdQKo-9XncSC{0ZLnjtPN2g2T$m@ga21Vk#yy)Z==O z_7dtBPJ$Qa9t=-iJq+*0XUse{!G+QZapRmzi>UeE0klaZ?BpP(16fX`1t%N}?FMI= zpd-Akgh2x0Y2opNiemfQ&j0+TS@#zh8+)dfzQc4(A1%F@y@FlG_JHgud38OOL)H_3 zml|rvkBTnj1Xi!8j~k~OW+UD~?*Z-Z{_ChLYT>2)pB@#9_H8{|8}5x=H<9W`pp)DU zet#Qot7vq~u1ZOu7vZaf35RHi=^RDb2!IG7s)|;bI-ezkGUZU?C{I~;AtMn6jcq)V zY>plcL~=IkAAj`otDKSkqc#;8e0IY&CntUIkeC;4wTZHDX~48nl5@eqOx3i9BLnnr zckj#q+{0!f<02-OH{n`-WoR&-D1wzhlT#d+DzIQwp-zwfMTX2UFxa1b4+I6CavzN~ zI~dsRFvD~#M^I65FM~LwQFG|5P13|{mJR`Va7Nx%e1pFedO;#?;OmKY@vY#hN6BoQ zz97flQG%P8bLr*EJKF{j(5a$BVq;yNrWYi*jAbtvT05<(iOgBzJ!g7qb8b}Do&~UW zRAoq2jYl8PD4R2Xei}#TRCRpu#5+18*PENG@{KGuZ|=Zhp(TPjdtrL>pPdNL=6GfrcbGW&Pl?`Zj;9OGB%$Y1-E=wLzlj;ks1qcc#uG(Eb*(%Dy)^>h1t-Elc zm>A^GAV>%T1@gp9JjV{Atd*Or6Ep^Z~W{sGgw*`Nuw7y;~BP(k?Kd7SwAuJ&8s#BhIWH~V< z+`Bh>Gt_IDb0}7w>f2!%b59$f)53F)L@7dyop`zpJ4G03KXOjC6FE7f$ zAjeyXrF2bAgR-4ERJ(+l*ktXY|D|h~7~f25BRB1W-S=-N4TtbR_R)_J2#z5=*#eNk~#8s$CC?;Dnlt%!iI+(=rRz-uRLU;k=lX_x<}|loHdu(zljr zm*+kLZ~|{db|rf{Lm%pwLJs(TaM$*1__RlDq#x`)R19nx4GkY{sjkG(+pmi7!wUCU zA(28N7JE_X8R_J3)UdFzk)t5s?Tcms3@;4CfYS)noS(=M46QuBM9k3U&Kn$2ZS=Efg?{2lZatA=2e4AoD#uyD&U9 zwil7_TukB`>(;rK7ICV@nxN=1+I0bGN>mxVqKJt)uMNmT>m(|3m`^78h0VgOYfCcY zU#uobpfVZ6PODYU4K-$G-)r`vYl|+ym^b5sHSZ0G7Gpq(_z$!T(!4!GRbAzxBdRU!SFuXTfWw__yr^*aG-xYbx@^o z_XT-HAIO;&J~E=WNogkiNls_@@bK7$#$ew;8unexR>8|i_NRtAon3V8@$$91+o9&* zPKX9IYvU!tvVu%%MX%T^S7bppL_!>LhFAX;{!8%gL=8a%Fczd+Xh*#Vh%%(uy><6l znUDpC6(pb?A<^+*Z5W$;Rc~o&cr^BUwG^U-u6&Q^&ezsBOn3gGWQz|`LkdcUd!tan zliMVFQ8y4I!#^DfL>@s={64Xv*vn+N=89JI=hE>H^#15MY?;_cG%r_e`KHLX6)MIB zD8DKY9-Nh}G(>#s509{xDo=bEo9)ge5nT;>Ipp~ByN0+@$TI{E3AGT>1}ruG)F6aE zB2G~;ZoE8XF?}sbb_P(ve3OxaaP@81&o8w!33*M|Ga%!*aXOr}4sq*D=K+Fe@iqIE zV>FuS ze(11S(IuvaS3la*kAgu|+qSl&FU8pw#rJ^Xd;OdHd z^2}hp`9rj|gEoy#G}B==fZk5#kc|Qj8i@SrBa*XED=LN?Uzj$3yqhG6SgKBuYN$pbNLk24Q=C?u4Dv=0_Hqrpg0#d z3`Pkzdc}>LMTTcIeiV+`=krrr0+s)PTs2H$jz|*RV3v)|)tLzzfzLK*?4F;Vn(B2- z0~!t|xz%@DH;h?x!`{8=mqzt_RyPqBfv^0xy5oWMb;s1o*oPkVs~Vok^zYp}87tOz zfZ%XZ$l644ggx~|qbVd*SXhY!!l*#;Cnh1$pO3Y8+&QBe(YaV~Fl`-|Pl}h`Vf(J#gof7!gQrg~xw>;!c=q0m zvN3<1I1(H@zfq@omPA5ke78N0k)&~2n$`sUR~K6Jn)keF#w@lCK^UB#$15llNK`Ra z45mW0;<1r#k@@m4BbvVeF&@UGL~^~Tb1}UUZZN`(E%5ba{#zO2*R&9pkV!+UI|qj} z;XD4WtW4i+8S`i2&T_clVe*@pJ!4;)c__d$U=5JE*HMt-uwq%GSAVQul6~M5cNTB% zA@3u=e_p=(W2_{Ty{gSZZ_2&i=uw;yp{Vl&i}dA&TcFau=(cA zeh|q88BC#+n)aY)~NW5{Q@9&7=>rUd%HbJZ;w$305BrwgW8WD;r|GM$jr^Z2p@bPD%>;9XLx zqoreL(HAJ^?9@%a86lWo&`Hbv$hFHV71Ip=Obnh&H34q{WT^1wY1wxA+C_WRBrHgr z`twV^w1g|K3#7|sjs!M6-geo71ut$E+@Mc*b7$>>S7E1L*0%B3`|}*+LMYSZ+zY{+ z8VzAH&de^8qq-n^1nr_Pr9FPtH;V8i@-j5CkUi2ywW}}P^`J{B4a7d4C$3=GMpEPR zfidYU1)0lF0*N7Se)s8l5b02u+fyVlhH?~v8>n{^(pq7o3ClpNo zIalAOV(mwEag$%Ywue!jNWIb&(}T*6H|GpqwdiIej)FE3qd4z$3o@OSTC%9&pz@-s zL0x-#7XNS{F~B=20XGO^wb71UwX7@2iI;v?Wd|8rb<@4GCQ+AmWq{y!tnf9=9J*vF>g`)6U4HRe%c+lz_NIN-ftOWA0+`( zK{AOFLP5bB=v1spgku3yw8Y_#ed4l`bN`i6`}}W8t#0N#L&G+X!8e!P5Z+k)Wwgs) z8D%f`+0gkBST5_1?=ETIigc zFWs4-VAkEg_*18%tP&-V{Mj*uK;88IqblM<>X!HRD++)FxpiwaGTP0KkLX#2s2?59 z{oRfClK%)bKzzAa4d$Tc&_NI|{Le3n*x&TLLI^Wp?Dz`)XjJ9I%{ulPfMVY)s`x~^uvc) z`l^x;U+3J{uW6e6yVeXmD#yn}VV#1;OUmr(d6mQ@{sNU!xc+=0Mw&SBjg4vVSL2ZS z4exlA9fEkF6&I_}ZVfe%<0_If-!sW9T-GsT`$}CRx-kfIF&Kl)Fp}1}V9&o)5>Jwn zBz$NKJG;YxU)+0maq}HJ=oKw9Q$7)1qQfe9mw?Yp4sEAP7K{u1OL#$CVq&vr-#hg4 z$Q;f%1knT#OsPXPwLb3o`p)C&wwjE&VD=zoHnmIyXB)cbl+rWw;=Gd)jGpRK`HOvsXlD1(VlU|{@H_K(gU-3zW0o#$GuQ` z)b!o&Y5AUh3&-DCdcX1a?}Y`)I6~M|{phAdW+c7XWRKuxfOqYna6|(&!s5>1?!$)< zSC1$Qp1QLuIMfV;lEBE9r1TLrK{1FM0ilngR!CenO;0>-6l$W1kjvR9agbm7hlR@P zi490${N=;p>7epMX@Gf4RK!V|!#+Ke>tWPq+IhfRV>eS;0{$iSXeVidyzPT}`axC- z={l7P$c51SA)wzi?ZRc+p=&e*JRvXzT8n=V8vyQwVHik(4w?w}os1J2<-ulk?ISPB zVb>O>BzG4|_u8*bwm;U=atU=Ct}3ADdHMO-y2DE_{F^!hz+%zj#UskU63Aim%5Pb( zMz_fCf&t0Cx^HaPgCgGgoqGAg`pi?j^fO_@4kdP^G#@*9bnv8Q@mSHBulyg8RKv7kd|;&b=%J8O^tse%f=Hpw z64Ev*hPs-ni`9-c`>zv9(6tVTP%{HY=zIJ1 z>j#bb7^+Ch%)J^#G80Dv%aiw!$xOus2uG9f7wNj{R<1iB6tTP<1>tUg?m2y5;g^%Y<(>B?)Fy>GbP-cN)BQRKS$hYMR^QXGKxa^WV=d^m**(eR-vpD0hQ0b!kIbo!t(O-eiC7Ho&Ek7 zXxKti)6I_KOn6`1#ZOaPx4eDiE~-4iMDQ^-^z_MG5(oau`$iY;^`l=@ej;vbfPo5c ztkSwMj{5o6ZaJ zW}fv*tE&P|+8-F0|6qhgZv~m9`sw_6dNafuD@^_@hUij#_TuiP{#mD&YP0u-ipt+= zir=9_7uAX|_!C$tye;x9Q~QN${`tq5ch78KDK?_zPLLHKYv$(WNfpkNi_u@)MYf|( zqoh9lVH}K!M~LOhSDi`!tax;NGs=nKW0{o$7cW`_O}crz#oB-Wc`G0GMOS?OoD2~- zzxWD*WDW})w@hHU_$3jOPfb|$Br|jCn{gIVz!I>0*Tz}%U(8scm2o|eN*_Av-C_5p z@MJ9zP&6^;rtK~;7hm9Jnk$foM}+;UrT1Hz3=DKCDox#QJ=z(o<<{jV?+k>YE77vs z(zTm-Y)K_lW21U*o|&^u{9W})8DVkmxO7ECMg}_V#t;#8QAb}@>Akd(bTe}&^bnt6 z_9^}QRhv~a_aRwWz51Mob7pxRe0I+zrT@Hzy1D}S^@v-+&lNg%7K4U>qc$5ihT4j` z4&sc`=%#tRE$_6t0`CNd6Cgyub=4wl&grNIC3e>pSs e-#^>;Rw<2D^1VAgC{vg4KXdhs^=|8$d;VY6{oL08 diff --git a/tdesign-component/example/test/refresh/goldens/pull_down_refresh_timeout_post_action_light.png b/tdesign-component/example/test/refresh/goldens/pull_down_refresh_timeout_post_action_light.png index 1c83f7e3e3234f7b752276e4f5ff2815d9b451b7..e4ddc7aa28dfb083fee0e3bf69d662fd972c7663 100644 GIT binary patch literal 36015 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�y8rX%|E$3Otib;dS71!~z?8kc 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 delta 33836 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 diff --git a/tdesign-component/example/test/skeleton/goldens/skeleton_page_light.png b/tdesign-component/example/test/skeleton/goldens/skeleton_page_light.png index 8b9a5a24e3b3c4f422fc2610f0b9bfbbe89cc107..5a29756b544fd874d9969d3a078356d1c2b5bdd9 100644 GIT binary patch delta 6015 zcmcIoc{r5&`+mzQMJFoMv9*vap=^nmL<>UpvP~s>IF@NF@lr|4*AgMwvSk^~93jjY zqa>9jOH7!C>|>d+4`%TDOy~4ne%Cpje%J5%{xR1z%RBG;e4hJ$p69-w1l)#%cU-YT zyc<7l+6Y0ApM0WW@!n%iFpkKIc~)4xroO7dq*8@qc`eO(PTb!oqGafH=e*rmi(cp& zziI5@vuth^gO5&K+t+*=7V3qX8dooh7*by86`pNeAAXR(Atoww^y2Xdv*nw}h_Z7$ z@()?F6vpmX;T{__o2TWfnAh17OfoHxJRC@0N%cdZ-^Qlaryuou1E(mPGCMnqT9~-dK_+8za$cv*Y>uqGS9kfbsz;(#(fQ2IPOGNW zqvl_JJwH$%V=bG|wmd(c@a~F=7o{RKV}3Zrdtq1Y5SlyXh&SD*M-ErjpGM?@LVprs z#%M2}iHL}hRa8tGhw<;PD0P>6XNcCDl0sLi=MER2KZ{tQnUs0K(IN^KWkzE4<0gH=O!BIVmZxHT$#&lm7X!l9NF*177I%zy&60YHC{A+duQy zm?Xvrjuqso{MuLJaEt&=^=_7=)BJ5TuT8X+e9*>pV5~9K)edQCX|i&1<_Coc&J;yV zVPV^wD3SS>+`9w9DWz`lqV=t%ZtX#oHAQtE3os3g>FB3oM-89;TYxyKXu4fT zXJ-)Zt%!)oe*NC1X7tDI?m}iSjO3i5@8wNPYwNt>Vdtn_hfk=gs=jwFDa_Ar!K23E zxxsjopuCIM&}fg5=CtK{#A@c!?1;zU+Xvm%Ap}Xc#i=hgzg-M3#9&n2KT2!Owdhit zc_8+T81t$c=9z7|`|=!(C*p*#_Vs|~$>4>F)`_kX(p>RQ1-lkNL(3 z$|!CezYHGt5zyQ;`&2=G{uwk(@reYy&C}bL`S`K0yj{h)0toskZb|?Z#X)8B0q`837)*cX9iLRa|44pKjb(4@gm1T56GykU*82 z=ioX!++-lRT~=1M%}|jzxI%}M0HG_fDSnlOg$9Cxf=E0U6ehB5afWMcw;j1@X^s}< zC6Ur3E4mel-m45%2!4+9;fCyXBRkhY8@HjMLw72;!gOAXL0k6Gp^NY|AQ>b-O4!W^dm zKux^SH7w=PfcjWZxng*|{7Yu(S*7GH&XP4o3ZOO;3_{v#p`bc6#h&~#_)-< zKjHZv{r|`*{QEU;(G=ai3w(>cFMBn;1gqD~vRhpbNv!kojUJFzRAi)xZ)}nKM$pdU zbWJbSa8Pr<`dwPT?f+hR{|@JO^Z)$<=G^AV@&5F8S1gc7ST{z?e>8S%Y%Itw!#J;_ ztE&Kv8_&;p%hNI9O_eKiwD#^|$NHaRmSSLbHW*pN2F|dEhQ&1f`(JMsLxi#o>r31_ zWKn4Jh+T$3ZfVf`n20zxbX^P}BbjFG(U2(5>0EMh?Q#1Jv4OqdZevR$8BB!?1niJ} z_6>nuPFgV{T$?ll9RrMf%k$^+U*6;%f6?RB(A6BlyVHMe)YRzFp-l1srNkvhdueco zzL_qpd(-NfP3{@VEEa==Tv}Q(kcuDcC6TCsBVwR$Tju8GQXM58+@V*qye6qc+ujvA znmBH2YwP!B?WCMF*22%PWM+1DzrMY_y|2AB*TyZelKZ!B78DX1tJ{g3m}jhmko#jR zMn*=)X?Yo)-Z0BnaOX~srI{gQ5NTmy0rseVPYjsO0#h`5Vd0tSin>gRWYS0 zXbmM=PdKO_JuvsF*uv71#*J7Emn^8NvKty2ip$}Ivb@S9;m#kF(&tDxAQ0A8S5)EE z>kP|~;9vrim18CoabhnAg}6EP?1%Beck%dfECI`6ADeAdrbb_8!3&c>00u37iQKPW zAG4c`Tw5lOYl}mxw&AZ=IG4{hYtFykVIuwD%$d0U=?WVg8jfG zkCeWqn*A=AD3TszzW^gv|2?k?$SMNmRR^`H1~HZ zCQ5pCJ+I?sIvE)mb(3I{bK|4d0heq3{;pvB3ah$51Ysr0+X~#T^M^;$(1qZJq~#9W zLm-YldtMa4YpX{uCFNB5jm*3kt69U~Ca)$-oQ@s^x~6h?66hoFK)ecrfc0(eKJzBOikMrVL_($U)b#fZ0Vz$Xp3wiG^i@WJUE!}jAQ$EI(oc~SCj-`<#} zi8gk8^AA&f{k!5pqkHQv9|p!vPB_XPNNDOO#S~4nSM!jfaRXFC-aA!+25bPwf^G2r z1^%?6hpRx`KFWI6&|vQ1kj|0xt}T1?&A>F0O)vvYL)(Lle5s98y}me=TA#s*fnywr z8q$GFRZG8{Mj4l81OkC{`H;>r3LHTyW}q%=bx^3i=t4>9P;LH_T8!ZZWjmL)_Pc_fg z-Q97Z%9=!sVuf>Y`vX%;oPHw$G#(6I-Jl)cyMLe9E_lSVJLf`)^L)TnAn-xOp{DwD z%F4@w9YJ2&M_aSYf|*`M$x3wu7#zw2M;x}NPfS>#P-UP2WVPl?(hBm@+iJqOf>+q< zk9%(rW|n!7-9P4=78VuFVddoIJ8o^>VPR{V;-?m+kk&&51`eK?@#Pc?pZ4ODg~^_z z*#P~=hc4Z?MyJry-ucogN7E26wI^IMUSIJMdA5d&ZxqMR799!P+`W4|Mycwi2TamG z0$!l#l*&|df&DaUFr$OCw&D%^0If~tA&~Uc4>US`p;>|?L`GR6k+{zUvDk7X(o2!t}H2BDQNd~ge3n@Z4}E8_)-%j4yZ4K~D}vQ8Wl7abif67XhSUjqQf zqiLs0$pt4R_!qEb2;|mQw5xc+hhU!@coW4b0CAY@g8~)uySW6(13Q4PQpg1CI>?|i zK0G67VQ!uchITKjr3GjK-={}Fe>^IG;ko2UtufwzxS{U;PQm+iU>#8eCWq@Pd&#CM zpcwE|1tb%wjB&s(&iUIt%RfH_9^MVirT`)ZlwSeH(*lh~$MC7zt6h1^FK>^x0IL%mX%%mre(aaQwXM)vZFORaQ}rmA zsYzBihi9M}YAugux8=$tzl%RGqF0%fbpnn9e8eQkSp$kTrg$Z*xW)O?I#z)pR1KKA z7{Z>e=ZrW`b(Gk?fB$~&6|dr3A5q|P14l5CCo)rI9)ZqdUlm{qx_t-Of~Yz-?uruA zv;wWA{r1lyU}FP>LoVp{`wbHVxC8bVJb7{){99ID-qOh_7hMPsvzKPe0%x5$qD4@U zmYd|zCWfXwn6=XbbH$q3>I(jE36=$;#i3gviu8ft`Tm3Do5-l(d7V65_bIg$OLftO z&VqH2oY%VwE(jZ=I1T|1$W?kE4}!SH_4RZtzUK$wzw?YdgDH=Iu#t-2W?0Kr6Xhp* z`pd7Mm`U4Y?r!9mcaI6P+NXJ-IEl{eY6bQ20e+Ro9&FVldY=Nc}?_hn8 z3;vl>hW}LK#xg3ni-Ul@^y9Ag z-?cZ#`oLj25B8|N3Zerm8#`XfiVoIDvpOcu)Z&L~MtFF51nw?2lrTQ)g7Hq+4AofP z7%gN}fH5D;4~5Cy7?tI=_*&qppr2lHc+)_rxm)#dzAr+_PizuGd?^K}PbHGd0& zdpjDcX^PnF_y2MCn=eazOA~?d*HFR#!iq4CujU5!e&1h$^m9Avm2GS_emu+IVTw8R?{v) z#C}aWcAWF2Pz}fG!J_9j{P4^B1jg2|QN5{!?~D4%o6o N`X`O`uqQ6w_#a$)W0L>? delta 35687 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 ZL96`#esxFRS1SBBcJu_ROQYs^{vW}<-j@IX diff --git a/tdesign-component/example/test/tabs/goldens/tabs_content_selected_dark.png b/tdesign-component/example/test/tabs/goldens/tabs_content_selected_dark.png index 4935c6ae35b99455e805a3c1bc54b206edecf705..c08006adc7101947683d437524b84da809a07e86 100644 GIT binary patch delta 5533 zcmb_gcQjmIw3diy(V|6jM^oaogal*>1=PT`ci8$U8N<%1$6033%^>KIgaOdXg=kndv;in=g zAP@=3iTKK4CTrEMNh;#~uH7KymMll^v9f5Xh>YG$1yO`Hb2g^$ibItsiL%F81lI&` zHC8$ar&(7qX$EF7boKU5RsB3T_zllINXPkVx>$S5Fvki%#{*9GV`R$e#HN-Sz0*l~ zwKvH}sWPgvyZ>hS|D-z+y{T2?Uyvx-KBVxbz zGOm$Q@xd1^ID4?@L)9HcB8#VSvmul}{`p@m0R9gvp3o3tXlZF^StR(>_{gUY))*sp zlrgYa;qaIdW=C|97@;TZ0WN% z_9mQjrXFjKwyhks|C!i1FF;WHl|s`*fAk=fQb&*W8&-h0fHorcZH1v?=Dh*iDpT#5 zY(9WQ|J&nyq0OChz=3PtpVEn5uMy!purH|$!)~5q<(}(W*?(qy5GVY|?#bWp#~;br6@yJVEW>fkfzhjWN6CfUVr+26vr*34Jo? z)pH%9xQ>S$%QnlgH=M$bsh()hAeAVzv*yMgj;jK$VaNKxPsJ{5Xmh}K#w0ZHlNti& z92tupD-hd)zVPgOEE7kl)bN01wZ`n$oh*B6Pi1>gNlXvH_f1)kpnpl!Za=(@*$V+8O5t8CF#k0)%fz6?Kf}UoYo9xLem1T&c(d93~dKf(dIYj6Xl8g zH0nIMk!}<+-@MQf1BOxVakaBu}hrwWk%v}HaoBiygze1KAoIDc!VbJ#DYQtK?jx@R7RHe=3whKV| zymT*tJ=twCHtZrwdLHPRgD+^9nld|1pa_1U8h4hqrmD7P>*JG?lj#%;jEy%=8Y3b| zUcY|ruka1IaiU^oZvL|~oVxM5F#SQaE(K4!3dc_Eyx*hILM_}%lDTbvqL2(TIq20? zog1fjW5(KATN50Y0sk}W@$<~tQDldZg4KGw#AwbmZ8uq+2cUUDY(H>E-O@cR-gW9c zr1Y&B@s$f#K&Pka5l-fC|K>};#i${3>7mi4tPK-ucV==3npNw($8whJar*29E1in? zc(QzU^2>$|saY~y(UWTzJjjr&@SCl#*IStK@j(@Unc3ZXd^hOB; zg@mI1P8l2b^(8#&Fk=&eO*l9?$*tl^r3rDsEJ*1D-)>D-2%6MQ(yu7g`g{MyA0hWxA<4zMh06KzX2MC2e&sR_yH5;MEDFYJ9W4UR zhRmwqbI9N?O{a37_at$|(Bnfj)hNdF=*`aja1(s=sAzFZhY=6vvFwKRXz`~A2%UR1 z(l!&&{di_MKw%>5i8|KchW@z0cg%2Lo9pCd)EFN>KRZ8vI6fh{sLMPA5A?YRg|hAV zMAihl4jzBkuEcz>;sKk7o*qCe(zJJ5dcnV{Y}acfUsXL-lK3AGPmy4vhI}^z%cXeA zv{N&}1QJ{Bx&As`lh?+^M$ouAtgPicqTT~1ZrMqcC=Ba^p3GA3r67?4=709h)D23F zU+C*6x?ClMkf!+=J=UGM1d-aGBw{z; zOQ`RZ(F<05m^V_xGa-FDW6m`@%HHGU<3V7vDd#@I}p1PWW`)z8C18;Zxa zM>U+gB}XW9ntOqnZSN`%oM!897C}9|C;q3RRknkchie!~DXB`w31KxgHIC!%Su;~k zmXn369XOuTd{as@;>3I70f~mSL}$n0Nc4oT0m6 z*0V8e3Pb%Ot@qkKkujZK?E(wM%Z8=;fd^>|duV!dQNZueUdm;D;PULCx4)m%E&Su? zYjylAt`OIA|8l1agSS!Zr2lm5X_>Y{29ABiT~Y(~H3Pxwa!#-ixUc-JyX4!n$^h;2 za$ak95E`lDSCQ)9m2rO_C_wFonB(H(&w8~2Zx4oBZHyH|PJexD3CIjMHuBz{#;&>r z9_F#R0moZY-Y3+eZ`<%}htk(;H9(?&^<`D=E5B|*HKGKJ@E@GQP0H293H+5&lr?A# z*=xgZsq@?Q7mh|48KvyLuX#KHgR^Ksk7&}QU3QMe;bYvrFyi%TzIHWc*T}NX{EF2( zD>s2m@l%>$33g-Xcv61?y+52F`F|E$!`U-sKyM zN79S%C@8SK&^cXZyIE`G&QJj4!Bm9)Ep-|2d5f7EXF>B82#3v9MCP=+dF^|a_4ReW zh#&v*>(*_e8u5INum(?nYsgRe3qdyEQp^K4wCx!wALsY39}L8e91{6j570w{=7trP z1d?!#mXmn|7@V#srtaUp@tm()Q1<)0sy|_JTZ>7#=C9 zM3L4@am$qr;UEn)=;a)J6z)-4gXZi4)U&$l5S{tunKL#}(%|F5HN%;NYRfr!tMhT4 zCn~c%_;i43(8N>SmZ^d6Oq!Q}yR(|NdE0iZNar4-WZ3phEkJnretqQY=LcdxTxPzo zKL<}D#Js=VNvc-Pl7o3V(orkof-?r9=;`U%=8CDVmNaMEM`r@pzKMcHOSKw$dK;UY zjm;(7_32CU4kKJ(cH+k&+}y;p6t1clq|yev%781!Our5Og_^aswXi10>T4miWcE)O zW^PSsCr1Ey3SuI_V+S8rh%8yRp70{WI&n&E8w*Brm0$v1HeM4>Qdeo0it+K#8q6`! zpo4oyss-{MACs7Vx0^nz5v@~?Lp*zSOW}Gy=InUJ#i%u~*`*PQ%+Jpk_1Sxyo0pd& z2N$lduUAr0k+ANe?Ca~hj6?YQL%_>MxVBJ>2T;$I!gjqE>VI>wUmhL_O2fb9Z;2YzdGnE-oI1oPi3`?N{5aEpNmfM~}14t20~{ zuZT#D^t`>Fcj0D(OSP7*El)~H%B=T{GYuV`xc%@$OH0eOncA|2{FbdPCt=e%$_iP) zhah2A!#H4)R}41b6vKJc&|5@Dn1E0#lEWUl_86IjK-u%wbC4*HoFxS=^8i9R6%MRQ zjoZ!|{aD7d7MS{Bsw~Rt#=?n3N<#*0oK}ZcW6U?wsD@Fh;`rXt>wDOO_g{OWILeJn z2hyZtsChN_MqY`W)fl{aqityT(gLtxFVxCfjn|UTsjGXC)Q?VcY3T)D;=$Uc{r!FQ zEcuMOI+^3`neJ+b(bLhaYb7HiBc+Y8d9DK2Rw)!W0RaKzaQL~?Ld%?V?B`W>IGD6| z-=6Hunbx@m&CZ&Vv&eQfcy0bAd_3I(^_A z+Jf+D=;;pzr58jI$4-9*L@cKY$Lp-bC05b!-n=fUvbzj_B@M^pGNSl*FHY)Y8oUU; z^R}jCmKw9j!~tcuvnvXi?Y8*^F};IA9yjsai+z}Um;!Cgx9APdEDSES(N#Kq`4s0^ zB_PPA{;@gFL;oz?Tqo5o1g3%6CK;x6 z*IkCW>2Ty#eqmvi&%R}*&l0hd6qDn4$v%@CwXkNP#KU&N5+SP*n2%sD%s8eg&+>IB z5F2|Vn%WqfnkN^gwgJ-2X1Nl#Wt3(+Gi@lhKt*xevEh=0^8Ks?w(@ax%j3a(vYT6~ z26GXsNL){=SDI8YVE6U)<>KL4a+T4h3CVd5gvKQ$bx&4U)q}M+p!S+R4dN^Au{y9AEw}Tl>Zkm2 zQtKtRocC6CO-odU;bsEp7v6{pMkjk$KtK z|A6UrpPE`nFJW@h5Y>Ea{E32X2y`e}#*G6c0=G6d+nEyFsH81QP0GuHB0KL?etnfR(h2}zD9~imvu(*@RxdR)xcT{s zllotPdH&?dlh3TsRM10@excesTsO}?-rb+HirMd^)}mx#8FT?IOyn=NB>qa6zs>{` zQxAJVxAM{fW4|t}qOOjLS5~{TD)FVBwA&#=*s8*pn8vo)O_f;_=dHInQ_(XV2XqcC0a> zqlG5&p`XZE)NE|H!P7fP(=GQubAR{lUC-bknN?|vTZ8K%%yC7FL?RNo8 zPLt(9R^8EJUK?*(PMUYc0xx~cjX-Vjig?<#N(?OG-aE6sj%CfOa)p~48_A#sAf*@P zfW6*&$kxMm!ZVEFNiOQ&(QSnC>#sP)JxRyNlJmm>M-Z`UO^ zI_kDhRVIwDJM>G*Aw$3P?e7s_0S{Kkj>YT~=@fMfa|Us4ZnX5*X}%BJjC&;Tq+}{9 z%||eNXX3xZ<@s?&H6h*;BH@R&%(BPl0o%e4yo+B7J+!51|F4nY-#O5NMo8$vDt5zW zbW8r@M)CTPJ3}hk2(#F!Nq8>!qF+|7rG@u%f2-*_&@i7P_Z1bWDT$FR9o*@b+6^xu zQxWs!Q22D9bK`6pBP@yGNdY*Szq8;5Q{6I)`z6Qo23O2=8clo*AzO0z^y&NJOKlhG4Xme2 zy5^@1h@gqOP&OI85EJ8BIG9*Al;P)!Kmx*6( zPG6V}*UXDAFnQX&b_qX;GHZtR!g-1jUIO)q^@s?SC>80c)UM7)0)C=UXc9XC#TqNk zTvV?vJqAZPAH1v~rK~ACeByb9Se%`XFw6dEa>H14%ni zXy-mo&Ef0Awrs44jI5Q;mqtufXXUz+2c5wF-^%~c#+zFFGF1RJ{Ulc#8upr-6p7fC rd|uXm{@=C)ef~e1i2r>L@$iN$xfBa26&C<|uz0F3G?h?_Z$JD8M@#g3 delta 34326 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 Xhlleh10?u&h{90szHa&5hcW*F#mh-p delta 34060 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