oil-ui-pro 0.15.4 → 0.22.2(上游 ui.oiloil.org 正式包)+ 记 P0-98 跨盘 rename 坑
- oil-ui-pro 升到 0.22.2:references 13→28 份(新增 16、删 imagery.md)、assets 增 cards/(22 组)与 fonts/、SKILL.md 顶层五步结构未改名。 - 升级路径:官方 `npx github:oil-oil/oil-cli update` 稳定失败(error=replace、报「检查目录权限」)。 真身为 EXDEV —— 解压在 os.tmpdir()(C 盘)、技能目录在 E 盘,Windows 上 rename 不能跨盘; CLI 的 catch 把非 CliError 原生异常一律兜底成 replaceFailed,真错误一个字不吐。 做法=借其 prepare() 只做下载+校验,再 cp 到同盘 stage、rename 交换;官方命令复验 up_to_date。 - 回归:product-planning 按名引用的 visual-review.md/tools.md/design-direction.md/style-explorer.md 全部健在;命名闸门 2061|0|27。 - session-mechanism/references/pitfalls.md 新增 P0-98(含通则:更新器把原生错误兜底成指错方向的人话)。
This commit is contained in:
1 parent
053a6a6723
commit
d9445b5888
126 files changed
+10345
-1401
No files matched your search
@@ -0,0 +1,32 @@
|
||||
.card.deploy-preview {
|
||||
--_card-stage-track-min:320px; aspect-ratio:auto;
|
||||
& > .card-heading { text-wrap:balance; }
|
||||
& .card-stage { display:grid; grid-template-rows:minmax(245px,1fr) auto; padding:0 24px; }
|
||||
& .deploy-window { align-self:center; width:100%; overflow:hidden; background:var(--card-panel); border:1px solid color-mix(in oklab,var(--card-ink) 14%,var(--card-panel)); border-radius:10px; box-shadow:0 8px 18px #18243206; }
|
||||
& .deploy-window-bar { display:flex; justify-content:space-between; gap:12px; align-items:center; flex-wrap:wrap; padding:13px 15px; font:10px/1.4 ui-monospace,monospace; color:var(--card-muted); background:var(--card-wash); border-bottom:1px solid var(--card-line); overflow-wrap:anywhere; }
|
||||
& .deploy-branch { padding:2px 5px; border:1px solid var(--card-line); border-radius:4px; }
|
||||
& .deploy-commit { display:grid; grid-template-columns:24px minmax(0,1fr) auto; gap:8px; align-items:center; padding:18px 15px 14px; }
|
||||
& .deploy-commit > svg { width:22px; height:22px; fill:none; stroke:var(--card-muted); stroke-width:1.3; }
|
||||
& .deploy-commit strong { font-size:12px; line-height:1.5; font-weight:550; overflow-wrap:anywhere; }
|
||||
& .deploy-status { color:var(--_card-accent-ink); background:color-mix(in oklab,var(--card-accent) 8%,var(--card-panel)); font-size:9px; padding:4px 6px; border-radius:20px; white-space:nowrap; }
|
||||
& .deploy-progress { margin:0 16px; height:2px; background:var(--card-line); overflow:hidden; }
|
||||
& .deploy-progress > span { display:block; width:100%; height:100%; background:var(--card-accent); transform:scaleX(var(--build-progress,1)); transform-origin:left; }
|
||||
& .deploy-steps { display:flex; justify-content:space-between; gap:8px; padding:9px 16px 15px; color:var(--card-muted); font-size:9px; line-height:1.5; }
|
||||
& .deploy-steps > span[data-ready="true"] { color:var(--_card-accent-ink); }
|
||||
& .deploy-result { display:grid; grid-template-columns:86px minmax(0,1fr); gap:15px; padding:16px; border-top:1px solid var(--card-line); align-items:center; opacity:calc(.2 + .8*var(--preview-ready,1)); transform:translateY(calc((1 - var(--preview-ready,1))*6px)); }
|
||||
& .deploy-mini { height:82px; background:var(--card-wash); border:1px solid var(--card-line); border-radius:4px; padding:9px; }
|
||||
& .deploy-mini > i { display:block; width:35%; height:3px; background:var(--card-muted); opacity:.35; }
|
||||
& .deploy-mini > div { display:flex; gap:4px; margin:7px 0; }
|
||||
& .deploy-mini b { width:50%; height:33px; border-radius:1px; background:color-mix(in oklab,var(--card-accent) 12%,var(--card-panel)); }
|
||||
& .deploy-mini b:first-child { background:color-mix(in oklab,var(--card-accent) 32%,var(--card-panel)); }
|
||||
& .deploy-mini > span { display:block; height:2px; width:80%; margin-top:4px; background:var(--card-line); }
|
||||
& .deploy-result-copy { display:grid; gap:7px; min-width:0; }
|
||||
& .deploy-result-copy small { color:var(--card-muted); font-size:9px; }
|
||||
& .deploy-result-copy strong { font:11px/1.4 ui-monospace,monospace; overflow-wrap:anywhere; }
|
||||
& .deploy-result-copy > span { color:var(--card-muted); font-size:10px; line-height:1.6; overflow-wrap:anywhere; }
|
||||
& .deploy-history { display:flex; gap:18px; padding:18px 0 24px; }
|
||||
& .deploy-history button { display:flex; gap:7px; align-items:center; padding:0; border:0; background:transparent; color:var(--card-muted); font-size:11px; cursor:pointer; }
|
||||
& .deploy-history i { width:7px; height:7px; border:1px solid var(--card-muted); border-radius:50%; }
|
||||
& .deploy-history button[aria-pressed="true"] { color:var(--card-ink); }
|
||||
& .deploy-history button[aria-pressed="true"] i { background:var(--card-accent); border-color:var(--card-accent); }
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
<article class="card deploy-preview" data-card="deploy-preview" style="--card-accent:#5865c7">
|
||||
<h2 class="card-heading" data-text="title">每一次改动,
|
||||
都能先预览,再分享。</h2>
|
||||
<div class="card-stage"><div class="deploy-window"><div class="deploy-window-bar"><span data-text="project">workspace / website</span><span class="deploy-branch" data-release-field="branch">design/home</span></div><div class="deploy-commit"><svg viewBox="0 0 24 24" aria-hidden="true"><circle cx="7" cy="5" r="2"/><circle cx="7" cy="19" r="2"/><circle cx="18" cy="5" r="2"/><path d="M7 7v10m11-10c0 6-11 1-11 10"/></svg><strong data-release-field="title">更新作品首页</strong><span class="deploy-status" aria-live="polite"></span></div><div class="deploy-progress"><span></span></div><div class="deploy-steps"><span data-text="steps.0">准备资源</span><span data-text="steps.1">完成构建</span><span data-text="steps.2">生成预览</span></div><div class="deploy-result"><div class="deploy-mini" aria-hidden="true"><i></i><div><b></b><b></b></div><span></span><span></span></div><div class="deploy-result-copy"><small data-text="resultLabel">预览地址</small><strong data-release-field="url">preview.workspace.local</strong><span data-text="resultNote">把这一版,分享给一起创作的人。</span></div></div></div>
|
||||
<div class="deploy-history" aria-label="选择预览版本"><button type="button" data-version="0" aria-pressed="true"><i></i><span data-text="versionLabels.0">当前版本</span></button><button type="button" data-version="1" aria-pressed="false"><i></i><span data-text="versionLabels.1">上一版本</span></button></div></div>
|
||||
</article>
|
||||
@@ -0,0 +1,8 @@
|
||||
import {shell,loop,staticMotion,smooth} from '../shared/runtime.js';
|
||||
export function mount(element, options = {}) {
|
||||
const clean=shell(element,options),still=staticMotion(element,options),buttons=[...element.querySelectorAll('[data-version]')],steps=[...element.querySelectorAll('.deploy-steps > span')],status=element.querySelector('.deploy-status'),events=new AbortController();
|
||||
const versions=options.content?.versions || [{title:'更新作品首页',branch:'design/home',url:'preview.workspace.local'},{title:'整理作品目录',branch:'design/collection',url:'archive.workspace.local'}];let clock,index=0,last=-1,destroyed=false;
|
||||
function show(next,animate=false){index=next;const version=versions[index] || {};buttons.forEach((b,i)=>{b.hidden=!versions[i];b.setAttribute('aria-pressed',String(i===index));});element.querySelectorAll('[data-release-field]').forEach(el=>el.textContent=String(version[el.dataset.releaseField] ?? ''));clock?.destroy();last=-1;clock=loop(element,time=>{const t=still()||!animate?2.5:time,progress=smooth(t/2),ready=smooth((t-1.6)/.9);element.style.setProperty('--build-progress',progress);element.style.setProperty('--preview-ready',ready);const stage=t<.65?0:t<1.6?1:2;steps.forEach((s,i)=>s.dataset.ready=String(t>=(i+1)*.6));if(stage!==last){status.textContent=(options.content?.statuses || ['准备中','构建中','预览就绪'])[stage];last=stage;}},{...options,duration:2.5});}
|
||||
buttons.forEach((b,i)=>b.addEventListener('click',()=>show(i),{signal:events.signal}));show(0,true);
|
||||
return{replay(){if(!destroyed)show(index,true);},destroy(){if(destroyed)return;destroyed=true;clock.destroy();events.abort();clean();for(const property of ['--build-progress','--preview-ready'])element.style.removeProperty(property);steps.forEach(step=>delete step.dataset.ready);}};
|
||||
}
|
||||
Reference in new issue
Block a user