fix(packui): M113 收口 —— 导出的「Save to」字段形状与「没进包」标题承诺

复审看图挑出的两处,只改这两处,其余不动。

1. **Save to 字段**:原来是 `label("Save to (empty = suggested)")` + 空值,看起来像「这句提示就是字段值」,
   与上面 Pack name / Version 的「标签在上、值在下」不一致。改成短标签 `Save to` + 占位
   `empty = suggested path`(新增 `PackExportOutputPlaceholder` 一个键)。

2. **`Not in the pack (listed one by one)` 与 `...and 6 more files` 自相矛盾**:13 条没进包的其实全列了,
   但紧随其后的「还有 6 个」说的是**内联样例**的截断,两句挨着会被读成一件事。
   改法:「没进包」标题带真实计数(`Not in the pack: {count}`),内联样例加自己的标题
   `Copied into overrides/ (first {shown}):`,截断那句改成 `…and {count} more files (not shown here)`
   —— 谁被截断、截了几条,写在它自己的那一块里。

`tolerable_title` 因此改成收 `String`(计数是运行时 format 出来的),`golden.rs` 同步三个键。

门禁:`cargo fmt --all --check` 通过;`cargo test -p unlucky-app-iced --lib -j 2`
504 passed / 0 failed(TEST_EXIT=0);`cargo check -p unlucky-app-iced --all-targets` 零 warning。
出图:`04-export-light.png` / `04-export-dark.png` 已重出(其余 8 张未受影响、未改动)。
This commit is contained in:
AskaEth committed 2026-11-05 04:06:40 +08:00
1 parent 5f09b8113a
commit 27bbc74eaa
5 files changed
+51 -19

No files matched your search

