desktop editors: edit in place what App Store Connect and Play Console let the owner edit (listings per language for both stores with live counters and the check / scan rules, store details, App info, age rating, App Review, Play store settings, Data safety and App Privacy answers, promotion blocks, catalog names / prices / offers, TestFlight information, scene order); storebound edit (project.edit) saves into the config by path keeping comments and formatting, the listing files and the review contact, dry run with the diff and the checks first; Apply shows each store's dry run in the window; unsaved edits survive tab switches with undo / redo; tests/edit.test.ts, apps/desktop/tests/edits.test.ts, boot check editor case
This commit is contained in:
parent
714352ec18
commit
3cea2af4e1
37 changed files with 3020 additions and 54 deletions
|
|
@ -957,3 +957,52 @@ button.ck.ck-pick[aria-checked="true"] { border-color: var(--accent-solid); box-
|
|||
.crash-msg, .crash-detail { margin: 0; padding: 10px 12px; border-radius: 8px; background: var(--bg-sunken); color: var(--ink); font: 12px/1.5 ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; white-space: pre-wrap; overflow-wrap: anywhere; max-height: 320px; overflow: auto; }
|
||||
.crash-box summary { cursor: pointer; color: var(--ink-2); font-size: 13px; }
|
||||
.crash-box .actions { display: flex; gap: 8px; flex-wrap: wrap; }
|
||||
|
||||
/* ---- editors (ui/Editor.tsx, screens/editors) ---- */
|
||||
.btn-xs { height: 22px; padding: 0 7px; font-size: var(--t-micro); border-radius: 6px; gap: 4px; }
|
||||
.btn-xs svg { width: 12px; height: 12px; }
|
||||
.ed-cols { display: grid; grid-template-columns: repeat(auto-fit, minmax(320px, 1fr)); gap: 18px; align-items: start; }
|
||||
.ed-col { display: flex; flex-direction: column; gap: 12px; min-width: 0; }
|
||||
.ed-col .act-head { flex-wrap: wrap; }
|
||||
.ed-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: 12px 16px; align-items: start; }
|
||||
.ed-grid.three { grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); }
|
||||
.ed-field { display: flex; flex-direction: column; gap: 4px; min-width: 0; }
|
||||
.ed-field .input { width: 100%; max-width: none; }
|
||||
.ed-field textarea.input { min-height: 0; }
|
||||
.ed-field.dirty .input { border-color: var(--accent-line); background: color-mix(in srgb, var(--accent-soft) 45%, var(--surface)); }
|
||||
.ed-head { display: flex; justify-content: space-between; align-items: baseline; gap: 8px; font-size: var(--t-meta); color: var(--muted); }
|
||||
.ed-head label { display: inline-flex; align-items: center; gap: 6px; font-weight: 600; color: var(--ink-2, var(--ink)); }
|
||||
.ed-dot { display: inline-block; width: 7px; height: 7px; border-radius: 50%; background: var(--accent-solid); margin-left: 6px; flex: none; }
|
||||
.ed-count { font-size: var(--t-micro); color: var(--muted); font-variant-numeric: tabular-nums; }
|
||||
.ed-count.warn { color: var(--warn-ink); font-weight: 600; }
|
||||
.ed-count.bad { color: var(--bad-ink); font-weight: 700; }
|
||||
.ed-was { display: flex; align-items: center; justify-content: space-between; gap: 8px; }
|
||||
.ed-was-text { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; min-width: 0; }
|
||||
.ed-issues { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 2px; font-size: var(--t-meta); }
|
||||
.ed-issues li { display: flex; gap: 6px; align-items: flex-start; line-height: 1.4; }
|
||||
.ed-issues li svg { flex: none; margin-top: 2px; }
|
||||
.ed-issues li.error { color: var(--bad-ink); }
|
||||
.ed-issues li.warn { color: var(--warn-ink); }
|
||||
.ed-issues li.info { color: var(--muted); }
|
||||
.ed-bar { position: sticky; bottom: 0; z-index: 5; padding: 10px 14px; border: 1px solid var(--line); border-radius: var(--r); background: var(--surface); box-shadow: 0 -4px 14px rgba(0, 0, 0, .05); }
|
||||
.ed-bar.active { border-color: var(--accent-line); }
|
||||
.ed-review { margin-top: 10px; display: flex; flex-direction: column; gap: 10px; }
|
||||
.ed-review pre, .ed-diff pre { margin: 0; max-height: 320px; overflow: auto; padding: 10px 12px; border-radius: var(--r-sm); background: var(--code-bg); color: var(--code-ink); font: 12px/1.45 var(--mono); white-space: pre-wrap; overflow-wrap: anywhere; }
|
||||
.ed-dry.bad { outline: 1px solid var(--bad-solid); }
|
||||
.ed-changes { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 6px; }
|
||||
.ed-changes li { min-width: 0; overflow-wrap: anywhere; }
|
||||
.ed-from { color: var(--muted); text-decoration: line-through; }
|
||||
.ed-to { color: var(--ink); font-weight: 600; }
|
||||
.ed-diff summary { cursor: pointer; }
|
||||
.ed-apply { display: flex; flex-direction: column; gap: 6px; width: 100%; }
|
||||
.ed-langs { display: flex; flex-direction: column; gap: 12px; }
|
||||
.ed-lang { display: flex; flex-direction: column; gap: 8px; padding: 10px 12px; border: 1px solid var(--line); border-radius: var(--r-sm); }
|
||||
.ed-items { display: flex; flex-direction: column; }
|
||||
.ed-item { border-top: 1px solid var(--line); }
|
||||
.ed-item-head { display: flex; align-items: center; gap: 8px; width: 100%; padding: 10px 14px; background: none; border: 0; color: inherit; text-align: left; cursor: pointer; font: inherit; }
|
||||
.ed-item-head:hover { background: var(--hover); }
|
||||
.ed-item-body { padding: 4px 14px 14px; gap: 12px; }
|
||||
.ed-scenes { list-style: none; margin: 0; padding: 0; }
|
||||
.ed-scenes li { display: grid; grid-template-columns: 28px minmax(80px, 140px) minmax(0, 1fr) auto; gap: 10px; align-items: center; padding: 10px 14px; border-top: 1px solid var(--line); }
|
||||
.ed-scene-frame { min-width: 0; }
|
||||
.rot90 { transform: rotate(90deg); }
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue