fix(*): 质量检查与版本发布 - 修复格式门禁和创作灵感兼容导出并发布 v1.6.2
This commit is contained in:
@@ -107,13 +107,13 @@
|
||||
/* 玻璃质感边框:亮描边勾出面板边缘,内侧一圈高光给厚度,
|
||||
外圈大而软的投影把面板从背景里"抬"起来,避免看成扁平纸片。
|
||||
阴影只留三层——11 张卡片都在动,每多一层就是每帧多一次大范围重绘。 */
|
||||
border: 1px solid rgba(255, 255, 255, .5);
|
||||
border: 1px solid rgba(255, 255, 255, 0.5);
|
||||
border-radius: var(--r-2xl, 16px);
|
||||
background: var(--creation-surface-raised, #f0f1ee);
|
||||
box-shadow:
|
||||
inset 0 1px 0 rgba(255, 255, 255, .55),
|
||||
0 0 0 1px rgba(0, 0, 0, .07),
|
||||
0 28px 54px -26px rgba(0, 0, 0, .52);
|
||||
inset 0 1px 0 rgba(255, 255, 255, 0.55),
|
||||
0 0 0 1px rgba(0, 0, 0, 0.07),
|
||||
0 28px 54px -26px rgba(0, 0, 0, 0.52);
|
||||
cursor: pointer;
|
||||
/* 只有最前面那张能点,后面的点击会穿到页面上,不去抢焦点。 */
|
||||
pointer-events: none;
|
||||
@@ -124,15 +124,12 @@
|
||||
/* 先把卡片按自身尺寸对中,再叠加纵深位移与缩放——位移不会被 scale 影响。
|
||||
--card-enter-y / --card-enter-scale 是入场位移,封面就绪后归零,
|
||||
所以卡片是"从略下方、略小的位置浮上来",而不是硬闪出来。 */
|
||||
transform:
|
||||
translate(-50%, -50%)
|
||||
translate(var(--card-x, 0px), var(--card-enter-y, 44px))
|
||||
scale(calc(var(--card-scale, 1) * var(--card-enter-scale, .95)));
|
||||
transform: translate(-50%, -50%) translate(var(--card-x, 0px), var(--card-enter-y, 44px)) scale(calc(var(--card-scale, 1) * var(--card-enter-scale, 0.95)));
|
||||
/* 只动 transform 和 opacity,两者都能交给合成层,不触发重排重绘。
|
||||
缓动先缓后快再长尾软着陆,观感是镜头平稳推拉而不是"弹"过去。 */
|
||||
transition:
|
||||
transform 660ms cubic-bezier(.32, .72, 0, 1),
|
||||
opacity 520ms cubic-bezier(.4, 0, .2, 1);
|
||||
transform 660ms cubic-bezier(0.32, 0.72, 0, 1),
|
||||
opacity 520ms cubic-bezier(0.4, 0, 0.2, 1);
|
||||
}
|
||||
|
||||
/* 封面已就绪:放行这张卡。 */
|
||||
@@ -151,13 +148,10 @@
|
||||
独立属性会插在 transform 之前合成,卡片会被缩放带得偏离原位。
|
||||
抬起用更短的时长——切换是运镜,悬停是手感,两者不该共用一个节奏。 */
|
||||
.creation-tunnel-card.is-active:hover {
|
||||
transform:
|
||||
translate(-50%, -50%)
|
||||
translate(var(--card-x, 0px), calc(var(--card-enter-y, 0px) - 14px))
|
||||
scale(calc(var(--card-scale, 1) * var(--card-enter-scale, 1) * 1.04));
|
||||
transform: translate(-50%, -50%) translate(var(--card-x, 0px), calc(var(--card-enter-y, 0px) - 14px)) scale(calc(var(--card-scale, 1) * var(--card-enter-scale, 1) * 1.04));
|
||||
transition:
|
||||
transform 240ms cubic-bezier(.2, .8, .3, 1),
|
||||
opacity 520ms cubic-bezier(.4, 0, .2, 1);
|
||||
transform 240ms cubic-bezier(0.2, 0.8, 0.3, 1),
|
||||
opacity 520ms cubic-bezier(0.4, 0, 0.2, 1);
|
||||
}
|
||||
|
||||
/* 玻璃罩:斜向高光 + 底部压暗,让面板读起来是一块有厚度的玻璃,不是一张图。 */
|
||||
@@ -165,9 +159,7 @@
|
||||
content: "";
|
||||
position: absolute;
|
||||
inset: 0;
|
||||
background:
|
||||
linear-gradient(158deg, rgba(255, 255, 255, .3), rgba(255, 255, 255, 0) 40%),
|
||||
linear-gradient(0deg, rgba(0, 0, 0, .18), rgba(0, 0, 0, 0) 44%);
|
||||
background: linear-gradient(158deg, rgba(255, 255, 255, 0.3), rgba(255, 255, 255, 0) 40%), linear-gradient(0deg, rgba(0, 0, 0, 0.18), rgba(0, 0, 0, 0) 44%);
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
@@ -186,13 +178,13 @@
|
||||
flex-direction: column;
|
||||
gap: var(--space-1, 4px);
|
||||
padding: 44px var(--space-4, 16px) var(--space-3, 12px);
|
||||
background: linear-gradient(transparent, rgba(0, 0, 0, .52) 40%, rgba(0, 0, 0, .84));
|
||||
background: linear-gradient(transparent, rgba(0, 0, 0, 0.52) 40%, rgba(0, 0, 0, 0.84));
|
||||
color: #fff;
|
||||
text-align: left;
|
||||
text-shadow: 0 1px 8px rgba(0, 0, 0, .55);
|
||||
text-shadow: 0 1px 8px rgba(0, 0, 0, 0.55);
|
||||
opacity: 0;
|
||||
/* 比位移稍慢一点收尾,避免文字跟着画面一起"闪"进闪出。 */
|
||||
transition: opacity 380ms cubic-bezier(.4, 0, .2, 1);
|
||||
transition: opacity 380ms cubic-bezier(0.4, 0, 0.2, 1);
|
||||
}
|
||||
|
||||
.creation-tunnel-card.is-active .creation-tunnel-card-info {
|
||||
@@ -205,7 +197,7 @@
|
||||
gap: var(--space-1, 4px);
|
||||
font-size: var(--fs-label, 11px);
|
||||
line-height: 1.2;
|
||||
opacity: .84;
|
||||
opacity: 0.84;
|
||||
}
|
||||
|
||||
.creation-tunnel-card-cta svg {
|
||||
@@ -224,7 +216,7 @@
|
||||
overflow: hidden;
|
||||
font-size: var(--fs-caption, 12px);
|
||||
line-height: 1.45;
|
||||
opacity: .84;
|
||||
opacity: 0.84;
|
||||
-webkit-box-orient: vertical;
|
||||
-webkit-line-clamp: 2;
|
||||
}
|
||||
@@ -243,7 +235,7 @@
|
||||
background: color-mix(in srgb, var(--user-surface) 62%, transparent);
|
||||
border: 1px solid color-mix(in srgb, var(--user-ink) 14%, transparent);
|
||||
border-radius: var(--r-full, 999px);
|
||||
box-shadow: 0 14px 30px -14px rgba(0, 0, 0, .55);
|
||||
box-shadow: 0 14px 30px -14px rgba(0, 0, 0, 0.55);
|
||||
-webkit-backdrop-filter: blur(18px) saturate(1.3);
|
||||
backdrop-filter: blur(18px) saturate(1.3);
|
||||
cursor: pointer;
|
||||
@@ -311,7 +303,7 @@
|
||||
.creation-inspiration-credit summary {
|
||||
cursor: pointer;
|
||||
list-style: none;
|
||||
opacity: .72;
|
||||
opacity: 0.72;
|
||||
transition: opacity var(--user-motion, 180ms) ease;
|
||||
}
|
||||
|
||||
@@ -341,10 +333,7 @@
|
||||
}
|
||||
|
||||
.creation-tunnel-card.is-active:hover {
|
||||
transform:
|
||||
translate(-50%, -50%)
|
||||
translate(var(--card-x, 0px), 0)
|
||||
scale(var(--card-scale, 1));
|
||||
transform: translate(-50%, -50%) translate(var(--card-x, 0px), 0) scale(var(--card-scale, 1));
|
||||
}
|
||||
|
||||
.creation-gallery-arrow {
|
||||
@@ -385,4 +374,4 @@
|
||||
.creation-tunnel-card-desc {
|
||||
-webkit-line-clamp: 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -205,13 +205,7 @@ export function CreationInspirationTunnel({ mode, onStartPrompt }: { mode: Creat
|
||||
if (!shots.length) return null;
|
||||
|
||||
return (
|
||||
<div
|
||||
className="creation-inspiration-tunnel"
|
||||
onPointerEnter={() => setPaused(true)}
|
||||
onPointerLeave={() => setPaused(false)}
|
||||
onFocusCapture={() => setPaused(true)}
|
||||
onBlurCapture={() => setPaused(false)}
|
||||
>
|
||||
<div className="creation-inspiration-tunnel" onPointerEnter={() => setPaused(true)} onPointerLeave={() => setPaused(false)} onFocusCapture={() => setPaused(true)} onBlurCapture={() => setPaused(false)}>
|
||||
<div ref={stageRef} className="creation-gallery-stage" aria-hidden="true">
|
||||
{shots.map((inspiration, index) => {
|
||||
const id = catalogIdOf(inspiration);
|
||||
@@ -269,10 +263,14 @@ export function CreationInspirationTunnel({ mode, onStartPrompt }: { mode: Creat
|
||||
用 !important 改写 color / background 并把 transform 顶成 translateY(-1px),
|
||||
按钮会当场掉半个身位。带 span 的按钮不在那条规则的射程内。 */}
|
||||
<button type="button" className="creation-gallery-arrow is-prev" aria-label="上一张灵感" onClick={() => step(-1)}>
|
||||
<span className="creation-gallery-arrow-icon"><ChevronLeft aria-hidden="true" /></span>
|
||||
<span className="creation-gallery-arrow-icon">
|
||||
<ChevronLeft aria-hidden="true" />
|
||||
</span>
|
||||
</button>
|
||||
<button type="button" className="creation-gallery-arrow is-next" aria-label="下一张灵感" onClick={() => step(1)}>
|
||||
<span className="creation-gallery-arrow-icon"><ChevronRight aria-hidden="true" /></span>
|
||||
<span className="creation-gallery-arrow-icon">
|
||||
<ChevronRight aria-hidden="true" />
|
||||
</span>
|
||||
</button>
|
||||
|
||||
{/* 卡片本身对辅助技术隐藏,切换结果靠这条播报传达。 */}
|
||||
@@ -281,4 +279,4 @@ export function CreationInspirationTunnel({ mode, onStartPrompt }: { mode: Creat
|
||||
</p>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
9
web/src/pages/create/creation-inspirations.ts
Normal file
9
web/src/pages/create/creation-inspirations.ts
Normal file
@@ -0,0 +1,9 @@
|
||||
import { curatedInspirations, inspirationSources } from "@/lib/inspirations/catalog";
|
||||
|
||||
/** Compatibility exports for the original creation page inspiration contract. */
|
||||
export const creationFeaturedWorks = curatedInspirations.map(({ sourceId, credit, ...item }) => ({
|
||||
...item,
|
||||
...(sourceId === "chatgpt-prompts" && credit ? { source: credit } : {}),
|
||||
}));
|
||||
|
||||
export const inspirationSource = inspirationSources["chatgpt-prompts"];
|
||||
Reference in New Issue
Block a user