Files
Genarrative/packages/shared/src/components/PlatformGamePricingField.css
T
suzmii 31a3d326b3
Project CI / Backend tests (pull_request) Failing after 15s
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Successful in 6m9s
Project CI / AI game creator shell Rust crates (pull_request) Successful in 4m23s
Project CI / Repository checks (pull_request) Failing after 33s
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Successful in 7m39s
Project CI / Frontend tests (pull_request) Successful in 3m20s
Project CI / AI game creator shell web tests (pull_request) Successful in 2m51s
Project CI / Native shell tests (pull_request) Successful in 9m1s
项目版本改用平台派发的下一个版本号:AGC 只读展示 + 提交同一个值
- packages/shared:定价字段提示句补 `id` 并挂进 `aria-describedby`(与错误行并列),恢复「最多 1000000 泥点」的程序化关联;补两条断言(有错/无误时描述里都含上限)。
- packages/shared:分组标题改用 `PlatformFieldLabel variant="field"`(12px/700/弱化色),与网页「支持设备 / 封面与截图」的 legend 同号;价格输入中和原生 number spinner(`appearance: textfield` + 隐藏 `::-webkit-inner-spin-button`),不再压住「泥点」单位,`inputMode="numeric"` 保留。
- packages/shared:非法态去掉组件级 `!important`,改由网页宿主 remap 的 `[aria-invalid='true']` 分支给出错误色(`src/index.css`,排在 `:focus` 之后),组件侧保留正常权重同名声明供 AGC 生效。
- AGC 壳 Rust(`game_distribution_publish.rs`):作者作品条目解析 `versions[]`;新增 `resolve_owner_next_version_number`(已有版本最大 `versionNumber + 1`,对齐平台 `resolve_version_number(None)`);发布状态回读下发 `nextVersionNumber`(首次发布 `1`;刷新成功的更新 `max+1`;`unavailable` 与「有绑定但没刷新成功」为 `None`);补单测两条。
- AGC 服务层(`gameDistributionPublish.ts`):`versionNumber` 改为必填,删除按清单 `versions[]` 条数的回落;回读结果类型补 `nextVersionNumber`。
- AGC 发布面板:删除本地派生的 `projectVersion`,`项目版本` 显示并提交同一个平台版本号;字段改为只读 + 禁用观感(未知时显示 `—` 占位);平台版本未知时提交按钮禁用并提示重试;「项目版本」不再可从 AGC 手填。
- AGC 样式:新增 `__version-field` / `__version-value`(与相邻字段同形 + 灰底只读观感),并更新版本标签注释为平台口径。
- 测试:AGC 面板三条新口径断言(显示值==提交值==平台下一个版本号;本地迭代计数与遗留字段不参与;平台数据不可得时显示占位/提交禁用/不调用发布)、非 Tauri 宿主用例改为断言禁用、服务层用例改为「只认调用方传入值 + 缺省失败关闭」、live 用例补显式版本号;陈旧注释同步(`game_publish_attempt.rs`、`project/manifest.rs`、`resourceProjectionModel.ts`)。
2026-10-06 11:29:38 +08:00

