From 6a69569c104f6576fd6b39253eedbe48faa2b75c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=98=BF=E8=8F=9C=20Cai?= Date: Tue, 1 Sep 2026 08:32:39 +0800 Subject: [PATCH 1/5] =?UTF-8?q?docs(TTreeSelect):=20=E5=AF=B9=E9=BD=90?= =?UTF-8?q?=E5=85=AC=E5=BC=80=E7=A4=BA=E4=BE=8B=E4=B8=8E=E8=B7=AF=E5=BE=84?= =?UTF-8?q?=E5=A5=91=E7=BA=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .cnb/.reusable-stages.yml | 2 +- .github/workflows/test-build.yml | 2 +- .../acceptance.md | 18 ++ .../evidence/miniprogram-top.png | Bin 0 -> 26207 bytes specs/029-tree-select-demo-alignment/plan.md | 6 + specs/029-tree-select-demo-alignment/spec.md | 18 ++ specs/029-tree-select-demo-alignment/tasks.md | 6 + .../code/tree-select._buildDisabled.txt | 3 - .../code/tree-select._buildMultiple.txt | 15 +- .../assets/code/tree-select._buildPopup.txt | 50 ---- .../assets/code/tree-select._buildSingle.txt | 14 +- .../code/tree-select._buildThreeColumns.txt | 6 + .../example/lib/page/t_tree_select_page.dart | 222 +++++++----------- .../example/test/demo_page_test_utils.dart | 19 +- .../example/test/fonts/README.md | 5 + .../fonts/TreeSelectGoldenCJK-Regular.otf | Bin 0 -> 7604 bytes .../test/fonts/tree_select_demo_glyphs.txt | 1 + .../test/goldens/tree_select_page_dark.png | Bin 0 -> 52564 bytes .../test/goldens/tree_select_page_light.png | Bin 0 -> 52395 bytes .../test/tree_select_demo_golden_test.dart | 4 + .../example/test/tree_select_demo_test.dart | 58 +++++ .../test/tree_select_demo_test_spec.dart | 20 ++ .../tool/check_component_coverage.dart | 1 + .../tool/run_component_regression.dart | 3 + .../tool/run_visual_regression.dart | 6 + 25 files changed, 267 insertions(+), 212 deletions(-) create mode 100644 specs/029-tree-select-demo-alignment/acceptance.md create mode 100644 specs/029-tree-select-demo-alignment/evidence/miniprogram-top.png create mode 100644 specs/029-tree-select-demo-alignment/plan.md create mode 100644 specs/029-tree-select-demo-alignment/spec.md create mode 100644 specs/029-tree-select-demo-alignment/tasks.md delete mode 100644 tdesign-component/example/assets/code/tree-select._buildDisabled.txt delete mode 100644 tdesign-component/example/assets/code/tree-select._buildPopup.txt create mode 100644 tdesign-component/example/assets/code/tree-select._buildThreeColumns.txt create mode 100644 tdesign-component/example/test/fonts/TreeSelectGoldenCJK-Regular.otf create mode 100644 tdesign-component/example/test/fonts/tree_select_demo_glyphs.txt create mode 100644 tdesign-component/example/test/goldens/tree_select_page_dark.png create mode 100644 tdesign-component/example/test/goldens/tree_select_page_light.png create mode 100644 tdesign-component/example/test/tree_select_demo_golden_test.dart create mode 100644 tdesign-component/example/test/tree_select_demo_test.dart create mode 100644 tdesign-component/example/test/tree_select_demo_test_spec.dart diff --git a/.cnb/.reusable-stages.yml b/.cnb/.reusable-stages.yml index 8befeec3b..ff1d7ef23 100644 --- a/.cnb/.reusable-stages.yml +++ b/.cnb/.reusable-stages.yml @@ -29,7 +29,7 @@ # Example 页面共享功能回归,双 Flutter 版本共用;不包含 Golden。 .example-regression-tests: name: flutter test (example shared regression) - script: cd tdesign-component/example && flutter test --no-pub --exclude-tags golden test/widget_test.dart test/loading_demo_test.dart test/message_demo_test.dart test/notice_bar_page_test.dart test/popup_demo_test.dart test/popover_demo_test.dart test/popover_page_test.dart test/radio_page_test.dart test/rate_demo_test.dart test/tag_page_test.dart + script: cd tdesign-component/example && flutter test --no-pub --exclude-tags golden test/widget_test.dart test/loading_demo_test.dart test/message_demo_test.dart test/notice_bar_page_test.dart test/popup_demo_test.dart test/popover_demo_test.dart test/popover_page_test.dart test/radio_page_test.dart test/rate_demo_test.dart test/tag_page_test.dart test/tree_select_demo_test.dart # Demo 结构与 Golden 固定在 Flutter 3.32.0 Linux 执行,测试清单由 Dart 统一维护。 .visual-regression-tests: diff --git a/.github/workflows/test-build.yml b/.github/workflows/test-build.yml index 714c0f3c9..c657cfacf 100644 --- a/.github/workflows/test-build.yml +++ b/.github/workflows/test-build.yml @@ -85,7 +85,7 @@ jobs: - name: Run example shared functional tests working-directory: ./tdesign-component/example - run: flutter test --no-pub --exclude-tags golden test/widget_test.dart test/loading_demo_test.dart test/message_demo_test.dart test/notice_bar_page_test.dart test/popup_demo_test.dart test/popover_demo_test.dart test/popover_page_test.dart test/radio_page_test.dart test/rate_demo_test.dart test/tag_page_test.dart + run: flutter test --no-pub --exclude-tags golden test/widget_test.dart test/loading_demo_test.dart test/message_demo_test.dart test/notice_bar_page_test.dart test/popup_demo_test.dart test/popover_demo_test.dart test/popover_page_test.dart test/radio_page_test.dart test/rate_demo_test.dart test/tag_page_test.dart test/tree_select_demo_test.dart visual-regression: name: visual regression (flutter 3.32.0 linux) diff --git a/specs/029-tree-select-demo-alignment/acceptance.md b/specs/029-tree-select-demo-alignment/acceptance.md new file mode 100644 index 000000000..df32d13d6 --- /dev/null +++ b/specs/029-tree-select-demo-alignment/acceptance.md @@ -0,0 +1,18 @@ +# 验收记录 + +- Flutter 基线:`ccace5c61383dc2c4fd5392f41222e65b54d8010` +- 小程序基线:`b60cdc8a1dce1f06dd45cb4e41eefd31c674e514` +- 公开运行页:`https://tdesign.tencent.com/miniprogram/live/m2w/program/miniprogram/#!pages/tree-select/tree-select.html` +- API Review:不可变递归节点、完整路径值和受控模式已收敛,三列由数据深度自然产生,生产源码无需修改。 + +## 验证结果 + +- Flutter 3.32.0 / 3.47.0:组件测试 13 项、Demo 测试 4 项通过,严格 + `flutter analyze` 零告警。 +- 生产源码覆盖率:`270/272 = 99.26%`。 +- 固定 Linux + Flutter 3.32.0 明暗 Golden 各 1 张,更新后立即无更新复跑通过。 +- GitHub/CNB Demo 列表一致,回归/覆盖率/视觉矩阵工具自测通过。 + +## 未验证项 + +- Android/iOS 系统字体逐像素差异不由 Linux Golden 证明。 diff --git a/specs/029-tree-select-demo-alignment/evidence/miniprogram-top.png b/specs/029-tree-select-demo-alignment/evidence/miniprogram-top.png new file mode 100644 index 0000000000000000000000000000000000000000..0a2ba48a8741a28ccacd96230f7a46891fd4b789 GIT binary patch literal 26207 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 ARR910 literal 0 HcmV?d00001 diff --git a/specs/029-tree-select-demo-alignment/plan.md b/specs/029-tree-select-demo-alignment/plan.md new file mode 100644 index 000000000..f84f76164 --- /dev/null +++ b/specs/029-tree-select-demo-alignment/plan.md @@ -0,0 +1,6 @@ +# Plan + +1. 固定跨端基线并完成 API Review。 +2. 重排 Demo,补完整路径行为测试。 +3. 建立组件覆盖率门禁与固定 Linux 明暗 Golden。 +4. 双 Flutter 版本复验并独立提交 PR。 diff --git a/specs/029-tree-select-demo-alignment/spec.md b/specs/029-tree-select-demo-alignment/spec.md new file mode 100644 index 000000000..846dd601a --- /dev/null +++ b/specs/029-tree-select-demo-alignment/spec.md @@ -0,0 +1,18 @@ +# TreeSelect 公开 Demo 对齐 + +## 目标 + +对齐小程序公开 Demo 的基础、多选与三列场景,并建立独立行为与视觉回归。 + +## API Review + +- `TTreeSelectOption` 以不可变递归节点表达任意深度,不增加小程序 keys 映射层。 +- `value` 使用根到叶的完整路径列表;单选和多选共享同一稳定值类型,`multiple` 只改变选择数量。 +- `value + onChanged` 为严格受控模式,空 callback 表达禁用,不引入 `defaultValue`。 +- 三列是数据深度产生的布局结果,不增加列数参数;生产组件源码不变且无 breaking change。 + +## 行为契约 + +- Demo 顺序与公开页面一致。 +- 基础与多选使用二级树;三列场景使用三级树并展示完整路径。 +- 所有实例均由页面持有状态。 diff --git a/specs/029-tree-select-demo-alignment/tasks.md b/specs/029-tree-select-demo-alignment/tasks.md new file mode 100644 index 000000000..537108d9c --- /dev/null +++ b/specs/029-tree-select-demo-alignment/tasks.md @@ -0,0 +1,6 @@ +# Tasks + +- [x] DONE 固定跨端基线并完成 API Review +- [x] DONE 对齐公开 Demo 与功能测试 +- [x] DONE 完成 Golden、覆盖率和双版本验证 +- [ ] DOING 提交、推送并远端复核 PR diff --git a/tdesign-component/example/assets/code/tree-select._buildDisabled.txt b/tdesign-component/example/assets/code/tree-select._buildDisabled.txt deleted file mode 100644 index f7cdccbf3..000000000 --- a/tdesign-component/example/assets/code/tree-select._buildDisabled.txt +++ /dev/null @@ -1,3 +0,0 @@ -Widget _buildDisabled(BuildContext context) { - return TTreeSelect(options: _options, value: _singleValue); - } diff --git a/tdesign-component/example/assets/code/tree-select._buildMultiple.txt b/tdesign-component/example/assets/code/tree-select._buildMultiple.txt index b1b26daca..a885ac5a2 100644 --- a/tdesign-component/example/assets/code/tree-select._buildMultiple.txt +++ b/tdesign-component/example/assets/code/tree-select._buildMultiple.txt @@ -1,8 +1,7 @@ -Widget _buildMultiple(BuildContext context) { - return TTreeSelect( - options: _options, - value: _multipleValue, - multiple: true, - onChanged: (value) => setState(() => _multipleValue = value), - ); - } +Widget _buildMultiple(BuildContext context) => TTreeSelect( + key: const ValueKey('tree-select-multiple'), + options: _basicOptions, + value: _multiple, + multiple: true, + onChanged: (value) => setState(() => _multiple = value), + ); diff --git a/tdesign-component/example/assets/code/tree-select._buildPopup.txt b/tdesign-component/example/assets/code/tree-select._buildPopup.txt deleted file mode 100644 index 22d952eeb..000000000 --- a/tdesign-component/example/assets/code/tree-select._buildPopup.txt +++ /dev/null @@ -1,50 +0,0 @@ -Widget _buildPopup(BuildContext context) { - return TCell( - title: const TText('选择分类'), - trailing: TText( - '已选择 ${_popupValue.length} 项', - style: Theme.of(context).textTheme.bodyMedium, - ), - arrow: true, - onTap: () { - var draft = [for (final path in _popupValue) List.of(path)]; - TPopup.show( - context, - options: TPopupOptions.bottom( - height: MediaQuery.sizeOf(context).height * 0.6, - headerBuilder: (_, close) => TPopupHeader( - cancelButton: TextButton( - onPressed: close, - child: const TText('取消'), - ), - title: const TText('选择分类'), - confirmButton: TextButton( - onPressed: () { - if (mounted) { - setState(() { - _popupValue = [ - for (final path in draft) List.of(path), - ]; - }); - } - close(); - }, - child: const TText('确定'), - ), - ), - child: StatefulBuilder( - builder: (context, setPopupState) => TTreeSelect( - key: const Key('tree-select-popup'), - options: _options, - value: draft, - multiple: true, - onChanged: (value) { - setPopupState(() => draft = value); - }, - ), - ), - ), - ); - }, - ); - } diff --git a/tdesign-component/example/assets/code/tree-select._buildSingle.txt b/tdesign-component/example/assets/code/tree-select._buildSingle.txt index 13c8a0803..2dc21e338 100644 --- a/tdesign-component/example/assets/code/tree-select._buildSingle.txt +++ b/tdesign-component/example/assets/code/tree-select._buildSingle.txt @@ -1,8 +1,6 @@ -Widget _buildSingle(BuildContext context) { - return TTreeSelect( - key: const Key('tree-select-single'), - options: _options, - value: _singleValue, - onChanged: (value) => setState(() => _singleValue = value), - ); - } +Widget _buildSingle(BuildContext context) => TTreeSelect( + key: const ValueKey('tree-select-single'), + options: _basicOptions, + value: _single, + onChanged: (value) => setState(() => _single = value), + ); diff --git a/tdesign-component/example/assets/code/tree-select._buildThreeColumns.txt b/tdesign-component/example/assets/code/tree-select._buildThreeColumns.txt new file mode 100644 index 000000000..3e3f5c57a --- /dev/null +++ b/tdesign-component/example/assets/code/tree-select._buildThreeColumns.txt @@ -0,0 +1,6 @@ +Widget _buildThreeColumns(BuildContext context) => TTreeSelect( + key: const ValueKey('tree-select-three-columns'), + options: _threeColumnOptions, + value: _threeColumn, + onChanged: (value) => setState(() => _threeColumn = value), + ); diff --git a/tdesign-component/example/lib/page/t_tree_select_page.dart b/tdesign-component/example/lib/page/t_tree_select_page.dart index 81148a71b..d50494cce 100644 --- a/tdesign-component/example/lib/page/t_tree_select_page.dart +++ b/tdesign-component/example/lib/page/t_tree_select_page.dart @@ -4,7 +4,6 @@ import 'package:tdesign_flutter/tdesign_flutter.dart'; import '../annotation/example_code.dart'; import '../base/example_widget.dart'; -/// TTreeSelect 演示。 class TTreeSelectPage extends StatefulWidget { const TTreeSelectPage({super.key}); @@ -13,175 +12,118 @@ class TTreeSelectPage extends StatefulWidget { } class _TTreeSelectPageState extends State { - static const _options = [ + static const _basicOptions = [ TTreeSelectOption( - label: '水果', - value: 'fruit', + label: '广东', + value: 'guangdong', children: [ - TTreeSelectOption(label: '苹果', value: 'apple'), - TTreeSelectOption(label: '香蕉', value: 'banana'), - TTreeSelectOption(label: '橙子', value: 'orange'), - TTreeSelectOption(label: '草莓', value: 'strawberry'), - TTreeSelectOption(label: '芒果', value: 'mango'), - TTreeSelectOption(label: '榴莲(暂不可选)', value: 'durian', disabled: true), + TTreeSelectOption(label: '深圳', value: 'shenzhen'), + TTreeSelectOption(label: '广州', value: 'guangzhou'), + TTreeSelectOption(label: '珠海', value: 'zhuhai'), ], ), TTreeSelectOption( - label: '城市', - value: 'city', + label: '浙江', + value: 'zhejiang', + children: [ + TTreeSelectOption(label: '杭州', value: 'hangzhou'), + TTreeSelectOption(label: '宁波', value: 'ningbo'), + TTreeSelectOption(label: '温州', value: 'wenzhou'), + ], + ), + ]; + + static const _threeColumnOptions = [ + TTreeSelectOption( + label: '广东', + value: 'guangdong', children: [ TTreeSelectOption( - label: '广东', - value: 'guangdong', + label: '深圳', + value: 'shenzhen', children: [ - TTreeSelectOption(label: '深圳', value: 'shenzhen'), - TTreeSelectOption(label: '广州', value: 'guangzhou'), - TTreeSelectOption( - label: '珠海(暂不可选)', - value: 'zhuhai', - disabled: true, - ), - TTreeSelectOption(label: '东莞', value: 'dongguan'), + TTreeSelectOption(label: '南山区', value: 'nanshan'), + TTreeSelectOption(label: '福田区', value: 'futian'), ], ), TTreeSelectOption( - label: '浙江', - value: 'zhejiang', + label: '广州', + value: 'guangzhou', children: [ - TTreeSelectOption(label: '杭州', value: 'hangzhou'), - TTreeSelectOption(label: '宁波', value: 'ningbo'), - TTreeSelectOption(label: '温州', value: 'wenzhou'), + TTreeSelectOption(label: '天河区', value: 'tianhe'), + TTreeSelectOption(label: '越秀区', value: 'yuexiu'), ], ), ], ), TTreeSelectOption( - label: '动物', - value: 'animal', + label: '浙江', + value: 'zhejiang', children: [ - TTreeSelectOption(label: '猫', value: 'cat'), - TTreeSelectOption(label: '狗', value: 'dog'), - TTreeSelectOption(label: '兔子', value: 'rabbit'), - TTreeSelectOption(label: '鹦鹉', value: 'parrot'), - ], - ), - TTreeSelectOption( - label: '数码', - value: 'digital', - children: [ - TTreeSelectOption(label: '手机', value: 'phone'), - TTreeSelectOption(label: '电脑', value: 'computer'), - TTreeSelectOption(label: '平板', value: 'tablet'), - TTreeSelectOption(label: '相机', value: 'camera'), + TTreeSelectOption( + label: '杭州', + value: 'hangzhou', + children: [TTreeSelectOption(label: '西湖区', value: 'xihu')], + ), ], ), ]; - List> _singleValue = [ - ['fruit', 'apple'], + List> _single = const [ + ['guangdong', 'shenzhen'], ]; - List> _multipleValue = []; - List> _popupValue = [ - ['fruit', 'banana'], + List> _multiple = const [ + ['guangdong', 'shenzhen'], + ['guangdong', 'guangzhou'], + ]; + List> _threeColumn = const [ + ['guangdong', 'shenzhen', 'nanshan'], ]; @override - Widget build(BuildContext context) { - return ExamplePage( - title: tTitle(), - desc: '用于从层级数据中选择一个或多个叶子节点。', - exampleCodeGroup: 'tree-select', - children: [ - ExampleModule( - title: '弹出层用法', - children: [ExampleItem(desc: '底部弹出多选', builder: _buildPopup)], - ), - ExampleModule( - title: '基础能力', - children: [ - ExampleItem(desc: '单选(包含局部禁用项)', builder: _buildSingle), - ExampleItem(desc: '多选', builder: _buildMultiple), - ExampleItem(desc: '整体禁用', builder: _buildDisabled), - ], - ), - ], - ); - } - - @ExampleCode(group: 'tree-select') - Widget _buildSingle(BuildContext context) { - return TTreeSelect( - key: const Key('tree-select-single'), - options: _options, - value: _singleValue, - onChanged: (value) => setState(() => _singleValue = value), - ); - } + Widget build(BuildContext context) => ExamplePage( + title: tTitle(), + desc: '用于多层级数据的逐级选择。', + exampleCodeGroup: 'tree-select', + compactDemo: true, + showTestModule: false, + children: [ + ExampleModule( + title: '组件类型', + children: [ + ExampleItem(desc: '基础树形选择器', builder: _buildSingle), + ExampleItem(desc: '多选树形选择器', builder: _buildMultiple), + ], + ), + ExampleModule( + title: '组件状态', + children: [ExampleItem(desc: '树形选择器-三列', builder: _buildThreeColumns)], + ), + ], + ); @ExampleCode(group: 'tree-select') - Widget _buildMultiple(BuildContext context) { - return TTreeSelect( - options: _options, - value: _multipleValue, - multiple: true, - onChanged: (value) => setState(() => _multipleValue = value), - ); - } + Widget _buildSingle(BuildContext context) => TTreeSelect( + key: const ValueKey('tree-select-single'), + options: _basicOptions, + value: _single, + onChanged: (value) => setState(() => _single = value), + ); @ExampleCode(group: 'tree-select') - Widget _buildDisabled(BuildContext context) { - return TTreeSelect(options: _options, value: _singleValue); - } + Widget _buildMultiple(BuildContext context) => TTreeSelect( + key: const ValueKey('tree-select-multiple'), + options: _basicOptions, + value: _multiple, + multiple: true, + onChanged: (value) => setState(() => _multiple = value), + ); @ExampleCode(group: 'tree-select') - Widget _buildPopup(BuildContext context) { - return TCell( - title: const TText('选择分类'), - trailing: TText( - '已选择 ${_popupValue.length} 项', - style: Theme.of(context).textTheme.bodyMedium, - ), - arrow: true, - onTap: () { - var draft = [for (final path in _popupValue) List.of(path)]; - TPopup.show( - context, - options: TPopupOptions.bottom( - height: MediaQuery.sizeOf(context).height * 0.6, - headerBuilder: (_, close) => TPopupHeader( - cancelButton: TextButton( - onPressed: close, - child: const TText('取消'), - ), - title: const TText('选择分类'), - confirmButton: TextButton( - onPressed: () { - if (mounted) { - setState(() { - _popupValue = [ - for (final path in draft) List.of(path), - ]; - }); - } - close(); - }, - child: const TText('确定'), - ), - ), - child: StatefulBuilder( - builder: (context, setPopupState) => TTreeSelect( - key: const Key('tree-select-popup'), - options: _options, - value: draft, - multiple: true, - onChanged: (value) { - setPopupState(() => draft = value); - }, - ), - ), - ), - ); - }, - ); - } + Widget _buildThreeColumns(BuildContext context) => TTreeSelect( + key: const ValueKey('tree-select-three-columns'), + options: _threeColumnOptions, + value: _threeColumn, + onChanged: (value) => setState(() => _threeColumn = value), + ); } diff --git a/tdesign-component/example/test/demo_page_test_utils.dart b/tdesign-component/example/test/demo_page_test_utils.dart index 8c1f45fa1..aba3393c2 100644 --- a/tdesign-component/example/test/demo_page_test_utils.dart +++ b/tdesign-component/example/test/demo_page_test_utils.dart @@ -25,8 +25,13 @@ class DemoPageTestSpec { this.expectedComponentCount, this.useFeedbackGoldenFont = false, this.useAlignmentCjkFont = false, + this.supplementalCjkFontFamily, + this.supplementalCjkFontPath, this.precacheAssetImages = const [], - }); + }) : assert( + (supplementalCjkFontFamily == null) == + (supplementalCjkFontPath == null), + ); final String name; final String title; @@ -36,6 +41,8 @@ class DemoPageTestSpec { final int? expectedComponentCount; final bool useFeedbackGoldenFont; final bool useAlignmentCjkFont; + final String? supplementalCjkFontFamily; + final String? supplementalCjkFontPath; final List precacheAssetImages; } @@ -142,6 +149,15 @@ Future _loadGoldenFonts(DemoPageTestSpec spec) async { ); loaders.add(alignmentCjkFont.load()); } + if (spec.supplementalCjkFontFamily case final family?) { + final supplementalCjkFont = FontLoader(family) + ..addFont( + File( + spec.supplementalCjkFontPath!, + ).readAsBytes().then(ByteData.sublistView), + ); + loaders.add(supplementalCjkFont.load()); + } await Future.wait(loaders); } @@ -233,6 +249,7 @@ ThemeData _withGoldenFonts(ThemeData theme, DemoPageTestSpec spec) { if (spec.useFeedbackGoldenFont) _feedbackGoldenCjkFontFamily, _goldenCjkFontFamily, if (spec.useAlignmentCjkFont) _alignmentCjkFontFamily, + if (spec.supplementalCjkFontFamily case final family?) family, ]; return theme.copyWith( textTheme: theme.textTheme.apply(fontFamilyFallback: fallback), diff --git a/tdesign-component/example/test/fonts/README.md b/tdesign-component/example/test/fonts/README.md index 733eb9045..cfc9b60d8 100644 --- a/tdesign-component/example/test/fonts/README.md +++ b/tdesign-component/example/test/fonts/README.md @@ -14,6 +14,10 @@ NoticeBar 新增整页 Golden 的独立字体子集,字符清单见 新增文案的补充 fallback。它排在原字体之后,避免扩充原字体改变 Button、Checkbox、 Upload 等既有 Golden 的字形选择与像素基线。 +`TreeSelectGoldenCJK-Regular.otf` 仅补充 TreeSelect 整页 Golden 新增且既有子集 +未覆盖的字形,字符清单见 `tree_select_demo_glyphs.txt`,不会改变既有组件基线。 +子集 SHA-256 为 `7ff5145b793dbc21b49abda578928c1b0ed8ffe244fb7027c2e91db66c3728d8`。 + `RadioGoldenCJK-Regular.otf` 使用同一上游与子集参数,字符清单见 `radio_glyphs.txt`,仅用于 Radio 整页 Golden。子集 SHA-256 为 `cdd6b80b52382a5345597848ba58ef53ddf630aa29bfa1a4165b63264c000c2d`。 @@ -36,5 +40,6 @@ Upload 等既有 Golden 的字形选择与像素基线。 Textarea、Upload、PullDownRefresh、Toast 或 SwipeCell Demo 页面文案后,更新原字符清单; 更新 Loading、Message、Popover 或 Popup 页面文案时,更新补充字符清单;更新 ActionSheet、Dialog、DropdownMenu 或 NoticeBar 页面文案时,更新 feedback 字符清单。 +更新 TreeSelect 页面文案时,更新 TreeSelect 字符清单。 随后在固定 Linux + Flutter 3.32 环境更新对应组件的权威 Golden;不得使用系统字体 生成基线。 diff --git a/tdesign-component/example/test/fonts/TreeSelectGoldenCJK-Regular.otf b/tdesign-component/example/test/fonts/TreeSelectGoldenCJK-Regular.otf new file mode 100644 index 0000000000000000000000000000000000000000..ea40d78f9aaa05bbef9b4f22d340f1b29dd568cc GIT binary patch literal 7604 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 G`1}tpp2h9} literal 0 HcmV?d00001 diff --git a/tdesign-component/example/test/fonts/tree_select_demo_glyphs.txt b/tdesign-component/example/test/fonts/tree_select_demo_glyphs.txt new file mode 100644 index 000000000..18506ae06 --- /dev/null +++ b/tdesign-component/example/test/fonts/tree_select_demo_glyphs.txt @@ -0,0 +1 @@ +东南圳宁山广杭江河波浙温湖珠田福秀西越逐 diff --git a/tdesign-component/example/test/goldens/tree_select_page_dark.png b/tdesign-component/example/test/goldens/tree_select_page_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..a583338a560b8438c783f8e6f8261bc4808b7194 GIT binary patch literal 52564 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 registerDemoGoldenTests(treeSelectDemoPageTestSpec); diff --git a/tdesign-component/example/test/tree_select_demo_test.dart b/tdesign-component/example/test/tree_select_demo_test.dart new file mode 100644 index 000000000..ce2decead --- /dev/null +++ b/tdesign-component/example/test/tree_select_demo_test.dart @@ -0,0 +1,58 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:tdesign_flutter/tdesign_flutter.dart'; + +import 'demo_page_test_utils.dart'; +import 'tree_select_demo_test_spec.dart'; + +void main() { + registerDemoStructureTests(treeSelectDemoPageTestSpec); + + testWidgets('TreeSelect Demo follows official scenario order', ( + tester, + ) async { + await pumpFullDemoPage(tester, treeSelectDemoPageTestSpec, ThemeMode.light); + final keys = ['single', 'multiple', 'three-columns']; + final tops = keys + .map( + (id) => tester.getTopLeft(find.byKey(ValueKey('tree-select-$id'))).dy, + ) + .toList(); + expect(tops, orderedEquals([...tops]..sort())); + await disposeDemoPage(tester); + }, tags: 'demo'); + + testWidgets('single and multiple values use complete controlled paths', ( + tester, + ) async { + await pumpFullDemoPage(tester, treeSelectDemoPageTestSpec, ThemeMode.light); + final single = tester.widget( + find.byKey(const ValueKey('tree-select-single')), + ); + final multiple = tester.widget( + find.byKey(const ValueKey('tree-select-multiple')), + ); + expect(single.multiple, isFalse); + expect(single.value.single, ['guangdong', 'shenzhen']); + expect(multiple.multiple, isTrue); + expect(multiple.value, hasLength(2)); + await disposeDemoPage(tester); + }, tags: 'demo'); + + testWidgets('three-column example renders the complete depth', ( + tester, + ) async { + await pumpFullDemoPage(tester, treeSelectDemoPageTestSpec, ThemeMode.light); + final tree = find.byKey(const ValueKey('tree-select-three-columns')); + expect(tester.widget(tree).value.single, [ + 'guangdong', + 'shenzhen', + 'nanshan', + ]); + expect( + find.descendant(of: tree, matching: find.text('南山区')), + findsOneWidget, + ); + await disposeDemoPage(tester); + }, tags: 'demo'); +} diff --git a/tdesign-component/example/test/tree_select_demo_test_spec.dart b/tdesign-component/example/test/tree_select_demo_test_spec.dart new file mode 100644 index 000000000..9c1f87ee7 --- /dev/null +++ b/tdesign-component/example/test/tree_select_demo_test_spec.dart @@ -0,0 +1,20 @@ +import 'package:tdesign_flutter_example/page/t_tree_select_page.dart'; + +import 'demo_page_test_utils.dart'; + +const treeSelectDemoPageTestSpec = DemoPageTestSpec( + name: 'tree_select', + title: 'TreeSelect 树形选择器', + page: TTreeSelectPage(), + expectedTexts: [ + '用于多层级数据的逐级选择。', + '01 组件类型', + '基础树形选择器', + '多选树形选择器', + '02 组件状态', + '树形选择器-三列', + ], + useAlignmentCjkFont: true, + supplementalCjkFontFamily: 'TDesign TreeSelect Golden CJK', + supplementalCjkFontPath: 'test/fonts/TreeSelectGoldenCJK-Regular.otf', +); diff --git a/tdesign-component/tool/check_component_coverage.dart b/tdesign-component/tool/check_component_coverage.dart index abe831590..8f6f541e5 100644 --- a/tdesign-component/tool/check_component_coverage.dart +++ b/tdesign-component/tool/check_component_coverage.dart @@ -25,6 +25,7 @@ const componentTargets = >{ 'search': ['lib/src/components/search/'], 'swipe_cell': ['lib/src/components/swipe_cell/'], 'switch': ['lib/src/components/switch/'], + 'tree_select': ['lib/src/components/tree/'], 'text': ['lib/src/components/text/'], 'textarea': ['lib/src/components/textarea/'], 'toast': ['lib/src/components/toast/'], diff --git a/tdesign-component/tool/run_component_regression.dart b/tdesign-component/tool/run_component_regression.dart index 9ff6e0d28..62b33e679 100644 --- a/tdesign-component/tool/run_component_regression.dart +++ b/tdesign-component/tool/run_component_regression.dart @@ -79,6 +79,9 @@ const componentTestSuites = [ 'test/components/switch/t_switch_test.dart', 'test/components/switch/t_cupertino_switch_test.dart', ]), + ComponentTestSuite('tree_select', [ + 'test/components/tree/t_tree_select_test.dart', + ]), ComponentTestSuite('upload', ['test/components/upload/t_upload_test.dart']), ComponentTestSuite('form', ['test/components/form/t_form_test.dart']), ComponentTestSuite('input', [ diff --git a/tdesign-component/tool/run_visual_regression.dart b/tdesign-component/tool/run_visual_regression.dart index 34dc23af6..7933d1ded 100644 --- a/tdesign-component/tool/run_visual_regression.dart +++ b/tdesign-component/tool/run_visual_regression.dart @@ -126,6 +126,12 @@ const visualTestSuites = [ workingDirectory: 'example', testFiles: ['test/switch_demo_test.dart'], ), + VisualTestSuite( + 'tree_select', + 'TreeSelect Demo', + workingDirectory: 'example', + testFiles: ['test/tree_select_demo_golden_test.dart'], + ), VisualTestSuite( 'textarea', 'Textarea Demo', From 2de0f17eaa73dce6d7acc41fc2da436e58a6719f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=98=BF=20Cai?= Date: Wed, 9 Sep 2026 03:35:35 +0800 Subject: [PATCH 2/5] =?UTF-8?q?breaking(TTreeSelect):=20=E5=AF=B9=E9=BD=90?= =?UTF-8?q?=E8=AE=BE=E8=AE=A1=E7=A8=BF=E7=A4=BA=E4=BE=8B=E4=B8=8E=E9=BB=98?= =?UTF-8?q?=E8=AE=A4=E5=88=97=E5=AE=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../acceptance.md | 18 -- specs/029-tree-select-demo-alignment/plan.md | 6 - specs/029-tree-select-demo-alignment/spec.md | 18 -- specs/029-tree-select-demo-alignment/tasks.md | 6 - .../acceptance.md | 34 +++ .../evidence/miniprogram-top.png | Bin specs/033-tree-select-demo-alignment/plan.md | 8 + specs/033-tree-select-demo-alignment/spec.md | 25 ++ specs/033-tree-select-demo-alignment/tasks.md | 10 + .../visual-comparison.md | 30 +++ .../code/tree-select._buildMultiple.txt | 17 +- .../assets/code/tree-select._buildSingle.txt | 15 +- .../code/tree-select._buildThreeColumns.txt | 15 +- .../example/lib/page/t_tree_select_page.dart | 222 +++++++++++++----- .../fonts/TreeSelectGoldenCJK-Regular.otf | Bin 7604 -> 18880 bytes .../test/fonts/tree_select_demo_glyphs.txt | 2 +- .../test/goldens/tree_select_page_dark.png | Bin 52564 -> 88114 bytes .../test/goldens/tree_select_page_light.png | Bin 52395 -> 87419 bytes .../goldens/tree_select_popup_selected.png | Bin 17500 -> 0 bytes .../example/test/tree_select_demo_test.dart | 61 ++++- .../test/tree_select_demo_test_spec.dart | 18 ++ .../example/test/tree_select_page_test.dart | 135 ----------- .../src/components/tree/t_tree_select.dart | 4 +- .../tree/t_tree_select_theme_data.dart | 108 +++++++-- .../components/tree/t_tree_select_test.dart | 36 +-- 25 files changed, 484 insertions(+), 304 deletions(-) delete mode 100644 specs/029-tree-select-demo-alignment/acceptance.md delete mode 100644 specs/029-tree-select-demo-alignment/plan.md delete mode 100644 specs/029-tree-select-demo-alignment/spec.md delete mode 100644 specs/029-tree-select-demo-alignment/tasks.md create mode 100644 specs/033-tree-select-demo-alignment/acceptance.md rename specs/{029-tree-select-demo-alignment => 033-tree-select-demo-alignment}/evidence/miniprogram-top.png (100%) create mode 100644 specs/033-tree-select-demo-alignment/plan.md create mode 100644 specs/033-tree-select-demo-alignment/spec.md create mode 100644 specs/033-tree-select-demo-alignment/tasks.md create mode 100644 specs/033-tree-select-demo-alignment/visual-comparison.md delete mode 100644 tdesign-component/example/test/goldens/tree_select_popup_selected.png delete mode 100644 tdesign-component/example/test/tree_select_page_test.dart diff --git a/specs/029-tree-select-demo-alignment/acceptance.md b/specs/029-tree-select-demo-alignment/acceptance.md deleted file mode 100644 index df32d13d6..000000000 --- a/specs/029-tree-select-demo-alignment/acceptance.md +++ /dev/null @@ -1,18 +0,0 @@ -# 验收记录 - -- Flutter 基线:`ccace5c61383dc2c4fd5392f41222e65b54d8010` -- 小程序基线:`b60cdc8a1dce1f06dd45cb4e41eefd31c674e514` -- 公开运行页:`https://tdesign.tencent.com/miniprogram/live/m2w/program/miniprogram/#!pages/tree-select/tree-select.html` -- API Review:不可变递归节点、完整路径值和受控模式已收敛,三列由数据深度自然产生,生产源码无需修改。 - -## 验证结果 - -- Flutter 3.32.0 / 3.47.0:组件测试 13 项、Demo 测试 4 项通过,严格 - `flutter analyze` 零告警。 -- 生产源码覆盖率:`270/272 = 99.26%`。 -- 固定 Linux + Flutter 3.32.0 明暗 Golden 各 1 张,更新后立即无更新复跑通过。 -- GitHub/CNB Demo 列表一致,回归/覆盖率/视觉矩阵工具自测通过。 - -## 未验证项 - -- Android/iOS 系统字体逐像素差异不由 Linux Golden 证明。 diff --git a/specs/029-tree-select-demo-alignment/plan.md b/specs/029-tree-select-demo-alignment/plan.md deleted file mode 100644 index f84f76164..000000000 --- a/specs/029-tree-select-demo-alignment/plan.md +++ /dev/null @@ -1,6 +0,0 @@ -# Plan - -1. 固定跨端基线并完成 API Review。 -2. 重排 Demo,补完整路径行为测试。 -3. 建立组件覆盖率门禁与固定 Linux 明暗 Golden。 -4. 双 Flutter 版本复验并独立提交 PR。 diff --git a/specs/029-tree-select-demo-alignment/spec.md b/specs/029-tree-select-demo-alignment/spec.md deleted file mode 100644 index 846dd601a..000000000 --- a/specs/029-tree-select-demo-alignment/spec.md +++ /dev/null @@ -1,18 +0,0 @@ -# TreeSelect 公开 Demo 对齐 - -## 目标 - -对齐小程序公开 Demo 的基础、多选与三列场景,并建立独立行为与视觉回归。 - -## API Review - -- `TTreeSelectOption` 以不可变递归节点表达任意深度,不增加小程序 keys 映射层。 -- `value` 使用根到叶的完整路径列表;单选和多选共享同一稳定值类型,`multiple` 只改变选择数量。 -- `value + onChanged` 为严格受控模式,空 callback 表达禁用,不引入 `defaultValue`。 -- 三列是数据深度产生的布局结果,不增加列数参数;生产组件源码不变且无 breaking change。 - -## 行为契约 - -- Demo 顺序与公开页面一致。 -- 基础与多选使用二级树;三列场景使用三级树并展示完整路径。 -- 所有实例均由页面持有状态。 diff --git a/specs/029-tree-select-demo-alignment/tasks.md b/specs/029-tree-select-demo-alignment/tasks.md deleted file mode 100644 index 537108d9c..000000000 --- a/specs/029-tree-select-demo-alignment/tasks.md +++ /dev/null @@ -1,6 +0,0 @@ -# Tasks - -- [x] DONE 固定跨端基线并完成 API Review -- [x] DONE 对齐公开 Demo 与功能测试 -- [x] DONE 完成 Golden、覆盖率和双版本验证 -- [ ] DOING 提交、推送并远端复核 PR diff --git a/specs/033-tree-select-demo-alignment/acceptance.md b/specs/033-tree-select-demo-alignment/acceptance.md new file mode 100644 index 000000000..a5ca616d4 --- /dev/null +++ b/specs/033-tree-select-demo-alignment/acceptance.md @@ -0,0 +1,34 @@ +# 验收记录 + +- Flutter 原 PR 基线:`6a69569c104f6576fd6b39253eedbe48faa2b75c` +- 当前 `develop` 基线:`origin/develop`(合并时领先原 PR 23 个提交) +- 小程序基线:`b60cdc8a1dce1f06dd45cb4e41eefd31c674e514` +- 公开运行页:`https://tdesign.tencent.com/miniprogram/live/m2w/program/miniprogram/#!pages/tree-select/tree-select.html` +- Figma 文件:`TDesign for mobile`,页面 `TreeSelect 树形选择器`。 +- Figma Demo 节点:`28591:40742`,尺寸 `378 x 1510`。 +- Figma 两列组件变体:`27387:23982`,尺寸 `375 x 336`。 +- Figma 一级列变体:`27449:25981`,宽度 `103`。 +- API Review:完整路径值、`value + onChanged` 受控模式和数据深度驱动列数已收敛; + 不增加公开参数。 + +## 验证结果 + +- 本地 merge commit:`bad8fea4`,完成目标分支与 `origin/develop` 的冲突整合。 +- Flutter 3.32.0:TreeSelect 组件测试 13 项、Demo 测试 6 项、集中测试清单工具 + 13 项全部通过;`flutter analyze` 为 `No issues found`。 +- Flutter 3.47.0(latest):TreeSelect 组件测试 13 项、Demo 测试 6 项全部通过; + `flutter analyze` 为 `No issues found`。 +- 组件生产代码覆盖率:`286/288 = 99.31%`,高于 95% 门槛。 +- `dart run tool/generate_example_code.dart --check` 通过。 +- Linux `amd64` + Flutter 3.32.0 重新生成明暗两张 Demo Golden,并在同一容器 + 去掉 `--update-goldens` 复跑,2 项全部通过。 +- TreeSelect 专用字体子集已覆盖页面可见文案,人工查看明暗 Golden 无缺字符号; + 子集 SHA-256 为 + `1cbb5418c4cd91a103deb2a28f68dacb1e895a6efcb8f2f5e8198d67d38ac7ca`。 +- 原 PR 在 2026-09-01 的 CI 结果不代表当前合并与修改后的结果;推送后的远端 CI + 与 CodeBuddy Review 须以新 head 的实际结果为准。 + +## 未验证项 + +- Android/iOS 系统字体逐像素差异不由 Linux Golden 证明。 +- 小程序只作为交互流程参考,Flutter 不引入小程序的 `keys` 映射或非受控默认值 API。 diff --git a/specs/029-tree-select-demo-alignment/evidence/miniprogram-top.png b/specs/033-tree-select-demo-alignment/evidence/miniprogram-top.png similarity index 100% rename from specs/029-tree-select-demo-alignment/evidence/miniprogram-top.png rename to specs/033-tree-select-demo-alignment/evidence/miniprogram-top.png diff --git a/specs/033-tree-select-demo-alignment/plan.md b/specs/033-tree-select-demo-alignment/plan.md new file mode 100644 index 000000000..ca80a9941 --- /dev/null +++ b/specs/033-tree-select-demo-alignment/plan.md @@ -0,0 +1,8 @@ +# Plan + +1. 固定 Figma 设计节点、小程序版本和 Flutter 实现基线。 +2. 合并最新 `develop`,把 TreeSelect 登记迁移到集中测试 manifest。 +3. 按设计稿修正 Demo 数据、初始状态、默认列宽和三列溢出。 +4. 补齐单选、多选、三列、Theme 插值、查看代码、覆盖率和明暗 Golden 证据。 +5. 在 Flutter 3.32.0 与 latest 运行严格 analyze 和非视觉回归,Golden 只在 + Flutter 3.32.0 Linux 更新和复验。 diff --git a/specs/033-tree-select-demo-alignment/spec.md b/specs/033-tree-select-demo-alignment/spec.md new file mode 100644 index 000000000..21cdbd195 --- /dev/null +++ b/specs/033-tree-select-demo-alignment/spec.md @@ -0,0 +1,25 @@ +# TreeSelect 设计与公开 Demo 对齐 + +## 目标 + +以 TDesign for mobile 设计稿为视觉和文案权威基线,对齐基础、多选和三列公开示例; +小程序只用于校验逐级切换、单选替换和多选切换流程。 + +## API Review + +- `TTreeSelectOption` 以不可变递归节点表达任意深度,不增加小程序 keys 映射层。 +- `value` 使用根到叶的完整路径列表;单选和多选共享同一稳定值类型,`multiple` 只改变选择数量。 +- `value + onChanged` 为严格受控模式,空 callback 表达禁用,不引入 `defaultValue`。 +- 三列是数据深度产生的布局结果,不增加列数参数。 +- 设计稿的 375 px 容器中,两列宽度为 `103 + 272`,三列宽度为 + `103 + 103 + 169`;默认不产生水平滚动。 +- 修正默认列宽会改变既有默认布局,属于 breaking change;公开构造参数和值类型不变。 + +## 行为契约 + +- Demo 顺序、标题、说明、六行省市数据、初始选中项与设计稿一致。 +- 基础与多选初始路径均为 `广东省 / 汕尾市`;多选继续点选其他城市时追加完整路径,再次点选时移除。 +- 三列初始路径为 `广东省 / 深圳市 / 南山区`,展示六个区级选项。 +- 所有实例均由页面持有状态。 +- 组件面板在 Demo 容器中无外层左缩进;内部文字保留 16 px 间距。 +- 一级和中间分支的活动文字使用主色,叶子文字保持主文字色并使用主色勾选图标。 diff --git a/specs/033-tree-select-demo-alignment/tasks.md b/specs/033-tree-select-demo-alignment/tasks.md new file mode 100644 index 000000000..92283c15e --- /dev/null +++ b/specs/033-tree-select-demo-alignment/tasks.md @@ -0,0 +1,10 @@ +# Tasks + +- [x] DONE 固定 Figma、小程序与 Flutter 基线 +- [x] DONE 合并最新 develop 并迁移集中测试 manifest +- [x] DONE 修正 Demo 数据、初始状态和生产组件默认列宽 +- [x] DONE 更新生成片段、功能测试和 Linux 3.32 Golden +- [x] DONE 完成双版本 analyze、组件/Demo 回归与覆盖率 +- [x] DONE 创建本地 develop merge commit +- [x] DONE 提交并推送 TreeSelect 对齐改动 +- [ ] DOING 请求 CNB CodeBuddy 聚焦 Review 并跟进结果 diff --git a/specs/033-tree-select-demo-alignment/visual-comparison.md b/specs/033-tree-select-demo-alignment/visual-comparison.md new file mode 100644 index 000000000..967cc0eff --- /dev/null +++ b/specs/033-tree-select-demo-alignment/visual-comparison.md @@ -0,0 +1,30 @@ +# TreeSelect 视觉与交互对齐 + +## 权威顺序 + +1. Figma `TDesign for mobile` / `TreeSelect 树形选择器`。 +2. Figma Demo 直接使用的 TreeSelect 组件变体和 item 变体。 +3. 小程序公开 Demo 只用于验证操作流程。 + +## 逐项对比 + +| 契约 | Figma 目标 | Flutter 处理 | +| --- | --- | --- | +| 页面文案 | `TreeSelect 树形选择器`;`用于多层级数据的逐级选择。` | 直接使用设计稿文案 | +| 公开分组 | `01 组件类型`:基础、多选;`02 组件状态`:三列 | 三个 ExampleItem 顺序与标题对齐 | +| 两列数据 | 六个省级行,广东省展示六个市级行 | Demo 使用同一列表和顺序 | +| 初始选中 | 基础和多选均为 `广东省 / 汕尾市` | 页面持有完整路径 | +| 三列数据 | `广东省 / 深圳市 / 南山区`,每列在目标状态可见 6 行 | 递归 options 自然产生第三列 | +| 容器 | 375 px 宽、336 px 高,行高 56 px | 保持 6 行高度 | +| 两列宽度 | `103 + 272` | 默认宽度总和为 375 | +| 三列宽度 | `103 + 103 + 169` | 默认不产生水平滚动 | +| 活动分支 | 一级和中间列文字为主色 | 组件内部统一解析 | +| 选中叶子 | 主文字色 + 24 px 主色勾选 | 保持叶子文字色,使用 `TIcons.check` | +| Demo 外边界 | 组件面板贴齐页面 Demo 容器 | 复用 `ExamplePage.compactDemo` | + +## 小程序交互取舍 + +- 合理复用:点击分支只切换下一列;单选点击叶子替换路径;多选点击叶子切换该完整路径。 +- Flutter 调整:使用声明式 `value + onChanged`,不复制小程序的非受控 `defaultValue`、 + `keys` 映射和事件层级参数。 +- 深度由数据决定;设计稿推荐 2-3 层,不新增公开列数开关。 diff --git a/tdesign-component/example/assets/code/tree-select._buildMultiple.txt b/tdesign-component/example/assets/code/tree-select._buildMultiple.txt index a885ac5a2..ef1781269 100644 --- a/tdesign-component/example/assets/code/tree-select._buildMultiple.txt +++ b/tdesign-component/example/assets/code/tree-select._buildMultiple.txt @@ -1,7 +1,10 @@ -Widget _buildMultiple(BuildContext context) => TTreeSelect( - key: const ValueKey('tree-select-multiple'), - options: _basicOptions, - value: _multiple, - multiple: true, - onChanged: (value) => setState(() => _multiple = value), - ); +Widget _buildMultiple(BuildContext context) { + // 多选仍使用从根节点到叶子节点的完整路径。 + return TTreeSelect( + key: const ValueKey('tree-select-multiple'), + options: _basicOptions, + value: _multiple, + multiple: true, + onChanged: (value) => setState(() => _multiple = value), + ); + } diff --git a/tdesign-component/example/assets/code/tree-select._buildSingle.txt b/tdesign-component/example/assets/code/tree-select._buildSingle.txt index 2dc21e338..79da1cc3e 100644 --- a/tdesign-component/example/assets/code/tree-select._buildSingle.txt +++ b/tdesign-component/example/assets/code/tree-select._buildSingle.txt @@ -1,6 +1,9 @@ -Widget _buildSingle(BuildContext context) => TTreeSelect( - key: const ValueKey('tree-select-single'), - options: _basicOptions, - value: _single, - onChanged: (value) => setState(() => _single = value), - ); +Widget _buildSingle(BuildContext context) { + // 页面持有完整路径,选择后使用回调值重建受控组件。 + return TTreeSelect( + key: const ValueKey('tree-select-single'), + options: _basicOptions, + value: _single, + onChanged: (value) => setState(() => _single = value), + ); + } diff --git a/tdesign-component/example/assets/code/tree-select._buildThreeColumns.txt b/tdesign-component/example/assets/code/tree-select._buildThreeColumns.txt index 3e3f5c57a..f721da13a 100644 --- a/tdesign-component/example/assets/code/tree-select._buildThreeColumns.txt +++ b/tdesign-component/example/assets/code/tree-select._buildThreeColumns.txt @@ -1,6 +1,9 @@ -Widget _buildThreeColumns(BuildContext context) => TTreeSelect( - key: const ValueKey('tree-select-three-columns'), - options: _threeColumnOptions, - value: _threeColumn, - onChanged: (value) => setState(() => _threeColumn = value), - ); +Widget _buildThreeColumns(BuildContext context) { + // 第三级数据自然生成第三列,无需额外指定列数。 + return TTreeSelect( + key: const ValueKey('tree-select-three-columns'), + options: _threeColumnOptions, + value: _threeColumn, + onChanged: (value) => setState(() => _threeColumn = value), + ); + } diff --git a/tdesign-component/example/lib/page/t_tree_select_page.dart b/tdesign-component/example/lib/page/t_tree_select_page.dart index d50494cce..b38a1a5bf 100644 --- a/tdesign-component/example/lib/page/t_tree_select_page.dart +++ b/tdesign-component/example/lib/page/t_tree_select_page.dart @@ -14,67 +14,150 @@ class TTreeSelectPage extends StatefulWidget { class _TTreeSelectPageState extends State { static const _basicOptions = [ TTreeSelectOption( - label: '广东', + label: '甘肃省', + value: 'gansu', + children: [TTreeSelectOption(label: '兰州市', value: 'lanzhou')], + ), + TTreeSelectOption( + label: '广东省', value: 'guangdong', children: [ - TTreeSelectOption(label: '深圳', value: 'shenzhen'), - TTreeSelectOption(label: '广州', value: 'guangzhou'), - TTreeSelectOption(label: '珠海', value: 'zhuhai'), + TTreeSelectOption(label: '汕头市', value: 'shantou'), + TTreeSelectOption(label: '汕尾市', value: 'shanwei'), + TTreeSelectOption(label: '韶关市', value: 'shaoguan'), + TTreeSelectOption(label: '深圳市', value: 'shenzhen'), + TTreeSelectOption(label: '阳江市', value: 'yangjiang'), + TTreeSelectOption(label: '云浮市', value: 'yunfu'), ], ), TTreeSelectOption( - label: '浙江', - value: 'zhejiang', - children: [ - TTreeSelectOption(label: '杭州', value: 'hangzhou'), - TTreeSelectOption(label: '宁波', value: 'ningbo'), - TTreeSelectOption(label: '温州', value: 'wenzhou'), - ], + label: '贵州省', + value: 'guizhou', + children: [TTreeSelectOption(label: '贵阳市', value: 'guiyang')], + ), + TTreeSelectOption( + label: '海南省', + value: 'hainan', + children: [TTreeSelectOption(label: '海口市', value: 'haikou')], + ), + TTreeSelectOption( + label: '河北省', + value: 'hebei', + children: [TTreeSelectOption(label: '石家庄市', value: 'shijiazhuang')], + ), + TTreeSelectOption( + label: '黑龙江省', + value: 'heilongjiang', + children: [TTreeSelectOption(label: '哈尔滨市', value: 'haerbin')], ), ]; static const _threeColumnOptions = [ TTreeSelectOption( - label: '广东', + label: '甘肃省', + value: 'gansu', + children: [ + TTreeSelectOption( + label: '兰州市', + value: 'lanzhou', + children: [TTreeSelectOption(label: '城关区', value: 'chengguan')], + ), + ], + ), + TTreeSelectOption( + label: '广东省', value: 'guangdong', children: [ TTreeSelectOption( - label: '深圳', + label: '汕头市', + value: 'shantou', + children: [TTreeSelectOption(label: '金平区', value: 'jinping')], + ), + TTreeSelectOption( + label: '汕尾市', + value: 'shanwei', + children: [TTreeSelectOption(label: '城区', value: 'chengqu')], + ), + TTreeSelectOption( + label: '韶关市', + value: 'shaoguan', + children: [TTreeSelectOption(label: '浈江区', value: 'zhenjiang')], + ), + TTreeSelectOption( + label: '深圳市', value: 'shenzhen', children: [ + TTreeSelectOption(label: '龙华区', value: 'longhua'), + TTreeSelectOption(label: '罗湖区', value: 'luohu'), TTreeSelectOption(label: '南山区', value: 'nanshan'), - TTreeSelectOption(label: '福田区', value: 'futian'), + TTreeSelectOption(label: '坪山区', value: 'pingshan'), + TTreeSelectOption(label: '其它区', value: 'other'), + TTreeSelectOption(label: '盐田区', value: 'yantian'), ], ), TTreeSelectOption( - label: '广州', - value: 'guangzhou', - children: [ - TTreeSelectOption(label: '天河区', value: 'tianhe'), - TTreeSelectOption(label: '越秀区', value: 'yuexiu'), - ], + label: '阳江市', + value: 'yangjiang', + children: [TTreeSelectOption(label: '江城区', value: 'jiangcheng')], + ), + TTreeSelectOption( + label: '云浮市', + value: 'yunfu', + children: [TTreeSelectOption(label: '云城区', value: 'yuncheng')], + ), + ], + ), + TTreeSelectOption( + label: '贵州省', + value: 'guizhou', + children: [ + TTreeSelectOption( + label: '贵阳市', + value: 'guiyang', + children: [TTreeSelectOption(label: '南明区', value: 'nanming')], + ), + ], + ), + TTreeSelectOption( + label: '海南省', + value: 'hainan', + children: [ + TTreeSelectOption( + label: '海口市', + value: 'haikou', + children: [TTreeSelectOption(label: '秀英区', value: 'xiuying')], + ), + ], + ), + TTreeSelectOption( + label: '河北省', + value: 'hebei', + children: [ + TTreeSelectOption( + label: '石家庄市', + value: 'shijiazhuang', + children: [TTreeSelectOption(label: '长安区', value: 'changan')], ), ], ), TTreeSelectOption( - label: '浙江', - value: 'zhejiang', + label: '黑龙江省', + value: 'heilongjiang', children: [ TTreeSelectOption( - label: '杭州', - value: 'hangzhou', - children: [TTreeSelectOption(label: '西湖区', value: 'xihu')], + label: '哈尔滨市', + value: 'haerbin', + children: [TTreeSelectOption(label: '道里区', value: 'daoli')], ), ], ), ]; List> _single = const [ - ['guangdong', 'shenzhen'], + ['guangdong', 'shanwei'], ]; List> _multiple = const [ - ['guangdong', 'shenzhen'], - ['guangdong', 'guangzhou'], + ['guangdong', 'shanwei'], ]; List> _threeColumn = const [ ['guangdong', 'shenzhen', 'nanshan'], @@ -82,48 +165,59 @@ class _TTreeSelectPageState extends State { @override Widget build(BuildContext context) => ExamplePage( - title: tTitle(), - desc: '用于多层级数据的逐级选择。', - exampleCodeGroup: 'tree-select', - compactDemo: true, - showTestModule: false, - children: [ - ExampleModule( - title: '组件类型', + title: tTitle(), + desc: '用于多层级数据的逐级选择。', + exampleCodeGroup: 'tree-select', + compactDemo: true, + showTestModule: false, children: [ - ExampleItem(desc: '基础树形选择器', builder: _buildSingle), - ExampleItem(desc: '多选树形选择器', builder: _buildMultiple), + ExampleModule( + title: '组件类型', + children: [ + ExampleItem(desc: '基础树形选择器', builder: _buildSingle), + ExampleItem(desc: '多选树形选择器', builder: _buildMultiple), + ], + ), + ExampleModule( + title: '组件状态', + children: [ + ExampleItem(desc: '树形选择器-三列', builder: _buildThreeColumns) + ], + ), ], - ), - ExampleModule( - title: '组件状态', - children: [ExampleItem(desc: '树形选择器-三列', builder: _buildThreeColumns)], - ), - ], - ); + ); @ExampleCode(group: 'tree-select') - Widget _buildSingle(BuildContext context) => TTreeSelect( - key: const ValueKey('tree-select-single'), - options: _basicOptions, - value: _single, - onChanged: (value) => setState(() => _single = value), - ); + Widget _buildSingle(BuildContext context) { + // 页面持有完整路径,选择后使用回调值重建受控组件。 + return TTreeSelect( + key: const ValueKey('tree-select-single'), + options: _basicOptions, + value: _single, + onChanged: (value) => setState(() => _single = value), + ); + } @ExampleCode(group: 'tree-select') - Widget _buildMultiple(BuildContext context) => TTreeSelect( - key: const ValueKey('tree-select-multiple'), - options: _basicOptions, - value: _multiple, - multiple: true, - onChanged: (value) => setState(() => _multiple = value), - ); + Widget _buildMultiple(BuildContext context) { + // 多选仍使用从根节点到叶子节点的完整路径。 + return TTreeSelect( + key: const ValueKey('tree-select-multiple'), + options: _basicOptions, + value: _multiple, + multiple: true, + onChanged: (value) => setState(() => _multiple = value), + ); + } @ExampleCode(group: 'tree-select') - Widget _buildThreeColumns(BuildContext context) => TTreeSelect( - key: const ValueKey('tree-select-three-columns'), - options: _threeColumnOptions, - value: _threeColumn, - onChanged: (value) => setState(() => _threeColumn = value), - ); + Widget _buildThreeColumns(BuildContext context) { + // 第三级数据自然生成第三列,无需额外指定列数。 + return TTreeSelect( + key: const ValueKey('tree-select-three-columns'), + options: _threeColumnOptions, + value: _threeColumn, + onChanged: (value) => setState(() => _threeColumn = value), + ); + } } diff --git a/tdesign-component/example/test/fonts/TreeSelectGoldenCJK-Regular.otf b/tdesign-component/example/test/fonts/TreeSelectGoldenCJK-Regular.otf index ea40d78f9aaa05bbef9b4f22d340f1b29dd568cc..2fb0cc2aa135f4233af3c7039d202484f4fa2396 100644 GIT binary patch delta 15378 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 delta 4119 zcma)9c~lg~)~{xm?zS5y$k;mUs4R-8D8yYvRu>{5i^e62sDQGmfT-Z$h5{17K|mG( zMFB+~uAl}Vc|O_1fq_x+8I317M&gT0K8<%KHN>w5Iq!Vmf3N#g-QVw4)vY_#HQn`V zQBYUs$^$||0+0lyBN1Bf}Ux4aN;)j^aeuhcS=b4O@n>5ppy9YZx0F6o{t}V+nF&+Vz+LASDhuFV9A(>t)0;9ljTM>RtSC48jXW@UuevX>@6kjMs^yzk%*xvS`xAIK-o=2 ziSY?Vl*C+7BH`qSqbTtRK5F6HpdG8mt~#~qD8S=#g#8wuL0f2Iyzr8RcCbpr0yOcrZRXna{0CP@21PX}9>L6;4J9z(B=a2M@c z!gQ0do=LnO!%u41(MxHLJrcnQP$;FPig&VdYMdh1>`Tg4(Q39*?(tY7>T82gPqpdm z2XM6?uJ=oyz1A)jq;GKO14jA`jI`q!LX7(LB$Ux@fic3Fh_fLlq90Yt((4kw-+r0Z z`RW`6FU=VImPyUX*lC@d>6^Xa+rq@cEyohsUpli38*DBW6`cOg9NuZH`xr^)BMMMI zR6kZoZN@5`Y`x`PN{zcp*}J)6bFV3^?(v0%A0I%V`q#VC`z;y=?IgilbKRZOc^(v` zFIsRkcJu~YW-A`E6i;00UX)T6b3FN0=Z*LEfLL8}k0yh;7%mQ+0OH>U=ml) zUS^~}x4fsNeJ#C=^g+vbh^8SDzn{USKGc9>x`Qn>MG@>Ui+17Cb;_xVJcn?(W~35) zRHpE;*SilEsHOccwPix<)<>%@MK`v|Hr2V`2&`e9aKF$V_jv84E!R6_8_&;c3^>Q` z(mfIGul>6dx7yuIb3tn^U?02yd>Aj4fb$q^pN>~!3fo$j9X!9QNX|+J-oU6T@Xv(_ z>{ShsIHg98FO);!$u zjFl{XsPR?Z=`+=gQTf2qrXDa;-JL54$^I-nwLeO=7`b z_B}{TU?td@-vUEjg-TQLN`-4-3G=*spr-qL$X%KLma)+;J6Op|C1l-yF2DD>?YDcT z@M}+$s-yLFTc>(+uN1dvf;4>syqbt#(V#GdS55@@z?Xtfs@bKHGK1eH37zpz)?SXj z)-H>vn{(a2igm>Q61w7^thut~YP)Ph-JHgyRcxBBN4U4<&cJ;zZT?^u+!Tt%<2VSp zAS_~}cPq4ENyW3kWG6Xy9HP-6r1FJuvecK1i+a->CJS_Hf_DI8%wrgqtN+f2hOJy?W?+4`CZu^7RHdxl;;a^ zv_Bq&5jGk3RY}_EZ3Vkucl{g0N-$;d?|twG(~7xgax8wbxTx&RxzeI(9nN699C#MC z_uzc8T_SpL1O$5FKrEWT>2e0$g%Zz~)nMEJ^hLA%Dm;3lSh^}5@)_yZ>ABlg&Hu^HVfz0Ui_+LV|%SE^-|Q`_#3P=IROT6x&W84 z0lrKxf&~Ij)y#!dMwbXOVTq=;i@|L=xj^1dzt&*q_cSDo2DkBcR(^qkEq4CM3~^gK zxz(Vh)-scHb*Gjw$rWB*Q8hQauJ%k@J5zTc8~kx;k`teU~;%>am59Q*)6 zm;p?IlQUSZvgfemZ+MK_^%)CY-8#FEG>8j76#saN9kkFb5te`>vjdM_PM&F3%lrar@ia})-J zC#xpsVorJ9sj}*`#hoSK$Q~`osmwOVadbT}Vo90`JbEFh2kh0RAXdZt?nT{Trv~4L zQk>qZEfGAS8QbH-gU0F(t#RN(Er;{K9&W3d!9#-)0t7Ne>8IlrsjPHRo(@hAF9DnT zkp+7^ot{&k{M5SiU3Qs85%!=5jbXU}88Dy8aE+OU&6cuc0@x4t1QN~;+cRok0eo=) zotb$kTb?{KJJllU$gy)alF+`}N}!cst$cEC&wbN(?dqPeZdlR{#ytV|!M;U$^SQQG z+bGn@H(d{_*z$dyEb09E=I91?Fh#da_!gTT!1H{tQOUtGNd>75?UlWSY8E^8gJ~4R zTWG{|Zsp1P!csOf0N>1BYcXzie)UotSOH^|cq~|hi;|Hxt|#yGQ84K~o&+Yo*kmk6 z{*S?nXz8E*5P^Z-R3F!z)RQA`I(j|p8VmjSuuxoDRSF(&4;CJ%K2nCoU&-J{7|kfK zc`@cIT~_)o3-;YyytjNu!S1_%`~K#Qf3n`^>cg8X?p9m_%M&(x@{&%b7PAgV4t%rQ zVteA1-kmlrPpiEZHmGFVcVSgMBX!{tpW)?$PA;<5hI#Ke8sbwwe3VM+0(# za)MbLrjyYT@yWaQTaz>k_Y`lerKFX$ndu zNAFXp0ez2D=m+!?{Z3g^c9b*aMJ=W_QroF4s(`Aa8mSJdn|emQo@gcK@s!0dh4;X+ zmF{M|ER7t%PEN4m3r`mv~PK~`f5DsvA%j{6ZzQl`!e_MPs=`Nap2I=V;MFX@?8E< zdEvS2lNRL_$MTD8PM+XXj_)W;En)+**77=*@yXj=oMxTIx5=XF{H`rO%kuNNT9^S+ zb6_CQjVnGgoy$L&cZSV9eawS9yf5Q0dpKhnmwED>xh9B_{GctJ#qqPb?uhG?Ier26 z&$x%{8sZw;WgDwKt}Z{vj!4oy7x;7R!Fh^x9#(RlQs`LOHqbMP3)5$h{TWQ9ke8ml zvvqO$+1UI&EKGmT_cA(}7Z=+Ze~aaXJ28E$FK)fjE{m-7Yz(boUCHN+?`ko3opEpB5Oo>`}&6viDyXE2GZ+?p-ZnpIOI;Y3_aBD5V31}404IwzG*9Ri3*R4 zMlM^!zwOc*ZEx6=l%VDddKVad_EqJ`~9}=4?i`P^PB1S(Nj@TZI+ii zqd`SQ?LbAf?mpdm{K@3ckX8I2YFmx-vQ#NG`v>tqXl!NWHRrJ=5UEYdvSb1aHKBypmOj*&%2)f2mCK>JH_E&5OT<0be82Ye^^=B?4G>sqT5|W z)D0sq89Wrdl=koe^Co{!ItBHGLXV|8{YL8oC4cM@>$knCyZeN#abI;>t8JgOiSe|g zq@*UD=K(s2v#YnYPi~_*<+yytYB$ZP@23ua+~|2=;K26Qb*Hx3J*68Ze@TwU;nX%7 z=0l!&2k1Pv?D%vQKS1l(DM05L?e%~5V=Etc#~p0!><&pv?zgnGymkBbQBl#e`ub5F z9;*?4JGs`RInS8w64a~itqSS5V~ziEKEI+8e*Bs7x3KHR#&M!j!on{Cq!;M! z%YN$oJxQ&Nh>Z`ORPxq-^u+}x}oVWNEK5S{0ETtQZ+g^5W; z_veQb9tD&Ds7cO1;@{IlbKzqT77hJ06UaL`AO?027a$gwa zTECS=$;|AqVldzJug^IwW2H-EN*fX{TrO~);jPNa%}sZivlwbhU6rvkUzi?LijcTy z9@e+0tvfUHlhVO{@Zg>!*NPRJPS_7=Hom)jAw?qagOr2A+zy$rbfa%O+nFsn`pNfd z()ZwZyKd2zdojf$Q^vfz%&+0?#fK#&vL7tkD(fhU6sIsjms_{qiSXlrYh_l$H|`dY ztC#-Qxwde1WwA+5tn07Pv10L=6m<<2_^@O*G^{BI-EFhVi(_~lR<|so@8#Wc(nJlv-5&^+mo0W_HSXLYY#|B z=buYPW;Kr0`agP9R$o6wG17W>>66c9ruLgs zC8edN^>Ld&eE9IC*QTz%UfjByW_7;Sqq1O&s;cTic6M>+Y3>VgN=`8|`~g2=&es>X zI1EnZ*!J%cHPa03-OaD#{p{Ixth8}kuKghn4)s($sWofYUe3I^-OtbO_=yw3*4<}Z zU0s`V?Rk^5lAi|$`1`-Pn55-8`IRe{LfOv5^e`xh@#0&}u0LO2XvCZs2r|4xNT-}ti4#@04#O3r?|AepN8N-VFN@M4W!L=f{#bY};l^p-xV~*A@a(@{bI`QZ0PP|1m1NS?3j_umD z>)*eBR->&sJEpjlUY?xl`*!rmk!#Iq*Bzamg)H0ioAhcY7yf2sfrV%$=C?{dd?7uzQ{Pi2x+Kn{7uimL`edo@d)W3UZX=(9LRTZorO0u$^B5pn9 zk7?GgH!w1qIj7Q)dLicA<4lb$cu^+hkM@?8l|2m%^u{yUO4?fpH|^g^;-O?!ch_??kUiNA+` zXA9a7HT?MH`|qD4O5~@;a$*6u$Nx>XBaG~ztUJQ)SG49bFTW^H+e+Yj?p^cRPOwy+8yqlMI zVz?=_|AneF&jd4170P5a{>$e!+EFBfuVXk^N7*l7Cl{vY+R@t9R@F8ZEB~xITzn_C zf3Dr&8`0J2!FrT--}1*ywm4HETLziMEW)Sr6euMX6|@Z=!!yH8AxUTe^-NpItHwIv zCH9EzYgTu7`P$-j2lU?k9U>&1q2BGC|T_d(LW+4=3%lX&nG#VUtC;# zl9`^DMq0mRmi*trIZk&0+ zsr>TD^)+ZZYdRNZhP{1!(hWY-<9+bVsJ_$9(J)`cDW}*EH)2CtVR4t1mIhjLgacTl z4DjwLjq?|0lC)Do#-ygIs;O{LNpE3*4S1eD9{a^dXWqEW9`iB?Ci$1k^Jkvt}HJKUn{2im1SOmXQu3Q z*3sGb`@?PCseh>H2Dfi3pE^a2cXCitGW_9g!MY@ELA3dD)Q3w&?ge&6YT;2)QCb}( z52>9{V_Wl`USQ>p8kEsV+!^_T)y>qvN!k2dqM|lRruNO*hs{MEMVZq0^n*Ys$8PPZ zjg&IP5uy6?=TBg+3?7U_M1%pL&Z6}r8)eAs=i9UB7<=&-3kwVXEi62L{@gPnqD}FH zT((8q+nF5q<%PP7if7K83FW%k71jHgb}lfG0mq0dtG%tY^`(r*3X^4ljLYmMTU*=w zf&y{31-nF}J0s2aA|jZjTxQE!T0%pGO>741IBFtJQ~)pXaB~;q%Y*dSL zWAUm{(mIJd8%j3=WSzmuvhAyWRws({6$9XqKiBSpmYrty^KgEC{&BYjktny>&_)Rn zE^nOKd%3If!aIyxKUyC;bZ8qRthkzoi(h?eWQRr=q_ zg*??T5x?T%lZ8u@ipDkJJj|tKWu#okChgd`apU?e`yZgeRfPzK1aIB2fsK#v(NuqJ zhTGyDG$cyV!*Pp$S9C_hsIV%ot*x!(n4v|v$2iSZ1h5)fSgcfbdGTte91;}`+A6cO zjiMosvXh{l8mSfPGB;ZAOk(A#2)ncb)3-OKe-AUz^YQa5W@_^Eu78P@Of#uvQQMj^ zTu0fscKxQ#5PkPg<>l+|qLtMH947br2e7VY%m^Pl);B-Z&(Sz%z?&gy)|8?QgbkGN z^5vfW%*^v$zN{#T?=w?TC1bIVbxfaii$pxeDdOmBX=#zK(5N4>XneO-_Sf|Oo9KC`ljR>KYHr3KFMd?g zVi`fS?kNuh9bxXm%2xHIxyr>3OD6ML9cbC1=<4u{FZvmGOr zid8@n7BOwVO`Ma9XFzFVYHF&(d~aX2Wk-2aQ^@sF zA8Q;5G--ivSKb?}1K@mZ-BT`N-l#<13Fy{^!=f|%wYGLOYB&TiY~4ap$&Vk~w{G2P zU}&g*I0y}O$L`(duU$K^Wy=f38NFN@dj|)TA8*dq?Vhy%m1(*Yg{ri= z`dw?lvG1*uZ69u5*}^KlX^8e=!LWWGiuLQ%)PTf99`w3k_wJq^N~4Z}!NI=1zOssn z5N_K)U$$Gc=ll8k`f727`{3_k&y9@SB5*}dj|GpRGn`}7s}LHa419t^4J>+EPVPab zZoEpwajQI@ngGgr@g2u9Ug42(|%zKKN_Rz7&} z;M)9Tua0&h5LN0(!mbtZmDw#9mG3rXc1lS~fGk*O`_bEEJ8etR73JdMkrWo732&rKS0F zG9M&g$<|2H;wR5m>a$s1Rkfn2X*Wn1Jw5&LJ0p91x3b3Jy)1!K>gL$oZ*A4Ze-bVx z?ZOrhUO1)_C9RAS>G$Blfn&#lfe*F;S^oWPO2{=c4{o>G8nXecKs8r%2p zS5i@VA`&);f`Sb#->Z;EOMcR%Hd20&eY3v4KK6DoAk{#9d@XN4qOWfSZ@oRxp$WQT zb8~Z=RaeQ5({iGOhrD>P6BYhh-SGt9O};)pLg-1Tk1g4j`k}vZl0)py-?0{a(!?rk zya|8rI+ks}lyl(chr2U?M4e|x5@)i1Nc!J3a7cKv=V&)&k#{L0Kgfhsha=9@H+O+! z`ufu1*^P?tQl~Bp1qN5LhTlLpQtzO9f zx%$FwVKCkmtgRvWO31m#`N3_475O0QUZ~PJRL)n&Za=pun;%L_ zC1umD{xKR=XlN+fg>2GA3Ddemh5x!Y;*q#|eNy#{^!nHjV0$MdaHFuO%#F4YDh&eP zTHq4$<%=9o?=J8%0E_Xtxr$%EavM5VI#yS9-xVxc(g-^Su%)D=)LiIxB1GV-0Wg7} zRIrru^vOicLc4}9w5+ZtQ}qhIH#M1H4{}TnxGm0p#*;!vAfU8xVJK-w^2AKIIxu5GKV^hc>dLDU-Z^4Ft?LG2Z#<(LPasw1n%RjX+#qD=WK8x5@-onxCse(TPNRzmTjW3TVG|mw@gU zAd}1w$xe?>>+0?&``KZvotuGPKrjCbHou&rB0Cos?S%^$@Lm$sUavWJ?ARVACSg!I zH10&b0tvvX7=zFLb|AfFD?wZzS*4sa8)$vAZvPGjO%CA}WZ6G!;gn=)prEQM*u*ie zKQYoG?6ZZrk}Jwp_U27)R4)TQQ2`u8N|He5WY|NzUS*KZCGR8ft1M zU0w47%~SCCXdxUd--9C}l%1U=ut*2FxO~yij(DsrX=G~`INJl#5vlD|+x50Ab8Sf} zsfpRy@-JWLLX~_JC~p!H9zb;>K%wg)c&ZYB#+x^9cFY+q?S(Km@+<2h>PDafMQdCu zQB%XKs-@-fK2!Gm6Dy*Y2C~ar7eCRms^LQpYrO+g*ns*P9=`wiix++mAJ*qq@3sp8 zv%{}7l8)?F*5GE?vv+U7kN$CVO#@3y!8RV=rNyNrqC=JxeZJ!MEfRv{xbcJkYbo-7 zSHYCz7(H;Q)1s-Zl)la=R zi)~%@`SX47zVGp>tl(=OK~2zmcx{(az=_89=+P$7Ncoc|sWvkmb2W{4mz>=4-jH^; zpdJlQbsfNzM%B5qXRn)^Ka7tzNt|-PiHbPkpy#xort9iK&qdxxEK>WRwSr{VLS|{d zW54p8Fu$iypK1r^d8|qc8&^|B19;=i(c_qat5rdJ9fZ`1Ms$|*#r5mgKcyR0#Ts3~ zGe8m~mjABQjoBrh*h!T1Q&eWZM{%H0Ifx=Ya4^UwPC1eByRIn`lOTC?F z8CHKLwNp9y`5)s^mVSN@3hlWWgD>O7T`8EaUQR@#JKmHQ^#K6o#(*HhX;pwGb+r& z+*p9F0D&h&amF7|rDtS-Hm@%RbVLCu;V)@!{uk5> zbh8@VX<=qo30-jm9o=_&S5S~%&{kK7c9!{DdVBl&%EdZd*A_zrS&EofTzaVNur)K7tl~zP}~{qFQ--I}25gu0RA0 z#PsU^C=V5&i?k0PjN9{_@T767QCo^p#vq(I__;xb3ewO5D&gJUI@XrQ^-acUG8QMP zW}&KM1m)Lk-JUB~uKckP$2RCkH>{g(XlN+PO|%J>@sNf3lCs`i-epf;(b1tF zmI7(Bp%Ny={L)lyA_@Y)V0D=2#vI)zK&#k~eN}=*d^49AWlrtcw=ejm{%hHFrs#ls z_&5hriuSj{W{91c|Ni>)rOTJ0H7H~K*p*XtvffUs+D{LtgL{roP4z&!+b`+3ts!|7 zGB4YUug6_xZ-oxtm#`mFgAhL2mREtN{8Cf1J{nJ~@v94!hCn^&4jL%!aY~_{+1X-v z10v9LK+oidZLO_eqiIVzO?pE+v;i!z`Rn2oV*c|jBObC3KVNqTa9WVUPZb^!u@~`3r^Byml_+qxFJxNqxk) zdJj5EmIj-(wYBTw-)tfffnQvMOok&0)t!wBoxZHSJrY<<F24W- zC1eETr&1|OI)af`OOC4uYK6~MR)L5EdN&LVG!D+C#K&_jqYgaD%X7(ja{oYn)yfBR z4ZzyLs1$JEx?UT|P1xw4GrcfdbZFUCBKUQ zYHlFhFHpyW%6U#xoLGst^8qYSBIN7Ak%_ztFsbC%>Hcs0I<%Ra?fK$0H8sFVzK}`k z3f){FgLCuo(b#wX&M*nc)FtOHJ>6h+Wx4J>cL2Wk&TZQc%v>Pd9?KsSAMXpCgtDg5 z0zr?ev$yv?gc?xqx{m6)x*ZB%bJmjI4aH^6HWn6vbq?R;iyImO*-ra>CoI1QWT%3h zr}u`wTJ0-%W{!o6II&Q-iN;BO6zi{ePYRETl~U8xoX);_k-h`~@X&rn`gNBtUzUVc z6r}Jukmmv+3km0s4Ga(eFCA3aWDDfbH(m<62D7`o- z*w*apdeCkZ?k(fnl0!E>ZUtwGvS4Il5~F#T9E!w>;m_eGim_-dIkqN#=_@NMkM;_$ z7ZVfXNkFaiMy2i^83CuT#|K=metC4$o+Ed$ORNUIvjLWU0UOF{q~!SX96sEQ*0E>L zo@>xWaY2?p5BUm;0i|yoO=m{Sa}kGdejp}*>gIomBK3^S5{xg{uZF1L zaE25sd)&uA(ZY-)k^#guagb%Ooa<2OQGJDPem?;CT853VVbi8qoO)M?HLbb!4~0!? z(u}|DgKWz8^LmN*2G}{j=vALP@D_IC1poGrS=P8x>`K zI|pH&VW;0}%MAijnOvUh@RGQ@iqgw7^%BN~5`CpjPB``2_1m^@|AdD{U8c5=w}(Ar zWo31(Awiv^Q620RbuqRUgG>pF|`xIF8aRhSi97@ zC;R1rGj8Ygo%~-}0JtVZw1?ve-L0n7ck9I5Ts-)g5z7gDkz9u{J%d~?FE2Y$Cmd{; z_7Rg<4e*iJj?$8n*an~X?~iWW#rLnsKk>={CnqOdB{dKiwd|2RNa*P36!KIkDfe0ogAYwEhWxq<;^5t6Sg$Z zwy~BB-;W>B32P!0;g`b536apKQnY1^?m}SzpvQB^qr62+n{sk+{6}=Q8#t+_7uhIO zv^2R9@TKJUZzhOf1R~yBORMlG7>{WJHyu(F4u2Vt(q0%XnUN6iUjzsH0JVYn(_X6y z7q4?we%psGx&*ue0Tup|{=qR87M3SPMMZYD=<_UiK+=h!J0_mi6V?|9A#W0g<404| zc~#YbbsKjbaU8z}%te`L#7;Gv(T5HJz2M$LY^?b96#xTC*MDj{ahWe3qs+H298c>$ zrMWX!PZRs1y1M#gge`w$QsZ};dI&|*%hMOAK*!I*1GI8*IR9FWn0Vpg;R8Qnd>c;1 zt8pv*^=`;y(btUZ1+Jsi3f`gLZFx!y)urKf;5l0jYGU<(A%gJOpwSI}M49ljELskR zlGigZAb0B2J&3~E#5{-|O?9-+tR_(hY}X@4kFvo%13xFQ3g;8;m-IgL@ux^i;CyiL zd^9J@V5ND{OHS%N;x>nX9r(~Vu%_}o-RkkFWUbZ@wpoJue6LJ5KF{^Fc%^ynp*$v^UmGftr){Mz~M zVY`;~C$P5W5l3KWpVrXW0YDM7M)V{$@BHjM7=ViJUm`iswSy z5mXe!0ifRRMpyw0|V%o0*r7IXt>}N zhuGMtp({^MPt$GL!g=J#Qy8vRebswW_hX-Fdyc2L41Zewcr*_) zc6D{V3=8Z2`*-t@Rw^1e(fH61aa?vVFdVXP-W9+1wx%S%x-NnxjRV0rDxG+ZC}c9Q zh7+rZzY4p#yRYw@g++>;SSn}Mo7B`=?Da&QtiuT>|i~DR+^tLIXyG8SH?YG$R42qw0tgAuzS9 zS6AHBXj8E%X-KrhJfG^F6p$RA?F{;AAFWXQ9a!lBpEcS zu4V`d3d24zWvGT5)r=zGCj=j!^kJCElT%XwCz}bxOBi#JQ&#>A{~T(u1{^}Q{*tOX z*hlaad6#cSZitbuVpui({ed6bC{V(7YI5>Y-W`76$Dg@=Dm?&WsDM#r*dnB@R=Ih2 z9mwCiQrpt z2?=!gw*d9`U%g@?ZUVe5>~vt7wD<2%alW|cJnhe^&9rNm4_X^kUt%~_S1a*ErEa(@ zsPp00<(%LXuK$ie@GFL62ePHeT$GTiCBjT>#fq{rZ`7I}C`Ir`%dsJ{KI9+)MksMs zR#4o`NXrYH1k)?%O>ffDp1wD%D4ce57_3_-B_+io<6aG~xQed{Peh>jx>+PFgv}fI zOx>Zt2eu0d3BgKu_WXGXA|tU${EyKke*oAHHpj-r!5j7$%63EXN_N>>sZbRyJ&~+e z5QdBtiJU@E$riY4wI*Cb!mj{)W3M=;ZMxhW=C3-LWS$`WhM{-h?mbW{ zbz&sYC#w?FW5&nFi_6Mr5SoDpbsX4N(d&j&@GGEK$o62Ay8C+7)zpfiA!hpAU^#9@ zOtKKi^$ONdSgs>0R=0tACdS@Kh-^cYQkuJXVFY9HoPF(7^Du7p05`XsLQkOmg%_ZP zcv)PB4$+)GeVPdGNI#*KhExJ@9!1-SZO_fkeSn9@51`x-*c=Z-&Jy$j4k@XtzZ_5j zapXvPFHtkyqD|t%trpMt`1nAHI$hJ7b)x%_7YOlOOk%NrC%>vz-a`wH{<(+N+v9!{ zOKUd%E|flbd3l|BsLKLvXEa^&g@;7Grd=;hfcyz~b5KjyqOpCU#H*XFCE2wH}YWiJigbqRax#{<4YPh%u(P5!K5iH-TmYmTk{>pD)e@oeQc+=GKrb#X=olX4NkAnI3Q!iGCVwoQb{Rh*}nZ0gf*!D zF)+Dd^Vef(wHsGa*pV|BZ!w9I=Xwn;7G&O`U;h33I3-}?9cyczrXFu#=eb{AE|&v7 z|7^XpDg?6HyDxY)-L536C6XBTnG#YDU0NjcK7^OURLhc}RouzMbfwSM&L3o^2W(i< zed#6sO^9>-H;_N%5||-QfP#$wwk(pbn8sQXOBwH1BRgIr@luu4>&sahF9 zYav-T_NEWFe;Aj$`-^@x~Y%qPmhVvgf{H#Rl` z;Rem`>BMnik#?0cHtypMP@i~3@egolLOlzLY!hIa=N%A|a&cLFUSQ!_GXxar7yR#` zzl`>|ZQc$q{zv+p=HBrCSlsl#>TB%IPi+v_KsCpIoM$cg@fWQQh>S9mKBSG8x&?=^ z3`&Z#{27!PV6=FY1{A?*N>$-dFN4v0uwL+tx+-zCA`UY+?mB`;c~YRauGW7LkzN>J zAN;G+?HhOUuiBU|QRBmu=XzdGo~7R19)_y7`XV z(Q1HetKNA%d-iPFOu8X8i8r|&OcEg|^Md?bycUoIC_bop*`gfLZ}419dUls4AG_!!wx71+n|1 zp*A<9TxCLO8~o`C`RRs<3EULsM~@#@Nghk+NPN4Y9ml-1v2j8A+`g>B#7@{QOAEuPRR0zid&b66XHu#Wkx+G}>^ljH#B}V|cOBn{4>vyECu)FW zs8b&$0g4!dH>4=Iz4WL-4Jcf?g3;WhI342TG*f0eZgtJi z2GBAyQ)H0iI~5=(j{ekOe3U|cq@+^`^lCX()qbGO%$q+vL78`M-%dSr?Kgk`&{|8{ zb+5(+|EZaoUi37GT02=;p+1Wsfzyrdu{2(~b$X;_C!!k3Mrb@a8l(~yw! zFvZa>DcF(&gM*}cCoaLjA{9`vZ3Rqdupx0LPVlYv{7{@u=eg0xSbe&YlA=2E&7)8u zq33hYwyS(I@h@P{IR5R5wTQ^4)z5>13n1`m85uo5pYW$hr~$lzBrNsx^hlov=IhBC z**z4(zZ;MjmOXy;H7 zOaMnmN4YBKEiCZ1!Rw%zP*8E3fB&AE9=w39h4#cDC>Q`T4;CnRRo=|i*7nPI{Kt@*6RaHOa&QZd-9+`BI3h|?gOe;pJAeky7&MnipWin zD|l@$106sbovgflQ$-Du1koA^LVI^v7z8o4Y4|Im%5`;cRk`pK2tkXhT%Ah_8Qt~>S#(N3tyZ-+Fb7O#NDO*ycF z9D->c+5-`b8xmi_h^?b1})WnyaBaf8r--ka3; zM8a;Z?CpD@cVVr21_!?qT*(Lcp`DVcWQ_+V+ZA3fvjf=v%0G;j@xg%Yy_R!W`3J~4|& zU{!D#ieX2^#va@X#4RzfZ z`YL5qAKw>x41}*|0OJtj!B5|yz7lmTAt6ENf`VuCLp^h=fQJuXNX)=&Koa8n(8*zh z*$}v{BMu1UTJ51+JxQKum7h0lrlDw;)z)rB-+`4UucY(`2a%XKsKV&)C#7`W{FBK- z(PsGW-yf+DjCCl>T@`U-NCQNjL%)Q}yO9b~pqhi8nFa%aAQA_!UcE{X*wLd$p?49> z4rLU53TES@fBzf@9kGSv?FCezxS*{(4-4~01_6CELGv&+=(DdkG*l#HWc1CtLi&Id zp!*O8pIE9b5TeMx3QG0fyh#ALM_(L#Y|E0`+5lKRM9!;+VS<(je)1a1fJQDm4hW*i z5PMBqKOUvsvj6D^Q|Px8g`i7F?~@=NI3ci~;ypLy!?EJ8}BKwbM%IxeUt&b#l z7s?$KNot@m&5m`b7P&9OI9PjtlXE>4N;JH@L=6f({e4ep1y;z8CEHb1>5QVe>%{n= z!id}ap(C{^hB< z;T$0BREh;c2e$>bz~USc5s5{q4wrTd19UdKnqw;QNni5W6&)QL92B8dlB~kxUb}fy z4mPuDq-57C%fe?14(m7VIf-NwwCO_<68n%RM%t-rCVLmn)rnu8dAb7eV5%r|7sBGO zhTtq&m6W(Rg`$vPA8u7&Gfho~!NEZds+(=OqVTd0adA!c1jsxO59d>!o1N`L->*vt z1BTimbiIUT)22;&xvGe{pw7^;va;eN;cFk_=6(S02gx_0V`2}W*6iH3uM&G6xg20D zbsb=PDU$10SXjV7jRp)d@CKl>UYr+vX3y|&6&h)*5uh0{?EdRrJc3cRecQH^Dk?RK z!%6BoHOvPfTSM*s9(`&p0vPvRzrG&I^#^%JbijeOJTb`a1P+OqH9SBAN47)`N^1`4 z@ZP<95xd)fo`@cW=LKZ-0=jvI<0dP+1{yVv6D`iFN~Gj`U9OmU<0i;laJy4QNs}*NP}+2Jos!wZUDV0Ec?u^}Em0GBg6p?$KbCz>W&adzBKzUP{-^+^;)tn1zC(fZGAQLl z7_b(v1;wfunx%QeL&!pS6nt4<;u!Lm!4KF52_KTTDb^223%?_Ix)Q*O#F4QQw>kgEvq+W7%E-cN2V-DrtcN zQjRnvra7?ou}QCYXPMUfpb5Re`35W_)RUW=u7NokVkiKtp@D%XYBv&!q(W&dV5%(~ zhrkLlEo8!TNYY^Bq+y5`s;5Ucno!+_eKTKce*R>HhfnpvvZDr!o2b|#fh6gpG2hKU zxBI@Yuc5iQBFsnZqFz*?R7qpcaRF!kPX)ktB>Xb1v7ihj$%PCXin9Su2()72C&TKWy^2%Y*j(iyWf!^CtOg=zQV`rZiew;i%~|D{tITi;*q8O1&BkD^CrD>+Q7<|7{}Bn2+CnVCOw3n-6R z&_JEIkBG>~#oWNY17R-t@AMC1V3qmo@4-ExK|Fo->=ZT_tWYQgM^Rs4@7m<-2P%X3 zX>Ds;`t93eD4Li;LLChkw<~-;M`!gpdNd`yvTZi7~i^ei}WX;@N!f(D0SDaUuTmN`czy@6{K($bq9`5KNL94 zRJ{mL-yf*7rbXoFYw-*IY1IdsWoMCcCZSBULygKxD40O|B*6=Tl#Fu#6X_N>2VwPJ zJbx~Wl|y{F1f3ikkZ?Yn&$R695FaLKF#V&3<#LOoQ0=j^U1mqRu#E|250`QY#)Q*j zY#5X|W)x+4AQKn`eJ=fsr*BhxzDGYN+0e=UySXy2t z>N=!3{<(Cx3G-E-+JNRlm9*Z(DB;wf-hvTIFPM1X1x9fe81Hxhq1GE`ONh6 z^eK?g=te$7b+m5r|z|tmCl20?|^wpss?5+-fQgs94rgIT-|0_ zKyuAwogk13_K+&d$+z=)yBHaXyMe6{FFLE6s0o+66dowu=FOy}g8b9o#V}vp>(jLG z>tYRU5x@pC3V8jRjX*IhGgL)1hwm7J^K`(TA)hm`ar0&lF0THdj-c+ENU4ViQ=^`; zpEz-aSBjG^_grmzd*PCDln{=?(qEpvU2Su5g<{x?$eo(mSJIaheKX%chNnwp9;!&z zk^td%&i~!{>Hi8^|J!5N|NsB7X_fVJDA4(T4`YaZDQ2+c_iyA1IaVIYzu*Mw+DhON zfG^b^IGIAB?;0ktqVMzya?9-CZh(HAL%0f6@N;WxI0DF||3JY-X&q@Vcm*9R=<;qr zWk~xElsFARzNuUhwkBp5*h4)!BNf8k@~BDB>=`;-rye&-5Mhvk{mqXltQ+!{;`5oV)LI|H|7_&{>QAy ztwpvo8c2rp0A$FLi&I)w5Rj+-^6eW3eiJwf6=I4=uEs%4X|>-$bE?z+Ln|t{%71gs zb(xSViOD0NU&yDNgt`Y0_YIyGwd_TBxbA4xxmcNX87UjS67rDAM?*IcP>{w*4xA{UCPhuyVA}+t5Ki zky)#6-_`-9J_wLmd5KZRHC8BB`;Og`gBpn88WLrvBH?l(_2HG1*n9@t6 z*#a+RWBhMAFF85cu8s=nubk;cEZpTnSMlqs0brL&Z-1>GUok$XW~{z#`?}LMl?+__ zpEi`SSsmu@fB#8Cc(d;-nT#vO`zU&OHG@C@_-H1G2PB;J4->xm=HQz*IED3HODlA< zGmcvhTk*BI>(|y#r8Vie{LKoGipr?{Wgb;e*@*UuKpGKPYB22#4Rc*FKmdf_V2R#C z-rFdNRv&-=`gM4!6A&HlyC=AAu)tL^=^Ycg1H?Y@u1zXd4(J)j}-vYKngPf%*mDG=Wv zxBB{e>f;_Ok{I=C7;LJkd4jDn$SjD92EaTrf33D<3k+sp4J3FyfHdsdbzs1BOge<%)iCqt@&(^F{P0U)`9fdwlI!+5g6cNQ&(-U2IM!|IYv=e&%} zS}^+C;ooEVQ(G{BYvBCqq#$==)67`Cbgk6lf|1h14W_nAe9uS?t zm%y(D7>$A3Oi1I{SS{Q>7AHyKlVQ00yLc)-Pv}oIr5D44H7uyXn z!-G%=kcM4z1Q-{+!s}cNn}o!#&Izq#owK-#0a2t!%qMmMB67QbyT7gEDZOuA;$YP7 zRn#lW2Pd_*7)%WBCBa7srdZ(js6l9LXRNH!(j|J;Z~gx87?KHDCa^myh@IrM=XA$8 z)-t&cNre5YRdRy#FC_^++t>8(dECTiS=@JM1!MJ7aIV1KkC)}ARAX^@L4zXQus(I}mA@D<{t&M(T{$+aF z4y%lb>o*!JX-sc@00eX_6R%^g3FUj8@uoqZcavHF3uC>#>pstI zP{=DHk_>KgC`D5x7c@W|{CQaw$y=w<_5wwmLc|;|3=u^olc$Pn7h73Id`Xu(FlO(V zOKE|2s$S(>LF?j0>RxMf4ZNco>{SG+`9NgZ@#%?RdXfwsYCms^P@$`bENrVUP+;NA z)kgV>{ueiZi(itpS$FJ^1%Y90PKD=%*w*@C0EoaMh=N}*L7VvQc2QJTR#uIjk{|L0 zIZCSa^lXv*ct3bqWdB15AN-lL8!3Nb(8EeESy+7%Q!TyQnVG)@nC1VBX;qL2jZ2pjbp6Udf5s5$rPqd}VM6CoLz3>T zR`Oe0ui5s&u%b$|Sd#fkmx63V=ICe^(cFmajWcC8@cka-dl@Uy8ch97S3-IzhntPL z$-?v}`gCk8LFyI>H7}2PAteN{6NAwg3Saf2-{1hml`K09HOO<}wwQXNd*iDizs7sr za=_;;ybDa5^a4(uizvSdJOqU=9&nQE#k&}II%d)O1v6EcS-OtBfOO>KFZ0xiIz>Ti z%#6aLi*bEEkJ_fVeC`YO32%?b_Y7+CzJXuFemQMmYxs0C$p~lfGYSl$doTphR<wc0I9$LM_6XHnYo=U&lPet!NS*7Cxrh=_=zTRFV9byGju zH;S=8Arz8&UQ5g!AXIrLbdgEaEU?Bhwmk`_I)A?J)z;P`Xk@(-0-uX2ej%!Elm~(U zS$8NC>d$MmcaoKcMxWJC2p_4|a>4^^_3B8+UveiSqxR7BFPkpTc6Ag2Ozv=bg{5!v431EUSt z_4Gu5;_v2WZhJ837|7AJ?*8nbzrU(dC=kyp@>ZO=vq{b}9jbZ5fY9)O}R==S^lU!DT znRsNP)hjd7(*xgc1jwPEgI-I8f%bbLA-jPgn-a;}M4{=&G1RUEP_Kr9?$q;G487O{ zv%plF_K7@LT5`q6dC&)ttOm?pH}n)ulrxdR2m=FIh)?LZ_dnf1sFjLL7{Kn?4(a#7 zcJ`09{af&-WXKio{<@)IDcVC2>rWNT7(rqqR0fL?1V@WVBT$6)N;)1v;P+;h4yS75 zCK44O1ntw&k&dD$FuosviWugu0on>|>c=RQ^IwnU8Ep`Xv(PXRhgYve%{;H9w26%1 zHZ^58G@YZHxFw|Uv7-uz5Y$RPzPcfEx`h=NParOP^|fKj<&5=rfn!1>9#0)Xx1Szu zdj+Eo-};n|O}ff5j8DYyxrlK0Uqc54@(WBIqGIEqlWt@Z1vzRv%s*F&`3jkpPw0u4 zvMrb)8@)zq0xB=se<`vnxRb*pM}IAw_s5VQrMMR@qk(sB5o6!#IW|UkD!n+vM@(W{ zAS_~OUmm-?@8K@~ZoDsal^0-#vGOkvE(IMSiL;WD5)yx3yNGdVV|1d*pSA!BB#wo7 z5UpSPPu$t$A8(3%49r!wb`eRV<6sopDJf$S5;?B(LNFR6v7?FE0K_@)H}%KO|GA9G zyIXY|ese5#HFg~uD=k{pN8BwDswczdy|7oR_3z)mp+~NJs$4eJ9!0pV9GeZEJ(bn$ z$Ym;WJp&*FNohbbC6^yS zloEGe`Zy`UhZ_)D#&Y^2*%9!;og#g;QL0e0@w*O5OGge244jvcL8mVr=yHdJdp_4D zJ1grmLhN|8P)5mhPoRFdOhUm_7`PDI4O5LLrl0hnG~-AB>TSg9j0b1|$s{>K$aHcz z2bdiG+0q~3(Eh2VWiNggx#$Lu08{l;(oZ3L{}o(fwgbKqY%&-T)=}GoeFNZi9LgEKtL280O?4quwbyV;k-obLe-}!MgqY#|ZM7fheO*wC29Xz|0>?pMY{#x$ zarIbD2JkbAB!Uo-6p<|aQdx;hX>@a(F{~$s8##XDyjGY<{{l8bGWpzvU!9Q*B3KV> z_dLq;|JL&wpiH#ykv?AaKdlb6zi?vK~QD0m)X}6q8v~30d_&H;dqA zlZ5K1wPX+gq7HPD#8g$xK3O|BRAAZ*k_wp~LvDipvvvgvi$Uk*Y64?n(f+IgY?7`_jV=Y?15Ey$T*g`~{DMTc4gqMXBN~l2jcPSaU4S zD4v}fvX^|4sDxNBvI_Rn*8_EbYD4Wu{u9vYBtC-d(1nG=+RYqd4pAg6Kh*GSU(F7etM)t(EeHyi9l#>pvb@ zx`~kltB)AxB)0^Mtvu-h?x{3j#$Zrt@K;kGDB=1Pwc)N5hOC$9BSP zWvRLsT^t<=qQikBS7%@Y#UNPZY{`Nd2X-;BxqB4@r~rW63dcJHk;=uMz+Fe5z~7=B zITZ0zqz&9V7o#35+P=zj1JksyI5zutY(inTvnWG+B>l$M9SGsd!V{;zSVjzXDk!lW`3jj*3hu!{#pF;!3@m=cAQ$@k0`X zeo}j}-=w8k{QCzK3m=w4slPlcH!)3ql%(S7&ZAL&zbQh9DaPL@tfz4ZkrfX6B!N#S z@dAwFVP~rM&GAI`-?6bNX>1I}IAZ#(7NK7GOLu{@-h)c|7V4oLUtAH$u_41)iA|#@ z^7+$sid+AtoD~;bC_u#x)su@#(xyoRs8yJJBd#iGhJCV z4*6=5wXA#g(4EA)otT-q*ysnZ^NOj7kr8F;92sH4wMUzLtf2c~tB?zIK(HeQcj3#D z08~{Kx!nx?pG+m8%@Qg^oYmvUaov+IJZXd>Fv^#K^a;{!puLWNn)=-#1jJ)OE1R|k z-URqT@<+4K{UjaRs8OIexz4iPsh`=)o+IE-2!fn%(}#Kx%X7Yt>#c5iErVyacIwU} zKti}WJZP;-IIVjn>=JAq?Ep$ZNJ7VC*%?C?>(;F!Wf|Rp43`unGGMtfb@-t!LDs;9 zq(pv%098>^vIeX-Qzv;c>Re100=#OHn=vbtpwtm~R!3(acp6C#NYo3pPG!-cpp@3v zXH>gwWNY{q3-#vL`I~cPph=~eH0H`@ottwLg|Iq(O{{(Zuy1cve-c#Cb zVb8lLGG5B1>i%bih#{z}n7z4}Q-Q5@7Dk>+>VL9NbXNylx~VY3mcr|o{%KDfe`_?4+9M+#KpUY zhaV;<|6RLCI2+KZ5&Up8_R|yQ!%&tYBCdv31mTuSOl^b23rrQtKJXP@&7-wS1(L(? zXPmY)RD^d}r-kg|1Zo-IFrUgXIOL6iY^$7&2=YQ7RfB|!`5^TU~hl|;Et`l&pf z!(0jM*gg9zNOc1#!RXogVR$*UU@hco1vDNQ6z>7PY@+7sZ-C#EF(W{VK=W0oM_}zF z{DUl zWZoQYF9tnz{ck9I>YAF~T8sThl$Df@h>B8hp9)yiRNpJhHE9?KMFgJ+f{5%^uE3J` zBeOccRWN^i4a9RyiSEQEL*x_R)Cl3VUg@z4eh8ieZVU7C6R=u^kUk(>CQ90E4^$;YzSiHHQ^3RE%{4~$4xjP!~%hFj4D@EdvE*3r@;fGdLWB~s%nC4))Y&a|ErfZDLZ zmO*yUU}XWM5j9B@GU@=`;ZsuoSmELmq_U3S5}SxgXw zq<{u#TmX){B6(-g+0t>58C6MXX^zuW+)sSSXozhM?BuvtuCc*J380Fot2qMQw&&?C@dx>`3FUr zT%dr3MMkawJVgS2n{c(V>ihMj|hQoRf= z7KY(xqL`65F!YydsAEJW6ckj=De-uU{lesWnv4`pr zF(cP@zFh`Q3D3>*o5e(C-;#;Hps%WxMIF>ku*v$g|v>1T{2 zbG71Om94DC*}nxVU#-r2HUmlB+N7FCtsR3fjpjAn*hVX}asY z4QcT)k1o(%->+J|`6o$@MMOLXhy=hiM#-0$!L|W2gBld!JIhfoluLs6+1c6c<~l53 z%r{_`l4~he7mHR&6bAKa9D*VufyMaL7AQ}l3)9G6qxPV&AWo+Yo$r1HPg%z3d+$ZB zNHu%`?%o8d=f21bl-Ti_6aJa{JRfq&{k!`pbJB6ltl&y=Ap4 z_KYeW*rNxLmM2oxb<~W)7WiuOp?-gLX?Y^fb}}APowU&0%~8LHJ3B&u!TIx=<0dS2 zIV|0Mn5fG+6t-u6wR~(?aG?}PM)((y;0yE$L`jgpNjq5LB2tH+7^3n;4x(|RCCdqecY5M8{W9n=1hQh0hrlCDCUYs>`mkl9Xg)R%F zaabc94%*u%CEwr$pRtc0l6>AdkNtOnquS@&6@LpF6CnuzjFWTaX$oc#D)S2B|J+s5AOJC2(c^zsKARCH!VO1#Y~;FCh4K2W8A_!NY@Yd-dhzd8>}>> zD8NA8^W)cn`(@uL4=ZhMqcUog_lCZTy6$rmv{q3(a>=^XtGdbRPvu|oFp0`-sCHCz z8{swlqnc5`cK+8b55~Bu%1hTLA2x~NZt4(ia&&gc$*DUO-4^>kiD~Kpg!Aa)U0Ln$ z6K?;j|M|j7X6FRkISZn{WL^uCUYmE^Yn85chahLKNks$XyQF^44T$|-W&F{}PNVSM z%dMlkc4>cRgVvIf)1F=#APN8S#=YRcY6r*7afYT5v!9IjD%+rD^{_LYgl+5?C_G@g z_f=I*XOC~d+zoJ3IacGctiIBBmFk>b)KgwfF5pIsnM(erN6#$F14pYEWG;LHljGp z_@DI|H;IsR3PAzbdFb26kEN*(5v|X!dLQDY`HoCz=MPpE2@d;!#-_(Eq|)L(v?3Os z%#Vtb4ZXA%K8;FvpSOG9$D3EDOz!(QH~Oo5jJ?(NHI~T=A17aJ_j%L+oA=qZt>ez` z^{Y*cYg0XB6Ml?EW>XtJtCsoVFU(z~CYt`oBY5jSE$CCuSeX9|O)8pKbi{Lxt>2(~XFcac88+nf zDjQk4Y1P-mws%`v52`9LT|cR#^>(38xd@XGs}vUUD_(m2<C#K4KrB2Z|qkLlT)!Da#*2lVP?VsrQ33%12A z!$$-;voogLn{p(sIIV82a&_IhSQjV#*yKaQ)ZSFQALp1*oa7w$bd_&FbNk<)TqFjg zD<(*`oN^gDp>%kWg}>MK_=iL0$OM+`IF;HIKdWtzqD4wyKW@nG`mA+IPFlMs?|wUe zw($)5bvn)ST#HUr?#f>EV<+CeWu)*$fX!5vdag^&%urt+0ftEZ2?z>&P4xF=Z(p?R z7taXd7^T2{GC;{l_y_Ya(AU@3>-QD6U9}1AocG7u>Wqrqq5H>k_u?P;bMg z(5YsowhQWxZ>?+99MgHn!1)QbM>FFugoel%A1!~{X~OAi^?Q0szGvo2IjmQ84Q`yK z*N}G6Xj8zEl&1yzj0%i^# zGQFzLkv(m?imEn-nsfD)U$EAx0Uze*0sh)R(#8pkFW z0HNBp-os&X|KY<*?>dUBOzcPloQhYjD-VASS(QD?*YtouQwgF22MV^DTm zHf~niqTg1hQ{VGIuH@e;m__?CU_h4{A+xP5=i6Fa&jR8Q3EBwu5q%gy*CVSD0YWek z4*`uR>RBJZm{QUC;2v-c7?sSQRE9q?(P(8l`D-`6*^Ro9daa3zMep8a);_i^UoJVV@$($^HBVvvmQ5;U#~03C`KjXBv)8xP z%VxE0xqBolX@|FMe)Gky;a>(EiwGUP!&&BTtBK0_Qv%isPYqRx_1hSsV_Uaw0%r-c zFjC-0(dB16eR_=K6QLYC-hXNuQ0TxX3GTbjf4J=bLi(4yhRMp+HqB?-O?%jJXZIyr z7d(wt&dkz|%AKAz@ZkE}eW#t}Ck%{EJgZxAn*Sl~p0m~ni@xs-lC{n!j@tAk;CG7u z#ND@U?_PN(^^QtbQf*3^k4;bNQk?TJW6uZ2<&pX{N03}ZQuCe-FYiFsCtM*^cA0Tr z;8&oWX!jna&wJ%l0SllqR!f&7iOzaPTpye0pvELwI3ZMD_0SaRz@G-3>^5f!# zyA^rFYKt~+e{wFl?DcHv`b^CgQjZpD{Csiqpl?aR4)wK@$E17*QFqZyeUz0LO(Q!1O97sqt%I=IE;ShhOIfzZ&+?z=Yi} z`ewoV67+@WCThXrnH{vp?>f~#*osYT0DqjM=_cEANvXqFl}ACU4f0bTC!g7~NV%!r z+U)h7E#J>(&0OX-tbADBriDJk7kq!!eY^jVXH#x=qih?$s4-)u%lV>XS`Fh%T-1!> z%j7@58m6eYkCsIEvRXMb{@P5kmY!WPL8P<221aijYZmLuVIaS88j34I8U*8f`Lc`i zIx!CfRYKmfjw1FdsR?rW(X-LT+2#led?9~~rj%WY%nKXzz7?;=>&2g!X6kvVMR}gV z`!{Y`;&ry6bOaT6FV;V>;&k&5YDWLH@ZwWsmo3%frk|z&hxLJ+=It(xZd`jrHf@(m zW53AYy`V)X23mt;T>MA6ZcFtlX+VT2W;-|8>o#P2@o~zM@Ug@Ag63c*_mrf9n|3Oz5Q*OPk$JA;d6p zb8G0X2co-Ju3I&=wD$k}KdHt+2%Z3-3@le1sDd6EQ$=I6)vj)Pf4rRYG(am^+eyTZ z;4C<>9e39{;)wuAwG1tp$Fz$5(o^0`HhA0YCXHM0KNv}aHZC(WV}8#pP>V%(5nz6M zJUpP!7b|$w<@fgbLMBMPxaYLTVo%j1fnm{?1x@KA*j;#lx}OS~d#4CbG*Q_Xr|s;D z*^8Yo)rTBFOy{do_qRnEP<$?|`Tkvye_;oB^5iIVMJo*M_Y7UWeY%mQX~m_hZcTYW z#<@Sp&Ss=ves^eXSEFwB;DrxMMfWbIdQWZ>xGlP-#J{ufX+u(yRxob{7l zf}PzMBQysQ5ksHjJpWM{zjQP(L(eH&75(iZ{|x=eb;fsm4oys7{Ixg$50V&! z#w84?E5f~9eotx91HbveV;YPf4w~sZsT(I5?ZoJdM~@$;!iht*fWMKRG8jpvWDuv{ zrx03XF)+#%dP!ufx=OY7{zGTaF>{2l8Zj9H8g}Df*Jnl8(qTuu-@0YX>c(H+9LwZA zXQ!?3=%{LwQ2ybA2x+mta~}c(xJu+1zZwHlXJ5>_5kO%|^XHrhoz<&@Q}2lADnt~x z2SwV+B0tDMOQ*V?|AMOWTMe8NEbr~@iycmVXZ2I0cOoSzx#?#=rt(N|0JL?b)|M)% zsOT^QyI8guVeq5X9l`BoIDU@4C7H7IBj_}XHuSh1c!iiH17_Z*bb-5UJt7iQAtpm( z_1PO$?lHkSp*c9vKvgkPaRM6xRKE2C`;H_n3`XZ4k?jmhNa}$q0@MRma~CZV_!DPv z=oMC>LsriQ&`F{sT1)UzlgRO^!@8Ca*RNem1y2%M-wz+|BgmRfnFTp}9~KoLlvS7o z7%P(ZB~V+qRkom1gvFD31KEjYM#S8jC+_-Y>1ZKH0KJ5+6J!p5HD*`Wx;It z2xOn0uF{*ppJRk96joTtzB6C#?T}o5aKr8&tk^48Mu{*@b^-HJ$`K|Z^iVE!#{LG` zx1so6(%YN`k3E;^sI7=Hj+#xD^e4oxi*{2O@T3`I}qf2v4$jkL;hd~@OlZQVD_(7ArJ(Cvs`=cglMZI-7Q|rMv z$>;PubW;rLKn7)UlWqH)1tCS)suGATI`vm*Ijs8*eqj1X%wkejo)?x(Ep>|E55#`# zd9bShfw-4kDW&#GRN-qJS>4v_sPfjhxW`4--d_8oDs+_Qk_;3tn5TOU?h(qfO{BfPK;Kw1WI&) zrRVAEv^|b+5TZNj!XiN^lSby|x|*ov`O(WVxcRxh%kal%gwRVTFdnv4L{J zgL>tY_W;ek2{~c&|A{kS-W&Cy2|8dQEN|xKGx}j1YAgf(M#ry3x6=g@jgTb9o5^;2 zgmyM_2Roly2)ttS-j=5N(1FA0nXyH?LNbd%UrcEUUt(Vobd8sWm1U&E4sDO@bA)dP zHtx*7Z#6V^xZ8-Bb@s=#J1F`~{m)l;|NH+9vpdy;X?#bW{mI)2Ef)w{aFNr`ikAn7 zU`JE8v|1B3nSyQ3?Ru92#PH(?$A;NZ$;m?G{G2UvX(NBbA)fJ!m=)Y%&<&HJw`9K9 z{{tP4)VAuT?ftx{kDo9jW6?rSx$9HtSteXf=57vU3oK_6ZBT<67FOz?q*_8|g!zWQ zOS)^R z72R{XK(~cpbQXqCs4k}u-}fx_<5)maZJ6xrgwXvkejbF@1PH~#i8FDwx0sb91Ubaf zTIEcoEJ$(c(6Ai9_$;R;WfKyaz?lI$rEG{&vGcYOJ$d`znRt5TbyI z;~BZWlO(vD7lJ*G3gtr5nwe{Nh`qj<7+gOt)|-MLM&s6Pz<`B3M`}H!6eYeL>bn8K ztVV$=5#f(CHaot)6=TxKKw3x4Eq|z69&d4Dt>^Q-OLe|4<^OZn`x zf|O+L0_DPgaQ))M_x5o!di+NRSt5!=svC zTkZbVD4znBGI|_Xy-`}yhkK$NpdDHTF)9%n$!L>?M^=B`bGrL>_yku@d}FZP%2zz}(~h*S*&)iWcG1|;OPsq-9@_eUt9O@N)^wLW z*w^m41}X*`Jd{GukqP+J^4nBg#1uHlt-ccSr-W6P()`Dt0$#BAP+Z5r(=Vczsi9PP zL>t$6pvd$Cia&Yc#0-MfgsA$_w2C6BqlUxA@4b6M1(hPRNqdFo(jWM^=mi zV_}E?nlGprf{di-B}4YEp`H^nCpe=jt8gPf#UB*-%gPz8sNRZ?>k&miUE*xRktred zy16dKWtF|X%mdTMNdMZ2m>R0-KPOvbc|8vXkfFX-QTKP>(M7l?-6@GE?$>~$2s#;j zL3|Kye_`T6opJD8s2AHoxW{4wIP5U7SCKqB7W1BP{hIw}X38_+If+c%rf5TQyvG&OB7r*>|_tqbXs{qmZx392p}K zddsI#*eOKB-V*dC;&P)JM-0dqCqzLlb>cho#31!g*mrsY5#EaOG> z?RsB7S?b7mT3cI_RZ5s{H|^;c=TZ6(Y#OKY?d++N?%Lk@Hzv(dbd$~MfTYjOK=J?I z{|s^4Lk{k_X*|uNBw7*+SMO=l?jEWpd*VK~L0u-B z<|soNuD`)v%N3)rVbuRfEqwM<{{Rze;^9-Kn1y}eV#6uUmKGbcODo+5zInZV~u98dKKzlh` zWHvHx+66XA+|lE@#*iW#LJ7w&6X!$HA1s^VdKDQVEMeqH6Dz+381Yy_{#jjcxS!`T z!I<|Htp^hsgBBHXpNWKbzw4ki;|Xp>s20IV3s;x;>)p}Nf%+JpO5grd0b3wcX_ze; z?!umU6~$$P<-)k+iuDJAeWS#0nu*ZK#_3Bl+;XCRxM5n2Yeik#`!4Dkm9pL%03&-N*LFD?K-S-{DVl#|O z=vDEUIDLg;(*EA>+4jX;5NK(ZRU&8kPjzsw>Y;l3lYqX2jWWki%jNCL8p6Q_(m7Z+ z%-os=)h==j0Oq7dl-~Py39Rp;lGd*a3TksrEm1EcS)9l^qyS+Ew(GiKMUch27{fF2 z$A(YMQH^utgb?BlmKUP-yK|H(*PnBfJ!m|o$Pz0Jq?ee6^E*GedDfyuT_qHE*%x+N zLWo1%=6n{zm}pBDgngk4cdUY4-bI3{7^zGbFD{D+#`yd{L$5c2!&-9sKs8{^5Ri;@ z!B?O&k%!)$lzLK(9YzEwct&H?tK!X=p7avM~`SgOC3>A>T%}PIg`m4lYPF;I2 z;B{_Q+z2EGsQ4g$R!eYE`lI0a>^Abz!J3*DOWs6`7&FGC-xo;@`ooaK#Qs#iG@saguWxrT>jpKg_|Fx2(fu+rGbv-F;39BCUFH<4@K=ddB|O|ie1P5tv}Ujw0b z$jf;EjAioGbXHD@SSa zyVXCRfeb0!r{0;w33kF$wCXPR4^ZPQq<{c^9$-@v z5KR@Qy066wT!_7I((QPsX^bD=4dH-Ih8zsbkD9)6ll&osDfOA|cAu6vH}8V4uOg<_ zj_$4aOdz@tWUHf_tkuw~Y08PA?Qdn!9U z>VER$`l-{Vjr6Y@G*_dYg50DYibUjKJ=?>BEyi-X@ZgoO;xx=#Qejan(`c&)c zD&2P&uGCHO;550D9mW+M{y*VIAKw@_!;Y5i5Ya+=xuhgwoE$o*0gToRD`;}syH_lB zXr%Sq`WL&j@XE&5u(#I7758>0VUz_ShN=jt7sy~A5iRIKSFK&!F2d*t*G4K1TXqQU z`a=tbrPHi#rbAxZK^#l2Gn&BAs;!I z=}ZKcs3QI3NC3AO0KaSH_q=ZRO6I`QVCHTpW=jdb8~``rI$jzNX-ACHG`RHc+_^(r6Oh>q&3FKahh5)R=q)VoC3e;FSr>zA``nbx ztNnf^ZU216FroDfP&qm)RVq3mG2p|yk!=mYEM970aBwTg*me>G@G`)1t!ZJ~NNRrk za6=%OxtTjdq|c*S83c13Y7u0>7QDG{-2z?tfHPpb_hH6QoH`Y3B=~#q%Dc~-Dk>}A z5y7KpP3t(Daq;ZL+?!N)(nK#DV|@@mB+sf!GC)6JLSAK0F32l&=Rkr*w*`3Yh4m>a z2jEgW~f;7OCjh^QHLYJGsXx&MN$Tl~VW-)t@-yF;IwPQ@e-DH`4Udd$B@yHoB7hXm z1}e78*=xDDDKPx>ZYL*ek*AeAa2**+f;SWXiqKkM+mM;>A!>%;5G@+D@o;gqIJ zc1PU5_%#RD^}Kt;>3Hz1L_(K-({vAu$@*mnZQx!=uwDstBO!J>70A)(@(df1W2MSr zd6S6_2Pko_EW6c}b<>C3E(UZNUv0E)wGM=;hRNB~M;)j1>A2-guLw z9UUEo;6r8PNMTCl`ASK+@(xjZd8of$+@xrOsE7KZW3d}2#EEm~JOKL0Anz`+DLC;L zo12TM42{o<-Q^^s!6@B_sb_!al1qV;mXXn(ZeIL)G`ZKXTH#~pXBg2#q#kmYy2rGz zXJ>&`Y}>vahzBuKW?&g`z62d2Oj&L+w;+dn0(_veSu7&f$7f{>u%j#cr$Zt80B^jJN~f+}H{JiM z+u|@JFGkGsOFA8Vv}v7Tey~T&rt7=bl=Y1!JH}H^B`~YWy@OUs#V^Dfmj;0MUsNs z6CD6GnQe)$N4~hTLaQUHAQiSl86cMs zUdNKJ9_ph5$F2YSm`BCtiQTH%7CPL>B_BVEZxa+3*TXQvXqRj_{SvLmY#?Wz_ewjv z=!scJDy-S0H6sYEoi%UX;e!0`Ifq_f zwg#e+lb1h2iH7dZa)g?ysw*HXGV2rm{$r*;{uSw~HAbQ5I(?ORm>6U$3s}!l_>DIu@ZOaKNAjTPW z>N}XND%4&OY-uEn51k&2ggC&8$vY%I^#CO}ge_R`p_KGyF#gUhO*=dD!SRlzqofrI z7W52#MMsNl!TWeajnC?5J{zbLF8cZ9-kbk`NxHPwde-RgR7AI>FfIOj@QT~yK!k9` zc01hW!Gi~)G~c{=9N08d;9OC|<54co!=!{4aR5AgIX9t@$tjeIX*P!eJ4ykk_UqQ}tS72j%+YjjGDTbq>X-W9 zL0b+MimsuIeW+0{=6X@q_#{MwX|G-_*)?sjgb$&tfetUT=c>bR;TS3#d)=SYvv=?J zeD8CrtF)sV#B8+@Dk?SxEm>(CP7H}y8s*^kGzS(G;m8VkCYw9jH$y@i;0RD3@w$k;COGM}7#*rw!or-dfq2a06Dh54a zo-C#2nE}?o4t_zNA^@e1scCQ6@Cc`pZqodzQ6}^B3>GhzlDx>xrRUjaptj}1T=caT zb}pC@&F*YdmWVHm^f|5lA;QcpkQ|7(TQM?IPfxD~ty>z4mAb?x<6Ff!BnKUhTt?IZ zBT*YN&?rr_prAmck#lDb^Cl*$Wk27VF#&P$@h4B8J^&oKiU0!oaoJ4zX18nIM2}RRJU8?+A>ThZsB3zZpH0;CnaGtIlIpm)NQ2^N4*$DxZ zM8YHv6qb=1KgF5CX|sOAh9JrxkwaF{L~$r35s3hzg~utr63Ry$`M{emB;55>2Y?6KXWY*wP9M}i= zpR|`P6T_>>vN~*_2E98s)DXK+q}^S+!pYgAVFXx1h0Qei(1j9kuRCgymwu z6_R`d3yb42T8*+S`4`#Q`_G)|g}uf$snX?Ff9!-KmuraOr2MAWNqcU^(pau@t+ZEG zS62sA`eN09O?eh7VTbKaH93!A@F3*8*e#`OUcs5`?eSgE4qph*vZK~WU@RkJW6_&b z6y6%kR^-sHxgXG1E@^oj6=Kix)f4HnSfB#Of$Zk8JVL(4sxiy`pt{r2)8D(aj`BaV z`&T3DD;5HyWX&212=m^cbDP1KekYp!qo`vFJlwLU?&@)lu58+4=?^63){f7L;Wy4OF9vyqn6|x%c@&t2Hcu%b* zR9`O;PDxTw-nwlS7$?`bh3AaT_!=kIa?-?NDeK2OEVu?67 zG80msKkq8I{;OBVi1Co(`$}V!RHq=rK_0z#207CMTcnJPbH{zK~^LM@;?VId?0iLiR9ZaiHBSbmO5(B=; zc3QZ8CuMDa^=%y>v3h;XTHLhH#L!S_uUW)}=~)qpz%p>auWzjLifyw6nY}pgO-#<{X|dN? zj>tZ4>a8H94cYY3>}*3(-SP9HKjAzEahpWws`5O9|kf+&6u$|4j?Pp(TcPQKbot zm%pKcQ9(jnLBSdtdSDW|efQehE%6y%hYv57pHJ0&^8ES8>z1_305ciYBf%GmgL_md~(SVD9ulflzF)!{KV zzFVX^W=vO(q~15dEV|PC0<;BRzg~MSW;!SHBqU$aH?Mx2d4=^oh$z5c?e;d9T-aT0^K|&@Q$DFEBI&GXJ0xTtI{s_$!Oru+=H>etGJRFslB-*MJn`D zFCHPvwLt16!7#oGli>n)B{M+OTeJ>ow=Zz>7ZvsA44AU3W)P)hU{q9LNq`;gvHnq<)Z(FYXNbFlPB^)9;CT z6{tdz`@I^5WXtX4Wf6-dq8#8Bi~1pz4Lgr}O-kmC%#6B@7oegB4IZpBB8tPu+IlE? zsSc1Llz|E=#j3>f1R9KpCHfRdGB`4_BWE!)zg;=ew{6?zwmEN9)N}?{7-)2{qVru) zoHK_6&_x%g?9*y#T(V(lJDH?2Vq}n>ZS`S~nz(_hBS%_Uy>F*KT!8P0nv@d*E28mn#7gIFZ z>l5aO8Ztk5ATm&!&%H-4b^Du!Zn~Y2uo4fUkai!)=+Up=Q3}S%2}ykf6U^Q*S;h#l zqm=ilZ{OZ~+eF2(8Z4&I#PtSAh0lSJIqI(LoTe1n&-38je_Xs>fEeQI;A-6Bop*J`QP{5_p{K4vq4&|n5dzGAmNk%bz5mEhTrW!y+kq_2hR#%$ zbpxM>=?fx_lCnLde6Ftioh^dAGtgK!kV=j<7jK#+1Q4WIq*e-dJX*E== zU#3q(y0t{qx%8eR+TNu#ta;H>#OsUf($*rz5TW80Tq9ZG*U394)ywoN1KCgC-f8L z74RN67A44uW*)X?-_lLttx{M4J|$_Rn&e}nW>#?;9x$VJqnHm4{_o8A~= zb9YPJwQDm0390|Optcgi5%ewL0ch=so85}Kci=JP_} zvh?iK$cD8w*G1SD=s{)fT8tW4)R!oOBBzigE;2;u!lH6|_v$s-=8A646#bz^3OjY; zC-Y8c)aAb6tBOFk9@XHkqOYu+XzI`G#F6!LIDJ+^6oGqOHNA_dD85Y0TcO&7MRlmm zQD$Q2`t_G|FG*)TyK60)A9yc3vgyyCFDmP(rJ>Pu_*HA8yO23}mpieZY_?faFYCft z0(eQ|Ymo;KPRGwMY5XFk>|^C04@M&105%fkCk*y#2rj)kz)x4o56Yza`}d}d4iV}G zGAvZIUL6!P9)cQAw&45XmS#1=v-jZuDe+W$D_TXmYvI1miPDD_MWd!Y=B$pTrNWlm zi7(#|ar{fe$HAqjdu04(&=KG@LCQntgT{_XQr*ahM8pBc^`N^~)`q^;++V;V!hGl6 zFH+t4QmxoFPm{zIrCk?sgVGnyxn4m1ee2lYjr zqbd`>L}or?14k$;N7Oq>DH+xorM)3>2Z6NB=bSeNLMi~Ja1A@TI1mBvObdUKIu-fq z8!i?br`3kb8gBa@{xb)s?*KG_Y3SB`G8I-lHY_|;%Hbvgp9s)tMI#5+s}&24?$g9H zm&5d{?{I?a&^LjzeWQ2lREMaL0l_AFj&X2?9?J3v|2A=8^?2XTM8Bl+?2So$Ul#WB zc7EsBJxGQI2Wc0(x;@S*d zdBXO&4vTbiWINZF_dvEHf1tGa;yYV=q*;Bc zvy^=o{Je5#hVEF^gAH5Zz>mBdubVT1A3es+X>6Q(V_-YEq!NBm&RsjGw%SoC_~5Qh z%?B%=T;*p?zvx~X*SUV3ZjiwY))@aBc6#%1KaYueX~{ozbcbkO-1@(+@Y2^P+Wuo< z(3|@SQlsMoL+tvvwy~fRGn*cE=hh&&Lq1s^RL$uD+JX|B@q?<9h@1pJrsM3*Kx*tnS=bi*K%AC zTz>MB`TRKfn^J$yTs>c98j_?DJiWe^WOSc`x(7`;3YEEek5v3-4ok@;}_vRcZIg13cE(EgL?hKA;V6s9sP23$@saQ zN3SZdR=Qr_IDe~?ZRFt7&j%}xi#1vnHr%dLr>wpPk5s%fpM1|=yw_UhSV5N=-M0=8 zy>of=9VrQ)dsX!~uI5nljBh0-!LiZyZ`#hTY8M#!Yx0qp`>8Lk1{j2$Fji`Ls&2OH zx$B0r^G@_xI#_M<;*jURX9+O?=btc9aGD59b1dFo$9fFEZUB}whZ`0`2YxyLYtx71vb<&6a&AK<5_#z=YVsx_NRz%l5Q}4V)dE{;9 zJ`YTPrledBGnCbOnsRwgw3Et*p4thY&&M6K4sdBLsXab+pSDRvT+H!%%Etz@mKtrh zYI@K5m_XI4e08ogyML+PXsuAc=@;n_JFRTjzD=7P^`UN+_FX}amlVpR``y=DozrTx z#jKLOH~C-2O)Ti=TGY}I`TW2Ym1k0tBCWg9e5w|Wz_p{@M%E=> z`f6ajy)%$gIj zJHRFVsnd8p`=P;+Bcf8v81eORE&X~N4&Xs7u=I0Fy!1fjMh}^WX|K;}_V}_yapaTyU%NO1 zWvVYm?ld#`(BgiiF+XR9`4`19 z{;wAzXCK3#xp`fS>Z`oGgA0b~aD$h=e=pLO1p=Ys6AUCkkFQOqOpNa_>d%NOA)m0( zGN6Q#>(eLPXa^NpBA)5Gfx}>@8x{lqm^v>lXa@;$5uaHLd;H zw8&yL6{(p1U)1~^V|7lKUX8A=?8I*ve?!_^DUNDLc~6^n>Nh z)ZgnLWmXR^uUL2D&as(gO;PLfQWZMx9(tsuAoS-HmW_(j(Kk41u7OQRT%&B8^0P&j z0*3@*2OTtJ(A2`@k4h(n0p<*6JIJtHp;c>Xb`n~LF7^K+ZT?k4h`G<5n*)A-cUAZq6Oy(jU{ zbw##Tw`tv)HEt+xMQ;xXJ`1uOEnHAY$N`ul5d#3Gn@W&kKxV>Wiy_ui*ZH)%m;0jb zMfRD-kkqaV-S3{c*=A`sr$-}?1R6Z5e4#y{?UwGzv!a4NE5?jU^*f-TW3jjm$N9cW zpK;mGgHHJLF0Fo?LO`qTJiIxh z&hyDb@yZ-8|J>y;t!-_`GJDDO_Vt01X6LyPL;C#=%bQqfHul1QRKSrt3;BKTp>6TI z?8i05avbENM`lzjb`ZpfIQ$vHGnrEU#F;Y(of_^tX&tDTms#zfUe$WSs*lZMwsdu> z^=db5V$bS@%bJ@eZZO`Qp1xxKoZgqOT1kyK;ZmDyQ~!AC59y_UqW9-mcaA)A-N5Kc z;+;j^yRVuzR0`D+pt%S`sC=`7lxZ>C9dUqc|Nh5#K>`P7@21fNi1Y=Yp{Hp0X9Koj z&COOHkPf(v&6$2%h&YzNjlEE-n{}b~Zu!XpYGuCtm%&JWQ0*fzIJ5QR;fBbtwol#$ zXlJCfa^G-mMAm%M8(ytCnor%*_1Vm*Agz?dhHc*Ep+QP5M>73uGY#JwIL&o%P(^cf z&AG|3^q`Hvxq(P{BA~|?FNzEov!yEJvc>0H=qz4*GJD})@|4M{4BX*I-6P~NMG|qB zXKQ>M3|>h|Y0&A%28M>&feo#6FI{7du6KOYRqWq@8EotkeGf#~Dxu71Tw7gafWNW@)_)jN-0c39$ou z_H+j(h;MMF05MB;)`0B_ge07{hbB%0lV0zEnewzs71X+cNnUK|4c#BRmSXhrTy%Tb zvuPo<&Bl*L&i@>{^G${C%>(yi+kWsFI^xMZyPEXHy1HWrd%8`Nlhd&LrDpVBA@`mK z5f)I_$3pLKe78UU@# zS&&eSeMV5tw}!jDo9&F~LU2F1Kd%w?fa^~9t)wJmxH0qXZ3q-Lgd0IhtR`yi5E=| zzftQl?O7U<7!J0rL@;;~SMY{b5@Z%q5=eh-1r*OJQg2{^e5{hN9Z6jIn>v;b?AzD; z^J}5E5j+@Rx%`wRN{;7drzJ6~OX7+XEVLFDTYxOP$co9mNo^sgy;dkDup}5X1;s+i z2~%HMGh5~WOcIxU%#O|o?!-W1+%s7x`Q2~QE3XwK%b~Dwh#1*L%Z`OgbF-T#%lm=Io5ETjSHJL?qUjDu1 zG<;{LiC8t&@#7=oHPzLZ+Wm&?5Ys<`p#`v7rGakL7eU?#1c5uP-idR1zu%R=x5@Qr5algo>5W04Ydt zF+~thh#0b0l(eTe9R)zs%U@;`lC(oQ|$HVlA@IBw}R^_HUOVM;-R6!c7SBBhR zW6n9tHX@JDxuHreemkh&eeftTDRmG;sSuzt@Io4M8fe?_pQBGUHfas;U0_oFjjz@r zS>MRz)%<^oxUX(?(KVXp`TRC119D(oj_;fiBxexzHe@3+PP+<$zNJXs9^J3MV>XxE9$iSHN&}%gR3fOX(<5f?b8l2h;;eU`kY6zx&C(L zH6XMl;{EQiv$^^XbE`xG^eTxgKd9j6MTCl}bp0G^V-((UlcFqH{oa{b0a{+1qSA%j zEHkMb-Ku!g;xf>)gDqA?D8}rJF4T;SZ*eb>u~Tx~!L2txG~4mbMZQx%qInKL4Tnv= za`rgeG&W~33cfOxyPBL8LVORwE24>nOvu8eX}dTr;aqRDo3l{YGw7uQ$FH`7P|2~h zX^7HstR733c@wc(@vj5`W<*RJ`+9H@Tb;Z{ihm!(o51rM^qEz($q=d zrsCNH6qgXv@(aSJhRZe`c^^zq^v-0wOM>=aK1S%4KWy23;NcwImXMbYNZUtoB8$s9 zn1erI+ox_qaSUUVhImHgAo6~U-cEWIJgbusSYXwbzy0TZ+=4gQo`m_~waKk_K(1X0 zk(!BDO7Y~}8hqQOI4@fZ`R*!^7_6t7LR7<9$xi7|+@n$mX8s*Do~fsIBMvH^XjhX1576CX5+f@Y?y;uprZ5$fFS+V^SnBe%()Qt{b~b#1i`y+j;&6z}&4Gy#`df@DmFo zLVU~?ApeoXfOLd+621jh)G?L93q?U8k5I! z5atNoSC=VIdM`m?gw5*8PvayM+QK=~USaPb?}Y?Q#U$1qiS?su<`^8zVU*lhJ3l&u zyqXLqPm7>Zv7kspF^x2>e_=*|G3~Vc<{i35{jlzoA1q!G5_TkYj&7H_+GmSp<&xU` zAL@Pl@A@>e%@SPb6e{v#0u28GpLAvN%fy5%xOrjsfKlGW?r5v{Fr2U#;U9((SqN<@0(>&xIyczi##>3w zAnfP(ONPp{3sMrYiDwemCyFTqag!@ATJ}I;B-9+3Bm|iTD~(9%{WUudFwo^_qddAf z;#E5q!pewgkEq|>&=xC_PJuOgGA9vSg}b-6cg8@DqW`vdeRN~U-)dHUDna!uD$p&J&C!QqFP?BPF53*}226vnM~E2ssyR(9X>pF{wEwfsu~djv7ej)cL*sVWa4LIcDTS5LZaQV$PgY=BGwDk|6kbuhch|3PCCR~BU(=s zcI1Z4;2gfj))TJvye8XLzsN%{UB*P!{iI8_r{-t+VPSVKF%xm_kZxE>mfAVt$V2~# z-oTy1KZxNo!l?EAcTzZkGhzhMw(6q36uEA|gYY`k;O6k;_@O$42TII{fg3^p?ZwO?!%W^&4x zP$%BG!2pTZqVC?*wNs~>zdrsS?7w)%RkoN>V1-k#VZjj2*|>3(;LVA|Na|5)AwU>N zWQj!BV{qJ|Fvi6@laPK6T%j8a4XC3+^ZxkR3vHdiF_Q{Rh714U9X7&h<5Xq(hz` z^)Nz?g^y>3eSTm z?E?QS%OaCNl|Xu7oNK9fX=yJJ9hIVw-Z;EDJfYR_{~$|0tzsS?uK3G#TSC7+eP*cm ztmc=C`<2L`A9COPfszl+5L<vg@MkQ-GKi<2dept6)>%IP78TH>(%SG0V zQ^UQjSyLyNCGNVGXONF7(kynRlE&FO)xKreZ>!glBkv%O$#xNw*F*Qx@nr@SBX||Tj1m=-D|3-@a8AFn zvBg48h#~6Y|BJgff#$mJ_q|nDqo%7l4bmtLO7nm&%~T>o6q2MAi9~}mpouilEFoo9 ziilDPMQA`WhNLKkkWA0(+r9U5_Brd>XRY(BbDs08bFY10>)uzT|Nr;<4xi6^`Yhom z0>ROJU&1T?nfX8cCqR*-5Otxk;8p*EbhfR^<4ScazN-6#qFWEc5{jp>!0{aaXl(=U zWFRy5P%i)UNoi*eZ+XFK8gCgIB9>*JYIr^?VG$JF!6 zf2vN(XAJLQrbho;0GtTa<*bk3lVCL2!#fvQd>`c<2%8%VXY5EsyKI}7_T*Y zFjD5(IgebgeTdP-kUIeNTkKwmKkJ<}pQ0q~@bho+UkT~`KiZk5cxdPt^%E&p{71^v zJ#5!;H#hCE=8~fl6fTpTEIN5%Ga=lV-i-)^WKK^{?eStRC;y`R(AlTKtjcPKFc$!8 zj0oxBS&4^EV3Ip`WrXi1y_ne8(vKe(G0O@~GwDp{Rby4+QdGYcD4@?lO5f=q+qBsjN;bnBdiYI`vfsffK_K>4L67^CMpvN{`Hox=%84ucWV}}YOT2W zR7asd%9(pfeP6iilMIj~l9SDJ<%$n9)mzZBB%y+mEEtEai!__zO8Wz**|UM}wVy{8 zB4j*YMsyLs@a9gPIdd#hqpse`NKAw>m;&k6U1T4}5L?DRd-p4XpFe}QeyI8A5zwIk z4M+Y8xAG2vF&?`8K1TrdGbrIHh@WjX2)<~SLvK0SDo#It_N)q^;PLR~U8*xX9#Vh~6iQ}q7V&I9@X!_QY8lTWMuf^D#sesJq_;o=pDa1>*qo`5KN z2ZiD&c|&5q=9hP=0UTL$dgI%+F*yS9`WSOR%w7B&PxE-xXsG~rs*x*Yp0y1+zho4@ z4%(nVmo8>!v5HUqQ9H%5kEs)~G%AWmjofVJ(#t`UKz5O!ob3VX>x zq>gV9kE6PH&tZQ&tlG3cIq~$0(^JT%6_Y*~_?@+91q>?4M9OY{C1ABrd%lQ`>K#a?ICLH5&E%HQGlZf<>Uq!k4#hqhH|sT!x@= z>s3RM$c*xXZ(GKn)2~AzEHdJl1<;38jP715sN7Mbfb2QpbIZ>cxfEPwesEq8rBm&y z*1I`y@~9z7o{@r9>nZb^3Cw$(nd#B3zuYU>ZrFx86^bJZjU?Dc9_xD5rui1jg0&= zm5t2Q-SP>2t3c|B-2QRtz$C>37mS9|j7`30Nzp7O=<;_d+IlYNhE_k&q?SnL zXXtU3X?}t^aL>P!L1ZVOdiyDO&`>L0tE(}R0^%Hwx`GrizeUNUQ*;OW5W(}!1>Ix} z_h$^P5~T^l9$74}2+4s&^e8^h;;p3^@6d0~BSj#0w{L*B+j{gOI6%ODh>ZH?uX3?$w;?obp@C599TDdur zAd653>6XRQ$X+3zIt^C7`sdI66;|WgBtKE?rtGHa6J?BS4vP2(R@FA%7%kF@BP%KIQLc$*BYml_VT4jc@+U|QIamYfQG8I zT2e6izrgBb+RP3B<8>R>Nny$qd&?I4!NABH%*>KW_&D)U|EAD_!sm=pQfig{9LVGm z5A$e89)O4zW9>*#1V}opzBvV4`(4cB-#gi|(J?WiD-L}C8IgGCAT?Ac?JzCnw*wnY>rIT~w-t0wQC;JAr3gZK;C ztg73$hgd6VM3WA7kSg@->C=zl0acrWjv-m!Xl6D}{am-|v$By^(gNMzy!lVrLaAd7 zzP)i+EX)Ali{ReCC=+vYA3QH^C(?^0yq-)>P{=JL&CBiESr;+ZyAi=SDD~3u4c#I7 z0QN+GhqQqYq}DQ2CC;3)O3YNDhQ^aVTENA!uZIYUOb%}7QsrGJx{lJ;4dEe52 z^So>0_bba+t;&9Xt$S)e^_@DYr`yiTlZf!BscIf)!wq8CWWRsAbN~J=P*K%A)HwoT zyYrje_!Wqp=|%{vvc|J&7A+_9mw*2%3Q8rsRWw{$W)6^b0Zgrf)xsOaKuU@L7fqua zxr^<2w7f76>d~zp1M7DM{+D`4e#e~2VloD#+Vm9RoTJoi62Ve0MPPVy~Bv>*CoYCU$ zl%67KG~UtC=NspwdEA2yocLr(ogx=cu9&3s@Y=9xJ)3hQ`=f|Mk6uIGmoT$7nuZXac<@WmLn22tQqZ zHO?`%uga{hN;1#ho}J2I;{Vh0ZvU0$o8TDR!TI>HV}xy;XG~6?gA8?MBvAsUdw&~8 zDiL-812eS)>q}YYVp1$l(cJ`4C4>99BX0T6-HA@Jb;g%?C}`J3_P`$qC4)BWWWgyMoTR5n znPNNn2>uA8uUy({nR#EBuz7m5~fz|_b_N-cUimBZh*E9b_(Q@OwArzcYuXbAsuy}YJ)g}dB* zSS?Y=Vv=X5HEIcR*=(@}wftNI z-Tj0|GZ-RENFx9XHUcnEttw{CG3vxJ7BMzbMgeec(+Ud<<4~&%ooyvRvDX0_qwwQI zGmB3UauMGltR*e>{fGLlp|W?0cJ2DHT7JI11h5HgN`h`90uOqq%<1+NritVZz7Ny% z??$CVle%Hkre{!JqKJvCYL;w&i1Ou|g-#(4zh#FhOdh}(@ZEXRjNO={rTKS z!ayeu4bt~A!wjy#L{34ojAm<`d1io5Z8Y^1_S(m6qUkAYEP)4P$EaVO{e+5NHQ$VO z4hW`+^7-O4vr|jn`}GYPgHkvH>fSaR!a(EE{yl8bFpn0(@W`b*2O>c!pq6jPqCu<{ zJnb(ubZWeMk^8@-k$OZx+s8BN)YrvW`zHmBf&vua49XK>F7`=gA@w}SC1*v;PeJ0h zKgRj!(QOVo6evk~dEyIf>9`N3T^5(D&vu-G5ttO+A^<7oCuDV#>E@vyox#940Jkk3 z?8J5=EiJUAbN4|)V_+Lq2JS&qdoP6u%44)!fS=_8*R!RvX0k*3b?fr_G&lf9Lhhcs zcySrKX)6FKx2_J{)^n8k zP)!hVtG#FPKNmPZkR%0e?=@)3g5Z$ba|XyPdcg-h>g>GLQ!&je77r#>IzvZhNR^@0 z7e%$SbOuycH$^tbwONJsM?{?Cq89nJ+r*d+Q`eX&@@lu0(>a^?roxBjMjmd{cV=r} zry6h`zHRg7BpUnod8Uj0T?^2aGmn3z8bg;0O0@~emwtRcmH#!(t__%vOg3z|u5CDF z=qom$SMr$Aqpj#b+#={D#b67lvl%H6K?ISPB2*;Q4=B0&M1l9s$TZyHwH!x{rUtu=BSVD2S* z&em0130G%-IV}=-|HTxc^^tRNcBA!s+Ra*er36+#(K z!y1lnjQz^ot%y!Ke&DtfdT1&KXL?(KsR;OO{vo`|YSbOr`b_BN;oRRK2*6T12U|LS zoqqVlKQXCMQ94m=1;W)UMYnJN*PrlY=gWmF^`?m4kr)*5NdM*sXG7Clyi~9 zs52}z@i>HtON^TlFgXA9+gZ5udq2sl6^M@kOHQTR1=4ymQ{7kNJWNu5As|@X^IP0@ zyDD0HAQ=Map2N=p$$SKs!uWX3!($P^6MeS$tB)P)Lh?w6lb9zc3J8184vq4=@8ZiZ z90KsYW|Np`Z1CBpJ;hn}Ws|>E=3n9Kv4U+7f|*7>V^PLH$GW(*6*Y75Y|W3p6Vb*k zIhY|t$aKbl;R1}&j0eZ1+ksk3sn4aI9tJO4_RUp-4lGeqRe}aZG^bICkpPQ`fBw|`(?_>`n>^o+R&g^SG=lmosyflTWXuh-9Xq@mcG&rjX5Fl$ z{+V;2c{b>2M=`V;p7wKo8_Q6bz=QLdrvS9?5JSZ7-=oa?RPp%r*E7L*lCiR`Y+@C23lw`dr|a6RF)wW873 z7+FBfsh|w^?w!jHcpIe5e0jQl3AFLFW13smQOI@vK*cEh#hW%Q0wF*k-+i#cjpqmc z4UmR=ULA6v4Pz=N*d;mbpg)8ek`DP}JOfDoXTU}UM9Za%kxL+l`e6i|DJ*-dKa zCu&r{fu>R&d+wH$Y~US=Cr{0&N8}yf^e;lmj>{}`S$%WGUH0 z&@6CKKS2!)X0*h0kPxW&2?s;`lstvqCOrmIs(E`?^k2#;^w%DyH(3*}sU1`@+45 zcM!(&H0w-*j!$ZqrR#+Y7y5h!z88(%6E+0KwiDdcf=*`Y85QP<^ja#b4!7|V#b~5L_ZbdjE8k2)Onv0ArzAUw@SJQ8=jH`1L~#Czp`jF- zZka!bP79oq&BqBJxc1IS384_c1Pz>KjWHjw(ISA=kM70;%V^wg{(-rv+mjzZJ_xW| zT3+7yG5v>_^F=(tM{2rP@3UFCdISb3d@(mS*Z(Z<&XvAx`#yVn!eYZ}Et_EkwOr28 zq&WitQ(uX6RY7quH)v$IMi&`bH>+^1z_T^wTpo$Pa4a3lJ^pT%n6ALkQ#4oRPq5gVYw&3fK6kbfoGy1g%bB zZ8~8TCvhQ#Ps9rP>3FkH<%oSvYQ>Kfg zB*B~RjAz`s^6`KfJ|YMe?2d4N?xcGsF_RE5PppsF*nK_=M=x#!4hQ9HH)7HxH~4v3 zTQ&rEVV9b58&6(V7x*8uOa>26A!vj$2}nf5Dm-fZG(=1mLSw;m7RWbGB5s|_=7tI+f>aEYh z&RC&N7Q91g&$*-auVzw$fs>ti6(Wu5tFBdY0iXc5^z>Zf-De0*sB&>G#iUoc+!pD_ z@89c{D{=g;(J7FazyH^1DsD>3Wb_h&01#q0+?zLNdF)~`0PlJMNQRh=A|!7#f+mO! z5?i}F^$vG&{3vr%kWCT%X4!=!!J8-TTGr`002lMjRyBIA1{D^feLxj(-jfkU=f-MD zUYltUwf&OjW>I~At(7(CHMRdsc|eZCuWzAPtY3E+9q;K4hg*@&Wi%tCLZg$*=_ok{3PDMUz!eq_+AjFnxgEB1b} zl3)9eFN%R7JK~-YK<+sgkXr(^=!{e7|3`8fwilXz$CA^}AzwVY>eVEF`Cbs4%p;B= zK1H+jMptcv^OFsN>UITlSBO>*#ne^BeL8+sG@pW{M0jYzM}9eBeh^K)R>;~jEFuVV z7STL`JL-t8R%9J>atX4NE^q_Y0>?~m;+ipS2yPxVKlrzRpo4TmPjCiXx1#ep|Ld}I z?}~<(#RrJ2E6Z?qX+jDd8uz{IwQfftEg_Gx-EBx3sDt0nY??u*=zVQi)W`>t!RlvR zJ1}XB-)QxK0YZbR!_N37AGfhRoWyLqD%8DS z9}_>sEyH`5@!NsN4e8iRsjb-tEMN)WguTy)j)3+PIt#WZKldgY8!=W9p*DFP3&GD& z)4%K+uHL2EeDA0Gg1$fN;qh1FAv%$IiAKkbr1o3|lnUqcJZ5AR?!$hLp#x&DIivbV1=M zA%H2P1C7qCPh)!I+Px1SK9p%wt9e}<%#NB+SukXV`7`=6G2yGGOh7Mg;~boOmuO_{ z{{xBgnYu#vCMG&lES>f83Uw0oeGGaO0gF98*bX{E40mVY%@{lNMf^F4z@yo7$gx%d zaSGrxq^*?dd(XY+yXH0Az+#aS2ftb;wVxPJ3Kh5h;a*Q6Jo@u7`PsE-dxT)mEwYyV z-TnjLIWyeI$S;(|yN31)jte}sE7!m+8bVIq)lu8^7^RTL{nvVC+W?ig^{S>Sw&?eG z9B()>@REAi-6d2{C1#y1Y26~b*Q2h&UG8hzDR_#vU8)5KQC+f_ERLzur)xbmeCHGd zh$iN_!oiG1+c+KR{8D#0waL;VypzJ>ABs4zK~K#`%&sJEpN3~DwFD_I(*S-=&(3D% zE~Sjz_e&@R%<#XE2_vFmB)IbzUs5ooye&he09mQJr}1)cmHAzh17(C%4hzpmSJ`zJ)xUj?B~m?Bk$e2L7^i`6?p3h zD1;|`H!xz7YxXvWrBt*0{uRh41y>G4!zIi9Phg$R0i=aQd5RoID8hC)@6YG-IDX=U zFV{9xON~uTM)jIb`{eOk^Lg@7{cbn`j#B2$*S^wGzJ6~$oPbB!8FgzUT({=h?W93I zk`_^z-E+^aynpURTa^qtLu}03NybJ#Oi?F(ttYSqt$gYBAPj(_OqpVRh=% zW=iGLZP(wjcfBiTbd@nQlrM;X_S1JK1MK)ryi&m}bLy@B=yi_*4!(L599G*FW#``E z1OBihJ{M}FpAS&!qA~qnWXb=6fBL|EKyT2k>wi>YBlrp$)iMvln*9O+(tQC-7j^Zk zoaDD}&(Y3^IeO!~_iJw2C-hzvI}@$F58FI+C0u722uABSOQu3E_OEBS7HWg$E8foE zfZ+z4{xRc-cFB%I7qKOSrT?K75vLP(fJA19-Z_DOnVYA;0<>Fz+)S)2Iw5il`@Qc4 zEHfsqa}TLS9CH+RqvR34$$H}Gq6`xgH6);lNUK_otU>~+QA`1$+7YK+3LTC*!f=hx zjl`?E`V^m2{>`Z#X85pMqtP{%c6JOTcZ0ZMSy6O7Qd}#v3Enx6daFECZIOQ7Y0!N8 zDI}=@(g;8hmBp^ASn9xIw z%~E}ll7iCxJi@Xy%+uij;6!zeXye|KY)OuxAyFfWjXHTFYn%f?gp+CV^v2{!=EpmF z|2bTM^2V1@ij5)h>L8c2Vs-5oRP7W(4kZVuT7`J`Afkp2KOk>JRZf(Z&z&6rfqSrp z63_XwZ(e_ufFhf&4TrBYL?h|t%ddgC_FNbNh7ac=^yZk*45sI+;|xH=zZ6*u8VysQ7hjgMxE^3`GnOW#;R@DumJx+03&S~0=R(_6u;2l z{rfN0((2gT;)or>UuuEO}CZm+=1)>~}kqiY+0{MuS~;ksp1Bx=Y}d2-vBzrTPZJB8jowJo7s{OP92^Hti_O zK|bE|AYW_C&xDi|Rg?H+hLn^R7a!t&rJfPnlVs@ASFd(&H0p`f4Y7lVun|~Tq;a}P zcwDcd_(t%(z37n_->BUOhUM_-A)|~b$5R@yOD;#6){b;L-LXq0D~21)`56slD)+7{ zx-LlxaN_6KO#Xx(@7_Ij{P-`&9hFs%>8b}h?SrvcuCC6`nult5!}jej+5UkVew|q6 zV&W^_Zng60XqG2bjD8vaU{$)YF+H)Gazs)pY~q5O+ay95=nE45u&JS;psZ zhW9#q-aMPu<~?MSy*R``aGx88{m+Uaj{3eC_N;Cp=P@;1Oiy-)0ss+?e*7_~-iP0G zYf$x+8$V$-A~aDkz>EU9y`r=hd^{DrZP?YRGiHpDk@+W>g<3jP`M}VFNDbfc#6p*+ zw}-ZY1aJZZuwm)>=aUG+Y!T7pjBg?~*cjInl58$7xoR`Li?B+q+%OXKa|o(ND=K=?Ba#>G)Vrek zWpN>N2PC_QR%Dx?3=zDhvvWsOIKG^*67)B!msUGuikz#DuY}=)nNq0GSB^R+$)w&3 z;0IO&fxG>N=oaR`#~>IZlt)Nw!-}Bp_ONhhX>;7r@cKm#??3=td~UI?IUfJofCPs- z%a8ZQO7y7v&KD^~q`&yoedS=}lc>f0UjEZ>y~z{vVKPqkpRB}Of*3|M&^)eAfjjQYBgzAHs(} znlfWBjb45G>(U|k*h0nZFQI^@#~wla;rpn_NP!THo;p<|$;g$F(2caJU#x+Q(*w_x z+b@Nj!f78ZE}-US_J)L%`W~g<&mXemD3(S~p1jJ$*Rxq-J9ANaDxUygkWBn@>F4OS zg7N%@j}RJ9v8Mb>>L|EPaI6n}Y&MCgv{Np~yA#kNYWPz`DZaALTCmd-b*f%@>*q+Y z(k~O=`9o1_p&G|P*TI2>~<-P;jU=z{#U90%b8`r2%51??m@bl*` zxX>FOkz3!oux_X&LtXvm&6y+q$JG4{ycX(k5Gd-~yQGAB^$kF|P8Q8wa)8L5uErJx ztpshekydB^>cy=c7Q-S)Tt`?*Liu_AzCPiL9e;di$BA76G3C;1e5t+rqw^zBKyCX~ zuF<~oruPjXsTfnnKWDHb0XRdcw1lDtZlAfzpHXsAf=>ij#+C4Cr zuLfIY1W|ub=Qodf_hb6Cceau;nYS{Z8i0|VT-bW2=l^%wqy%p3wmgU4&Y;!5?#GUB zvS0qfE4H^vz-iPI|2zJkkz4E6{W#A+(rKKCn2N}eKlS;R4*x}U?+gt39kkGrp#MvKn%x=0wo zBLw<i}XQAQlb zay}=42%D+aS6rTc9A%P!A=$osKA6Un+sBO_?Sxdz3R?s~q?iVRe8QKWkc+}2+K4(R z@!h)%44WWpq)qGH&6ynCf{gU?>LDgyiTVP(g(~7MB1;wbVc0!5BT~$^GEIYDrwLzE zKbUcdTw(he`K0=u?})TfPD7dQFpXh2*Gjr2DhFyMwCHj0b%y{AtwHq=iXh~sh|_da z=-jz82c+<_(?p66)y8gy^M!0=#0YV(i_4Eo_ysC2)%hLlO9TB=f-vR6xS;0j}$h*byrbdOk5fSY_a0*C3 zJ-G0Y#9Xwg`+r&S6_PU!N0%J@cP)T&TZnDG;6cI4U(m$r0jVv)xjbCVrQz-p2oRzI z5<+9_zF&*Tprs~X+U`!%rPHT>bk`lMw>J;68)&Gp&=Rth~5TRPYc{;u7 zIwf299Y-=k8qs%8Kg{sw)BG)!Uz2h5338Tv!XxRw;mxVP@TqSG1QAU~vb5v;I@|aa zAfL~vYo7oev}z@zh;iowXoBEkYdk`6T{9shz^Yf5F0#9p9cwn~NmY|2m+|7op0cM8 zx4(}N6uH`X?EWI}Vk69jz%42-@&WpyCE$ZnmFlEaW(9X%K;HD3h{;1=^NfPui zo2hB`W7En6;(Aqow8xN}e=T^j2d#k%vBILE_~8$xCA$pJe7G~7zl($X#w$ci9< zJaf?*DgcqNBpOqk<~`;ioMK@T)vMEL;;9y0m;88Prs8Qi%Rl;cSgb;78%_>q z{wgsY-IoRrRIk05o_7Fc4gtajn~YcxKuEoi!w8)?cc!eZAPWJJXsngq)}3(Fp(;e6 zCgb>WKU+x%uFDH*IZTN%=*e$=E!!rndr|AG%9TiA2%XokG*tpjTcmnJ2tP3UU9|CM ziNO(b7%;#r!Z{Snue;QXCq)X*qqf$4ZZieIi$X_CP6cK#X0MV1bc|l+4V;eWKdcEEEWb!7gYORV!14+#}=L zT*H1;E~2pGv%N)hEI1uZA;*CGY9pQU14k&_}{4f zJ)^zluOyf6=V)5CY}p2G4WX8y{}jrK1%SFDut=!96z1REnAk0JrsSjU-E?xa*xrG` z^ydr^mx_;&7UUv+ND%w(SiCoYS_v`+OE#H9C7N;8)#~;>Palr%8{{rUTro!pNSS#S zq{QFY1ZH&p@$1(kDI}G2u3|HQ3HWeJsQ0hxNU@R#YvSSk6`Tvd^T4KGsJ!s%ag;Nh zI9x*~M-x)I16J5)R6?c2AW$F2Ur`c&qP8IG+9 z;Dj7x!+{&K)~t8?bzkv8#;kgIfm ziQdMIBSC+(qL83n*Z%bVyOD2e;9_uH!83x6zX}?H`G6X1e{I?<=i!c3`EyK1W|9)b zErOg%AR~Z7DF?W(_ii*|c_mR%6Ot!@TmD+bw<{0*vYUUw3UzR(LeIA7r>*KGpFc07 zvk`IuAxut9RWsQmn7#Kz2(gfT0NU8OLV5LEdWZbQ#9rOI-w>SMWSh*o)DPOimw0Np zqQ0+*7)$mHJ;j^T zKZ6AfM%zvFDnH*HoXk4@hz(3<_+hjueIY7oItUVOrTWb2JpV z%84lYr_^Tp%$c9S@yE=adl@um>#(=5yr$YO{kkRP;jZ6vxF@Pk{f+>_lVw zWp3cL_=sWr#qov=8N>5K-Hld z_u@=dv{}dA@&gqS=K-?h3+_t4k5MXoUjJU^+IEJ$p?Qd4K&XERr!U4RB&g#B1m%@n z_vLM8fq@(V$m}(K zT7Xs%WPvo-Kzt4YP^jZJNj=_Et3zUk(4YCTU8HrNEUX z;6}DkVruG1e4fk84U9GZTVscJjJNzrB;D}zVv4X(Khk77xww>6RH*9fU(W7e$hAL; zhYKWT9(UxE29HK6K_PJ`nDa&x6I6)fNUZV`hApkI^_Nik860jIQ?vf*!+>#GlCbpv zdb0v(B*BzKCPb;TG53idcPy=N>+$jn#)DUiPL<{Y1Z+azAePoM;2~VZ&mG;D3limg zx?&KhBra_?bP|1r3=!rrgo`ALou^(b0Vib#4#Kxylk>q7s7iVFYjom zL-jG015}XPT*a84UQj6s+7Md7A5L0y$fybzv}z_HwCFu>pl*c&nqQkU-@}AYO0DH; zN#owh#fF)EgC304;)*(nc9Gj>BmdKRRX(F_gVvTaC)X4RW^U!rI-}70L)lMP0Ug9& z=vI@g8_}=cR2U4z%H`b%P#T|r82zf>1mP~`K35aN(3hkO(t`k1A~luKhFa!F`_vBo zqcK~iHIEz*L}@RfJq3dxTxjFQ9fe_wAoPJYG(%7eQ%ziwb^?V_7g_@pd)uabRjBuA&UT@N^YrxBIKWaWD^qn> zQ&lZt-Oe3%{kgQSNK{j^*Om`QFC+Y4G{@Z*pkAjEcdjZT$idBXApNn>GlO}6mpvVs z;Ykt3nJuJm947Aq-p=^@0wd6C+j@nIp(?Ps3AFqk%QKUYG=nSfe@hz^ui#Td9TEeh zaK^&S)RZir^&hv%bQ9A^B_xW*Q@wogeK~D0Q3wJ)W<;2$h zx)|2xUK;-O%px6fHY2C+57r-Z$8(W+pzk8zpsd^zxpLV_QU*uPj|klHcjT_W7jJ9Q zKM@dMbhR!!{PLnx)XA?ObN0Uc2r3l-Lts2%?4L+Gk$$h_y$JUnHL=bwcg;ZBl|_*ba3*AL!C$v0PVEWRhB#%WP3y~H z!~waOPFBkiMo0Qfe5Cz+SLw~Ai@!Lw>$G;}=a*^GGdy#%gLd}nzH;J}I}SHB^XAyE zcpPLr@Qq_zAO8~XUWX2y=^FO%-3G0MYcKm2=g)66@XrkmLwuGhDIfR8c6e%NF~q`H zWo4sC>a5|&p+WvrElempk@P)$+7ySJluF})nHS$qbeKdcu7y`{&dU})W6xIWlTz7H?3!d5Y94|Vv~Q= z-|pAapB8+InKd=aD)T{lX8mCENUy^YA!|e9WJev!uibasJg5J(qnphu&1dgxzhTS9 z<42M^>*uAZw;VZ~x>PImldb;7tlJa(V{~6A#t%vD6dsU0K2`O(Ym1A%#jOqRtVbuE zw_T=OQ`TXajjcd@1=oXLoi~PJ@)&o3)&nmjL3G!BfB%GteyzS@j8c?Ov!zeK`%s8fUn^Mz*C3=Pa zM?PLFI^w)-U*w2KSDd%STIXrWozO0}+_|LBqYWDZ zD%7jfYBzZ|1|D9z_MrnoIYLn;4tYkwd#aX{R4LD=PQDqHPpAq-(^^Xh_!0W%fJm=f z3}IPB${d6=dg|jHMln>yxr+v4&OkW8U9SI=ymx zMQOgp)Fq#GZ}Ki&bReZIFl$cVULRA{9U~ce{2OHoBoo`=eEw5Jn%aC}%FNbtRUx2riyS z&6;iD*Q*j=zH|lq5fe@6-Gtad49~^#o)zI^+}NNjl3I8}St6vR-LImy*3P7LB`fAJ z5Yq(x45>82pO1Q9t5S@agQ-BskoBVa#L|W3#fDbj?EMoWX4mdGF|DoB;}_!w9c=a} zda)|!uua42mtKY=Oe;sIMob^~S38dreN-dP%Br@VbiKIFY=Fzy0T&C0htIOx+s@Kx z{CfAxCpGn4UV9s9=-4m(e#C)34QJ=7{@2Hj9g8Y;BT0;rkD!2{=m60IQ@VHWey?XL z^z)B5YVyTZRjZgl5lz;M==kQ%Ym$-nJka=|L!EIl<%?(RezTH(8&I8KOBC7w5@ph; zn6*oPam~Z1o&^tji)@yBs*v2OXI;~-4B>FoySL?Uy8Mx|XJ3Sb#}*+fe5!=aAbc>< z`pHWt55IYIu8+RnjEXoX=WU()`FGsZ?Bme9`bxy%A)AsypX5aJ+%5m;XiRDC#W_mu zhl)cJCZxqKDRg$|cQbK~pXEA1k_1L(g?;Ag$e~8wZ1j@L#TzYMpX_xL6;9tVs1(r3$6D}cCaNB z2ib#1%=aKxiThm(hayxZt@`flj>ON`;`6 zqL&{?t@%JTS$4Q|!O>Vv4ga(i-=x+w)nDARb$7R!X@wGxbAozGM5T51kxkdml220~ zRjKvYl21{Y-|BiS84#Ibk(cwP>y=MCOl)-D*A*$rG{hY++6*Apr+4oK#7_-U*wh6r zUXW%qa>X@#>8)GG^Q*$&3%$ZwmI~#N#%bJ$ar#Kw?eP*o(Qd zG}i6N`m7yUR`RlTlh=vsAwR}$jdwWwt@gX7b#40@-rtUBYN%8d&5Nu`&i~TUEvl{n zOyNCgixNaB2mGwZWKPJP7)r{@6M%2V{92K*BUF1-vBq1sE+@>5T+-2W2HT>^^baVg zp2{?Ew+KK?t;X5GqnIr%V)?k>galOJssV3-O%X!OvHo~0dnPbf=leT$-ivxv_xJ-U z5fxxEy7TZ|-a`A3mX?SJl~Wx&T*Lod`)d0y6Z73(T6ztfaKbw1o`c~V8S8XQ|IbN9 z9%XGd!JY=G4O1ewE&6@N*}Uw;S;zDe$?)Oj6{xb590uXZ|Bu1loR zmOF{-X74<%OyYb5HT@a(5(zUxn~gXRAq(HfJ1Psy3Uz8P|DxX&q`#VQ=iKo3pX%7U zpD(eMN$L=1T3K5$w;**B$!`1GS{n58M1+ueAH1w}P>fdr=w8zfWHrAiI9J^8pz;Nx zGV(Stt*F@B&xYOPnL?Y1%(WWyqK>O9yD) zZ!qsSX3zSQS5NuQ?tG=Z&?(O@DMxA6=?LGUVQuv<6xYd3NEzAkV}59*xl+?_#U0_9 zy3p08LWT9|lg{<1xw!HfApZhi(__#*ZL^&s6@{UFgllHqcK7lcMk&ZGGe5G|IPFZ} zE5t{o=nlsyD|-|1A_jO5n7sZuno-(3V}!hdkJ`Mlu~$2E!fR%{zeFt$VTNmPh6Fz; z=!It0gOf{!aFh!Om>&;$HiBLRI8Gp6ylt58p^AI8${l-^6u(*?ePwOY-lw6{zvp&{ zTvPjA>0<5--wzd2`z2QBN|<(>wfbr3QIDFi(|hJOAF8jr_l0@e966sjH$4lZsB-Z0 zbYsbhPMS^>`JG_yI7Y~+!qw18=*QS+pzKR5uLNI@jhEn0pHlJp;AK~6{N!*)#CFnb z^hdudCXh_ns$N-7ulNjQu#gcBG_?Q61PP%cEqzd)p%9mZeiIYRuuPJDxc0%WK=VPu z^@=%cio@?+m_a$BZs+z*FL~jA&MLgvx^nBAH~B$FW2q2#PwLb`Rl&VgcbnHeBeT*s zHXWlf;?=gUlABZJ8a(9E`vA+pe)p4Xg+g&w(f&1GEXejb1PhE^2xG#z3m1~v|A;7`OvH3x8NI#mVH)cjHE`Mrb7>RQ46Fs{&ht z&tX8&>7cJ77l6qg5-|G&uW0%N2OuGeu(?&A(cLP;ScY_|4_346_77i^XSP~S^~K7} z1M{+5GR@}=KDpORHof_Z>&4Zs6U~jA^4Hy;Yu}`^%-^@)!LwgCMXYjgw>T*?``)Ez zo&}}TbEi$e6Y$un;;k{shTsmmr4L7OG3u;qZ8$RB4hfXjH=V>-g0@}QW_LODBWrwp zN4hlyLQR2|p2$Y}@TTG3V6Gr4VB`=c=p85zx$^{~RMzTM^bIon8OYHjkJ{Q=?czu1 z%o(GicV}Zq+60d74TNZF25N0XiFfy@x^xHGekb-l(o~s0c=+u6{$m->PW6#;UQVee+)Dne(wpsxN2TRO6{S!)_$JSffr&l4A&;-H~Lu@9(m6QnLEIk$he zj;OmXB!!;N9a{nnEITnIH}vjroHJcH<*^1oK~~9Owa`CGe$u2e;Gdu=ZQwH6z0T;Z zT`P>8Z1RqeMf4RX3}-dMF3qeY)(m9gn=d<$k2~@YuUUF_*-LZfr7zMXWmR|08g6F( zuD6Mr83*V6!g9mJqkaU26)3JBdrfJs5J>h`AJC|*MQ&KH<`H7>7TmMp+IWy_i>Q(~gw8wR=ae6TAy&V5jrnuGV>~U?G zXGi!WD&iXtcjAYs@JdsP#np~KvnUpaf3_(tElogt!_gJGs%gyd zo~4&3XF51c`gCg2uDr0xL-Ouz?Mp!(WD2naIX3YC)#$c}g|9m5!qM zCP7PtNfm<$TQyyXr=q2m*t%UAvK0oa5yWW@`cf_q?zIj=ifwqH(Ui0A7yRL_J)hO% z5R;4ad~%(HF}>YvY|$}orE8Ep(t)oQ0UpBv$OMGUp&4n*>G=d!%P(#|;}00ReU7cc zP>C8jXYoZq?Igoq_tO*ego#cB>-9cVMGB-?7#S7;90{Z zpH+idqSs?^K#{{%Tt9Fl6TKjyp3=+V07s(|{95N<%KYv_X1b#A3rZ>4Q$7sacq8K5 z;5#b;gqf_FB`ZI1;zycA(iDU<>yBZdRs<(@=h-#miU{RCc;v{!m`XfwVUhdMpEPuD zNI8Mc6=1S|m^X%|yAH}}uAx_VRz>|~qPA2uV)EJDR#BFD@3wApf6s|Q0^w%RWc_!& zh=xRJqpGGxF*X_r3$6H%GYz#GQZP4=;38KIhdk8);j1GjPIPT<-j5XA2}zaE2*cnb ztdJ0zCv!haMNu3aL>R^~EM}r=RYI(!A|rwu+=NFS>PrZ7vK~Ndp3hVMx2|5pkY>N3 zmY3PCcY3t;^Bh^ zt+gzoka*896Y47eo~Q2Zt*Nii9waqw)~saeeTqf5-_Q)A><%hJ6-7YsY9Ff|ocK@{ zQpM@t92-!&Ae$C(x679;TOE1@Auh)w?dJV%OMm^GqHsT<%Kyx!MMtksoG|%*Vdw@U zYu($93-pX{rZ@Rfi{ZqOpgGr^APo%+z_O8$c>Vjx#Md~#;V4q`kR%TOvh#~bCIp9! z3~Ty$PJMa`c{49LQFj%(lm7v!EMoP$^z1nnG=Kw7{7t+pVS!t9^zhF!ehs%S&Qo$< zzEU@=>PpCr4{crR=k}VB^IAKad3CH}?W*5+-$O+r%n+0TVtrG936}iwtR1W9=4t&o zvexvU%k=LL81X++CcnraUTt=hzUX-QS#x#0*(SUjnu*!u#^thO~QJ@;3V+^ zwNp7yI{%3=;NbAReY-cE23=n=Xm2tH6)S9;|eLGj{rp2!jqedcGix6f)Yp{VncyEV&Czu0V?(XN$m!A{XW^ zxCDi)L1P&C;vKLJlGT5>$TFkUmoL{yD`_H4gKcKL!zQk2X6miQ7@iQR9L&?5X!kT4 zHCfz`r;<{2(-ahbp=>U$5B11R(nq48eQnRD!5}4quUGZgv}lQsKbZK?*~uwjY~Yc@ zhegCO6U$JIpd43Sz53OtFGs=GBnM1<3>rXIkx(em5HnEaYu^3uXMXxTn6P4A;D8_W zPf3qo{W{ZWUauyd=Pa=|NQ6W0*4o9|3{a;2kPvF(XvLY$->Y*(Vv18!JYB_-^!&E6 z^a6Q)oOxN>ff1%Cq9Fu=&i5KN_ZbT-GphQ>4>6~GeVqN@(2ZBUydn>5J$WLwY4lYlW1HK# z+|+U3gKIbndqIr|))JO92Nb89^I@hLhMu#c`MpjV6x8G=?bJOrAeKPGiiu(d zK}d~XDZePDn+uXyEEs47Ay*U!Eu$JqdHXnV^2JU-?EF%0AJTCLf|I$3~`B>VPW$?Og&HDF>Rd>FwyH%`Y|6>D| z1bl8bTM&`+=ZU7ghN+k=0BLq6BNwhD#ct*$4JMk4S_Z*c>!Bu@1cm-)8#nsa-*%0f zcS;ncPJ4T2u%oq1zJXvqp&vvLBF3m7M^8ru!Hw1F!^4I`hQgmhB$So6E$#T*^x z?g>Te{MeL-?Pb3&*83d-xNI)n8apn~+o4|1?Wk$hfp@7K?;;_U%mJS79cEj(#pk`f zr9KVZ5!Kmo)Rt&4lNqLC;X0dO{?elQQz#RH6!(v9E&lY$g>mviMvb~@#d;!yhpVZj zc8kQ~u$=F3@BFqVYgu;{pXl-lW1gM+XIydB$B#}&k9HOy6GLEM{gxBQg@EfhNrYK8 z^MDL>dm6I0d)MZm&LN4=PiHs!4(kk&cTZT0&O_~*A~-oFs2KI<_)H;afU-s3C=1?O z4L%(>U(?fpY_>Q;b%V;Boc_W=`V_222oh2YgiA%lQc;2a#3;+9ve4pT)bVIYGx#y- z51)hLV~;9)Cl*4(;mO`Td#0i#U_K4eLfZSr9^5y7L;wP|9*Kz+>MO(a?tZ$~Ys86) z)a#VnDcv&rx<7e4e80-EpnboSWSx4Kj2|IFTK*?Cz5iKz_&=|${(tc|B${kIczor< z^DA9%Fdco3Xt9Mg$TL*$t_v*iPC5X&NXn8Om@I&z%Xn+r<|cF`{AMfQ zPC1LV*$5t#tcE~>mb|eU)5#^N-%YP)ajVo;SPU`VXz=}-qkwPKB(=XyAJlJo+E~RG zN)P`&sBbaOr0MDEnsbh8g3a`bPUgyIJbV1=qOa>T5~Me5SoE;<%AKt<59U8JkX5ab z{xv%|m^?_4M0J`=>r2Q=>SM6eRHSqCl&|$-efLhyUOWn)>wH*KVJb|S5Pln-i16F7 z#`JS8fdBMGm*!^8vBjAz45jRHsY-E$aq4EKxb%`fMKpv^&tM8lV6={njg5rh^N5ZR z5v|mSd4j?Oe}d^}8!M(;vU|8Q&>s z^KAS52W_W0h7G%TNTWyRmqRaW+DA6a@A8juJ)Eh0+dQ*F?D_9ITdb@+-NPT;rTwM2 z4l1Ke;&67`XW3UuN|iP!rjiy^7>vP^8wwo%oxZO9kM#Abr!BzIpq48ALwEpWhxI%t zQVfJlHE;2vMYkE{D>w*>T0_ewQMqJ`z|}}AyWP8QvU$-8ZB=}W@NOP~02`6%2%Q(Z zO>U?~optTUxz-uqlVb8TSA4s2ed3Fy8dnqGiIM|chM9J}B*6plnJ(WW*rnih$oGz& zI_c}bRXAa`A)uu^&o=Z*UGlROJ)3Ez>x`lY)WuoJroYW?xN4I({?VSca~&KaNR4!L zYinFf8HS4_is>+O@Yrd{_7l42TTQP2vFCl;a`NcHam5FcY0yYF?JtaT=)p=kltfZg zS$2Hi$LKm=J$U5U)+$mNMHVMjagkjc{KPX%Cv>Xj2Fl>~981h$G^Gd=#%%P+-K33d zwJ%>t%5pe2HN3XZ%#4S}eGawjv?M9he3s|cyLqzFHRI~#-9`cxs@8@T<}M5T>+#b_ z#SIdjIt?0hX+v>tyTxA&5@c1K>%C*@?rJB5U7Rz0()}HfscUD|zIzY`JRB(5Kxh3b z-qA6uYZ_fa3^@cM>zzKG%_Ndtv|ET$5a|W<+`EdR#Gnx_J4_D8_4fdJB8mer?u(xh zty=D0)-l5f38UFWVK8@|PPNq+<^u^kFQgqXM!sT3Cop*t9%KHV>zcH}ND=a8)$}Hd zI^M#7ABlM=sO-OPdxN+ACvERfEvI=4mZz8HIciRc+U2X07bx-3VE%&YG)a$7w~XIk zpVoN6-D;Bc+{IsRNmx}h$5goHKhN(u&U=HZjpq2Yctf9-!ed<%UuEk1jAoOu-_ygH|Y;s68&zTv*NkT1*>f)EJH*j zUcRh~AUVeDl^E!^fqo*W47p`-MMY3#6{bOdjopnkrXn*s%lbd|y9JFZ(Kbl}XO7xY z)N{eIWycDQ45cpRmAu*3e~#JxozpCbU0(NI+k3T zGd=ND&d}I_M@@>e4^VJNH=3>3OZ) z$8p0{G|ncwDJMt-d?_5bc<1oJQ}0hs-4MSykX3w4tM%Lke##gLmDfCSusgb@-KcPiTCIz`&%I`i#umXsINPQ?( zs5`|04i4g9H@U-q+e#l?+WIjye!tU4@6MXB1=A;1*gk#w&D6TJRa&Qqp-g#xPxDNR zlMj<;uQ1OZGs%2%%A1ijYkID^Y}cd1s5P>$m0ow^8Lb*htzi=Maw6~t#Ng)ZY=n)U3AlnfA3<(0u6Jv4H3Xq+ zTO|KjWXr{`x-Woa5LPJzQV@6SzP_|3`-Tq`pCR6JqvMdrxb7V6nrw$-p$= zY0H=WQDG=(fpWZ|VT#FbIdt1C%Gs)RoLyekDL@ z7qgTI#}>|IHqT&03lKE}h4q<+S19b`;?|iR29X{`%H^bA-|e}9>;XF3ZQ*tXvXPMW zROQPii$vNe>XQGejh;^AT$zmSkR>yQ-nOz(-~BY>e)@wR-2)o8OLy`eq6_^IseohGcrKP&bQo1VSst zY-^I$p1`ka+ro9*XFL*oaeDsujT<(duzh>Lqrd67n%V^tU)Q; z;Fqkvw>iv6oBa#4ij#AOrS1Ur$zEPD@qi<4)e%Z zTlamxi#H6-UGdk4ByVE@Z5pJWxvq7#?p-I>NnUsMRVzwRZhySi<{Yx7a_5h$$D9{i zoCwpkJggpAwjGXPV{QHd*Ga80P0RN*r7rXqPFsr3Gvpru*<;1~W-{y@nKpgE%c-6M zlbXK+X5V1z3rBc!^Q{KO1zB$Cg_F>_-`smzjQcBlH1Q?j#v~i*kM3$H%p1Bp8}H>#c_wU*&b=&JM)^Ynser zTJy$zG?=@rII{1@t9hp)LI#bpnP(nte_iYRnSI6CSC=oZ>JNc_T{ivy>h8>=a?aa7 zo?(nNSt3o!*fM1s3X_yF$`U0NqOvnLrA1U)>?M;dQ?{v8lQvm~R!f8|QK&nijg-ip z78RxXy*{3Ke$O-KJkNQ~dCvL$^K)kT$Kme&em~dey58H>xw@fP*?zkA>>hJROREpv zHT7^iyxY_t3|^Q45?p2mNeTXuSIhV8^^g}=ID@PgyXR~cL1NI{!IuJ!e;74v(;W2| z0-yKaw@<)TVq5F$X4eLFB@p@5G#KJk3u(FO!QwzJO8RO+CnI=k7*(?$GVMH6M?zJP zo?)R=eh}BSta@L>u&@(ORb29&yC?5oI%Ql)L{)T~tBSO4O=_#Kezj?Ky;N;|y3N6N zxhK9)^RDV}?B)HNKDOIWzTVXP9VPYl_{70*^|Y^`FMA}{;*8X7N2_Ofn5 z7B7|;azr1e73bsxB1yAsR*D}w!%2Qpnbpd564&*M$}{xp7PL>BZ_(yyJimG1As^L6 z4k2iMk1o1&$o=x?=s*K6L(BQUx#UbT307QF?9!SG-gN>p(fLV9mFz(K8shJ2J@5XF zy!JS$=dXU)fR9?9v`0Pfie8>HB>b3mMPgXAmVUs?Z!NbjOjn5T)bVjTs-PG?@?P)- z*Y8v#qSwk@e2CY9O71PNtJXKzme6MgNy=~)MNxlsWKV!H#jcHc&rfILP|JZ9y?CaD zY?Y5R$C`!wp%)h6tCioX9yfHQjTWm{K$A7;5nf=%5)sks*H^VT9AUc%uZs3P_IvMu zP?4m9seGZZy#~T(BiRs%(kKPxi65k1cTk$-pn~&Bq`ir-svw=rw-S&}u%hV+@0egI znvXb<3D02?!L!t)&H!=5O0S~Oh#mImfzgYZSL+4M9*+2^b!v<2+IEKJ706P9^u~D6 zvHFFFH@b)|4fNI;g;t331S)_aW;MF=x=7Xlb70!k%B~^GEn`BCZlu*j^p2-Y!{#w=i@XtJDwjVzo>N|Z7BPfk zHTcFYsnjxZo{$x?Et}ekX(gaxcGMxBt^T$7`kzFRgQ>U7Lj1D=+SR(sW9wEILQLhP zmcIh0V-Hn!9n0!Fl$zkTH=);7w!#Bpu(TL``}S=YzVdEO?5(?!;d-kKF7TT>IXUXY zIugf6%5wGMWCmzVZqO{D8t*sqG6=6Nc!A|VbIZvhO_ln{64mkGjwo3s1K!C!{dK$bIqRW5vELT%%t$z#he%N2p?V<__fsk*J1G5#nWmrq7$GBS&>y zC8;t7q8OVFB~I+okPi4dS^v^shG%Q9zYNcoI##uns4Cy5^nFLCcmuH5-iC`fzqF~Y zj&QWaiJoVFSk6-xatcaS=j0q6Ick`=An-+*clVUTu`QP9l6c56!qrqTA%Fu~jvgWM zn%wwYs+E#hjj|L#`|>mU7}~*@#2al{y})%dI$<^u$Y0|G2otP__K$E;2r} zBou|N|2*{GS>WoKgLt)B6=u_p=(6Z-P{llL*FI!ePRo6yN zZosNpKN(n@%&gf4unlTe4jM$9l1bSwTj57VW|1Hf(V|1bktj7-TRTYDbHk5c^6ekm znek@Ro5#D6l5;3+U&vTfA-05Zh(r+}93^~q3pW0LMa&-6kVWe}PjMOwd8S-WIQ8EA zW+8#`IwL|Nf&Wh>+ETgb^oFAMWUaDu6N?yx6_4V^f%Aj$q766Muwg?`y4KCI`fD$Q z4NW{&UJoIONFjsM!J~03+zmW6Co%H81MnQH3&99`2DoCrB_TbGkt{xFOI5xs{6qaL zMd)67>tmSafD3j!Kk{-*;FV&hCdCKFYF;<-dkFU+WhTKn#igY?tKF;;bs7C3W+SYG z$+x^Q{t_y@gq78n4HW5In2u1W2kGRNqQ0@upqfF`RFLW?C~F+o_qm$gJWO>^NI)tp zxlWo-s16E31EXEgfvh1@$WibXm~8Wq5%oT>J(;4HIN>&viR9NJukIDO6$X1&%Td#X*q;v{h1v#Tt0NE%Fw8tR zw~t;sTZJH9yZS(#P!3j)SEa;G(3~<58@UrMKfDx;4@R?6|}cC=?B#LXCLM| zddSLwF?Lt)gM-}VDIl&ii)!YM%D|87=;ZVr3_J)FM#pJHq-GZByu5oV*HI1rN)#H> zMYqv72e+Iwaku5nCN#}xKfygKt`A-SrOp{veRPB)<%i?w2r*>IlK1K)A(L{Y6;EB2d#VJgC>ICXw zlZvWb3__M|`OAd2mSnB{&zx7^xIz*B3@_cQ{Bhx5iOOyv@5^Rg1gR3JbC)EEwA*gO z@U$jOM85&LiVzPo!P_7C?YGm3S6X^{agOVWTQgmsV)qXX@CaAhi@$1siQo7g;9f{E z8^+C8on7PoseAyM;)t}}btOky0nS7UIps7I>q3UC=>ga4dVAA7t2Isy*^=ehGTe@z z1`O^ol(V$sszUj}+lYRP332T|V1U@BYZaqLzSLj_VuoFA22A4x9aStF#0-+sdaLDa z{Mna;g%dqR4&E??>Mw5i=0cGRt22rTL7hrY_-JZqL?A+?Lz`Lka2}NzTEQu`emEi8 zc{(@Ujol|r@KZ;3?}Y>!cXz!AleKAwN~yU&A;-+x+8=s|W7MyI|G4~;_XE_ixu8Wo z4~U;wR~I_Qp8AxkwxiBA`-2wrn}}nStY+T&B7809`z!F(GLw$T!iVe- z8$-mhP?4sXn1o&XO~LuHsU;V=yKYm8weB$`C3@dIVjON(SRd5q<=vBq9rcOm12hn1 zgXp2Ql0@%^Di!4^<%fc3?y!{uCpkN&fcK4Vs2n|q=Brf0X4!|CI6she%&q@3! z`1=>`jyxTT79dft@DSiK0l^%Q`I^ap{9zs+77{X-r$dDP_UBt1EE>OGc+Y*^D0OvX z*_^hYMS!O;(EuK4XEZyAJ6rrKOmLJr>-1r0Z|-89oW{43sP`VT_YH_@tv#Fg!gmG* z1?}HIQ+HMm$elBug&_*hraln+fX9tDLf8BMoyh#hEH>V|aL~vcoC4En9pK6b${|@} zq0Dx^S)27<1e)Q1KtfelG_h=&T#-5d`y(w*+j1e70FpEgaZP`8j!!MZ3h z`LmwlCUQRb2fXYfH8oel6`&Y7U$}Yg{i6m%27I~E-qh;Gf(nQb8e(s*#+?Qmy3A%^ zA)mwD@!@=ek@LPH}=@m4vUix_)e3=!_h5r4GFqP6j3fT$rYt}i598j^Phx(01w(mBv zs00CPoZja@$F!CDY!ai0cI5S9F@;t>2G@xjimrlNl{@Oij-^+SGom^jtIo#DoGS z79%9qAtiO9o$i*ra>WWm1B30>i^(;`KZF)eQnUtDpz!4}qx9+B`?}afWu1&rW6aW& zYdnFhqSs6qf=WiBU4Z~mxe8UIA2G^Y1!bIx=#wY6@g%yb<(7$!bkG6y)9hJ%_XF)= zir3c!cZwyA{KUFki*llS0QUa_ZdtmS%P&f_-bw3OvBsm)zL$0H-Uq$H+wkYS!M|H2 zaZAW~x3_MgtbR2OXW#8WwY9Y85_R1zA_JWER$7Pdw6t;Yry{ucGl^>dECc@a?ddl8 zzfNs>wzcct=oaP>Rr}|#fX+)!^hLN%RYMq-ms00U~sF6amu zGk1bziy^{*jkR@kE4Vgkk43{Q?p?&%!kt8nU_zV&*|e$l#(($!)@Av6tC&VW_r`m- z)n$#1wM)PHOnQo78aWR{ARS3&3m>`jybN61F6W8dh$J*kXo}hm-5m`%V^iAs8@Wr(q@K!q^;P5aXlY zKQYPFvN5dvv)HXb9h#1Smxg^Xu}#}VDhwLDx31@0TIS?sX6_+!DCW#ABHeH_cH#XH z!f}3sh-aBSdv*cRpt9;eiWzt9zz7D5_!s^}@svCoBq7zL4*Vz5(lyQW3%@;j^k@u; z=|-PIYKuAgiVlHQ#WJCq$`YYe=gu9V^r~X#k^{#mK#xX~ix+Gc&maH|Zbvi1<~Wwe zh~yFg0=IGOrV?}=OOz*WxFho9F68LV;gmWN7R#waNq7zuf#~Dn!eISqsx+^J8QWvY zB6|D61L>GANASP%usuQG~W4TMI0GG?J@Re5^Rl=qc?<1aJ*u7tSm2GKox9 zbZG#WPCzTO(aWl;c&q-*Y`kR}MX%pxvq=MhL@W;DS>;t9fZ~5ewPb=%xTij@sqep@ zAWvtfo7}t+eZjGvUhpIT=H06fHB0z~HuBdg;r$pukaiG?uq$o@qsP0F^e}{r(p?s- z(USQxA4_^(r)<0|E87_u7-;>8gDp15Mm06WpdX1Ta$RL_KNrL*b<>+enMd9hRhvAV zVQeh+lMAi59c1!yWuJv;BpFSeDj$9quq=Hj6d=A2X&vC=WSp+nPea1}qOS`{y|Z%! zS0&MgD_5=Bg)x2qON2b345EL|wmlE#ql!@?6@ z1=;K-FO+~(Mqk=JG2?Pnscwg!qVg z%Y%DPdRck}jcXwNdQ32Ze#ZQj(h*6iQwyJhd9)-owaW^9X7=5v@=Z173l&`jYEGp+ z9d0{KXluDsqIkiv*QAJ}5AGDL8vot!;a}U>*hF}c;>~%!=A?pNN3qs3!D=5j;>qOX zEk;lDrR!ymlXv}CF|%UMIp2FZIlkAIUE`kl>AE*jyfISAqEW$quj4ETX`CF&&jkjW#xd**xy97CY$cI!^zxmNG=2GylB2zb?>Z{C;9n9kmJ0p zg_J(mK;yDEBP}IGsmF~{E+xac@zSs4=!P7L3h-O-queqrWs$>UY<;U@O1#t`#-0J+ z_`|0mHRFC{kvS!}QYM>WXBYPBGpO+m+2+X9)PZbHGxQ?$PSjxQB}-<6Ob?Ho)8}bk z$5oM!`~Y>9fmONHR|GsfmPjVDuxTJ%@Oh`)$YG$uml7~XEa9lMOP4yx!HC~tXm=vc zWU`7pZ~v4HXQv+9%6Goz!a!y@k}-|8Zk>Y6lojN|Ms<2z)lllL$`x!#>v_>SVbzC& z$BuOkUj3rM<559@-|#uX*VbGR`?ln^5jp3V)+sJ7?%KE>OhoE=i-K=K?G?znt}%4T z9gp>R+2Z~xx5L@%7!z-yF|J3)ka^!EKOcR1RnMMHq>S^yBN7tkj(1+E)LCvE(u}Iz z=0=gddC_*3y!SPa-Bt2FOxkkbX}z0nM$h4H#cJEf9LMNB{p^zk=W>SraKdHn;{G}z z@?14BF)`E7|C@~HD_2VAL@e}lFR!VL-v^Ey@m16J?xLwMcSK(e4ULoLu`GFWKWZ`p zf_k~|W~44%reyTT>g~2?efhh+$7pC65?;(#Cs;OKkVjQm`cOvuF(3QC#anRTLtK`< zbp`G^UBwJ z@>Ci$DCo4qh)1^~mWa-7{*#frvP%x9jvevBA<=sII3-7r@WD0PjG=(RfZZD34J4R) z*YLM&L~+y!898>WZ&vw^=Q1PmVW2)sH|ZdS>e)|G@dYH~x}Sf(&h1GZ7ET@Tet++c zH8Y(gtDfcMb=rAdVe?qUMC$<3o992MYM7ldmG|szUbg4Askd+4TJGto0tU#lx4Y`u zA*WtRRaGq2x@&Z6qYlfL0LuK zcU{P|bJ^MR?oJ5yF)%glMU_(Mb2I$J^ zuV1~oUujg@)Dr3Ny+OsEqq|z@0&72iatUAZk_1vrq6(Yix7NMt3Y<6ia`Br@5vNXd z<`QzeRFuMQo6p|q=R!7Cj?7qbei`FkM)faUK78(c){Q!!@G#=FbE@~&0XNNbbIRz> zVz6F+Jf4&^5!>qhx2^4anwvfDE|krzF21slwxFB7i;8bsoA;yOuez8tm`t5BP(|gp zMuR0OWnf53YHIBd(ha@QhHJ%dH>{a0qbV+<;-xTtTzt)p(NmJBteew4k==0n+RplU zeqK9HX+(SDi~}`o<)uS+eb%pE@4a2Y@Xp3?NA+C_10(*={@eU@_YEEH?%N%IPmW)+ NX3YEPjN!5!{{#LK1dIRx delta 35772 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 KoTzmA+W!GI7%0*J diff --git a/tdesign-component/example/test/goldens/tree_select_page_light.png b/tdesign-component/example/test/goldens/tree_select_page_light.png index d575793f0f91ae77e3d471697e31c29e804677ee..9b6db90fc17b2b6e597f9677cf4bdc6ad3042f4f 100644 GIT binary patch delta 70731 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 delta 35431 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 T!FT64@YjJoy1TP>p1ArSs~V7q diff --git a/tdesign-component/example/test/goldens/tree_select_popup_selected.png b/tdesign-component/example/test/goldens/tree_select_popup_selected.png deleted file mode 100644 index a90e752faddf3fd46fc4690d1403f2c8882b025b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17500 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 gf33#(tree).value.single, [ + 'guangdong', + 'yunfu', + ]); + await disposeDemoPage(tester); + }, tags: 'demo'); + + testWidgets('multiple example toggles complete leaf paths', (tester) async { + await pumpFullDemoPage(tester, treeSelectDemoPageTestSpec, ThemeMode.light); + final tree = find.byKey(const ValueKey('tree-select-multiple')); + await tester.tap(find.descendant(of: tree, matching: find.text('深圳市'))); + await tester.pump(); + expect(tester.widget(tree).value, [ + ['guangdong', 'shanwei'], + ['guangdong', 'shenzhen'], + ]); + await tester.tap(find.descendant(of: tree, matching: find.text('汕尾市'))); + await tester.pump(); + expect(tester.widget(tree).value.single, [ + 'guangdong', + 'shenzhen', + ]); await disposeDemoPage(tester); }, tags: 'demo'); @@ -53,6 +98,18 @@ void main() { find.descendant(of: tree, matching: find.text('南山区')), findsOneWidget, ); + expect(tester.getSize(tree), const Size(375, 336)); + final horizontalScroll = find.descendant( + of: tree, + matching: find.byWidgetPredicate( + (widget) => + widget is Scrollable && widget.axisDirection == AxisDirection.right, + ), + ); + expect( + tester.state(horizontalScroll).position.maxScrollExtent, + 0, + ); await disposeDemoPage(tester); }, tags: 'demo'); } diff --git a/tdesign-component/example/test/tree_select_demo_test_spec.dart b/tdesign-component/example/test/tree_select_demo_test_spec.dart index 9c1f87ee7..007e37ff6 100644 --- a/tdesign-component/example/test/tree_select_demo_test_spec.dart +++ b/tdesign-component/example/test/tree_select_demo_test_spec.dart @@ -13,6 +13,24 @@ const treeSelectDemoPageTestSpec = DemoPageTestSpec( '多选树形选择器', '02 组件状态', '树形选择器-三列', + '甘肃省', + '广东省', + '贵州省', + '海南省', + '河北省', + '黑龙江省', + '汕头市', + '汕尾市', + '韶关市', + '深圳市', + '阳江市', + '云浮市', + '龙华区', + '罗湖区', + '南山区', + '坪山区', + '其它区', + '盐田区', ], useAlignmentCjkFont: true, supplementalCjkFontFamily: 'TDesign TreeSelect Golden CJK', diff --git a/tdesign-component/example/test/tree_select_page_test.dart b/tdesign-component/example/test/tree_select_page_test.dart deleted file mode 100644 index acfb8a27a..000000000 --- a/tdesign-component/example/test/tree_select_page_test.dart +++ /dev/null @@ -1,135 +0,0 @@ -import 'dart:io'; - -import 'package:flutter/material.dart'; -import 'package:flutter/services.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/page/t_tree_select_page.dart'; -import 'package:tdesign_flutter_example/provider/theme_mode_provider.dart'; - -void main() { - setUpAll(() async { - final iconFont = FontLoader('packages/tdesign_flutter_icons/TIcons') - ..addFont(rootBundle.load('packages/tdesign_flutter_icons/fonts/t.ttf')); - final flutterBin = - File(Platform.resolvedExecutable).parent.parent.parent.parent.parent; - final robotoFile = File( - '${flutterBin.path}/cache/artifacts/material_fonts/Roboto-Regular.ttf', - ); - final robotoFont = FontLoader('Roboto') - ..addFont(robotoFile.readAsBytes().then(ByteData.sublistView)); - await Future.wait([iconFont.load(), robotoFont.load()]); - }); - - Widget buildPage() { - return ChangeNotifierProvider( - create: (_) => ThemeModeProvider(), - child: MaterialApp( - theme: TThemeBuilder.light(TThemeData.defaultData()), - home: const TTreeSelectPage(), - ), - ); - } - - void configurePhone(WidgetTester tester) { - tester.view.physicalSize = const Size(375, 812); - tester.view.devicePixelRatio = 1; - addTearDown(tester.view.resetPhysicalSize); - addTearDown(tester.view.resetDevicePixelRatio); - } - - Future openPopupAndSelectCity(WidgetTester tester) async { - await tester.pumpWidget(buildPage()); - await tester.pump(); - await tester.tap(find.widgetWithText(TCell, '选择分类')); - await tester.pumpAndSettle(); - - final popup = find.byKey(const Key('tree-select-popup')); - expect(popup, findsOneWidget); - expect(tester.getSize(popup).height, greaterThanOrEqualTo(336)); - - for (final label in const ['城市', '广东', '深圳']) { - await tester.tap( - find.descendant(of: popup, matching: find.text(label)), - ); - await tester.pump(); - } - return popup; - } - - testWidgets('弹窗跨分支选择后停留在当前页面并在确认后提交', (tester) async { - configurePhone(tester); - - final popup = await openPopupAndSelectCity(tester); - - expect( - find.descendant(of: popup, matching: find.text('深圳')), - findsOneWidget, - ); - expect(find.text('已选择 1 项'), findsOneWidget); - expect(tester.takeException(), isNull); - - await tester.tap(find.text('确定')); - await tester.pumpAndSettle(); - - expect(find.text('已选择 2 项'), findsOneWidget); - expect(tester.takeException(), isNull); - }); - - testWidgets('弹窗展示丰富数据且具体禁用项不可选择', (tester) async { - configurePhone(tester); - - await tester.pumpWidget(buildPage()); - await tester.pump(); - await tester.tap(find.widgetWithText(TCell, '选择分类')); - await tester.pumpAndSettle(); - - final popup = find.byKey(const Key('tree-select-popup')); - await tester.tap(find.descendant(of: popup, matching: find.text('城市'))); - await tester.pump(); - await tester.tap(find.descendant(of: popup, matching: find.text('广东'))); - await tester.pump(); - - final disabledLabel = find.descendant( - of: popup, - matching: find.text('珠海(暂不可选)'), - ); - expect(disabledLabel, findsOneWidget); - expect( - find.descendant(of: popup, matching: find.text('东莞')), - findsOneWidget, - ); - final disabledTile = find.ancestor( - of: disabledLabel, - matching: find.byType(Opacity), - ); - expect(tester.widget(disabledTile.first).opacity, 0.4); - - await tester.tap(disabledLabel, warnIfMissed: false); - await tester.pump(); - - expect( - find.descendant( - of: find.ancestor( - of: disabledLabel, - matching: find.byKey(const ValueKey((2, 'zhuhai'))), - ), - matching: find.byIcon(TIcons.check), - ), - findsNothing, - ); - expect(tester.takeException(), isNull); - }); - - testWidgets('弹窗跨分支选中视觉快照', (tester) async { - configurePhone(tester); - - await openPopupAndSelectCity(tester); - - await expectLater( - find.byType(Overlay), - matchesGoldenFile('goldens/tree_select_popup_selected.png'), - ); - }); -} diff --git a/tdesign-component/lib/src/components/tree/t_tree_select.dart b/tdesign-component/lib/src/components/tree/t_tree_select.dart index 7cbbcb24c..8b18ec9b4 100644 --- a/tdesign-component/lib/src/components/tree/t_tree_select.dart +++ b/tdesign-component/lib/src/components/tree/t_tree_select.dart @@ -9,9 +9,9 @@ import '../text/t_text.dart'; import 't_tree_select_theme_data.dart'; const _kTreeSelectHeight = 336.0; -const _kRootColumnWidth = 106.0; +const _kRootColumnWidth = 103.0; const _kIntermediateColumnWidth = 103.0; -const _kLeafColumnMinWidth = 184.0; +const _kLeafColumnMinWidth = 169.0; const _kItemHeight = 56.0; const _kOutwardCornerRadius = 9.0; diff --git a/tdesign-component/lib/src/components/tree/t_tree_select_theme_data.dart b/tdesign-component/lib/src/components/tree/t_tree_select_theme_data.dart index 26cb248bb..da8e8efba 100644 --- a/tdesign-component/lib/src/components/tree/t_tree_select_theme_data.dart +++ b/tdesign-component/lib/src/components/tree/t_tree_select_theme_data.dart @@ -1,7 +1,9 @@ -import 'dart:ui' show lerpDouble; - import 'package:flutter/material.dart'; +const _kDefaultHeight = 336.0; +const _kDefaultRootColumnWidth = 103.0; +const _kDefaultItemHeight = 56.0; + /// TTreeSelect 组件级 ThemeExtension。 class TTreeSelectThemeData extends ThemeExtension { const TTreeSelectThemeData({ @@ -111,24 +113,98 @@ class TTreeSelectThemeData extends ThemeExtension { return this; } return TTreeSelectThemeData( - height: lerpDouble(height, other.height, t), - rootColumnWidth: lerpDouble(rootColumnWidth, other.rootColumnWidth, t), - columnWidth: lerpDouble(columnWidth, other.columnWidth, t), - itemHeight: lerpDouble(itemHeight, other.itemHeight, t), - backgroundColor: Color.lerp(backgroundColor, other.backgroundColor, t), - rootBackgroundColor: - Color.lerp(rootBackgroundColor, other.rootBackgroundColor, t), - selectedBackgroundColor: Color.lerp( + height: _lerpDoubleWithDefault(height, other.height, t, _kDefaultHeight), + rootColumnWidth: _lerpDoubleWithDefault( + rootColumnWidth, + other.rootColumnWidth, + t, + _kDefaultRootColumnWidth, + ), + columnWidth: _lerpNullable( + columnWidth, + other.columnWidth, + t, + _lerpDouble, + ), + itemHeight: _lerpDoubleWithDefault( + itemHeight, + other.itemHeight, + t, + _kDefaultItemHeight, + ), + backgroundColor: _lerpNullable( + backgroundColor, + other.backgroundColor, + t, + _lerpColor, + ), + rootBackgroundColor: _lerpNullable( + rootBackgroundColor, + other.rootBackgroundColor, + t, + _lerpColor, + ), + selectedBackgroundColor: _lerpNullable( selectedBackgroundColor, other.selectedBackgroundColor, t, + _lerpColor, + ), + textStyle: _lerpNullable(textStyle, other.textStyle, t, _lerpTextStyle), + selectedTextStyle: _lerpNullable( + selectedTextStyle, + other.selectedTextStyle, + t, + _lerpTextStyle, + ), + disabledTextStyle: _lerpNullable( + disabledTextStyle, + other.disabledTextStyle, + t, + _lerpTextStyle, + ), + indicatorColor: _lerpNullable( + indicatorColor, + other.indicatorColor, + t, + _lerpColor, ), - textStyle: TextStyle.lerp(textStyle, other.textStyle, t), - selectedTextStyle: - TextStyle.lerp(selectedTextStyle, other.selectedTextStyle, t), - disabledTextStyle: - TextStyle.lerp(disabledTextStyle, other.disabledTextStyle, t), - indicatorColor: Color.lerp(indicatorColor, other.indicatorColor, t), ); } } + +T? _lerpNullable( + T? begin, + T? end, + double t, + T Function(T begin, T end, double t) lerp, +) { + if (begin == null || end == null) { + return t < 0.5 ? begin : end; + } + return lerp(begin, end, t); +} + +double _lerpDouble(double begin, double end, double t) { + return begin * (1 - t) + end * t; +} + +double? _lerpDoubleWithDefault( + double? begin, + double? end, + double t, + double defaultValue, +) { + if (begin == null && end == null) { + return null; + } + return _lerpDouble(begin ?? defaultValue, end ?? defaultValue, t); +} + +Color _lerpColor(Color begin, Color end, double t) { + return Color.lerp(begin, end, t)!; +} + +TextStyle _lerpTextStyle(TextStyle begin, TextStyle end, double t) { + return TextStyle.lerp(begin, end, t)!; +} diff --git a/tdesign-component/test/components/tree/t_tree_select_test.dart b/tdesign-component/test/components/tree/t_tree_select_test.dart index 85ae74fc8..334969362 100644 --- a/tdesign-component/test/components/tree/t_tree_select_test.dart +++ b/tdesign-component/test/components/tree/t_tree_select_test.dart @@ -207,7 +207,7 @@ void main() { expect(find.text('Apple'), findsOneWidget); }); - testWidgets('default visual style matches develop tree select layout', + testWidgets('default visual style matches the TreeSelect design layout', (tester) async { final token = TThemeData.defaultData(); await tester.pumpWidget(wrap(const Align( @@ -229,8 +229,8 @@ void main() { find.byWidgetPredicate( (widget) => widget is Container && - widget.constraints?.minWidth == 106 && - widget.constraints?.maxWidth == 106 && + widget.constraints?.minWidth == 103 && + widget.constraints?.maxWidth == 103 && widget.color == token.bgColorSecondaryContainer, ), findsOneWidget, @@ -239,8 +239,8 @@ void main() { find.byWidgetPredicate( (widget) => widget is Container && - widget.constraints?.minWidth == 269 && - widget.constraints?.maxWidth == 269 && + widget.constraints?.minWidth == 272 && + widget.constraints?.maxWidth == 272 && widget.color == token.bgColorContainer, ), findsOneWidget, @@ -291,15 +291,6 @@ void main() { ))); expect(find.text('Shenzhen'), findsOneWidget); - expect( - find.byWidgetPredicate( - (widget) => - widget is Container && - widget.constraints?.minWidth == 106 && - widget.constraints?.maxWidth == 106, - ), - findsOneWidget, - ); expect( find.byWidgetPredicate( (widget) => @@ -307,14 +298,14 @@ void main() { widget.constraints?.minWidth == 103 && widget.constraints?.maxWidth == 103, ), - findsNWidgets(2), + findsNWidgets(3), ); expect( find.byWidgetPredicate( (widget) => widget is Container && - widget.constraints?.minWidth == 184 && - widget.constraints?.maxWidth == 184, + widget.constraints?.minWidth == 169 && + widget.constraints?.maxWidth == 169, ), findsOneWidget, ); @@ -473,6 +464,17 @@ void main() { expect(base.copyWith(height: 320).height, 320); expect(base.lerp(null, 0.5), same(base)); expect(base.lerp(other, 0.5).height, 350); + + const fallback = TTreeSelectThemeData(); + expect(fallback.lerp(fallback, 0.5).height, isNull); + expect(fallback.lerp(base, 0).height, 336); + expect(fallback.lerp(base, 0.5).height, 318); + expect(fallback.lerp(base, 1).height, 300); + expect(base.lerp(fallback, 0).height, 300); + expect(base.lerp(fallback, 0.5).height, 318); + expect(base.lerp(fallback, 1).height, 336); + expect(fallback.lerp(base, 0.49).backgroundColor, isNull); + expect(fallback.lerp(base, 0.5).backgroundColor, Colors.white); }); } From 820e3ec5c8e30302ac7899618c45c9ff68b3d12f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=98=BF=20Cai?= Date: Wed, 9 Sep 2026 04:33:06 +0800 Subject: [PATCH 3/5] =?UTF-8?q?fix(TreeSelect):=20=E8=A1=A5=E5=85=A8?= =?UTF-8?q?=E5=85=AC=E5=BC=80=E7=A4=BA=E4=BE=8B=E4=BB=A3=E7=A0=81=E5=A5=91?= =?UTF-8?q?=E7=BA=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../acceptance.md | 21 +- specs/033-tree-select-demo-alignment/spec.md | 3 +- specs/033-tree-select-demo-alignment/tasks.md | 5 +- .../tree-select.TreeSelectMultipleExample.txt | 66 +++++ .../tree-select.TreeSelectSingleExample.txt | 65 +++++ ...e-select.TreeSelectThreeColumnsExample.txt | 127 +++++++++ .../code/tree-select._buildMultiple.txt | 10 - .../assets/code/tree-select._buildSingle.txt | 9 - .../code/tree-select._buildThreeColumns.txt | 9 - .../example/lib/page/t_tree_select_page.dart | 241 +++------------- .../tree_select/tree_select_examples.dart | 259 ++++++++++++++++++ .../example/test/tree_select_demo_test.dart | 76 +++++ 12 files changed, 645 insertions(+), 246 deletions(-) create mode 100644 tdesign-component/example/assets/code/tree-select.TreeSelectMultipleExample.txt create mode 100644 tdesign-component/example/assets/code/tree-select.TreeSelectSingleExample.txt create mode 100644 tdesign-component/example/assets/code/tree-select.TreeSelectThreeColumnsExample.txt delete mode 100644 tdesign-component/example/assets/code/tree-select._buildMultiple.txt delete mode 100644 tdesign-component/example/assets/code/tree-select._buildSingle.txt delete mode 100644 tdesign-component/example/assets/code/tree-select._buildThreeColumns.txt create mode 100644 tdesign-component/example/lib/page/tree_select/tree_select_examples.dart diff --git a/specs/033-tree-select-demo-alignment/acceptance.md b/specs/033-tree-select-demo-alignment/acceptance.md index a5ca616d4..0a19f3be1 100644 --- a/specs/033-tree-select-demo-alignment/acceptance.md +++ b/specs/033-tree-select-demo-alignment/acceptance.md @@ -1,7 +1,7 @@ # 验收记录 - Flutter 原 PR 基线:`6a69569c104f6576fd6b39253eedbe48faa2b75c` -- 当前 `develop` 基线:`origin/develop`(合并时领先原 PR 23 个提交) +- 当前 `develop` 基线:`6433854a142a5ca7ee528aba9a1a8e7d72bea3ca` - 小程序基线:`b60cdc8a1dce1f06dd45cb4e41eefd31c674e514` - 公开运行页:`https://tdesign.tencent.com/miniprogram/live/m2w/program/miniprogram/#!pages/tree-select/tree-select.html` - Figma 文件:`TDesign for mobile`,页面 `TreeSelect 树形选择器`。 @@ -13,15 +13,24 @@ ## 验证结果 -- 本地 merge commit:`bad8fea4`,完成目标分支与 `origin/develop` 的冲突整合。 -- Flutter 3.32.0:TreeSelect 组件测试 13 项、Demo 测试 6 项、集中测试清单工具 - 13 项全部通过;`flutter analyze` 为 `No issues found`。 -- Flutter 3.47.0(latest):TreeSelect 组件测试 13 项、Demo 测试 6 项全部通过; - `flutter analyze` 为 `No issues found`。 +- 最新本地 merge commit:`c9beb6f3`,完成目标分支与 `origin/develop` 的冲突整合; + 字体说明同时保留 TreeSelect 与 Stepper,并补齐 TreeSelect 上游来源与子集工具版本。 +- 三个场景已改为页面真实使用的独立示例 Widget;生成片段包含 imports、完整 options、 + 受控 value 与 `onChanged/setState`,不再依赖页面私有成员。 +- Flutter 3.32.0:TreeSelect 组件与生成器测试 18 项、Demo 测试 7 项全部通过; + 组件包和 example 包 `flutter analyze` 均为 `No issues found`。 +- Flutter 3.47.0(latest):TreeSelect 组件与生成器测试 18 项、Demo 测试 7 项全部通过; + 组件包和 example 包 `flutter analyze` 均为 `No issues found`。 - 组件生产代码覆盖率:`286/288 = 99.31%`,高于 95% 门槛。 - `dart run tool/generate_example_code.dart --check` 通过。 - Linux `amd64` + Flutter 3.32.0 重新生成明暗两张 Demo Golden,并在同一容器 去掉 `--update-goldens` 复跑,2 项全部通过。 +- 合并最新 develop 后再次在固定 Linux `amd64` + Flutter 3.32.0 容器中仅比较 + 明暗 Golden,2 项全部通过,未更新基线。 +- 本地 Flutter Web 页面真实点击通过:单选切换到 `广东省 / 云浮市`、多选新增 + `广东省 / 深圳市`、三列切换到 `广东省 / 深圳市 / 盐田区`,服务端无异常输出。 +- “查看代码”仅在非 Web 端展示;Widget 级真实入口点击已逐个打开三个底部面板, + 并核对面板内容与对应生成片段完全一致。 - TreeSelect 专用字体子集已覆盖页面可见文案,人工查看明暗 Golden 无缺字符号; 子集 SHA-256 为 `1cbb5418c4cd91a103deb2a28f68dacb1e895a6efcb8f2f5e8198d67d38ac7ca`。 diff --git a/specs/033-tree-select-demo-alignment/spec.md b/specs/033-tree-select-demo-alignment/spec.md index 21cdbd195..ac81c890f 100644 --- a/specs/033-tree-select-demo-alignment/spec.md +++ b/specs/033-tree-select-demo-alignment/spec.md @@ -20,6 +20,7 @@ - Demo 顺序、标题、说明、六行省市数据、初始选中项与设计稿一致。 - 基础与多选初始路径均为 `广东省 / 汕尾市`;多选继续点选其他城市时追加完整路径,再次点选时移除。 - 三列初始路径为 `广东省 / 深圳市 / 南山区`,展示六个区级选项。 -- 所有实例均由页面持有状态。 +- 三个公开实例各自持有受控状态,并作为页面真实渲染与“查看代码”的共同来源。 +- “查看代码”片段包含 imports、完整 options、value 与回调,可脱离 Demo 页面独立复用。 - 组件面板在 Demo 容器中无外层左缩进;内部文字保留 16 px 间距。 - 一级和中间分支的活动文字使用主色,叶子文字保持主文字色并使用主色勾选图标。 diff --git a/specs/033-tree-select-demo-alignment/tasks.md b/specs/033-tree-select-demo-alignment/tasks.md index 92283c15e..9e72899d0 100644 --- a/specs/033-tree-select-demo-alignment/tasks.md +++ b/specs/033-tree-select-demo-alignment/tasks.md @@ -7,4 +7,7 @@ - [x] DONE 完成双版本 analyze、组件/Demo 回归与覆盖率 - [x] DONE 创建本地 develop merge commit - [x] DONE 提交并推送 TreeSelect 对齐改动 -- [ ] DOING 请求 CNB CodeBuddy 聚焦 Review 并跟进结果 +- [x] DONE 请求 CNB CodeBuddy 聚焦 Review 并跟进结果 +- [x] DONE 合并最新 develop 并解决 TreeSelect/Stepper 字体说明冲突 +- [x] DONE 按 Review 修复三个“查看代码”片段的自包含契约与字体溯源 +- [x] DONE 复跑双版本测试、严格 analyze、Linux Golden 与浏览器点击验收 diff --git a/tdesign-component/example/assets/code/tree-select.TreeSelectMultipleExample.txt b/tdesign-component/example/assets/code/tree-select.TreeSelectMultipleExample.txt new file mode 100644 index 000000000..b1cb87168 --- /dev/null +++ b/tdesign-component/example/assets/code/tree-select.TreeSelectMultipleExample.txt @@ -0,0 +1,66 @@ +import 'package:flutter/material.dart'; +import 'package:tdesign_flutter/tdesign_flutter.dart'; + +/// 在已配置 TDesign 主题的应用中使用 `TreeSelectMultipleExample()`。 +class TreeSelectMultipleExample extends StatefulWidget { + const TreeSelectMultipleExample({super.key}); + + @override + State createState() => + _TreeSelectMultipleExampleState(); +} + +class _TreeSelectMultipleExampleState extends State { + static const _options = [ + TTreeSelectOption( + label: '甘肃省', + value: 'gansu', + children: [TTreeSelectOption(label: '兰州市', value: 'lanzhou')], + ), + TTreeSelectOption( + label: '广东省', + value: 'guangdong', + children: [ + TTreeSelectOption(label: '汕头市', value: 'shantou'), + TTreeSelectOption(label: '汕尾市', value: 'shanwei'), + TTreeSelectOption(label: '韶关市', value: 'shaoguan'), + TTreeSelectOption(label: '深圳市', value: 'shenzhen'), + TTreeSelectOption(label: '阳江市', value: 'yangjiang'), + TTreeSelectOption(label: '云浮市', value: 'yunfu'), + ], + ), + TTreeSelectOption( + label: '贵州省', + value: 'guizhou', + children: [TTreeSelectOption(label: '贵阳市', value: 'guiyang')], + ), + TTreeSelectOption( + label: '海南省', + value: 'hainan', + children: [TTreeSelectOption(label: '海口市', value: 'haikou')], + ), + TTreeSelectOption( + label: '河北省', + value: 'hebei', + children: [TTreeSelectOption(label: '石家庄市', value: 'shijiazhuang')], + ), + TTreeSelectOption( + label: '黑龙江省', + value: 'heilongjiang', + children: [TTreeSelectOption(label: '哈尔滨市', value: 'haerbin')], + ), + ]; + + List> _value = const [ + ['guangdong', 'shanwei'], + ]; + + @override + Widget build(BuildContext context) => TTreeSelect( + key: const ValueKey('tree-select-multiple'), + options: _options, + value: _value, + multiple: true, + onChanged: (value) => setState(() => _value = value), + ); +} diff --git a/tdesign-component/example/assets/code/tree-select.TreeSelectSingleExample.txt b/tdesign-component/example/assets/code/tree-select.TreeSelectSingleExample.txt new file mode 100644 index 000000000..f8b09ae5c --- /dev/null +++ b/tdesign-component/example/assets/code/tree-select.TreeSelectSingleExample.txt @@ -0,0 +1,65 @@ +import 'package:flutter/material.dart'; +import 'package:tdesign_flutter/tdesign_flutter.dart'; + +/// 在已配置 TDesign 主题的应用中使用 `TreeSelectSingleExample()`。 +class TreeSelectSingleExample extends StatefulWidget { + const TreeSelectSingleExample({super.key}); + + @override + State createState() => + _TreeSelectSingleExampleState(); +} + +class _TreeSelectSingleExampleState extends State { + static const _options = [ + TTreeSelectOption( + label: '甘肃省', + value: 'gansu', + children: [TTreeSelectOption(label: '兰州市', value: 'lanzhou')], + ), + TTreeSelectOption( + label: '广东省', + value: 'guangdong', + children: [ + TTreeSelectOption(label: '汕头市', value: 'shantou'), + TTreeSelectOption(label: '汕尾市', value: 'shanwei'), + TTreeSelectOption(label: '韶关市', value: 'shaoguan'), + TTreeSelectOption(label: '深圳市', value: 'shenzhen'), + TTreeSelectOption(label: '阳江市', value: 'yangjiang'), + TTreeSelectOption(label: '云浮市', value: 'yunfu'), + ], + ), + TTreeSelectOption( + label: '贵州省', + value: 'guizhou', + children: [TTreeSelectOption(label: '贵阳市', value: 'guiyang')], + ), + TTreeSelectOption( + label: '海南省', + value: 'hainan', + children: [TTreeSelectOption(label: '海口市', value: 'haikou')], + ), + TTreeSelectOption( + label: '河北省', + value: 'hebei', + children: [TTreeSelectOption(label: '石家庄市', value: 'shijiazhuang')], + ), + TTreeSelectOption( + label: '黑龙江省', + value: 'heilongjiang', + children: [TTreeSelectOption(label: '哈尔滨市', value: 'haerbin')], + ), + ]; + + List> _value = const [ + ['guangdong', 'shanwei'], + ]; + + @override + Widget build(BuildContext context) => TTreeSelect( + key: const ValueKey('tree-select-single'), + options: _options, + value: _value, + onChanged: (value) => setState(() => _value = value), + ); +} diff --git a/tdesign-component/example/assets/code/tree-select.TreeSelectThreeColumnsExample.txt b/tdesign-component/example/assets/code/tree-select.TreeSelectThreeColumnsExample.txt new file mode 100644 index 000000000..f48ba6c6f --- /dev/null +++ b/tdesign-component/example/assets/code/tree-select.TreeSelectThreeColumnsExample.txt @@ -0,0 +1,127 @@ +import 'package:flutter/material.dart'; +import 'package:tdesign_flutter/tdesign_flutter.dart'; + +/// 在已配置 TDesign 主题的应用中使用 `TreeSelectThreeColumnsExample()`。 +class TreeSelectThreeColumnsExample extends StatefulWidget { + const TreeSelectThreeColumnsExample({super.key}); + + @override + State createState() => + _TreeSelectThreeColumnsExampleState(); +} + +class _TreeSelectThreeColumnsExampleState + extends State { + static const _options = [ + TTreeSelectOption( + label: '甘肃省', + value: 'gansu', + children: [ + TTreeSelectOption( + label: '兰州市', + value: 'lanzhou', + children: [TTreeSelectOption(label: '城关区', value: 'chengguan')], + ), + ], + ), + TTreeSelectOption( + label: '广东省', + value: 'guangdong', + children: [ + TTreeSelectOption( + label: '汕头市', + value: 'shantou', + children: [TTreeSelectOption(label: '金平区', value: 'jinping')], + ), + TTreeSelectOption( + label: '汕尾市', + value: 'shanwei', + children: [TTreeSelectOption(label: '城区', value: 'chengqu')], + ), + TTreeSelectOption( + label: '韶关市', + value: 'shaoguan', + children: [TTreeSelectOption(label: '浈江区', value: 'zhenjiang')], + ), + TTreeSelectOption( + label: '深圳市', + value: 'shenzhen', + children: [ + TTreeSelectOption(label: '龙华区', value: 'longhua'), + TTreeSelectOption(label: '罗湖区', value: 'luohu'), + TTreeSelectOption(label: '南山区', value: 'nanshan'), + TTreeSelectOption(label: '坪山区', value: 'pingshan'), + TTreeSelectOption(label: '其它区', value: 'other'), + TTreeSelectOption(label: '盐田区', value: 'yantian'), + ], + ), + TTreeSelectOption( + label: '阳江市', + value: 'yangjiang', + children: [TTreeSelectOption(label: '江城区', value: 'jiangcheng')], + ), + TTreeSelectOption( + label: '云浮市', + value: 'yunfu', + children: [TTreeSelectOption(label: '云城区', value: 'yuncheng')], + ), + ], + ), + TTreeSelectOption( + label: '贵州省', + value: 'guizhou', + children: [ + TTreeSelectOption( + label: '贵阳市', + value: 'guiyang', + children: [TTreeSelectOption(label: '南明区', value: 'nanming')], + ), + ], + ), + TTreeSelectOption( + label: '海南省', + value: 'hainan', + children: [ + TTreeSelectOption( + label: '海口市', + value: 'haikou', + children: [TTreeSelectOption(label: '秀英区', value: 'xiuying')], + ), + ], + ), + TTreeSelectOption( + label: '河北省', + value: 'hebei', + children: [ + TTreeSelectOption( + label: '石家庄市', + value: 'shijiazhuang', + children: [TTreeSelectOption(label: '长安区', value: 'changan')], + ), + ], + ), + TTreeSelectOption( + label: '黑龙江省', + value: 'heilongjiang', + children: [ + TTreeSelectOption( + label: '哈尔滨市', + value: 'haerbin', + children: [TTreeSelectOption(label: '道里区', value: 'daoli')], + ), + ], + ), + ]; + + List> _value = const [ + ['guangdong', 'shenzhen', 'nanshan'], + ]; + + @override + Widget build(BuildContext context) => TTreeSelect( + key: const ValueKey('tree-select-three-columns'), + options: _options, + value: _value, + onChanged: (value) => setState(() => _value = value), + ); +} diff --git a/tdesign-component/example/assets/code/tree-select._buildMultiple.txt b/tdesign-component/example/assets/code/tree-select._buildMultiple.txt deleted file mode 100644 index ef1781269..000000000 --- a/tdesign-component/example/assets/code/tree-select._buildMultiple.txt +++ /dev/null @@ -1,10 +0,0 @@ -Widget _buildMultiple(BuildContext context) { - // 多选仍使用从根节点到叶子节点的完整路径。 - return TTreeSelect( - key: const ValueKey('tree-select-multiple'), - options: _basicOptions, - value: _multiple, - multiple: true, - onChanged: (value) => setState(() => _multiple = value), - ); - } diff --git a/tdesign-component/example/assets/code/tree-select._buildSingle.txt b/tdesign-component/example/assets/code/tree-select._buildSingle.txt deleted file mode 100644 index 79da1cc3e..000000000 --- a/tdesign-component/example/assets/code/tree-select._buildSingle.txt +++ /dev/null @@ -1,9 +0,0 @@ -Widget _buildSingle(BuildContext context) { - // 页面持有完整路径,选择后使用回调值重建受控组件。 - return TTreeSelect( - key: const ValueKey('tree-select-single'), - options: _basicOptions, - value: _single, - onChanged: (value) => setState(() => _single = value), - ); - } diff --git a/tdesign-component/example/assets/code/tree-select._buildThreeColumns.txt b/tdesign-component/example/assets/code/tree-select._buildThreeColumns.txt deleted file mode 100644 index f721da13a..000000000 --- a/tdesign-component/example/assets/code/tree-select._buildThreeColumns.txt +++ /dev/null @@ -1,9 +0,0 @@ -Widget _buildThreeColumns(BuildContext context) { - // 第三级数据自然生成第三列,无需额外指定列数。 - return TTreeSelect( - key: const ValueKey('tree-select-three-columns'), - options: _threeColumnOptions, - value: _threeColumn, - onChanged: (value) => setState(() => _threeColumn = value), - ); - } diff --git a/tdesign-component/example/lib/page/t_tree_select_page.dart b/tdesign-component/example/lib/page/t_tree_select_page.dart index b38a1a5bf..3e9325d76 100644 --- a/tdesign-component/example/lib/page/t_tree_select_page.dart +++ b/tdesign-component/example/lib/page/t_tree_select_page.dart @@ -1,223 +1,44 @@ import 'package:flutter/material.dart'; -import 'package:tdesign_flutter/tdesign_flutter.dart'; -import '../annotation/example_code.dart'; import '../base/example_widget.dart'; +import 'tree_select/tree_select_examples.dart'; -class TTreeSelectPage extends StatefulWidget { +class TTreeSelectPage extends StatelessWidget { const TTreeSelectPage({super.key}); - @override - State createState() => _TTreeSelectPageState(); -} - -class _TTreeSelectPageState extends State { - static const _basicOptions = [ - TTreeSelectOption( - label: '甘肃省', - value: 'gansu', - children: [TTreeSelectOption(label: '兰州市', value: 'lanzhou')], - ), - TTreeSelectOption( - label: '广东省', - value: 'guangdong', - children: [ - TTreeSelectOption(label: '汕头市', value: 'shantou'), - TTreeSelectOption(label: '汕尾市', value: 'shanwei'), - TTreeSelectOption(label: '韶关市', value: 'shaoguan'), - TTreeSelectOption(label: '深圳市', value: 'shenzhen'), - TTreeSelectOption(label: '阳江市', value: 'yangjiang'), - TTreeSelectOption(label: '云浮市', value: 'yunfu'), - ], - ), - TTreeSelectOption( - label: '贵州省', - value: 'guizhou', - children: [TTreeSelectOption(label: '贵阳市', value: 'guiyang')], - ), - TTreeSelectOption( - label: '海南省', - value: 'hainan', - children: [TTreeSelectOption(label: '海口市', value: 'haikou')], - ), - TTreeSelectOption( - label: '河北省', - value: 'hebei', - children: [TTreeSelectOption(label: '石家庄市', value: 'shijiazhuang')], - ), - TTreeSelectOption( - label: '黑龙江省', - value: 'heilongjiang', - children: [TTreeSelectOption(label: '哈尔滨市', value: 'haerbin')], - ), - ]; - - static const _threeColumnOptions = [ - TTreeSelectOption( - label: '甘肃省', - value: 'gansu', - children: [ - TTreeSelectOption( - label: '兰州市', - value: 'lanzhou', - children: [TTreeSelectOption(label: '城关区', value: 'chengguan')], - ), - ], - ), - TTreeSelectOption( - label: '广东省', - value: 'guangdong', - children: [ - TTreeSelectOption( - label: '汕头市', - value: 'shantou', - children: [TTreeSelectOption(label: '金平区', value: 'jinping')], - ), - TTreeSelectOption( - label: '汕尾市', - value: 'shanwei', - children: [TTreeSelectOption(label: '城区', value: 'chengqu')], - ), - TTreeSelectOption( - label: '韶关市', - value: 'shaoguan', - children: [TTreeSelectOption(label: '浈江区', value: 'zhenjiang')], - ), - TTreeSelectOption( - label: '深圳市', - value: 'shenzhen', - children: [ - TTreeSelectOption(label: '龙华区', value: 'longhua'), - TTreeSelectOption(label: '罗湖区', value: 'luohu'), - TTreeSelectOption(label: '南山区', value: 'nanshan'), - TTreeSelectOption(label: '坪山区', value: 'pingshan'), - TTreeSelectOption(label: '其它区', value: 'other'), - TTreeSelectOption(label: '盐田区', value: 'yantian'), - ], - ), - TTreeSelectOption( - label: '阳江市', - value: 'yangjiang', - children: [TTreeSelectOption(label: '江城区', value: 'jiangcheng')], - ), - TTreeSelectOption( - label: '云浮市', - value: 'yunfu', - children: [TTreeSelectOption(label: '云城区', value: 'yuncheng')], - ), - ], - ), - TTreeSelectOption( - label: '贵州省', - value: 'guizhou', - children: [ - TTreeSelectOption( - label: '贵阳市', - value: 'guiyang', - children: [TTreeSelectOption(label: '南明区', value: 'nanming')], - ), - ], - ), - TTreeSelectOption( - label: '海南省', - value: 'hainan', - children: [ - TTreeSelectOption( - label: '海口市', - value: 'haikou', - children: [TTreeSelectOption(label: '秀英区', value: 'xiuying')], - ), - ], - ), - TTreeSelectOption( - label: '河北省', - value: 'hebei', - children: [ - TTreeSelectOption( - label: '石家庄市', - value: 'shijiazhuang', - children: [TTreeSelectOption(label: '长安区', value: 'changan')], - ), - ], - ), - TTreeSelectOption( - label: '黑龙江省', - value: 'heilongjiang', - children: [ - TTreeSelectOption( - label: '哈尔滨市', - value: 'haerbin', - children: [TTreeSelectOption(label: '道里区', value: 'daoli')], - ), - ], - ), - ]; - - List> _single = const [ - ['guangdong', 'shanwei'], - ]; - List> _multiple = const [ - ['guangdong', 'shanwei'], - ]; - List> _threeColumn = const [ - ['guangdong', 'shenzhen', 'nanshan'], - ]; - @override Widget build(BuildContext context) => ExamplePage( - title: tTitle(), - desc: '用于多层级数据的逐级选择。', - exampleCodeGroup: 'tree-select', - compactDemo: true, - showTestModule: false, + title: tTitle(context), + desc: '用于多层级数据的逐级选择。', + exampleCodeGroup: 'tree-select', + compactDemo: true, + showTestModule: false, + children: [ + ExampleModule( + title: '组件类型', children: [ - ExampleModule( - title: '组件类型', - children: [ - ExampleItem(desc: '基础树形选择器', builder: _buildSingle), - ExampleItem(desc: '多选树形选择器', builder: _buildMultiple), - ], + ExampleItem( + desc: '基础树形选择器', + methodName: 'TreeSelectSingleExample', + builder: (_) => const TreeSelectSingleExample(), ), - ExampleModule( - title: '组件状态', - children: [ - ExampleItem(desc: '树形选择器-三列', builder: _buildThreeColumns) - ], + ExampleItem( + desc: '多选树形选择器', + methodName: 'TreeSelectMultipleExample', + builder: (_) => const TreeSelectMultipleExample(), ), ], - ); - - @ExampleCode(group: 'tree-select') - Widget _buildSingle(BuildContext context) { - // 页面持有完整路径,选择后使用回调值重建受控组件。 - return TTreeSelect( - key: const ValueKey('tree-select-single'), - options: _basicOptions, - value: _single, - onChanged: (value) => setState(() => _single = value), - ); - } - - @ExampleCode(group: 'tree-select') - Widget _buildMultiple(BuildContext context) { - // 多选仍使用从根节点到叶子节点的完整路径。 - return TTreeSelect( - key: const ValueKey('tree-select-multiple'), - options: _basicOptions, - value: _multiple, - multiple: true, - onChanged: (value) => setState(() => _multiple = value), - ); - } - - @ExampleCode(group: 'tree-select') - Widget _buildThreeColumns(BuildContext context) { - // 第三级数据自然生成第三列,无需额外指定列数。 - return TTreeSelect( - key: const ValueKey('tree-select-three-columns'), - options: _threeColumnOptions, - value: _threeColumn, - onChanged: (value) => setState(() => _threeColumn = value), - ); - } + ), + ExampleModule( + title: '组件状态', + children: [ + ExampleItem( + desc: '树形选择器-三列', + methodName: 'TreeSelectThreeColumnsExample', + builder: (_) => const TreeSelectThreeColumnsExample(), + ), + ], + ), + ], + ); } diff --git a/tdesign-component/example/lib/page/tree_select/tree_select_examples.dart b/tdesign-component/example/lib/page/tree_select/tree_select_examples.dart new file mode 100644 index 000000000..c36f99fee --- /dev/null +++ b/tdesign-component/example/lib/page/tree_select/tree_select_examples.dart @@ -0,0 +1,259 @@ +import 'package:flutter/material.dart'; +import 'package:tdesign_flutter/tdesign_flutter.dart'; + +import '../../annotation/example_code.dart'; + +/// 在已配置 TDesign 主题的应用中使用 `TreeSelectSingleExample()`。 +@ExampleCode(group: 'tree-select') +class TreeSelectSingleExample extends StatefulWidget { + const TreeSelectSingleExample({super.key}); + + @override + State createState() => + _TreeSelectSingleExampleState(); +} + +class _TreeSelectSingleExampleState extends State { + static const _options = [ + TTreeSelectOption( + label: '甘肃省', + value: 'gansu', + children: [TTreeSelectOption(label: '兰州市', value: 'lanzhou')], + ), + TTreeSelectOption( + label: '广东省', + value: 'guangdong', + children: [ + TTreeSelectOption(label: '汕头市', value: 'shantou'), + TTreeSelectOption(label: '汕尾市', value: 'shanwei'), + TTreeSelectOption(label: '韶关市', value: 'shaoguan'), + TTreeSelectOption(label: '深圳市', value: 'shenzhen'), + TTreeSelectOption(label: '阳江市', value: 'yangjiang'), + TTreeSelectOption(label: '云浮市', value: 'yunfu'), + ], + ), + TTreeSelectOption( + label: '贵州省', + value: 'guizhou', + children: [TTreeSelectOption(label: '贵阳市', value: 'guiyang')], + ), + TTreeSelectOption( + label: '海南省', + value: 'hainan', + children: [TTreeSelectOption(label: '海口市', value: 'haikou')], + ), + TTreeSelectOption( + label: '河北省', + value: 'hebei', + children: [TTreeSelectOption(label: '石家庄市', value: 'shijiazhuang')], + ), + TTreeSelectOption( + label: '黑龙江省', + value: 'heilongjiang', + children: [TTreeSelectOption(label: '哈尔滨市', value: 'haerbin')], + ), + ]; + + List> _value = const [ + ['guangdong', 'shanwei'], + ]; + + @override + Widget build(BuildContext context) => TTreeSelect( + key: const ValueKey('tree-select-single'), + options: _options, + value: _value, + onChanged: (value) => setState(() => _value = value), + ); +} + +/// 在已配置 TDesign 主题的应用中使用 `TreeSelectMultipleExample()`。 +@ExampleCode(group: 'tree-select') +class TreeSelectMultipleExample extends StatefulWidget { + const TreeSelectMultipleExample({super.key}); + + @override + State createState() => + _TreeSelectMultipleExampleState(); +} + +class _TreeSelectMultipleExampleState extends State { + static const _options = [ + TTreeSelectOption( + label: '甘肃省', + value: 'gansu', + children: [TTreeSelectOption(label: '兰州市', value: 'lanzhou')], + ), + TTreeSelectOption( + label: '广东省', + value: 'guangdong', + children: [ + TTreeSelectOption(label: '汕头市', value: 'shantou'), + TTreeSelectOption(label: '汕尾市', value: 'shanwei'), + TTreeSelectOption(label: '韶关市', value: 'shaoguan'), + TTreeSelectOption(label: '深圳市', value: 'shenzhen'), + TTreeSelectOption(label: '阳江市', value: 'yangjiang'), + TTreeSelectOption(label: '云浮市', value: 'yunfu'), + ], + ), + TTreeSelectOption( + label: '贵州省', + value: 'guizhou', + children: [TTreeSelectOption(label: '贵阳市', value: 'guiyang')], + ), + TTreeSelectOption( + label: '海南省', + value: 'hainan', + children: [TTreeSelectOption(label: '海口市', value: 'haikou')], + ), + TTreeSelectOption( + label: '河北省', + value: 'hebei', + children: [TTreeSelectOption(label: '石家庄市', value: 'shijiazhuang')], + ), + TTreeSelectOption( + label: '黑龙江省', + value: 'heilongjiang', + children: [TTreeSelectOption(label: '哈尔滨市', value: 'haerbin')], + ), + ]; + + List> _value = const [ + ['guangdong', 'shanwei'], + ]; + + @override + Widget build(BuildContext context) => TTreeSelect( + key: const ValueKey('tree-select-multiple'), + options: _options, + value: _value, + multiple: true, + onChanged: (value) => setState(() => _value = value), + ); +} + +/// 在已配置 TDesign 主题的应用中使用 `TreeSelectThreeColumnsExample()`。 +@ExampleCode(group: 'tree-select') +class TreeSelectThreeColumnsExample extends StatefulWidget { + const TreeSelectThreeColumnsExample({super.key}); + + @override + State createState() => + _TreeSelectThreeColumnsExampleState(); +} + +class _TreeSelectThreeColumnsExampleState + extends State { + static const _options = [ + TTreeSelectOption( + label: '甘肃省', + value: 'gansu', + children: [ + TTreeSelectOption( + label: '兰州市', + value: 'lanzhou', + children: [TTreeSelectOption(label: '城关区', value: 'chengguan')], + ), + ], + ), + TTreeSelectOption( + label: '广东省', + value: 'guangdong', + children: [ + TTreeSelectOption( + label: '汕头市', + value: 'shantou', + children: [TTreeSelectOption(label: '金平区', value: 'jinping')], + ), + TTreeSelectOption( + label: '汕尾市', + value: 'shanwei', + children: [TTreeSelectOption(label: '城区', value: 'chengqu')], + ), + TTreeSelectOption( + label: '韶关市', + value: 'shaoguan', + children: [TTreeSelectOption(label: '浈江区', value: 'zhenjiang')], + ), + TTreeSelectOption( + label: '深圳市', + value: 'shenzhen', + children: [ + TTreeSelectOption(label: '龙华区', value: 'longhua'), + TTreeSelectOption(label: '罗湖区', value: 'luohu'), + TTreeSelectOption(label: '南山区', value: 'nanshan'), + TTreeSelectOption(label: '坪山区', value: 'pingshan'), + TTreeSelectOption(label: '其它区', value: 'other'), + TTreeSelectOption(label: '盐田区', value: 'yantian'), + ], + ), + TTreeSelectOption( + label: '阳江市', + value: 'yangjiang', + children: [TTreeSelectOption(label: '江城区', value: 'jiangcheng')], + ), + TTreeSelectOption( + label: '云浮市', + value: 'yunfu', + children: [TTreeSelectOption(label: '云城区', value: 'yuncheng')], + ), + ], + ), + TTreeSelectOption( + label: '贵州省', + value: 'guizhou', + children: [ + TTreeSelectOption( + label: '贵阳市', + value: 'guiyang', + children: [TTreeSelectOption(label: '南明区', value: 'nanming')], + ), + ], + ), + TTreeSelectOption( + label: '海南省', + value: 'hainan', + children: [ + TTreeSelectOption( + label: '海口市', + value: 'haikou', + children: [TTreeSelectOption(label: '秀英区', value: 'xiuying')], + ), + ], + ), + TTreeSelectOption( + label: '河北省', + value: 'hebei', + children: [ + TTreeSelectOption( + label: '石家庄市', + value: 'shijiazhuang', + children: [TTreeSelectOption(label: '长安区', value: 'changan')], + ), + ], + ), + TTreeSelectOption( + label: '黑龙江省', + value: 'heilongjiang', + children: [ + TTreeSelectOption( + label: '哈尔滨市', + value: 'haerbin', + children: [TTreeSelectOption(label: '道里区', value: 'daoli')], + ), + ], + ), + ]; + + List> _value = const [ + ['guangdong', 'shenzhen', 'nanshan'], + ]; + + @override + Widget build(BuildContext context) => TTreeSelect( + key: const ValueKey('tree-select-three-columns'), + options: _options, + value: _value, + onChanged: (value) => setState(() => _value = value), + ); +} diff --git a/tdesign-component/example/test/tree_select_demo_test.dart b/tdesign-component/example/test/tree_select_demo_test.dart index 2ab7bd9f5..a01c7a884 100644 --- a/tdesign-component/example/test/tree_select_demo_test.dart +++ b/tdesign-component/example/test/tree_select_demo_test.dart @@ -1,6 +1,12 @@ import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; +import 'package:flutter_markdown/flutter_markdown.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_base.dart'; +import 'package:tdesign_flutter_example/page/t_tree_select_page.dart'; +import 'package:tdesign_flutter_example/provider/theme_mode_provider.dart'; import 'demo_page_test_utils.dart'; import 'tree_select_demo_test_spec.dart'; @@ -112,4 +118,74 @@ void main() { ); await disposeDemoPage(tester); }, tags: 'demo'); + + testWidgets('all real code panels show complete runnable examples', ( + tester, + ) async { + tester.view.physicalSize = const Size(375, 1800); + tester.view.devicePixelRatio = 1; + addTearDown(tester.view.resetPhysicalSize); + addTearDown(tester.view.resetDevicePixelRatio); + final model = ExamplePageModel( + text: 'TreeSelect 树形选择器', + name: 'tree_select', + pageBuilder: (_, __) => const TTreeSelectPage(), + )..showAction = true; + await tester.pumpWidget( + ChangeNotifierProvider( + create: (_) => ThemeModeProvider(), + child: MaterialApp( + theme: TThemeBuilder.light(TThemeData.defaultData()), + home: ExamplePageInheritedTheme( + model: model, + child: const TTreeSelectPage(), + ), + ), + ), + ); + await tester.pumpAndSettle(); + + final single = find.byKey(const ValueKey('tree-select-single')); + await tester.tap(find.descendant(of: single, matching: find.text('云浮市'))); + await tester.pump(); + expect(tester.widget(single).value.single, [ + 'guangdong', + 'yunfu', + ]); + + const names = [ + 'TreeSelectSingleExample', + 'TreeSelectMultipleExample', + 'TreeSelectThreeColumnsExample', + ]; + final expectedSources = []; + for (final name in names) { + final source = await rootBundle.loadString( + 'assets/code/tree-select.$name.txt', + ); + expect(source, contains('class $name extends StatefulWidget')); + expect(source, contains('static const _options')); + expect(source, contains('List> _value')); + expect(source, contains('onChanged: (value) => setState')); + expectedSources.add(source); + } + + await tester.tap(find.byIcon(TIcons.code)); + await tester.pumpAndSettle(); + expect(find.text('code'), findsNWidgets(3)); + for (var i = 0; i < names.length; i++) { + await tester.tap(find.text('code').at(i)); + await tester.pumpAndSettle(); + final content = tester.widget(find.byType(Markdown)).data; + expect(content, contains(expectedSources[i])); + Navigator.of(tester.element(find.byType(Markdown))).pop(); + await tester.pumpAndSettle(); + } + expect(tester.widget(single).value.single, [ + 'guangdong', + 'yunfu', + ]); + expect(tester.takeException(), isNull); + await disposeDemoPage(tester); + }, tags: 'demo'); } From d35d7605ca5a7bbbfffa084fbf50cd326cb32bc5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=98=BF=20Cai?= Date: Wed, 9 Sep 2026 05:32:57 +0800 Subject: [PATCH 4/5] =?UTF-8?q?fix(TTreeSelect):=20=E6=94=B6=E6=95=9B?= =?UTF-8?q?=E8=B7=AF=E5=BE=84=E5=A5=91=E7=BA=A6=E4=B8=8E=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E6=A0=A1=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../acceptance.md | 7 +++ specs/033-tree-select-demo-alignment/spec.md | 2 + .../example/assets/api/tree-select_api.md | 15 +++++- .../src/components/tree/t_tree_select.dart | 48 ++++++++++++++++-- .../tree/t_tree_select_theme_data.dart | 6 ++- .../components/tree/t_tree_select_test.dart | 49 +++++++++++++++++++ tdesign-component/tool/components.json | 2 +- 7 files changed, 121 insertions(+), 8 deletions(-) diff --git a/specs/033-tree-select-demo-alignment/acceptance.md b/specs/033-tree-select-demo-alignment/acceptance.md index 0a19f3be1..5cee507bc 100644 --- a/specs/033-tree-select-demo-alignment/acceptance.md +++ b/specs/033-tree-select-demo-alignment/acceptance.md @@ -22,6 +22,13 @@ - Flutter 3.47.0(latest):TreeSelect 组件与生成器测试 18 项、Demo 测试 7 项全部通过; 组件包和 example 包 `flutter analyze` 均为 `No issues found`。 - 组件生产代码覆盖率:`286/288 = 99.31%`,高于 95% 门槛。 +- 路径契约收敛后,Flutter 3.32.0 的 TreeSelect 组件测试 16 项全部通过, + 组件包 `flutter analyze --fatal-infos` 为 `No issues found`;生产代码覆盖率为 + `309/311 = 99.36%`。 +- iPhone 16(iOS 18.2 模拟器)真实点击通过:单选切换分支并选择叶子、多选新增 + 与取消叶子均正确更新;本轮仅增加契约文档和 debug 校验,不涉及视觉变化,未更新 Golden。 +- API 生成配置已登记真实公开类型 `TTreeSelectOption`,生成文档同时包含选项值唯一性、 + 完整路径、单选数量和重复路径约束。 - `dart run tool/generate_example_code.dart --check` 通过。 - Linux `amd64` + Flutter 3.32.0 重新生成明暗两张 Demo Golden,并在同一容器 去掉 `--update-goldens` 复跑,2 项全部通过。 diff --git a/specs/033-tree-select-demo-alignment/spec.md b/specs/033-tree-select-demo-alignment/spec.md index ac81c890f..4382ef3ac 100644 --- a/specs/033-tree-select-demo-alignment/spec.md +++ b/specs/033-tree-select-demo-alignment/spec.md @@ -8,7 +8,9 @@ ## API Review - `TTreeSelectOption` 以不可变递归节点表达任意深度,不增加小程序 keys 映射层。 +- 同一层级的 `TTreeSelectOption.value` 必须唯一,debug 模式拒绝歧义配置。 - `value` 使用根到叶的完整路径列表;单选和多选共享同一稳定值类型,`multiple` 只改变选择数量。 +- 单选模式 debug 校验最多一条路径;暂时无法解析到叶子的受控路径不显示选中态,并回退到首个可用分支。 - `value + onChanged` 为严格受控模式,空 callback 表达禁用,不引入 `defaultValue`。 - 三列是数据深度产生的布局结果,不增加列数参数。 - 设计稿的 375 px 容器中,两列宽度为 `103 + 272`,三列宽度为 diff --git a/tdesign-component/example/assets/api/tree-select_api.md b/tdesign-component/example/assets/api/tree-select_api.md index ba7397509..04d9975b7 100644 --- a/tdesign-component/example/assets/api/tree-select_api.md +++ b/tdesign-component/example/assets/api/tree-select_api.md @@ -5,7 +5,18 @@ | 参数 | 类型 | 默认值 | 说明 | | --- | --- | --- | --- | | key | Key? | - | 组件标识,用于区分或保留组件状态。 | -| multiple | bool | false | 是否允许选择多个叶子节点。 | +| multiple | bool | false | 是否允许选择多个叶子节点。 为 false 时,`value` 最多包含一条路径。 | | onChanged | ValueChanged>>? | - | 选中路径变化回调;为 null 时禁用。 | | options | List | - | 根选项。 | -| value | List> | - | 受控选中路径。 | +| value | List> | - | 受控选中路径。 每一项应为从根到叶子的完整 `TTreeSelectOption.value` 路径。 暂时无法在 `options` 中解析到叶子的路径不会显示选中态。 组件会回退到首个可用分支。单选模式最多传入一条,多选模式可传入多条且不得重复。 | + + +### TTreeSelectOption +#### 默认构造方法 + +| 参数 | 类型 | 默认值 | 说明 | +| --- | --- | --- | --- | +| children | List | const [] | 子选项。 | +| disabled | bool | false | 是否禁用。 | +| label | String | - | 展示文案。 | +| value | Object? | - | 业务值;同一层级的选项必须保持唯一。 值可为 null,但同一层级最多只能有一个 null 值。 | diff --git a/tdesign-component/lib/src/components/tree/t_tree_select.dart b/tdesign-component/lib/src/components/tree/t_tree_select.dart index 8b18ec9b4..7bbbd8f2d 100644 --- a/tdesign-component/lib/src/components/tree/t_tree_select.dart +++ b/tdesign-component/lib/src/components/tree/t_tree_select.dart @@ -22,7 +22,7 @@ class TTreeSelectOption { /// 展示文案。 required this.label, - /// 业务值。 + /// 业务值;同一层级的选项必须保持唯一。 required this.value, /// 子选项。 @@ -35,7 +35,9 @@ class TTreeSelectOption { /// 展示文案。 final String label; - /// 业务值。 + /// 业务值;同一层级的选项必须保持唯一。 + /// + /// 值可为 null,但同一层级最多只能有一个 null 值。 final Object? value; /// 子选项。 @@ -56,13 +58,16 @@ class TTreeSelect extends StatefulWidget { /// 根选项。 required this.options, - /// 受控选中路径。 + /// 受控选中路径;每一项应为从根到叶子的完整 [TTreeSelectOption.value] 路径。 + /// 单选模式最多传入一条,多选模式可传入多条且不得重复。 required this.value, /// 选中路径变化回调;为 null 时禁用。 this.onChanged, /// 是否允许选择多个叶子节点。 + /// + /// 为 false 时,[value] 最多包含一条路径。 this.multiple = false, }); @@ -70,12 +75,18 @@ class TTreeSelect extends StatefulWidget { final List options; /// 受控选中路径。 + /// + /// 每一项应为从根到叶子的完整 [TTreeSelectOption.value] 路径。 + /// 暂时无法在 [options] 中解析到叶子的路径不会显示选中态。 + /// 组件会回退到首个可用分支。单选模式最多传入一条,多选模式可传入多条且不得重复。 final List> value; /// 选中路径变化回调;为 null 时禁用。 final ValueChanged>>? onChanged; /// 是否允许选择多个叶子节点。 + /// + /// 为 false 时,[value] 最多包含一条路径。 final bool multiple; @override @@ -191,6 +202,7 @@ class _TTreeSelectState extends State { @override Widget build(BuildContext context) { + assert(_debugCheckConfiguration()); final theme = Theme.of(context).extension(); final columns = _visibleColumns(); final panel = LayoutBuilder( @@ -232,6 +244,36 @@ class _TTreeSelectState extends State { ); } + bool _debugCheckConfiguration() { + assert( + widget.multiple || widget.value.length <= 1, + 'TTreeSelect.value must contain at most one path when multiple is false.', + ); + for (var index = 0; index < widget.value.length; index++) { + for (var previous = 0; previous < index; previous++) { + assert( + !listEquals(widget.value[previous], widget.value[index]), + 'TTreeSelect.value must not contain duplicate paths.', + ); + } + } + + void checkUniqueValues(List options) { + final values = {}; + for (final option in options) { + assert( + values.add(option.value), + 'TTreeSelectOption.value must be unique among siblings. ' + 'Duplicate value: ${option.value}.', + ); + checkUniqueValues(option.children); + } + } + + checkUniqueValues(widget.options); + return true; + } + List _resolveColumnWidths( int columnCount, double availableWidth, diff --git a/tdesign-component/lib/src/components/tree/t_tree_select_theme_data.dart b/tdesign-component/lib/src/components/tree/t_tree_select_theme_data.dart index da8e8efba..467a23081 100644 --- a/tdesign-component/lib/src/components/tree/t_tree_select_theme_data.dart +++ b/tdesign-component/lib/src/components/tree/t_tree_select_theme_data.dart @@ -13,7 +13,7 @@ class TTreeSelectThemeData extends ThemeExtension { /// 根列宽度。 this.rootColumnWidth, - /// 子列宽度。 + /// 所有非根列的固定宽度;为 null 时由组件按可用宽度自动布局。 this.columnWidth, /// 单项最小高度。 @@ -47,7 +47,9 @@ class TTreeSelectThemeData extends ThemeExtension { /// 根列宽度。 final double? rootColumnWidth; - /// 子列宽度。 + /// 所有非根列的固定宽度;为 null 时由组件按可用宽度自动布局。 + /// + /// 设置后每个非根列均使用该宽度,面板总宽度超过可用宽度时可横向滚动。 final double? columnWidth; /// 单项最小高度。 diff --git a/tdesign-component/test/components/tree/t_tree_select_test.dart b/tdesign-component/test/components/tree/t_tree_select_test.dart index 334969362..4a2c78173 100644 --- a/tdesign-component/test/components/tree/t_tree_select_test.dart +++ b/tdesign-component/test/components/tree/t_tree_select_test.dart @@ -373,6 +373,55 @@ void main() { expect(changed, isFalse); }); + testWidgets('single mode rejects more than one controlled path in debug', + (tester) async { + await tester.pumpWidget(wrap(const TTreeSelect( + options: options, + value: [ + ['fruit', 'apple'], + ['fruit', 'banana'], + ], + onChanged: _ignore, + ))); + + final exception = tester.takeException(); + expect(exception, isA()); + expect(exception.toString(), contains('at most one path')); + }); + + testWidgets('duplicate sibling option values are rejected in debug', + (tester) async { + await tester.pumpWidget(wrap(const TTreeSelect( + options: [ + TTreeSelectOption(label: 'First', value: 'duplicate'), + TTreeSelectOption(label: 'Second', value: 'duplicate'), + ], + value: [], + onChanged: _ignore, + ))); + + final exception = tester.takeException(); + expect(exception, isA()); + expect(exception.toString(), contains('unique among siblings')); + }); + + testWidgets('duplicate controlled paths are rejected in debug', + (tester) async { + await tester.pumpWidget(wrap(const TTreeSelect( + options: options, + value: [ + ['fruit', 'apple'], + ['fruit', 'apple'], + ], + multiple: true, + onChanged: _ignore, + ))); + + final exception = tester.takeException(); + expect(exception, isA()); + expect(exception.toString(), contains('duplicate paths')); + }); + testWidgets('theme controls dimensions, colors, and text styles', (tester) async { const selectedStyle = TextStyle(color: Colors.red); diff --git a/tdesign-component/tool/components.json b/tdesign-component/tool/components.json index 6b98d090d..e262f4f80 100644 --- a/tdesign-component/tool/components.json +++ b/tdesign-component/tool/components.json @@ -443,7 +443,7 @@ "api": { "names": [ "TTreeSelect", - "TSelectOption" + "TTreeSelectOption" ], "getComments": false } From 6d0ccdf7903987e1cc395f1e35696541f3ad2fae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=98=BF=20Cai?= Date: Wed, 9 Sep 2026 09:26:27 +0800 Subject: [PATCH 5/5] =?UTF-8?q?fix(TTreeSelect):=20=E5=AF=B9=E9=BD=90?= =?UTF-8?q?=E5=80=BC=E5=88=A4=E9=87=8D=E8=AF=AD=E4=B9=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../acceptance.md | 13 +++- specs/033-tree-select-demo-alignment/spec.md | 3 +- .../src/components/tree/t_tree_select.dart | 5 +- .../components/tree/t_tree_select_test.dart | 75 +++++++++++++++++++ 4 files changed, 90 insertions(+), 6 deletions(-) diff --git a/specs/033-tree-select-demo-alignment/acceptance.md b/specs/033-tree-select-demo-alignment/acceptance.md index 5cee507bc..abdd30e06 100644 --- a/specs/033-tree-select-demo-alignment/acceptance.md +++ b/specs/033-tree-select-demo-alignment/acceptance.md @@ -22,13 +22,20 @@ - Flutter 3.47.0(latest):TreeSelect 组件与生成器测试 18 项、Demo 测试 7 项全部通过; 组件包和 example 包 `flutter analyze` 均为 `No issues found`。 - 组件生产代码覆盖率:`286/288 = 99.31%`,高于 95% 门槛。 -- 路径契约收敛后,Flutter 3.32.0 的 TreeSelect 组件测试 16 项全部通过, - 组件包 `flutter analyze --fatal-infos` 为 `No issues found`;生产代码覆盖率为 - `309/311 = 99.36%`。 +- 路径契约收敛后,Flutter 3.32.0 与 Flutter 3.47.0 的 TreeSelect 组件测试 + 19 项全部通过;覆盖单选数量、重复路径、同级字符串/null/嵌套值重复,以及 + `==` 相等但 `hashCode` 不同的自定义值。 +- Flutter 3.32.0 的组件包与 example 包完整 `flutter analyze --fatal-infos`、 + Flutter 3.47.0 的 TreeSelect 实现与测试静态分析均为 `No issues found`; + 组件生产代码覆盖率为 `311/313 = 99.36%`。 +- Flutter 3.32.0 与 Flutter 3.47.0 的 example release Web 构建均通过; + debug 唯一性校验不进入 release 执行路径。 - iPhone 16(iOS 18.2 模拟器)真实点击通过:单选切换分支并选择叶子、多选新增 与取消叶子均正确更新;本轮仅增加契约文档和 debug 校验,不涉及视觉变化,未更新 Golden。 - API 生成配置已登记真实公开类型 `TTreeSelectOption`,生成文档同时包含选项值唯一性、 完整路径、单选数量和重复路径约束。 +- 同级选项唯一性改用与路径解析一致的 `==` 线性比较;自定义值在 `==` 相等但 + `hashCode` 不同的情况下仍会被 debug 校验拒绝,不依赖业务类型的哈希实现。 - `dart run tool/generate_example_code.dart --check` 通过。 - Linux `amd64` + Flutter 3.32.0 重新生成明暗两张 Demo Golden,并在同一容器 去掉 `--update-goldens` 复跑,2 项全部通过。 diff --git a/specs/033-tree-select-demo-alignment/spec.md b/specs/033-tree-select-demo-alignment/spec.md index 4382ef3ac..1191407a6 100644 --- a/specs/033-tree-select-demo-alignment/spec.md +++ b/specs/033-tree-select-demo-alignment/spec.md @@ -8,7 +8,8 @@ ## API Review - `TTreeSelectOption` 以不可变递归节点表达任意深度,不增加小程序 keys 映射层。 -- 同一层级的 `TTreeSelectOption.value` 必须唯一,debug 模式拒绝歧义配置。 +- 同一层级的 `TTreeSelectOption.value` 必须按 `==` 语义保持唯一,debug 模式拒绝歧义配置; + 校验不依赖业务值的 `hashCode`,与路径解析和选中比较保持一致。 - `value` 使用根到叶的完整路径列表;单选和多选共享同一稳定值类型,`multiple` 只改变选择数量。 - 单选模式 debug 校验最多一条路径;暂时无法解析到叶子的受控路径不显示选中态,并回退到首个可用分支。 - `value + onChanged` 为严格受控模式,空 callback 表达禁用,不引入 `defaultValue`。 diff --git a/tdesign-component/lib/src/components/tree/t_tree_select.dart b/tdesign-component/lib/src/components/tree/t_tree_select.dart index 7bbbd8f2d..b98fc678d 100644 --- a/tdesign-component/lib/src/components/tree/t_tree_select.dart +++ b/tdesign-component/lib/src/components/tree/t_tree_select.dart @@ -259,13 +259,14 @@ class _TTreeSelectState extends State { } void checkUniqueValues(List options) { - final values = {}; + final values = []; for (final option in options) { assert( - values.add(option.value), + !values.any((value) => value == option.value), 'TTreeSelectOption.value must be unique among siblings. ' 'Duplicate value: ${option.value}.', ); + values.add(option.value); checkUniqueValues(option.children); } } diff --git a/tdesign-component/test/components/tree/t_tree_select_test.dart b/tdesign-component/test/components/tree/t_tree_select_test.dart index 4a2c78173..d86f441df 100644 --- a/tdesign-component/test/components/tree/t_tree_select_test.dart +++ b/tdesign-component/test/components/tree/t_tree_select_test.dart @@ -2,6 +2,21 @@ import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:tdesign_flutter/tdesign_flutter.dart'; +@immutable +class _EqualValueWithDifferentHashCode { + const _EqualValueWithDifferentHashCode(this.id, this.hashCode); + + final String id; + + @override + final int hashCode; + + @override + bool operator ==(Object other) { + return other is _EqualValueWithDifferentHashCode && other.id == id; + } +} + void main() { const options = [ TTreeSelectOption( @@ -405,6 +420,66 @@ void main() { expect(exception.toString(), contains('unique among siblings')); }); + testWidgets('sibling uniqueness uses the same equality as path matching', + (tester) async { + await tester.pumpWidget(wrap(const TTreeSelect( + options: [ + TTreeSelectOption( + label: 'First', + value: _EqualValueWithDifferentHashCode('duplicate', 1), + ), + TTreeSelectOption( + label: 'Second', + value: _EqualValueWithDifferentHashCode('duplicate', 2), + ), + ], + value: [], + onChanged: _ignore, + ))); + + final exception = tester.takeException(); + expect(exception, isA()); + expect(exception.toString(), contains('unique among siblings')); + }); + + testWidgets('duplicate null sibling option values are rejected in debug', + (tester) async { + await tester.pumpWidget(wrap(const TTreeSelect( + options: [ + TTreeSelectOption(label: 'First', value: null), + TTreeSelectOption(label: 'Second', value: null), + ], + value: [], + onChanged: _ignore, + ))); + + final exception = tester.takeException(); + expect(exception, isA()); + expect(exception.toString(), contains('unique among siblings')); + }); + + testWidgets('duplicate nested sibling values are rejected in debug', + (tester) async { + await tester.pumpWidget(wrap(const TTreeSelect( + options: [ + TTreeSelectOption( + label: 'Root', + value: 'root', + children: [ + TTreeSelectOption(label: 'First', value: 'duplicate'), + TTreeSelectOption(label: 'Second', value: 'duplicate'), + ], + ), + ], + value: [], + onChanged: _ignore, + ))); + + final exception = tester.takeException(); + expect(exception, isA()); + expect(exception.toString(), contains('unique among siblings')); + }); + testWidgets('duplicate controlled paths are rejected in debug', (tester) async { await tester.pumpWidget(wrap(const TTreeSelect(