@@ -101,9 +101,12 @@ pub(super) fn export_block<'a>(
Field::new(export.version.as_str()).label(catalog.text(Key::PackExportVersion)),
move |text| intent(PackMessage::SetExportVersion(text)),
));
// 标签在上、占位在下:**别让占位文字看起来像已填的值**(复审提过这张图的观感)
block = block.push(text_field(
ui,
Field::new(export.output.as_str()).label(catalog.text(Key::PackExportOutput)),
Field::new(export.output.as_str())
.label(catalog.text(Key::PackExportOutput))
.placeholder(catalog.text(Key::PackExportOutputPlaceholder)),
move |text| intent(PackMessage::SetOutput(text)),
));
block = block.push(
@@ -224,10 +227,14 @@ pub(super) fn preview_block<'a>(
.width(Length::Fill);
if !preview.skipped.is_empty() {
// 标题写成「Not in the pack: 13」而不是「逐条列出」:13 条**确实**全列出来了,
// 但下面那个「…还有 N 个(这里不展开)」说的是**内联样例**,两句挨着容易被读成矛盾
block = block.push(tolerable_title(
ui,
catalog,
catalog.text(Key::PackPreviewSkippedTitle),
catalog.render(
Key::PackPreviewSkippedTitle,
&[("count", &preview.skipped.len().to_string())],
),
));
block = block.push(rows_block(ui, catalog, &preview.skipped));
}
@@ -235,6 +242,19 @@ pub(super) fn preview_block<'a>(
// 样例 + 已知损失一起套有界滚动:预检是「摊开给你看」的块,条目多时它会把
// 「确认写盘」顶出屏幕(出图时实测到了)
let mut extras = column![].spacing(ui.space(Space::X1)).width(Length::Fill);
if !preview.inline_sample.is_empty() {
// 给样例一句自己的标题 + 说明只列前几条(截断要说出来)
extras = extras.push(frame::text_role_owned(
ui,
TypeRole::LabelMedium,
false,
catalog.render(
Key::PackPreviewInlineTitle,
&[("shown", &preview.inline_sample.len().to_string())],
),
ui.color(Role::OnSurfaceVariant),
));
}
for path in &preview.inline_sample {
extras = extras.push(frame::text_role(
ui,
@@ -41,15 +41,14 @@ pub(super) fn marker_box<'a>(
.into()
}
pub(super) fn tolerable_title<'a>(
ui: &'a Ui,
catalog: Catalog,
title: &'a str,
) -> Element<'a, PageMessage> {
let _ = catalog;
/// 容忍域的标题(`Warn` 图标 + 三级色)。
///
/// 收 `String` 而不是 `&str`:标题要带计数(`Not in the pack: 13`),而计数是运行时 `format!`
/// 出来的,借用不出去。
pub(super) fn tolerable_title(ui: &Ui, title: String) -> Element<'_, PageMessage> {
row![
frame::glyph(IconKind::Warn, ui.color(Role::Tertiary), frame::ICON_PX),
frame::text_role(
frame::text_role_owned(
ui,
TypeRole::LabelLarge,
true,
@@ -118,7 +118,7 @@ pub(super) fn report_block<'a>(
if let Some(title) = &report.missing_title {
block = block.push(
column![
tolerable_title(ui, catalog, title.as_str()),
tolerable_title(ui, title.clone()),
bounded(
ui,
rows_block(ui, catalog, &report.missing),
@@ -138,7 +138,7 @@ pub(super) fn report_block<'a>(
if let Some(title) = &report.conflicts_title {
block = block.push(
column![
tolerable_title(ui, catalog, title.as_str()),
tolerable_title(ui, title.clone()),
bounded(
ui,
column(
+15 -4
View File
@@ -173,7 +173,11 @@ macro_rules! content_entries {
PackExportFormat => ("Format", "格式"),
PackExportName => ("Pack name", "包名"),
PackExportVersion => ("Version", "版本"),
PackExportOutput => ("Save to (empty = suggested)", "保存到(留空 = 自动)"),
PackExportOutput => ("Save to", "保存到"),
PackExportOutputPlaceholder => (
"empty = suggested path",
"留空 = 自动给一个路径"
),
PackExportPrecheck => ("Dry run", "预检"),
PackExportConfirm => ("Write the pack", "确认写盘"),
PackExportAbort => ("Back", "返回"),
@@ -196,13 +200,20 @@ macro_rules! content_entries {
"{bytes} copied into overrides/",
"{bytes} 会原样拷进 overrides/"
),
PackPreviewInlineTitle => (
"Copied into overrides/ (first {shown}):",
"原样拷进 overrides/(只列前 {shown} 个):"
),
PackPreviewSkippedTitle => (
"Not in the pack (listed one by one)",
"没进包(逐条列出)"
"Not in the pack: {count}",
"没进包:{count} 项"
),
PackPreviewNotes => ("Known losses", "已知损失"),
PackPreviewTarget => ("Will be written to {path}", "将写到 {path}"),
PackPreviewMore => ("…and {count} more files", "…还有 {count} 个文件"),
PackPreviewMore => (
"…and {count} more files (not shown here)",
"…还有 {count} 个文件(这里不展开)"
),
PackPreviewComplete => ("Nothing is left out", "没有遗漏任何文件"),
PackPreviewIncomplete => (
"Some files will not be in the pack",
+5 -3
View File
@@ -272,7 +272,8 @@ pub(super) const GOLDEN: &[(&str, &str, &str)] = &[
("PackExportFormat", "Format", "格式"),
("PackExportName", "Pack name", "包名"),
("PackExportVersion", "Version", "版本"),
("PackExportOutput", "Save to (empty = suggested)", "保存到(留空 = 自动)"),
("PackExportOutput", "Save to", "保存到"),
("PackExportOutputPlaceholder", "empty = suggested path", "留空 = 自动给一个路径"),
("PackExportPrecheck", "Dry run", "预检"),
("PackExportConfirm", "Write the pack", "确认写盘"),
("PackExportAbort", "Back", "返回"),
@@ -283,10 +284,11 @@ pub(super) const GOLDEN: &[(&str, &str, &str)] = &[
("PackPreviewHead", "Will inline {inline} files · cannot export: {skipped}", "将内联 {inline} 个文件 · 无法导出 {skipped} 项"),
("PackPreviewRemote", "{count} files can be referenced remotely", "{count} 个文件可走远程引用"),
("PackPreviewInlineBytes", "{bytes} copied into overrides/", "{bytes} 会原样拷进 overrides/"),
("PackPreviewSkippedTitle", "Not in the pack (listed one by one)", "没进包(逐条列出)"),
("PackPreviewInlineTitle", "Copied into overrides/ (first {shown}):", "原样拷进 overrides/(只列前 {shown} 个):"),
("PackPreviewSkippedTitle", "Not in the pack: {count}", "没进包:{count} 项"),
("PackPreviewNotes", "Known losses", "已知损失"),
("PackPreviewTarget", "Will be written to {path}", "将写到 {path}"),
("PackPreviewMore", "…and {count} more files", "…还有 {count} 个文件"),
("PackPreviewMore", "…and {count} more files (not shown here)", "…还有 {count} 个文件(这里不展开)"),
("PackPreviewComplete", "Nothing is left out", "没有遗漏任何文件"),
("PackPreviewIncomplete", "Some files will not be in the pack", "有文件不会进包"),
("PackReasonModrinthSha1", "Modrinth match (SHA-1)", "Modrinth 命中(SHA-1)"),