183 lines
6.2 KiB
CSS
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/*
* 买断制定价字段:网页发布页与 AGC 发布面板共用同一份表现与文案。
*
* 这里只补平台原语没覆盖的部分,不另造一套控件观感:
* - 外壳:`PlatformSubpanel`(`platform` 面 + `xs` 圆角 ≈ 网页 `.game-publish-fieldset` 的
* 0.7rem 描边卡片,AGC 侧同族容器是 `.game-distribution-publish-panel__publication`)。
* - 付费方式:原生 radio(屏外裁切保留语义 / 键盘 / `.checked`)+ 共享 chip 外观
* (`getPlatformCategoryChipClassName`:未选=浅底描边,选中=实心品牌填充反白)。
* - 买断价:`PlatformTextField`,本文件只补右对齐等宽数字、单位留位、错误态与层次。
*
* 选择器统一写成「根类 + 子类」而不是裸类:AGC 发布面板的
* `.game-distribution-publish-panel__fields label/input` 是后代选择器(0,1,1),会盖掉
* 原语里的 Tailwind 工具类(0,1,0)。提高一档特异性后,组件外观在两端都由这里唯一决定。
*/
.platform-game-pricing-field {
display: grid;
gap: 0.6rem;
min-width: 0;
font-size: 0.76rem;
color: var(--platform-text-strong, #3d1f10);
}
.platform-game-pricing-field .platform-game-pricing-field__modes {
display: flex;
flex-wrap: wrap;
align-items: center;
gap: 0.5rem;
min-width: 0;
}
.platform-game-pricing-field .platform-game-pricing-field__option {
position: relative;
display: inline-flex;
gap: 0;
min-width: 0;
margin: 0;
cursor: pointer;
}
/* 原生 radio 只做语义与键盘载体:`display: none` / `visibility: hidden` 会把可聚焦性和
读屏可见性一起拿掉,所以用「屏外裁切」隐藏,焦点仍落在它身上。 */
.platform-game-pricing-field .platform-game-pricing-field__option-input {
position: absolute;
top: 0;
left: 0;
box-sizing: border-box;
width: 1px;
height: 1px;
min-width: 0;
margin: 0;
border: 0;
padding: 0;
background: transparent;
overflow: hidden;
white-space: nowrap;
clip-path: inset(50%);
}
/* chip 自带高度 36px(窄屏还会降到 33px),这里统一抬到 44px 触控下限;
「免费 / 买断制」字数不同,按内容宽度会一宽一窄,给个共同下限让两枚等宽。 */
.platform-game-pricing-field .platform-game-pricing-field__option-chip {
min-width: 5.5rem;
min-height: 2.75rem;
}
.platform-game-pricing-field
.platform-game-pricing-field__option-input:focus-visible
+ .platform-game-pricing-field__option-chip {
outline: 2px solid var(--platform-input-focus-ring, #b6623f);
outline-offset: 2px;
}
.platform-game-pricing-field
.platform-game-pricing-field__option-input:disabled
+ .platform-game-pricing-field__option-chip {
cursor: not-allowed;
opacity: 0.55;
}
.platform-game-pricing-field .platform-game-pricing-field__price {
display: grid;
gap: 0.35rem;
min-width: 0;
}
.platform-game-pricing-field .platform-game-pricing-field__price-label {
display: block;
color: var(--platform-text-strong, #3d1f10);
font-size: 0.75rem;
font-weight: 700;
line-height: 1.35;
cursor: pointer;
}
.platform-game-pricing-field .platform-game-pricing-field__price-control {
position: relative;
display: flex;
align-items: center;
min-width: 0;
}
/* 边框 / 圆角 / 底色 / 焦点环都来自 `PlatformTextField`(AGC 宿主还会用面板自己的输入框
token 覆盖,与同面板其它输入框一致),这里只补三件事:数字右对齐且等宽、给单位留位、错误态。 */
.platform-game-pricing-field .platform-game-pricing-field__price-input {
padding-right: 2.9rem;
font-weight: 600;
font-variant-numeric: tabular-nums;
letter-spacing: 0.01em;
text-align: right;
}
/* 错误态。网页宿主对子面板内的输入框做了统一 remap(`src/index.css` 的
`.platform-theme :where(.platform-subpanel …) :where(input…)`,带 `!important`),
非法态在那边由宿主同族的 `[aria-invalid='true']` 分支给出;这里保留**正常权重**的同色声明,
AGC 侧没有那套 remap 时就靠这条生效。不改 `box-shadow`:那是宿主的输入高光与焦点环,
压掉会让非法字段失去键盘焦点提示。 */
.platform-game-pricing-field
.platform-game-pricing-field__price-input[aria-invalid='true'] {
border-color: var(--platform-button-danger-text, #a6402f);
background: var(--platform-button-danger-fill, rgba(255, 237, 229, 0.94));
}
/* 原生 number 的上下箭头会画在「泥点」单位左边(Chrome 一直画,Firefox hover 才画),
与单位挤在一起;这里隐藏箭头,保留 `type="number"` + `inputMode="numeric"`(移动端仍是数字键盘)。 */
.platform-game-pricing-field
.platform-game-pricing-field__price-input::-webkit-outer-spin-button,
.platform-game-pricing-field
.platform-game-pricing-field__price-input::-webkit-inner-spin-button {
margin: 0;
-webkit-appearance: none;
appearance: none;
}
.platform-game-pricing-field .platform-game-pricing-field__price-input {
-moz-appearance: textfield;
appearance: textfield;
}
.platform-game-pricing-field .platform-game-pricing-field__price-unit {
position: absolute;
top: 50%;
right: 0.75rem;
transform: translateY(-50%);
color: var(--platform-text-soft, #988476);
font-size: 0.72rem;
font-weight: 700;
line-height: 1;
pointer-events: none;
}
.platform-game-pricing-field
.platform-game-pricing-field__price-input[aria-invalid='true']
+ .platform-game-pricing-field__price-unit {
color: var(--platform-button-danger-text, #a6402f);
}
.platform-game-pricing-field .platform-game-pricing-field__hint {
color: var(--platform-text-soft, #988476);
font-size: 0.7rem;
font-weight: 500;
line-height: 1.5;
}
.platform-game-pricing-field .platform-game-pricing-field__error {
color: var(--platform-button-danger-text, #a6402f);
font-size: 0.72rem;
font-weight: 600;
line-height: 1.45;
}
/* 窄屏(≈390px):两枚胶囊等分整行,不靠换行兜底,也不出现横向溢出。 */
@media (max-width: 480px) {
.platform-game-pricing-field .platform-game-pricing-field__modes {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
}
.platform-game-pricing-field .platform-game-pricing-field__option-chip {
width: 100%;
min-width: 0;
}
}