Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions BUILD-NOTES.md
Original file line number Diff line number Diff line change
Expand Up @@ -878,3 +878,15 @@ separates fresh final checks, applied-asset viewer proof and final sandbox check
unchanged-source16main/48boundary/no-JS/growth/contrast/fallback evidence. Private fixture databases,
authentication, logs and backup material are excluded. No analytics, customer/financial data,
launch, billing, schema, infrastructure or unrelated runtime behavior changes.

## Limited customer UI approval: artifact detail and template library

The user rejected broad admin redesign adoption. This change adopts only the artifact-detail **arrangement**, keeping the current product shell, type, palette, red Sparkline and StatCard/Audience implementations. The document/sharing pair uses a scoped 2:1 layout at the existing 760px breakpoint and stacks in DOM order below it; native focusable anchors lead to Document, Sharing, Audience, History and Save as template. Real forms, confirmation dialogs, preview security and domain behavior are unchanged.

Only the authenticated `/dashboard/templates` cards are simplified to image, linked title and tags. The separate public catalog renderer is unchanged. Stored/API/preview descriptions and all 20 canonical template/source/thumbnail options are untouched. The redundant Preview button is removed, not the preview action: the existing stretched title link opens it from the whole card.

Library navigation uses native links, styled as tabs, with `library=mine|builtin` and `aria-current=page`; Tab/Enter, reload, back and no-JavaScript navigation work without a new client script. Built-in remains the default because it was the first group before this change, including for accounts with personal templates. Legacy preview URLs select the preview's library; explicit mismatched library/preview pairs show only the chosen library, not a confusing cross-library preview. Successful promotion's existing notice selects My templates. Preview/close preserve the library; switching library clears preview. There was no template-list filter or pagination to replace.

Scoped integration red controls fail on the previous source for missing detail groups, missing library selection and visible card descriptions. Existing assertions move to the explicit personal destination / new query-preserving preview URLs. Browser regressions exercise the existing seven responsive projects, real sandboxed owner preview and JavaScript-disabled library navigation. The style guide documents these two targeted patterns using current primitives; no global redesign, dependency, schema, provider or launch-flag change is included.

Homepage activation is separately authorized after this UI rollout is verified: existing `AA_COMING_SOON=false` selects the already-built HomePage. This PR does not merge/deploy or change that runtime flag. Existing production deployment and rollback safeguards remain required.
8 changes: 8 additions & 0 deletions src/routes/dashboard.ts
Original file line number Diff line number Diff line change
Expand Up @@ -672,6 +672,14 @@ export function registerHumanRoutes(app: HumanApp, context: HumanRoutesContext):
DashboardTemplatesPage({
account: accountView(session.account),
templates,
library:
routeContext.req.query('library') === 'mine' ||
(!routeContext.req.query('library') &&
routeContext.req.query('notice') === 'template_promoted')
? 'mine'
: routeContext.req.query('library') === 'builtin'
? 'builtin'
: undefined,
previewTemplate: await getTemplatePreview(
services,
session.account.id,
Expand Down
54 changes: 30 additions & 24 deletions src/ui/assets/app.css
Original file line number Diff line number Diff line change
Expand Up @@ -573,6 +573,26 @@
grid-template-columns: repeat(auto-fit, minmax(min(100%, 18rem), 1fr));
}

/* Artifact detail only: the document leads, sharing sits beside it when there is room.
Audience keeps its existing widgets and chart below this pair, not a third narrow column. */
.aa-artifact-detail__columns {
display: grid;
min-width: 0;
gap: var(--spacing-aa-4);
align-items: start;
grid-template-columns: minmax(0, 1fr);
}

.aa-artifact-detail__columns > * {
min-width: 0;
}

@media (min-width: 760px) {
.aa-artifact-detail__columns {
grid-template-columns: minmax(0, 2fr) minmax(16rem, 1fr);
}
}

.aa-grid--3 {
grid-template-columns: repeat(auto-fit, minmax(min(100%, 14rem), 1fr));
}
Expand Down Expand Up @@ -3511,10 +3531,7 @@
height: 3rem;
}

/* A column, so the actions row can be pushed to the bottom edge of the tallest card in the row.
Cards already stretch to a common height; without this the Preview buttons sat wherever each
description happened to end, and a one-line description next to a two-line one put two
identical buttons on two different baselines. */
/* Listing cards show only their image, linked title and tags. Full copy stays in the preview. */
.aa-template-card__body {
display: flex;
min-width: 0;
Expand All @@ -3539,8 +3556,7 @@
text-decoration: none;
}

/* The whole card opens the preview; the Preview button is the same destination, named out loud
for a reader scanning for a control. The button sits above this overlay on its own z-index. */
/* One link opens the preview from the whole card; no duplicate Preview control. */
.aa-template-card__link::after {
position: absolute;
inset: 0;
Expand Down Expand Up @@ -3573,26 +3589,16 @@
gap: var(--spacing-aa-2);
}

.aa-template-card__subline {
min-width: 0;
margin: 0;
color: var(--color-aa-muted);
font-size: var(--text-aa-sm);
overflow-wrap: anywhere;
/* Native page links, not script-dependent tabs: reload/back/no-JS retain the library. */
.aa-template-tabs .aa-tab {
text-decoration: none;
white-space: normal;
text-align: center;
}

.aa-template-card__actions {
position: relative;
z-index: 1;
display: flex;
min-width: 0;
max-width: 100%;
flex-wrap: wrap;
justify-content: flex-start;
/* The pin: whatever the description's length, the button sits on the card's bottom edge. */
margin-top: auto;
padding-top: var(--spacing-aa-3);
gap: var(--spacing-aa-2);
.aa-template-tabs .aa-tab[aria-current="page"] {
color: var(--color-aa-accent);
border-bottom-color: var(--color-aa-accent);
}

/* The template preview frame. A framed document has no intrinsic size, so without this it falls
Expand Down
Loading
Loading