@realiizlabs/admin 0.15.6 → 0.15.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{Sidebar-Bo6ANnEY.d.cts → Sidebar-Cx9bvOYi.d.cts} +3 -1
- package/dist/{Sidebar-Bo6ANnEY.d.ts → Sidebar-Cx9bvOYi.d.ts} +3 -1
- package/dist/shell/index.cjs +11 -5
- package/dist/shell/index.cjs.map +1 -1
- package/dist/shell/index.d.cts +5 -4
- package/dist/shell/index.d.ts +5 -4
- package/dist/shell/index.js +11 -5
- package/dist/shell/index.js.map +1 -1
- package/dist/studio/index.cjs +14 -2
- package/dist/studio/index.cjs.map +1 -1
- package/dist/studio/index.d.cts +16 -1
- package/dist/studio/index.d.ts +16 -1
- package/dist/studio/index.js +14 -2
- package/dist/studio/index.js.map +1 -1
- package/dist/studio-ui/index.cjs +77 -25
- package/dist/studio-ui/index.cjs.map +1 -1
- package/dist/studio-ui/index.d.cts +14 -4
- package/dist/studio-ui/index.d.ts +14 -4
- package/dist/studio-ui/index.js +77 -25
- package/dist/studio-ui/index.js.map +1 -1
- package/package.json +2 -2
|
@@ -2,7 +2,7 @@ import * as react from 'react';
|
|
|
2
2
|
import { ReactNode } from 'react';
|
|
3
3
|
import { C as ContentTypeEntry } from '../types-DeHdasdP.cjs';
|
|
4
4
|
import { c as SiteBranding, d as SiteMember } from '../members-nhbRSYyr.cjs';
|
|
5
|
-
import { S as ShellUser, N as NavItem } from '../Sidebar-
|
|
5
|
+
import { S as ShellUser, N as NavItem } from '../Sidebar-Cx9bvOYi.cjs';
|
|
6
6
|
import { a as PullRequestStatus } from '../types-BP5G1myE.cjs';
|
|
7
7
|
export { A as ADMIN_VERSION } from '../version-DMS0azUx.cjs';
|
|
8
8
|
import 'zod';
|
|
@@ -80,8 +80,18 @@ interface StudioUpdate {
|
|
|
80
80
|
notes: string | null;
|
|
81
81
|
}
|
|
82
82
|
/** Exactly what a site's "use server" wrapper file must export. */
|
|
83
|
+
type NudgeOutcome = {
|
|
84
|
+
state: "sent";
|
|
85
|
+
} | {
|
|
86
|
+
state: "unavailable";
|
|
87
|
+
} | {
|
|
88
|
+
state: "error";
|
|
89
|
+
message: string;
|
|
90
|
+
};
|
|
83
91
|
interface StudioActions {
|
|
84
92
|
updateStudio: (number: number) => Promise<MergeOutcome>;
|
|
93
|
+
/** Optional wrapper (sites on older templates may lack it): ask the host to build main again. */
|
|
94
|
+
nudgeBuild?: () => Promise<NudgeOutcome>;
|
|
85
95
|
publishContent: (input: PublishInput) => Promise<PublishResult | never>;
|
|
86
96
|
removeContent: (input: {
|
|
87
97
|
type: string;
|
|
@@ -138,7 +148,7 @@ interface StudioActions {
|
|
|
138
148
|
userId: string;
|
|
139
149
|
}) => Promise<ActionResult>;
|
|
140
150
|
}
|
|
141
|
-
declare const ACTION_NAMES: readonly ["updateStudio", "publishContent", "removeContent", "mergeContentPr", "discardChange", "previewBody", "saveProfile", "saveAvatar", "changePassword", "loadBranding", "saveBranding", "saveBrandingPicture", "loadMe", "loadTeam", "invite", "changeRole", "resend", "remove"];
|
|
151
|
+
declare const ACTION_NAMES: readonly ["updateStudio", "nudgeBuild", "publishContent", "removeContent", "mergeContentPr", "discardChange", "previewBody", "saveProfile", "saveAvatar", "changePassword", "loadBranding", "saveBranding", "saveBrandingPicture", "loadMe", "loadTeam", "invite", "changeRole", "resend", "remove"];
|
|
142
152
|
/** One row of a content list, as the site page loads it from Studio.readers.listItems. */
|
|
143
153
|
interface ListRow {
|
|
144
154
|
slug: string;
|
|
@@ -382,7 +392,7 @@ declare function copyFor(entry: Pick<ContentTypeEntry, "id" | "label" | "singula
|
|
|
382
392
|
};
|
|
383
393
|
|
|
384
394
|
/** Studio's page styles (lists, account tabs, drop zones) — injected once by StudioShellFrame. */
|
|
385
|
-
declare const STUDIO_CSS = "\n/*\n * /admin \u2014 overrides only. Layout, color and components come from\n * @realiizlabs/admin/shell (SHELL_CSS, injected by AdminShell). The Realiiz\n * palette is the package default, so this file just maps the shell's font\n * hooks onto the site's loaded fonts. To rebrand, redeclare tokens here:\n * .rz-admin { --signal: #0a58ca; }\n */\n.rz-admin {\n --rz-font: var(--font-inter), system-ui, sans-serif;\n --rz-font-display: var(--font-space-grotesk), system-ui, sans-serif;\n --rz-font-mono: var(--font-jetbrains-mono), ui-monospace, monospace;\n}\n\n/* Posts table: one wide column for the post (title, slug beneath in small mono) and\n tight fixed columns for the known-width bits. Nothing wraps; the title and slug end in\n an ellipsis with the full text as tooltip. The title opens the live post; the outbound\n arrow sits inline after it and appears on hover (the shell's a:hover .rz-arrow motion). */\n.rz-admin .rz-table--posts { table-layout: fixed; width: 100%; }\n.rz-admin .rz-table--posts td, .rz-admin .rz-table--posts th { white-space: nowrap; overflow: hidden; }\n.rz-admin .rz-col-title { width: auto; }\n.rz-admin .rz-col-date { width: 7.5rem; }\n.rz-admin .rz-col-status { width: 11.5rem; }\n.rz-admin .rz-col-actions { width: 8.5rem; }\n.rz-admin .rz-title-text { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; min-width: 0; }\n.rz-admin .rz-slug { font-family: var(--rz-font-mono); font-size: .78rem; margin-top: .2rem; }\n.rz-admin [data-slugs=\"off\"] .rz-slug { display: none; }\n.rz-admin .rz-toolbar { display: flex; justify-content: flex-end; margin: 0 0 .6rem; }\n.rz-admin .rz-switch { display: inline-flex; align-items: center; gap: .55rem; font-size: .8rem; color: var(--text-secondary); cursor: pointer; user-select: none; }\n.rz-admin .rz-switch input { position: absolute; opacity: 0; width: 1px; height: 1px; }\n.rz-admin .rz-switch__track { position: relative; width: 30px; height: 18px; border-radius: 999px; background: var(--surface-3); transition: background .15s; }\n.rz-admin .rz-switch__thumb { position: absolute; top: 2px; left: 2px; width: 14px; height: 14px; border-radius: 50%; background: #fff; box-shadow: 0 1px 2px rgba(0,0,0,.25); transition: transform .15s; }\n.rz-admin .rz-switch input:checked + .rz-switch__track { background: var(--signal); }\n.rz-admin .rz-switch input:checked + .rz-switch__track .rz-switch__thumb { transform: translateX(12px); }\n.rz-admin .rz-switch input:focus-visible + .rz-switch__track { outline: 2px solid var(--signal); outline-offset: 2px; }\n.rz-admin .rz-switch:hover .rz-switch__label { color: var(--text-primary); }\n.rz-admin .rz-title-link { display: flex; align-items: center; gap: .35em; max-width: 100%; color: inherit; text-decoration: none; }\n.rz-admin .rz-title-link .rz-arrow { opacity: 0; }\n.rz-admin .rz-title-link:hover { color: var(--signal); }\n.rz-admin .rz-title-link:hover .rz-arrow { opacity: 1; }\n/* Phones: the four columns can't share the width, so each row becomes a small card \u2014\n the title on its own line (wrapping to two), the address under it, then date \u00B7 status \u00B7\n actions on one row. Same markup; only the display changes. */\n@media (max-width: 720px) {\n .rz-admin .rz-table--posts, .rz-admin .rz-table--posts tbody { display: block; }\n .rz-admin .rz-table--posts colgroup, .rz-admin .rz-table--posts thead { display: none; }\n .rz-admin .rz-table--posts tr { display: flex; flex-wrap: wrap; align-items: center; gap: .35rem .9rem; padding: .8rem .9rem; border-bottom: 1px solid var(--separator); }\n .rz-admin .rz-table--posts tr:last-child { border-bottom: 0; }\n .rz-admin .rz-table--posts td, .rz-admin .rz-table--posts td.rz-fit { display: block; width: auto; padding: 0; border: 0; white-space: nowrap; overflow: visible; }\n .rz-admin .rz-table--posts .rz-title-cell { flex: 1 1 100%; min-width: 0; margin-bottom: .15rem; white-space: normal; }\n .rz-admin .rz-table--posts .rz-title-cell .rz-title-text { white-space: normal; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; font-weight: 500; color: var(--text-primary); }\n .rz-admin .rz-table--posts .rz-title-link { display: inline; }\n .rz-admin .rz-table--posts .rz-slug { font-weight: 400; color: var(--text-muted); overflow-wrap: anywhere; -webkit-line-clamp: 1; }\n .rz-admin [data-slugs=\"off\"] .rz-table--posts .rz-slug { display: none; }\n .rz-admin .rz-table--posts td.rz-fit { font-size: .85rem; }\n .rz-admin .rz-table--posts td.rz-fit:last-child { margin-left: auto; }\n}\n\n/* Dashboard card for a section that isn't built yet: the real card, faded, buttons disabled. */\n/* Account page (05b): tracker-style \u2014 H1, email, underlined tabs, stacked form cards. */\n.rz-admin .acct-h1 { font-size: 1.25rem; font-weight: 600; margin: 0 0 .25rem; color: var(--text-primary); }\n.rz-admin .acct-email { font-size: .875rem; color: var(--text-muted); margin: 0 0 1.25rem; }\n.rz-admin .acct-stack { display: flex; flex-direction: column; gap: 1rem; max-width: 560px; }\n.rz-admin .acct-stack:has(.acct-team) { max-width: none; }\n.rz-admin .acct-card { display: flex; flex-direction: column; gap: .9rem; }\n.rz-admin .acct-title { font-size: 1rem; font-weight: 600; margin: 0; color: var(--text-primary); }\n.rz-admin .acct-blurb { font-size: .875rem; color: var(--text-secondary); margin: -.4rem 0 0; line-height: 1.5; }\n.rz-admin .acct-blurb--link { margin-top: .6rem; }\n.rz-admin .acct-blurb a { color: var(--signal); text-decoration: underline; text-underline-offset: 3px; }\n.rz-admin .acct-blurb a:hover { color: var(--text-primary); }\n.rz-admin .acct-field { display: flex; flex-direction: column; gap: .35rem; }\n.rz-admin .acct-label { font-size: .85rem; font-weight: 500; color: var(--text-primary); }\n.rz-admin .acct-hint { font-size: .78rem; color: var(--text-muted); }\n.rz-admin .acct-input { font: inherit; font-size: .9rem; color: var(--text-primary); background: var(--surface-0); border: 1px solid var(--border); border-radius: 6px; padding: 9px 11px; min-height: 40px; width: 100%; }\n.rz-admin .acct-input:read-only { color: var(--text-secondary); background: var(--surface-2); }\n.rz-admin .acct-input:focus-visible { outline: 2px solid var(--signal); outline-offset: 1px; }\n.rz-admin .acct-select { width: auto; padding-right: 2rem; }\n.rz-admin .acct-select--sm { min-height: 32px; padding: 4px 28px 4px 8px; font-size: .8rem; }\n.rz-admin .acct-actions { display: flex; align-items: center; gap: 1rem; flex-wrap: wrap; }\n.rz-admin .acct-ok { font-size: .85rem; color: var(--signal); }\n.rz-admin .acct-link { font: inherit; font-size: .82rem; background: none; border: 0; padding: 0; color: var(--text-secondary); text-decoration: underline; text-underline-offset: 3px; cursor: pointer; }\n.rz-admin .acct-link:hover { color: var(--signal); }\n.rz-admin .acct-link--danger:hover { color: #c0392b; }\n.rz-admin .acct-link:disabled { opacity: .5; cursor: default; }\n.rz-admin .acct-team-head { display: flex; align-items: center; justify-content: space-between; gap: 1rem; flex-wrap: wrap; }\n.rz-admin .acct-invite__row { display: flex; gap: .6rem; align-items: center; flex-wrap: wrap; }\n.rz-admin .acct-invite__row .acct-input[type=\"email\"] { flex: 1 1 220px; width: auto; }\n.rz-admin .acct-person { display: flex; align-items: center; gap: .7rem; }\n.rz-admin .acct-person__avatar { width: 32px; height: 32px; border-radius: 50%; background: var(--surface-3); border: 1px solid var(--border); display: inline-flex; align-items: center; justify-content: center; font-size: .7rem; font-weight: 600; overflow: hidden; flex-shrink: 0; }\n.rz-admin .acct-person__avatar img { width: 100%; height: 100%; object-fit: cover; }\n.rz-admin .acct-person__text { display: flex; flex-direction: column; line-height: 1.25; }\n.rz-admin .acct-person__email { font-size: .78rem; }\n.rz-admin .acct-row-actions { display: flex; gap: .8rem; align-items: center; white-space: nowrap; min-height: 34px; }\n.rz-admin .acct-help-list { margin: 0; padding-left: 1.2rem; color: var(--text-secondary); line-height: 1.7; }\n\n/* Sign-in: the password option under the magic-link form. */\n.rz-admin .pwsi-toggle { margin: 1.1rem 0 0; text-align: center; }\n.rz-admin .pwsi { display: flex; flex-direction: column; gap: .9rem; margin-top: 1.25rem; padding-top: 1.25rem; border-top: 1px solid var(--separator); }\n\n/* Password boxes: eye toggle + the requirement checklist that lights up as each rule passes. */\n.rz-admin .acct-pw { position: relative; }\n.rz-admin .acct-pw .acct-input { padding-right: 2.6rem; }\n.rz-admin .acct-pw__eye { position: absolute; right: .5rem; top: 50%; transform: translateY(-50%); background: none; border: 0; padding: .35rem; color: var(--text-muted); cursor: pointer; display: inline-flex; border-radius: 4px; }\n.rz-admin .acct-pw__eye:hover, .rz-admin .acct-pw__eye[aria-pressed=\"true\"] { color: var(--text-secondary); }\n.rz-admin .acct-rules { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: .5rem; }\n.rz-admin .acct-rule { display: flex; align-items: center; gap: .5rem; font-size: .8125rem; color: var(--text-muted); transition: color .15s; }\n.rz-admin .acct-rule--met { color: var(--signal); }\n\n/* Picture uploader (avatar, logo, favicon): one grid everywhere \u2014 preview | buttons row, hint under the buttons. */\n.rz-admin .acct-pic { border: 1px dashed var(--border); border-radius: 8px; padding: 16px 18px; background: var(--surface-0); outline: none; transition: border-color .15s; }\n.rz-admin .acct-pic:focus-visible, .rz-admin .acct-pic--over { border-color: var(--signal); border-style: solid; }\n.rz-admin .acct-pic--busy { opacity: .7; }\n.rz-admin .acct-pic__file { display: none; }\n.rz-admin .acct-pic__empty { display: flex; align-items: center; gap: 14px; flex-wrap: wrap; color: var(--text-muted); }\n.rz-admin .acct-pic__fallback { width: 44px; height: 44px; flex-shrink: 0; display: inline-flex; align-items: center; justify-content: center; border-radius: 8px; background: var(--surface-3); color: var(--text-muted); font-size: .9rem; font-weight: 600; letter-spacing: .04em; }\n.rz-admin .acct-pic__fallback--circle { border-radius: 50%; }\n.rz-admin .acct-pic__or { font-size: .8125rem; }\n.rz-admin .acct-pic__has { display: flex; align-items: flex-start; gap: 16px; }\n.rz-admin .acct-pic__thumb { display: block; width: 96px; height: 96px; object-fit: cover; border-radius: 8px; border: 1px solid var(--border); background: var(--surface-3); flex-shrink: 0; }\n.rz-admin .acct-pic__thumb--circle { border-radius: 50%; }\n.rz-admin .acct-pic__meta { display: flex; flex-direction: column; gap: 10px; min-width: 0; }\n.rz-admin .acct-pic__actions { display: flex; align-items: center; gap: 14px; }\n.rz-admin .acct-pic__remove { font: inherit; font-size: .8125rem; background: none; border: 0; padding: 0; color: var(--text-muted); text-decoration: underline; text-underline-offset: 3px; cursor: pointer; }\n.rz-admin .acct-pic__remove:hover { color: #c0392b; }\n.rz-admin .acct-pic__remove:disabled { cursor: default; opacity: .6; }\n.rz-admin .acct-pic__hint { margin: 10px 0 0; font-size: .75rem; color: var(--text-muted); line-height: 1.4; }\n.rz-admin .acct-pic__has .acct-pic__hint { margin-top: 0; }\n.rz-admin .acct-pic__note { margin: 8px 0 0; }\n.rz-admin .acct-pic__error { margin: 8px 0 0; font-size: .8rem; color: #c0392b; }\n\n/* Branded dropdown (role pickers): a bordered button that opens the shell's menu, checkmark on the current choice. */\n.rz-admin .acct-dd { position: relative; display: inline-block; }\n.rz-admin .acct-dd__btn { display: inline-flex; align-items: center; gap: .5rem; font: inherit; font-size: .85rem; color: var(--text-primary); background: var(--surface-0); border: 1px solid var(--border); border-radius: 6px; padding: 0 .7rem; height: 34px; cursor: pointer; }\n.rz-admin .acct-dd__btn:hover { border-color: var(--text-muted); }\n.rz-admin .acct-dd__btn:focus-visible { outline: 2px solid var(--signal); outline-offset: 1px; }\n.rz-admin .acct-dd__btn:disabled { opacity: .6; cursor: default; }\n.rz-admin .acct-dd__menu { left: 0; right: auto; min-width: 15rem; padding: .3rem 0; }\n.rz-admin .acct-dd__item { align-items: flex-start; }\n.rz-admin .acct-dd__check { width: 1rem; flex-shrink: 0; color: var(--signal); font-weight: 700; }\n.rz-admin .acct-dd__text { display: flex; flex-direction: column; line-height: 1.3; }\n.rz-admin .acct-dd__hint { font-size: .74rem; color: var(--text-muted); }\n/* Team table: everything on one center line, and the role menu may overflow the table (the shell\n clips .rz-table for rounded corners, so round the header cells by hand instead). */\n.rz-admin .acct-team { overflow: visible; }\n.rz-admin .acct-team thead th:first-child { border-top-left-radius: 8px; }\n.rz-admin .acct-team thead th:last-child { border-top-right-radius: 8px; }\n.rz-admin .acct-team tbody tr:last-child td { border-bottom: 0; }\n.rz-admin .acct-team td { vertical-align: middle; }\n.rz-admin .acct-team td > * { vertical-align: middle; }\n.rz-admin .acct-team .rz-pill { position: relative; top: 0; }\n.rz-admin .acct-dd__menu { z-index: 60; }\n.rz-admin .acct-invite__row .acct-dd__btn { height: 40px; }\n\n.rz-admin .rz-term { position: relative; display: inline; }\n.rz-admin .rz-term__word { cursor: help; text-decoration: underline dotted; text-underline-offset: 4px; text-decoration-color: color-mix(in srgb, currentColor 50%, transparent); }\n.rz-admin .rz-term__word:hover, .rz-admin .rz-term__word:focus-visible { text-decoration-color: var(--signal); outline: none; }\n.rz-admin .rz-term__tip { position: absolute; left: 0; top: calc(100% + 8px); z-index: 70; width: 272px; max-width: 80vw; padding: 12px 14px; border-radius: 8px; background: var(--text-primary); color: var(--surface-0); font-size: .8125rem; line-height: 1.4; font-weight: 400; box-shadow: 0 8px 24px rgba(14,23,38,.18); opacity: 0; pointer-events: none; transition: opacity .15s; }\n.rz-admin .rz-term__tip--open { opacity: 1; }\n\n/* ---- Help center ---------------------------------------------------- */\n.rz-admin .rz-help__search { position: relative; margin: 0 0 1.5rem; max-width: 44rem; }\n.rz-admin .rz-help__search svg { position: absolute; left: .9rem; top: 50%; transform: translateY(-50%); color: var(--text-muted); pointer-events: none; }\n.rz-admin .rz-help__search input { width: 100%; padding-left: 2.6rem; font-size: 1rem; }\n.rz-admin .rz-help__body { display: grid; grid-template-columns: 13rem minmax(0, 1fr); gap: 2rem; align-items: start; }\n@media (max-width: 760px) { .rz-admin .rz-help__body { grid-template-columns: 1fr; gap: 1rem; } .rz-admin .rz-help__nav { display: flex; flex-wrap: wrap; gap: .25rem; } }\n.rz-admin .rz-help__nav { position: sticky; top: calc(var(--rz-topbar) + 1rem); display: flex; flex-direction: column; gap: .1rem; }\n.rz-admin .rz-help__navitem { padding: .45rem .75rem; border-radius: 6px; color: var(--text-secondary); text-decoration: none; font-size: .875rem; }\n.rz-admin .rz-help__navitem:hover { background: var(--surface-2); color: var(--text-primary); }\n.rz-admin .rz-help__navitem--active { background: var(--surface-2); color: var(--signal); font-weight: 500; }\n.rz-admin .rz-help__main { max-width: 44rem; min-width: 0; }\n.rz-admin .rz-help__h { font-family: var(--rz-font-display); font-size: 1.5rem; font-weight: 600; letter-spacing: -.01em; margin: 0 0 .35rem; }\n.rz-admin .rz-help__blurb { color: var(--text-secondary); margin: 0 0 1.25rem; }\n.rz-admin .rz-help__count { color: var(--text-muted); font-size: .85rem; margin: 0 0 .75rem; }\n.rz-admin .rz-help__list { list-style: none; margin: 0; padding: 0; display: grid; gap: .6rem; }\n.rz-admin .rz-help__card { display: flex; flex-direction: column; gap: .2rem; padding: .9rem 1rem; background: var(--surface-1); border: 1px solid var(--border); border-radius: var(--rz-radius); text-decoration: none; color: inherit; transition: border-color .15s; }\n.rz-admin .rz-help__card:hover { border-color: var(--signal); }\n.rz-admin .rz-help__meta { font-family: var(--rz-font-mono); font-size: .65rem; text-transform: uppercase; letter-spacing: .08em; color: var(--text-muted); }\n.rz-admin .rz-help__title { font-weight: 600; color: var(--text-primary); }\n.rz-admin .rz-help__summary { color: var(--text-secondary); font-size: .9rem; line-height: 1.5; }\n.rz-admin .rz-help__crumb { display: inline-flex; align-items: center; gap: .35rem; font-family: var(--rz-font-mono); font-size: .75rem; text-transform: uppercase; letter-spacing: .08em; color: var(--text-muted); text-decoration: none; margin: 0 0 1rem; }\n.rz-admin .rz-help__crumb:hover { color: var(--signal); }\n.rz-admin .rz-help__prose { line-height: 1.65; color: var(--text-primary); }\n.rz-admin .rz-help__prose > * + * { margin-top: .85rem; }\n.rz-admin .rz-help__prose h2 { font-family: var(--rz-font-display); font-size: 1.1rem; font-weight: 600; margin-top: 1.75rem; }\n.rz-admin .rz-help__prose h3 { font-size: .95rem; font-weight: 600; margin-top: 1.25rem; }\n.rz-admin .rz-help__prose p, .rz-admin .rz-help__prose li { color: var(--text-secondary); }\n.rz-admin .rz-help__prose strong { color: var(--text-primary); font-weight: 600; }\n.rz-admin .rz-help__prose ul, .rz-admin .rz-help__prose ol { padding-left: 1.35rem; }\n.rz-admin .rz-help__prose li + li { margin-top: .3rem; }\n.rz-admin .rz-help__prose code { font-family: var(--rz-font-mono); font-size: .85em; background: var(--surface-2); border: 1px solid var(--border); border-radius: 4px; padding: .05em .35em; }\n.rz-admin .rz-help__prose pre { background: var(--surface-2); border: 1px solid var(--border); border-radius: var(--rz-radius); padding: .8rem 1rem; overflow-x: auto; }\n.rz-admin .rz-help__prose pre code { background: transparent; border: 0; padding: 0; font-size: .82rem; line-height: 1.55; }\n.rz-admin .rz-help__prose blockquote { margin: 0; padding: .2rem 0 .2rem 1rem; border-left: 3px solid var(--signal); color: var(--text-secondary); }\n.rz-admin .rz-help__prose a { color: var(--signal); text-decoration: none; }\n.rz-admin .rz-help__prose a:hover { color: var(--text-primary); }\n.rz-admin .rz-help__prose .rz-table td { white-space: normal; color: var(--text-secondary); }\n.rz-admin .rz-help__pager { display: flex; justify-content: space-between; gap: 1rem; margin-top: 2.5rem; padding-top: 1rem; border-top: 1px solid var(--separator); font-size: .875rem; }\n.rz-admin .rz-help__pager a { display: inline-flex; align-items: center; gap: .35rem; color: var(--text-secondary); text-decoration: none; }\n.rz-admin .rz-help__pager a:hover { color: var(--signal); }\n.rz-admin .rz-arrow--back { transform: none; }\n@media (prefers-reduced-motion: no-preference) { .rz-admin a:hover .rz-arrow--back { transform: translateX(-4px); } }\n\n/* ---- Studio update strip / Settings \u2192 Studio ---------------------------- */\n.rz-admin .rz-update { border: 1px solid color-mix(in srgb, var(--signal) 22%, var(--border)); border-radius: 8px; background: color-mix(in srgb, var(--signal) 5%, var(--surface-1)); padding: .75rem 1.1rem; }\n.rz-admin .rz-update--strip { margin: 0 0 1.5rem; }\n.rz-admin .rz-update__row { display: flex; flex-wrap: wrap; align-items: center; gap: .5rem 1.1rem; }\n.rz-admin .rz-update__title { display: inline-flex; align-items: center; gap: .55rem; font-weight: 600; color: var(--text-primary); }\n.rz-admin .rz-update__title::before { content: \"\"; width: 8px; height: 8px; border-radius: 50%; background: var(--signal); box-shadow: 0 0 0 3px color-mix(in srgb, var(--signal) 18%, transparent); }\n.rz-admin .rz-update__link { display: inline-flex; align-items: center; gap: .3rem; background: none; border: 0; padding: 0; font: inherit; font-size: .875rem; color: var(--signal); cursor: pointer; text-decoration: none; }\n.rz-admin .rz-update__link:hover { color: var(--text-primary); }\n.rz-admin .rz-update__later { margin-left: auto; background: none; border: 0; padding: 0; font: inherit; font-size: .8rem; color: var(--text-muted); cursor: pointer; }\n.rz-admin .rz-update__later:hover { color: var(--text-primary); }\n.rz-admin .rz-update__notes { margin: .6rem 0 0; font-size: .875rem; line-height: 1.55; color: var(--text-secondary); white-space: pre-line; }\n.rz-admin .rz-update__problem { margin: .6rem 0 0; font-size: .875rem; color: var(--status-down); }\n.rz-admin .rz-update__done { display: block; margin-top: .5rem; font-size: .875rem; color: var(--text-secondary); }\n";
|
|
395
|
+
declare const STUDIO_CSS = "\n/*\n * /admin \u2014 overrides only. Layout, color and components come from\n * @realiizlabs/admin/shell (SHELL_CSS, injected by AdminShell). The Realiiz\n * palette is the package default, so this file just maps the shell's font\n * hooks onto the site's loaded fonts. To rebrand, redeclare tokens here:\n * .rz-admin { --signal: #0a58ca; }\n */\n.rz-admin {\n --rz-font: var(--font-inter), system-ui, sans-serif;\n --rz-font-display: var(--font-space-grotesk), system-ui, sans-serif;\n --rz-font-mono: var(--font-jetbrains-mono), ui-monospace, monospace;\n}\n\n/* Posts table: one wide column for the post (title, slug beneath in small mono) and\n tight fixed columns for the known-width bits. Nothing wraps; the title and slug end in\n an ellipsis with the full text as tooltip. The title opens the live post; the outbound\n arrow sits inline after it and appears on hover (the shell's a:hover .rz-arrow motion). */\n.rz-admin .rz-table--posts { table-layout: fixed; width: 100%; }\n.rz-admin .rz-table--posts td, .rz-admin .rz-table--posts th { white-space: nowrap; overflow: hidden; }\n.rz-admin .rz-col-title { width: auto; }\n.rz-admin .rz-col-date { width: 7.5rem; }\n.rz-admin .rz-col-status { width: 11.5rem; }\n.rz-admin .rz-col-actions { width: 8.5rem; }\n.rz-admin .rz-title-text { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; min-width: 0; }\n.rz-admin .rz-slug { font-family: var(--rz-font-mono); font-size: .78rem; margin-top: .2rem; }\n.rz-admin [data-slugs=\"off\"] .rz-slug { display: none; }\n.rz-admin .rz-toolbar { display: flex; justify-content: flex-end; margin: 0 0 .6rem; }\n.rz-admin .rz-switch { display: inline-flex; align-items: center; gap: .55rem; font-size: .8rem; color: var(--text-secondary); cursor: pointer; user-select: none; }\n.rz-admin .rz-switch input { position: absolute; opacity: 0; width: 1px; height: 1px; }\n.rz-admin .rz-switch__track { position: relative; width: 30px; height: 18px; border-radius: 999px; background: var(--surface-3); transition: background .15s; }\n.rz-admin .rz-switch__thumb { position: absolute; top: 2px; left: 2px; width: 14px; height: 14px; border-radius: 50%; background: #fff; box-shadow: 0 1px 2px rgba(0,0,0,.25); transition: transform .15s; }\n.rz-admin .rz-switch input:checked + .rz-switch__track { background: var(--signal); }\n.rz-admin .rz-switch input:checked + .rz-switch__track .rz-switch__thumb { transform: translateX(12px); }\n.rz-admin .rz-switch input:focus-visible + .rz-switch__track { outline: 2px solid var(--signal); outline-offset: 2px; }\n.rz-admin .rz-switch:hover .rz-switch__label { color: var(--text-primary); }\n.rz-admin .rz-title-link { display: flex; align-items: center; gap: .35em; max-width: 100%; color: inherit; text-decoration: none; }\n.rz-admin .rz-title-link .rz-arrow { opacity: 0; }\n.rz-admin .rz-title-link:hover { color: var(--signal); }\n.rz-admin .rz-title-link:hover .rz-arrow { opacity: 1; }\n/* Phones: the four columns can't share the width, so each row becomes a small card \u2014\n the title on its own line (wrapping to two), the address under it, then date \u00B7 status \u00B7\n actions on one row. Same markup; only the display changes. */\n@media (max-width: 720px) {\n .rz-admin .rz-table--posts, .rz-admin .rz-table--posts tbody { display: block; }\n .rz-admin .rz-table--posts colgroup, .rz-admin .rz-table--posts thead { display: none; }\n .rz-admin .rz-table--posts tr { display: flex; flex-wrap: wrap; align-items: center; gap: .35rem .9rem; padding: .8rem .9rem; border-bottom: 1px solid var(--separator); }\n .rz-admin .rz-table--posts tr:last-child { border-bottom: 0; }\n .rz-admin .rz-table--posts td, .rz-admin .rz-table--posts td.rz-fit { display: block; width: auto; padding: 0; border: 0; white-space: nowrap; overflow: visible; }\n .rz-admin .rz-table--posts .rz-title-cell { flex: 1 1 100%; min-width: 0; margin-bottom: .15rem; white-space: normal; }\n .rz-admin .rz-table--posts .rz-title-cell .rz-title-text { white-space: normal; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; font-weight: 500; color: var(--text-primary); }\n .rz-admin .rz-table--posts .rz-title-link { display: inline; }\n .rz-admin .rz-table--posts .rz-slug { font-weight: 400; color: var(--text-muted); overflow-wrap: anywhere; -webkit-line-clamp: 1; }\n .rz-admin [data-slugs=\"off\"] .rz-table--posts .rz-slug { display: none; }\n .rz-admin .rz-table--posts td.rz-fit { font-size: .85rem; }\n .rz-admin .rz-table--posts td.rz-fit:last-child { margin-left: auto; }\n}\n\n/* Dashboard card for a section that isn't built yet: the real card, faded, buttons disabled. */\n/* Account page (05b): tracker-style \u2014 H1, email, underlined tabs, stacked form cards. */\n.rz-admin .acct-h1 { font-size: 1.25rem; font-weight: 600; margin: 0 0 .25rem; color: var(--text-primary); }\n.rz-admin .acct-email { font-size: .875rem; color: var(--text-muted); margin: 0 0 1.25rem; }\n.rz-admin .acct-stack { display: flex; flex-direction: column; gap: 1rem; max-width: 560px; }\n.rz-admin .acct-stack:has(.acct-team) { max-width: none; }\n.rz-admin .acct-card { display: flex; flex-direction: column; gap: .9rem; }\n.rz-admin .acct-title { font-size: 1rem; font-weight: 600; margin: 0; color: var(--text-primary); }\n.rz-admin .acct-blurb { font-size: .875rem; color: var(--text-secondary); margin: -.4rem 0 0; line-height: 1.5; }\n.rz-admin .acct-blurb--link { margin-top: .6rem; }\n.rz-admin .acct-blurb a { color: var(--signal); text-decoration: underline; text-underline-offset: 3px; }\n.rz-admin .acct-blurb a:hover { color: var(--text-primary); }\n.rz-admin .acct-field { display: flex; flex-direction: column; gap: .35rem; }\n.rz-admin .acct-label { font-size: .85rem; font-weight: 500; color: var(--text-primary); }\n.rz-admin .acct-hint { font-size: .78rem; color: var(--text-muted); }\n.rz-admin .acct-input { font: inherit; font-size: .9rem; color: var(--text-primary); background: var(--surface-0); border: 1px solid var(--border); border-radius: 6px; padding: 9px 11px; min-height: 40px; width: 100%; }\n.rz-admin .acct-input:read-only { color: var(--text-secondary); background: var(--surface-2); }\n.rz-admin .acct-input:focus-visible { outline: 2px solid var(--signal); outline-offset: 1px; }\n.rz-admin .acct-select { width: auto; padding-right: 2rem; }\n.rz-admin .acct-select--sm { min-height: 32px; padding: 4px 28px 4px 8px; font-size: .8rem; }\n.rz-admin .acct-actions { display: flex; align-items: center; gap: 1rem; flex-wrap: wrap; }\n.rz-admin .acct-ok { font-size: .85rem; color: var(--signal); }\n.rz-admin .acct-link { font: inherit; font-size: .82rem; background: none; border: 0; padding: 0; color: var(--text-secondary); text-decoration: underline; text-underline-offset: 3px; cursor: pointer; }\n.rz-admin .acct-link:hover { color: var(--signal); }\n.rz-admin .acct-link--danger:hover { color: #c0392b; }\n.rz-admin .acct-link:disabled { opacity: .5; cursor: default; }\n.rz-admin .acct-team-head { display: flex; align-items: center; justify-content: space-between; gap: 1rem; flex-wrap: wrap; }\n.rz-admin .acct-invite__row { display: flex; gap: .6rem; align-items: center; flex-wrap: wrap; }\n.rz-admin .acct-invite__row .acct-input[type=\"email\"] { flex: 1 1 220px; width: auto; }\n.rz-admin .acct-person { display: flex; align-items: center; gap: .7rem; }\n.rz-admin .acct-person__avatar { width: 32px; height: 32px; border-radius: 50%; background: var(--surface-3); border: 1px solid var(--border); display: inline-flex; align-items: center; justify-content: center; font-size: .7rem; font-weight: 600; overflow: hidden; flex-shrink: 0; }\n.rz-admin .acct-person__avatar img { width: 100%; height: 100%; object-fit: cover; }\n.rz-admin .acct-person__text { display: flex; flex-direction: column; line-height: 1.25; }\n.rz-admin .acct-person__email { font-size: .78rem; }\n.rz-admin .acct-row-actions { display: flex; gap: .8rem; align-items: center; white-space: nowrap; min-height: 34px; }\n.rz-admin .acct-help-list { margin: 0; padding-left: 1.2rem; color: var(--text-secondary); line-height: 1.7; }\n\n/* Sign-in: the password option under the magic-link form. */\n.rz-admin .pwsi-toggle { margin: 1.1rem 0 0; text-align: center; }\n.rz-admin .pwsi { display: flex; flex-direction: column; gap: .9rem; margin-top: 1.25rem; padding-top: 1.25rem; border-top: 1px solid var(--separator); }\n\n/* Password boxes: eye toggle + the requirement checklist that lights up as each rule passes. */\n.rz-admin .acct-pw { position: relative; }\n.rz-admin .acct-pw .acct-input { padding-right: 2.6rem; }\n.rz-admin .acct-pw__eye { position: absolute; right: .5rem; top: 50%; transform: translateY(-50%); background: none; border: 0; padding: .35rem; color: var(--text-muted); cursor: pointer; display: inline-flex; border-radius: 4px; }\n.rz-admin .acct-pw__eye:hover, .rz-admin .acct-pw__eye[aria-pressed=\"true\"] { color: var(--text-secondary); }\n.rz-admin .acct-rules { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: .5rem; }\n.rz-admin .acct-rule { display: flex; align-items: center; gap: .5rem; font-size: .8125rem; color: var(--text-muted); transition: color .15s; }\n.rz-admin .acct-rule--met { color: var(--signal); }\n\n/* Picture uploader (avatar, logo, favicon): one grid everywhere \u2014 preview | buttons row, hint under the buttons. */\n.rz-admin .acct-pic { border: 1px dashed var(--border); border-radius: 8px; padding: 16px 18px; background: var(--surface-0); outline: none; transition: border-color .15s; }\n.rz-admin .acct-pic:focus-visible, .rz-admin .acct-pic--over { border-color: var(--signal); border-style: solid; }\n.rz-admin .acct-pic--busy { opacity: .7; }\n.rz-admin .acct-pic__file { display: none; }\n.rz-admin .acct-pic__empty { display: flex; align-items: center; gap: 14px; flex-wrap: wrap; color: var(--text-muted); }\n.rz-admin .acct-pic__fallback { width: 44px; height: 44px; flex-shrink: 0; display: inline-flex; align-items: center; justify-content: center; border-radius: 8px; background: var(--surface-3); color: var(--text-muted); font-size: .9rem; font-weight: 600; letter-spacing: .04em; }\n.rz-admin .acct-pic__fallback--circle { border-radius: 50%; }\n.rz-admin .acct-pic__or { font-size: .8125rem; }\n.rz-admin .acct-pic__has { display: flex; align-items: flex-start; gap: 16px; }\n.rz-admin .acct-pic__thumb { display: block; width: 96px; height: 96px; object-fit: cover; border-radius: 8px; border: 1px solid var(--border); background: var(--surface-3); flex-shrink: 0; }\n.rz-admin .acct-pic__thumb--circle { border-radius: 50%; }\n.rz-admin .acct-pic__meta { display: flex; flex-direction: column; gap: 10px; min-width: 0; }\n.rz-admin .acct-pic__actions { display: flex; align-items: center; gap: 14px; }\n.rz-admin .acct-pic__remove { font: inherit; font-size: .8125rem; background: none; border: 0; padding: 0; color: var(--text-muted); text-decoration: underline; text-underline-offset: 3px; cursor: pointer; }\n.rz-admin .acct-pic__remove:hover { color: #c0392b; }\n.rz-admin .acct-pic__remove:disabled { cursor: default; opacity: .6; }\n.rz-admin .acct-pic__hint { margin: 10px 0 0; font-size: .75rem; color: var(--text-muted); line-height: 1.4; }\n.rz-admin .acct-pic__has .acct-pic__hint { margin-top: 0; }\n.rz-admin .acct-pic__note { margin: 8px 0 0; }\n.rz-admin .acct-pic__error { margin: 8px 0 0; font-size: .8rem; color: #c0392b; }\n\n/* Branded dropdown (role pickers): a bordered button that opens the shell's menu, checkmark on the current choice. */\n.rz-admin .acct-dd { position: relative; display: inline-block; }\n.rz-admin .acct-dd__btn { display: inline-flex; align-items: center; gap: .5rem; font: inherit; font-size: .85rem; color: var(--text-primary); background: var(--surface-0); border: 1px solid var(--border); border-radius: 6px; padding: 0 .7rem; height: 34px; cursor: pointer; }\n.rz-admin .acct-dd__btn:hover { border-color: var(--text-muted); }\n.rz-admin .acct-dd__btn:focus-visible { outline: 2px solid var(--signal); outline-offset: 1px; }\n.rz-admin .acct-dd__btn:disabled { opacity: .6; cursor: default; }\n.rz-admin .acct-dd__menu { left: 0; right: auto; min-width: 15rem; padding: .3rem 0; }\n.rz-admin .acct-dd__item { align-items: flex-start; }\n.rz-admin .acct-dd__check { width: 1rem; flex-shrink: 0; color: var(--signal); font-weight: 700; }\n.rz-admin .acct-dd__text { display: flex; flex-direction: column; line-height: 1.3; }\n.rz-admin .acct-dd__hint { font-size: .74rem; color: var(--text-muted); }\n/* Team table: everything on one center line, and the role menu may overflow the table (the shell\n clips .rz-table for rounded corners, so round the header cells by hand instead). */\n.rz-admin .acct-team { overflow: visible; }\n.rz-admin .acct-team thead th:first-child { border-top-left-radius: 8px; }\n.rz-admin .acct-team thead th:last-child { border-top-right-radius: 8px; }\n.rz-admin .acct-team tbody tr:last-child td { border-bottom: 0; }\n.rz-admin .acct-team td { vertical-align: middle; }\n.rz-admin .acct-team td > * { vertical-align: middle; }\n.rz-admin .acct-team .rz-pill { position: relative; top: 0; }\n.rz-admin .acct-dd__menu { z-index: 60; }\n.rz-admin .acct-invite__row .acct-dd__btn { height: 40px; }\n\n.rz-admin .rz-term { position: relative; display: inline; }\n.rz-admin .rz-term__word { cursor: help; text-decoration: underline dotted; text-underline-offset: 4px; text-decoration-color: color-mix(in srgb, currentColor 50%, transparent); }\n.rz-admin .rz-term__word:hover, .rz-admin .rz-term__word:focus-visible { text-decoration-color: var(--signal); outline: none; }\n.rz-admin .rz-term__tip { position: absolute; left: 0; top: calc(100% + 8px); z-index: 70; width: 272px; max-width: 80vw; padding: 12px 14px; border-radius: 8px; background: var(--text-primary); color: var(--surface-0); font-size: .8125rem; line-height: 1.4; font-weight: 400; box-shadow: 0 8px 24px rgba(14,23,38,.18); opacity: 0; pointer-events: none; transition: opacity .15s; }\n.rz-admin .rz-term__tip--open { opacity: 1; }\n\n/* ---- Help center ---------------------------------------------------- */\n.rz-admin .rz-help__search { position: relative; margin: 0 0 1.5rem; max-width: 44rem; }\n.rz-admin .rz-help__search svg { position: absolute; left: .9rem; top: 50%; transform: translateY(-50%); color: var(--text-muted); pointer-events: none; }\n.rz-admin .rz-help__search input { width: 100%; padding-left: 2.6rem; font-size: 1rem; }\n.rz-admin .rz-help__body { display: grid; grid-template-columns: 13rem minmax(0, 1fr); gap: 2rem; align-items: start; }\n@media (max-width: 760px) { .rz-admin .rz-help__body { grid-template-columns: 1fr; gap: 1rem; } .rz-admin .rz-help__nav { display: flex; flex-wrap: wrap; gap: .25rem; } }\n.rz-admin .rz-help__nav { position: sticky; top: calc(var(--rz-topbar) + 1rem); display: flex; flex-direction: column; gap: .1rem; }\n.rz-admin .rz-help__navitem { padding: .45rem .75rem; border-radius: 6px; color: var(--text-secondary); text-decoration: none; font-size: .875rem; }\n.rz-admin .rz-help__navitem:hover { background: var(--surface-2); color: var(--text-primary); }\n.rz-admin .rz-help__navitem--active { background: var(--surface-2); color: var(--signal); font-weight: 500; }\n.rz-admin .rz-help__main { max-width: 44rem; min-width: 0; }\n.rz-admin .rz-help__h { font-family: var(--rz-font-display); font-size: 1.5rem; font-weight: 600; letter-spacing: -.01em; margin: 0 0 .35rem; }\n.rz-admin .rz-help__blurb { color: var(--text-secondary); margin: 0 0 1.25rem; }\n.rz-admin .rz-help__count { color: var(--text-muted); font-size: .85rem; margin: 0 0 .75rem; }\n.rz-admin .rz-help__list { list-style: none; margin: 0; padding: 0; display: grid; gap: .6rem; }\n.rz-admin .rz-help__card { display: flex; flex-direction: column; gap: .2rem; padding: .9rem 1rem; background: var(--surface-1); border: 1px solid var(--border); border-radius: var(--rz-radius); text-decoration: none; color: inherit; transition: border-color .15s; }\n.rz-admin .rz-help__card:hover { border-color: var(--signal); }\n.rz-admin .rz-help__meta { font-family: var(--rz-font-mono); font-size: .65rem; text-transform: uppercase; letter-spacing: .08em; color: var(--text-muted); }\n.rz-admin .rz-help__title { font-weight: 600; color: var(--text-primary); }\n.rz-admin .rz-help__summary { color: var(--text-secondary); font-size: .9rem; line-height: 1.5; }\n.rz-admin .rz-help__crumb { display: inline-flex; align-items: center; gap: .35rem; font-family: var(--rz-font-mono); font-size: .75rem; text-transform: uppercase; letter-spacing: .08em; color: var(--text-muted); text-decoration: none; margin: 0 0 1rem; }\n.rz-admin .rz-help__crumb:hover { color: var(--signal); }\n.rz-admin .rz-help__prose { line-height: 1.65; color: var(--text-primary); }\n.rz-admin .rz-help__prose > * + * { margin-top: .85rem; }\n.rz-admin .rz-help__prose h2 { font-family: var(--rz-font-display); font-size: 1.1rem; font-weight: 600; margin-top: 1.75rem; }\n.rz-admin .rz-help__prose h3 { font-size: .95rem; font-weight: 600; margin-top: 1.25rem; }\n.rz-admin .rz-help__prose p, .rz-admin .rz-help__prose li { color: var(--text-secondary); }\n.rz-admin .rz-help__prose strong { color: var(--text-primary); font-weight: 600; }\n.rz-admin .rz-help__prose ul, .rz-admin .rz-help__prose ol { padding-left: 1.35rem; }\n.rz-admin .rz-help__prose li + li { margin-top: .3rem; }\n.rz-admin .rz-help__prose code { font-family: var(--rz-font-mono); font-size: .85em; background: var(--surface-2); border: 1px solid var(--border); border-radius: 4px; padding: .05em .35em; }\n.rz-admin .rz-help__prose pre { background: var(--surface-2); border: 1px solid var(--border); border-radius: var(--rz-radius); padding: .8rem 1rem; overflow-x: auto; }\n.rz-admin .rz-help__prose pre code { background: transparent; border: 0; padding: 0; font-size: .82rem; line-height: 1.55; }\n.rz-admin .rz-help__prose blockquote { margin: 0; padding: .2rem 0 .2rem 1rem; border-left: 3px solid var(--signal); color: var(--text-secondary); }\n.rz-admin .rz-help__prose a { color: var(--signal); text-decoration: none; }\n.rz-admin .rz-help__prose a:hover { color: var(--text-primary); }\n.rz-admin .rz-help__prose .rz-table td { white-space: normal; color: var(--text-secondary); }\n.rz-admin .rz-help__pager { display: flex; justify-content: space-between; gap: 1rem; margin-top: 2.5rem; padding-top: 1rem; border-top: 1px solid var(--separator); font-size: .875rem; }\n.rz-admin .rz-help__pager a { display: inline-flex; align-items: center; gap: .35rem; color: var(--text-secondary); text-decoration: none; }\n.rz-admin .rz-help__pager a:hover { color: var(--signal); }\n.rz-admin .rz-arrow--back { transform: none; }\n@media (prefers-reduced-motion: no-preference) { .rz-admin a:hover .rz-arrow--back { transform: translateX(-4px); } }\n\n/* ---- Studio update strip / Settings \u2192 Studio ---------------------------- */\n.rz-admin .rz-update { border: 1px solid color-mix(in srgb, var(--signal) 22%, var(--border)); border-radius: 8px; background: color-mix(in srgb, var(--signal) 5%, var(--surface-1)); padding: .75rem 1.1rem; }\n.rz-admin .rz-update--strip { margin: 0 0 1.5rem; }\n.rz-admin .rz-update__row { display: flex; flex-wrap: wrap; align-items: center; gap: .5rem 1.1rem; }\n.rz-admin .rz-update__title { display: inline-flex; align-items: center; gap: .55rem; font-weight: 600; color: var(--text-primary); }\n.rz-admin .rz-update--line { display: flex; flex-wrap: wrap; align-items: center; gap: .35rem 1rem; padding: .55rem 1.1rem; font-size: .875rem; }\n.rz-admin .rz-update--line .rz-update__later { margin-left: auto; }\n.rz-admin .rz-update__row .rz-update__done { flex: 1; margin-top: .5rem; }\n.rz-admin .rz-update__row .rz-update__later { align-self: flex-end; margin-top: .5rem; }\n.rz-admin .rz-update__title::before { content: \"\"; width: 8px; height: 8px; border-radius: 50%; background: var(--signal); box-shadow: 0 0 0 3px color-mix(in srgb, var(--signal) 18%, transparent); }\n.rz-admin .rz-update__link { display: inline-flex; align-items: center; gap: .3rem; background: none; border: 0; padding: 0; font: inherit; font-size: .875rem; color: var(--signal); cursor: pointer; text-decoration: none; }\n.rz-admin .rz-update__link:hover { color: var(--text-primary); }\n.rz-admin .rz-update__later { margin-left: auto; background: none; border: 0; padding: 0; font: inherit; font-size: .8rem; color: var(--text-muted); cursor: pointer; }\n.rz-admin .rz-update__later:hover { color: var(--text-primary); }\n.rz-admin .rz-update__notes { margin: .6rem 0 0; font-size: .875rem; line-height: 1.55; color: var(--text-secondary); white-space: pre-line; }\n.rz-admin .rz-update__problem { margin: .6rem 0 0; font-size: .875rem; color: var(--status-down); }\n.rz-admin .rz-update__done { display: block; margin-top: .5rem; font-size: .875rem; color: var(--text-secondary); }\n";
|
|
386
396
|
|
|
387
397
|
/**
|
|
388
398
|
* Plain-English facts about how Studio works — the text a site's help
|
|
@@ -475,4 +485,4 @@ declare function searchHelp(query: string, articles?: HelpArticle[]): HelpHit[];
|
|
|
475
485
|
/** Every article as plain text, section by section — what STUDIO_FACTS carries to the assistant. */
|
|
476
486
|
declare function helpAsText(vars?: HelpVars): string;
|
|
477
487
|
|
|
478
|
-
export { ACTION_NAMES, type ActionResult, ContentEditor, type DiscardOutcome, GLOSSARY, HELP_ARTICLES, HELP_SECTIONS, type HelpArticle, type HelpSection, type HelpSectionId, type ImagePayload, InstallTracker, type Installing, Jargon, type ListRow, type MergeOutcome, type PendingSummary, type PublishInput, PublishPanel, RemoveItem, STUDIO_CSS, STUDIO_FACTS, StudioAcceptInvite, StudioAccount, type StudioActions, type StudioContextValue, StudioDashboard, StudioEdit, StudioHelp, StudioList, StudioNew, StudioNoAccess, StudioNotConfigured, StudioProvider, StudioPullRequest, StudioShellFrame, StudioSignIn, StudioTerm, type StudioUpdate, type TeamState, UpdateBody, UpdateStrip, canSeeUpdates, copyFor, fillVars, helpAsText, joinTypes, publicDirOf, searchHelp, useEntry, useInstalling, useStudio };
|
|
488
|
+
export { ACTION_NAMES, type ActionResult, ContentEditor, type DiscardOutcome, GLOSSARY, HELP_ARTICLES, HELP_SECTIONS, type HelpArticle, type HelpSection, type HelpSectionId, type ImagePayload, InstallTracker, type Installing, Jargon, type ListRow, type MergeOutcome, type NudgeOutcome, type PendingSummary, type PublishInput, PublishPanel, RemoveItem, STUDIO_CSS, STUDIO_FACTS, StudioAcceptInvite, StudioAccount, type StudioActions, type StudioContextValue, StudioDashboard, StudioEdit, StudioHelp, StudioList, StudioNew, StudioNoAccess, StudioNotConfigured, StudioProvider, StudioPullRequest, StudioShellFrame, StudioSignIn, StudioTerm, type StudioUpdate, type TeamState, UpdateBody, UpdateStrip, canSeeUpdates, copyFor, fillVars, helpAsText, joinTypes, publicDirOf, searchHelp, useEntry, useInstalling, useStudio };
|
|
@@ -2,7 +2,7 @@ import * as react from 'react';
|
|
|
2
2
|
import { ReactNode } from 'react';
|
|
3
3
|
import { C as ContentTypeEntry } from '../types-DeHdasdP.js';
|
|
4
4
|
import { c as SiteBranding, d as SiteMember } from '../members-nhbRSYyr.js';
|
|
5
|
-
import { S as ShellUser, N as NavItem } from '../Sidebar-
|
|
5
|
+
import { S as ShellUser, N as NavItem } from '../Sidebar-Cx9bvOYi.js';
|
|
6
6
|
import { a as PullRequestStatus } from '../types-BP5G1myE.js';
|
|
7
7
|
export { A as ADMIN_VERSION } from '../version-DMS0azUx.js';
|
|
8
8
|
import 'zod';
|
|
@@ -80,8 +80,18 @@ interface StudioUpdate {
|
|
|
80
80
|
notes: string | null;
|
|
81
81
|
}
|
|
82
82
|
/** Exactly what a site's "use server" wrapper file must export. */
|
|
83
|
+
type NudgeOutcome = {
|
|
84
|
+
state: "sent";
|
|
85
|
+
} | {
|
|
86
|
+
state: "unavailable";
|
|
87
|
+
} | {
|
|
88
|
+
state: "error";
|
|
89
|
+
message: string;
|
|
90
|
+
};
|
|
83
91
|
interface StudioActions {
|
|
84
92
|
updateStudio: (number: number) => Promise<MergeOutcome>;
|
|
93
|
+
/** Optional wrapper (sites on older templates may lack it): ask the host to build main again. */
|
|
94
|
+
nudgeBuild?: () => Promise<NudgeOutcome>;
|
|
85
95
|
publishContent: (input: PublishInput) => Promise<PublishResult | never>;
|
|
86
96
|
removeContent: (input: {
|
|
87
97
|
type: string;
|
|
@@ -138,7 +148,7 @@ interface StudioActions {
|
|
|
138
148
|
userId: string;
|
|
139
149
|
}) => Promise<ActionResult>;
|
|
140
150
|
}
|
|
141
|
-
declare const ACTION_NAMES: readonly ["updateStudio", "publishContent", "removeContent", "mergeContentPr", "discardChange", "previewBody", "saveProfile", "saveAvatar", "changePassword", "loadBranding", "saveBranding", "saveBrandingPicture", "loadMe", "loadTeam", "invite", "changeRole", "resend", "remove"];
|
|
151
|
+
declare const ACTION_NAMES: readonly ["updateStudio", "nudgeBuild", "publishContent", "removeContent", "mergeContentPr", "discardChange", "previewBody", "saveProfile", "saveAvatar", "changePassword", "loadBranding", "saveBranding", "saveBrandingPicture", "loadMe", "loadTeam", "invite", "changeRole", "resend", "remove"];
|
|
142
152
|
/** One row of a content list, as the site page loads it from Studio.readers.listItems. */
|
|
143
153
|
interface ListRow {
|
|
144
154
|
slug: string;
|
|
@@ -382,7 +392,7 @@ declare function copyFor(entry: Pick<ContentTypeEntry, "id" | "label" | "singula
|
|
|
382
392
|
};
|
|
383
393
|
|
|
384
394
|
/** Studio's page styles (lists, account tabs, drop zones) — injected once by StudioShellFrame. */
|
|
385
|
-
declare const STUDIO_CSS = "\n/*\n * /admin \u2014 overrides only. Layout, color and components come from\n * @realiizlabs/admin/shell (SHELL_CSS, injected by AdminShell). The Realiiz\n * palette is the package default, so this file just maps the shell's font\n * hooks onto the site's loaded fonts. To rebrand, redeclare tokens here:\n * .rz-admin { --signal: #0a58ca; }\n */\n.rz-admin {\n --rz-font: var(--font-inter), system-ui, sans-serif;\n --rz-font-display: var(--font-space-grotesk), system-ui, sans-serif;\n --rz-font-mono: var(--font-jetbrains-mono), ui-monospace, monospace;\n}\n\n/* Posts table: one wide column for the post (title, slug beneath in small mono) and\n tight fixed columns for the known-width bits. Nothing wraps; the title and slug end in\n an ellipsis with the full text as tooltip. The title opens the live post; the outbound\n arrow sits inline after it and appears on hover (the shell's a:hover .rz-arrow motion). */\n.rz-admin .rz-table--posts { table-layout: fixed; width: 100%; }\n.rz-admin .rz-table--posts td, .rz-admin .rz-table--posts th { white-space: nowrap; overflow: hidden; }\n.rz-admin .rz-col-title { width: auto; }\n.rz-admin .rz-col-date { width: 7.5rem; }\n.rz-admin .rz-col-status { width: 11.5rem; }\n.rz-admin .rz-col-actions { width: 8.5rem; }\n.rz-admin .rz-title-text { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; min-width: 0; }\n.rz-admin .rz-slug { font-family: var(--rz-font-mono); font-size: .78rem; margin-top: .2rem; }\n.rz-admin [data-slugs=\"off\"] .rz-slug { display: none; }\n.rz-admin .rz-toolbar { display: flex; justify-content: flex-end; margin: 0 0 .6rem; }\n.rz-admin .rz-switch { display: inline-flex; align-items: center; gap: .55rem; font-size: .8rem; color: var(--text-secondary); cursor: pointer; user-select: none; }\n.rz-admin .rz-switch input { position: absolute; opacity: 0; width: 1px; height: 1px; }\n.rz-admin .rz-switch__track { position: relative; width: 30px; height: 18px; border-radius: 999px; background: var(--surface-3); transition: background .15s; }\n.rz-admin .rz-switch__thumb { position: absolute; top: 2px; left: 2px; width: 14px; height: 14px; border-radius: 50%; background: #fff; box-shadow: 0 1px 2px rgba(0,0,0,.25); transition: transform .15s; }\n.rz-admin .rz-switch input:checked + .rz-switch__track { background: var(--signal); }\n.rz-admin .rz-switch input:checked + .rz-switch__track .rz-switch__thumb { transform: translateX(12px); }\n.rz-admin .rz-switch input:focus-visible + .rz-switch__track { outline: 2px solid var(--signal); outline-offset: 2px; }\n.rz-admin .rz-switch:hover .rz-switch__label { color: var(--text-primary); }\n.rz-admin .rz-title-link { display: flex; align-items: center; gap: .35em; max-width: 100%; color: inherit; text-decoration: none; }\n.rz-admin .rz-title-link .rz-arrow { opacity: 0; }\n.rz-admin .rz-title-link:hover { color: var(--signal); }\n.rz-admin .rz-title-link:hover .rz-arrow { opacity: 1; }\n/* Phones: the four columns can't share the width, so each row becomes a small card \u2014\n the title on its own line (wrapping to two), the address under it, then date \u00B7 status \u00B7\n actions on one row. Same markup; only the display changes. */\n@media (max-width: 720px) {\n .rz-admin .rz-table--posts, .rz-admin .rz-table--posts tbody { display: block; }\n .rz-admin .rz-table--posts colgroup, .rz-admin .rz-table--posts thead { display: none; }\n .rz-admin .rz-table--posts tr { display: flex; flex-wrap: wrap; align-items: center; gap: .35rem .9rem; padding: .8rem .9rem; border-bottom: 1px solid var(--separator); }\n .rz-admin .rz-table--posts tr:last-child { border-bottom: 0; }\n .rz-admin .rz-table--posts td, .rz-admin .rz-table--posts td.rz-fit { display: block; width: auto; padding: 0; border: 0; white-space: nowrap; overflow: visible; }\n .rz-admin .rz-table--posts .rz-title-cell { flex: 1 1 100%; min-width: 0; margin-bottom: .15rem; white-space: normal; }\n .rz-admin .rz-table--posts .rz-title-cell .rz-title-text { white-space: normal; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; font-weight: 500; color: var(--text-primary); }\n .rz-admin .rz-table--posts .rz-title-link { display: inline; }\n .rz-admin .rz-table--posts .rz-slug { font-weight: 400; color: var(--text-muted); overflow-wrap: anywhere; -webkit-line-clamp: 1; }\n .rz-admin [data-slugs=\"off\"] .rz-table--posts .rz-slug { display: none; }\n .rz-admin .rz-table--posts td.rz-fit { font-size: .85rem; }\n .rz-admin .rz-table--posts td.rz-fit:last-child { margin-left: auto; }\n}\n\n/* Dashboard card for a section that isn't built yet: the real card, faded, buttons disabled. */\n/* Account page (05b): tracker-style \u2014 H1, email, underlined tabs, stacked form cards. */\n.rz-admin .acct-h1 { font-size: 1.25rem; font-weight: 600; margin: 0 0 .25rem; color: var(--text-primary); }\n.rz-admin .acct-email { font-size: .875rem; color: var(--text-muted); margin: 0 0 1.25rem; }\n.rz-admin .acct-stack { display: flex; flex-direction: column; gap: 1rem; max-width: 560px; }\n.rz-admin .acct-stack:has(.acct-team) { max-width: none; }\n.rz-admin .acct-card { display: flex; flex-direction: column; gap: .9rem; }\n.rz-admin .acct-title { font-size: 1rem; font-weight: 600; margin: 0; color: var(--text-primary); }\n.rz-admin .acct-blurb { font-size: .875rem; color: var(--text-secondary); margin: -.4rem 0 0; line-height: 1.5; }\n.rz-admin .acct-blurb--link { margin-top: .6rem; }\n.rz-admin .acct-blurb a { color: var(--signal); text-decoration: underline; text-underline-offset: 3px; }\n.rz-admin .acct-blurb a:hover { color: var(--text-primary); }\n.rz-admin .acct-field { display: flex; flex-direction: column; gap: .35rem; }\n.rz-admin .acct-label { font-size: .85rem; font-weight: 500; color: var(--text-primary); }\n.rz-admin .acct-hint { font-size: .78rem; color: var(--text-muted); }\n.rz-admin .acct-input { font: inherit; font-size: .9rem; color: var(--text-primary); background: var(--surface-0); border: 1px solid var(--border); border-radius: 6px; padding: 9px 11px; min-height: 40px; width: 100%; }\n.rz-admin .acct-input:read-only { color: var(--text-secondary); background: var(--surface-2); }\n.rz-admin .acct-input:focus-visible { outline: 2px solid var(--signal); outline-offset: 1px; }\n.rz-admin .acct-select { width: auto; padding-right: 2rem; }\n.rz-admin .acct-select--sm { min-height: 32px; padding: 4px 28px 4px 8px; font-size: .8rem; }\n.rz-admin .acct-actions { display: flex; align-items: center; gap: 1rem; flex-wrap: wrap; }\n.rz-admin .acct-ok { font-size: .85rem; color: var(--signal); }\n.rz-admin .acct-link { font: inherit; font-size: .82rem; background: none; border: 0; padding: 0; color: var(--text-secondary); text-decoration: underline; text-underline-offset: 3px; cursor: pointer; }\n.rz-admin .acct-link:hover { color: var(--signal); }\n.rz-admin .acct-link--danger:hover { color: #c0392b; }\n.rz-admin .acct-link:disabled { opacity: .5; cursor: default; }\n.rz-admin .acct-team-head { display: flex; align-items: center; justify-content: space-between; gap: 1rem; flex-wrap: wrap; }\n.rz-admin .acct-invite__row { display: flex; gap: .6rem; align-items: center; flex-wrap: wrap; }\n.rz-admin .acct-invite__row .acct-input[type=\"email\"] { flex: 1 1 220px; width: auto; }\n.rz-admin .acct-person { display: flex; align-items: center; gap: .7rem; }\n.rz-admin .acct-person__avatar { width: 32px; height: 32px; border-radius: 50%; background: var(--surface-3); border: 1px solid var(--border); display: inline-flex; align-items: center; justify-content: center; font-size: .7rem; font-weight: 600; overflow: hidden; flex-shrink: 0; }\n.rz-admin .acct-person__avatar img { width: 100%; height: 100%; object-fit: cover; }\n.rz-admin .acct-person__text { display: flex; flex-direction: column; line-height: 1.25; }\n.rz-admin .acct-person__email { font-size: .78rem; }\n.rz-admin .acct-row-actions { display: flex; gap: .8rem; align-items: center; white-space: nowrap; min-height: 34px; }\n.rz-admin .acct-help-list { margin: 0; padding-left: 1.2rem; color: var(--text-secondary); line-height: 1.7; }\n\n/* Sign-in: the password option under the magic-link form. */\n.rz-admin .pwsi-toggle { margin: 1.1rem 0 0; text-align: center; }\n.rz-admin .pwsi { display: flex; flex-direction: column; gap: .9rem; margin-top: 1.25rem; padding-top: 1.25rem; border-top: 1px solid var(--separator); }\n\n/* Password boxes: eye toggle + the requirement checklist that lights up as each rule passes. */\n.rz-admin .acct-pw { position: relative; }\n.rz-admin .acct-pw .acct-input { padding-right: 2.6rem; }\n.rz-admin .acct-pw__eye { position: absolute; right: .5rem; top: 50%; transform: translateY(-50%); background: none; border: 0; padding: .35rem; color: var(--text-muted); cursor: pointer; display: inline-flex; border-radius: 4px; }\n.rz-admin .acct-pw__eye:hover, .rz-admin .acct-pw__eye[aria-pressed=\"true\"] { color: var(--text-secondary); }\n.rz-admin .acct-rules { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: .5rem; }\n.rz-admin .acct-rule { display: flex; align-items: center; gap: .5rem; font-size: .8125rem; color: var(--text-muted); transition: color .15s; }\n.rz-admin .acct-rule--met { color: var(--signal); }\n\n/* Picture uploader (avatar, logo, favicon): one grid everywhere \u2014 preview | buttons row, hint under the buttons. */\n.rz-admin .acct-pic { border: 1px dashed var(--border); border-radius: 8px; padding: 16px 18px; background: var(--surface-0); outline: none; transition: border-color .15s; }\n.rz-admin .acct-pic:focus-visible, .rz-admin .acct-pic--over { border-color: var(--signal); border-style: solid; }\n.rz-admin .acct-pic--busy { opacity: .7; }\n.rz-admin .acct-pic__file { display: none; }\n.rz-admin .acct-pic__empty { display: flex; align-items: center; gap: 14px; flex-wrap: wrap; color: var(--text-muted); }\n.rz-admin .acct-pic__fallback { width: 44px; height: 44px; flex-shrink: 0; display: inline-flex; align-items: center; justify-content: center; border-radius: 8px; background: var(--surface-3); color: var(--text-muted); font-size: .9rem; font-weight: 600; letter-spacing: .04em; }\n.rz-admin .acct-pic__fallback--circle { border-radius: 50%; }\n.rz-admin .acct-pic__or { font-size: .8125rem; }\n.rz-admin .acct-pic__has { display: flex; align-items: flex-start; gap: 16px; }\n.rz-admin .acct-pic__thumb { display: block; width: 96px; height: 96px; object-fit: cover; border-radius: 8px; border: 1px solid var(--border); background: var(--surface-3); flex-shrink: 0; }\n.rz-admin .acct-pic__thumb--circle { border-radius: 50%; }\n.rz-admin .acct-pic__meta { display: flex; flex-direction: column; gap: 10px; min-width: 0; }\n.rz-admin .acct-pic__actions { display: flex; align-items: center; gap: 14px; }\n.rz-admin .acct-pic__remove { font: inherit; font-size: .8125rem; background: none; border: 0; padding: 0; color: var(--text-muted); text-decoration: underline; text-underline-offset: 3px; cursor: pointer; }\n.rz-admin .acct-pic__remove:hover { color: #c0392b; }\n.rz-admin .acct-pic__remove:disabled { cursor: default; opacity: .6; }\n.rz-admin .acct-pic__hint { margin: 10px 0 0; font-size: .75rem; color: var(--text-muted); line-height: 1.4; }\n.rz-admin .acct-pic__has .acct-pic__hint { margin-top: 0; }\n.rz-admin .acct-pic__note { margin: 8px 0 0; }\n.rz-admin .acct-pic__error { margin: 8px 0 0; font-size: .8rem; color: #c0392b; }\n\n/* Branded dropdown (role pickers): a bordered button that opens the shell's menu, checkmark on the current choice. */\n.rz-admin .acct-dd { position: relative; display: inline-block; }\n.rz-admin .acct-dd__btn { display: inline-flex; align-items: center; gap: .5rem; font: inherit; font-size: .85rem; color: var(--text-primary); background: var(--surface-0); border: 1px solid var(--border); border-radius: 6px; padding: 0 .7rem; height: 34px; cursor: pointer; }\n.rz-admin .acct-dd__btn:hover { border-color: var(--text-muted); }\n.rz-admin .acct-dd__btn:focus-visible { outline: 2px solid var(--signal); outline-offset: 1px; }\n.rz-admin .acct-dd__btn:disabled { opacity: .6; cursor: default; }\n.rz-admin .acct-dd__menu { left: 0; right: auto; min-width: 15rem; padding: .3rem 0; }\n.rz-admin .acct-dd__item { align-items: flex-start; }\n.rz-admin .acct-dd__check { width: 1rem; flex-shrink: 0; color: var(--signal); font-weight: 700; }\n.rz-admin .acct-dd__text { display: flex; flex-direction: column; line-height: 1.3; }\n.rz-admin .acct-dd__hint { font-size: .74rem; color: var(--text-muted); }\n/* Team table: everything on one center line, and the role menu may overflow the table (the shell\n clips .rz-table for rounded corners, so round the header cells by hand instead). */\n.rz-admin .acct-team { overflow: visible; }\n.rz-admin .acct-team thead th:first-child { border-top-left-radius: 8px; }\n.rz-admin .acct-team thead th:last-child { border-top-right-radius: 8px; }\n.rz-admin .acct-team tbody tr:last-child td { border-bottom: 0; }\n.rz-admin .acct-team td { vertical-align: middle; }\n.rz-admin .acct-team td > * { vertical-align: middle; }\n.rz-admin .acct-team .rz-pill { position: relative; top: 0; }\n.rz-admin .acct-dd__menu { z-index: 60; }\n.rz-admin .acct-invite__row .acct-dd__btn { height: 40px; }\n\n.rz-admin .rz-term { position: relative; display: inline; }\n.rz-admin .rz-term__word { cursor: help; text-decoration: underline dotted; text-underline-offset: 4px; text-decoration-color: color-mix(in srgb, currentColor 50%, transparent); }\n.rz-admin .rz-term__word:hover, .rz-admin .rz-term__word:focus-visible { text-decoration-color: var(--signal); outline: none; }\n.rz-admin .rz-term__tip { position: absolute; left: 0; top: calc(100% + 8px); z-index: 70; width: 272px; max-width: 80vw; padding: 12px 14px; border-radius: 8px; background: var(--text-primary); color: var(--surface-0); font-size: .8125rem; line-height: 1.4; font-weight: 400; box-shadow: 0 8px 24px rgba(14,23,38,.18); opacity: 0; pointer-events: none; transition: opacity .15s; }\n.rz-admin .rz-term__tip--open { opacity: 1; }\n\n/* ---- Help center ---------------------------------------------------- */\n.rz-admin .rz-help__search { position: relative; margin: 0 0 1.5rem; max-width: 44rem; }\n.rz-admin .rz-help__search svg { position: absolute; left: .9rem; top: 50%; transform: translateY(-50%); color: var(--text-muted); pointer-events: none; }\n.rz-admin .rz-help__search input { width: 100%; padding-left: 2.6rem; font-size: 1rem; }\n.rz-admin .rz-help__body { display: grid; grid-template-columns: 13rem minmax(0, 1fr); gap: 2rem; align-items: start; }\n@media (max-width: 760px) { .rz-admin .rz-help__body { grid-template-columns: 1fr; gap: 1rem; } .rz-admin .rz-help__nav { display: flex; flex-wrap: wrap; gap: .25rem; } }\n.rz-admin .rz-help__nav { position: sticky; top: calc(var(--rz-topbar) + 1rem); display: flex; flex-direction: column; gap: .1rem; }\n.rz-admin .rz-help__navitem { padding: .45rem .75rem; border-radius: 6px; color: var(--text-secondary); text-decoration: none; font-size: .875rem; }\n.rz-admin .rz-help__navitem:hover { background: var(--surface-2); color: var(--text-primary); }\n.rz-admin .rz-help__navitem--active { background: var(--surface-2); color: var(--signal); font-weight: 500; }\n.rz-admin .rz-help__main { max-width: 44rem; min-width: 0; }\n.rz-admin .rz-help__h { font-family: var(--rz-font-display); font-size: 1.5rem; font-weight: 600; letter-spacing: -.01em; margin: 0 0 .35rem; }\n.rz-admin .rz-help__blurb { color: var(--text-secondary); margin: 0 0 1.25rem; }\n.rz-admin .rz-help__count { color: var(--text-muted); font-size: .85rem; margin: 0 0 .75rem; }\n.rz-admin .rz-help__list { list-style: none; margin: 0; padding: 0; display: grid; gap: .6rem; }\n.rz-admin .rz-help__card { display: flex; flex-direction: column; gap: .2rem; padding: .9rem 1rem; background: var(--surface-1); border: 1px solid var(--border); border-radius: var(--rz-radius); text-decoration: none; color: inherit; transition: border-color .15s; }\n.rz-admin .rz-help__card:hover { border-color: var(--signal); }\n.rz-admin .rz-help__meta { font-family: var(--rz-font-mono); font-size: .65rem; text-transform: uppercase; letter-spacing: .08em; color: var(--text-muted); }\n.rz-admin .rz-help__title { font-weight: 600; color: var(--text-primary); }\n.rz-admin .rz-help__summary { color: var(--text-secondary); font-size: .9rem; line-height: 1.5; }\n.rz-admin .rz-help__crumb { display: inline-flex; align-items: center; gap: .35rem; font-family: var(--rz-font-mono); font-size: .75rem; text-transform: uppercase; letter-spacing: .08em; color: var(--text-muted); text-decoration: none; margin: 0 0 1rem; }\n.rz-admin .rz-help__crumb:hover { color: var(--signal); }\n.rz-admin .rz-help__prose { line-height: 1.65; color: var(--text-primary); }\n.rz-admin .rz-help__prose > * + * { margin-top: .85rem; }\n.rz-admin .rz-help__prose h2 { font-family: var(--rz-font-display); font-size: 1.1rem; font-weight: 600; margin-top: 1.75rem; }\n.rz-admin .rz-help__prose h3 { font-size: .95rem; font-weight: 600; margin-top: 1.25rem; }\n.rz-admin .rz-help__prose p, .rz-admin .rz-help__prose li { color: var(--text-secondary); }\n.rz-admin .rz-help__prose strong { color: var(--text-primary); font-weight: 600; }\n.rz-admin .rz-help__prose ul, .rz-admin .rz-help__prose ol { padding-left: 1.35rem; }\n.rz-admin .rz-help__prose li + li { margin-top: .3rem; }\n.rz-admin .rz-help__prose code { font-family: var(--rz-font-mono); font-size: .85em; background: var(--surface-2); border: 1px solid var(--border); border-radius: 4px; padding: .05em .35em; }\n.rz-admin .rz-help__prose pre { background: var(--surface-2); border: 1px solid var(--border); border-radius: var(--rz-radius); padding: .8rem 1rem; overflow-x: auto; }\n.rz-admin .rz-help__prose pre code { background: transparent; border: 0; padding: 0; font-size: .82rem; line-height: 1.55; }\n.rz-admin .rz-help__prose blockquote { margin: 0; padding: .2rem 0 .2rem 1rem; border-left: 3px solid var(--signal); color: var(--text-secondary); }\n.rz-admin .rz-help__prose a { color: var(--signal); text-decoration: none; }\n.rz-admin .rz-help__prose a:hover { color: var(--text-primary); }\n.rz-admin .rz-help__prose .rz-table td { white-space: normal; color: var(--text-secondary); }\n.rz-admin .rz-help__pager { display: flex; justify-content: space-between; gap: 1rem; margin-top: 2.5rem; padding-top: 1rem; border-top: 1px solid var(--separator); font-size: .875rem; }\n.rz-admin .rz-help__pager a { display: inline-flex; align-items: center; gap: .35rem; color: var(--text-secondary); text-decoration: none; }\n.rz-admin .rz-help__pager a:hover { color: var(--signal); }\n.rz-admin .rz-arrow--back { transform: none; }\n@media (prefers-reduced-motion: no-preference) { .rz-admin a:hover .rz-arrow--back { transform: translateX(-4px); } }\n\n/* ---- Studio update strip / Settings \u2192 Studio ---------------------------- */\n.rz-admin .rz-update { border: 1px solid color-mix(in srgb, var(--signal) 22%, var(--border)); border-radius: 8px; background: color-mix(in srgb, var(--signal) 5%, var(--surface-1)); padding: .75rem 1.1rem; }\n.rz-admin .rz-update--strip { margin: 0 0 1.5rem; }\n.rz-admin .rz-update__row { display: flex; flex-wrap: wrap; align-items: center; gap: .5rem 1.1rem; }\n.rz-admin .rz-update__title { display: inline-flex; align-items: center; gap: .55rem; font-weight: 600; color: var(--text-primary); }\n.rz-admin .rz-update__title::before { content: \"\"; width: 8px; height: 8px; border-radius: 50%; background: var(--signal); box-shadow: 0 0 0 3px color-mix(in srgb, var(--signal) 18%, transparent); }\n.rz-admin .rz-update__link { display: inline-flex; align-items: center; gap: .3rem; background: none; border: 0; padding: 0; font: inherit; font-size: .875rem; color: var(--signal); cursor: pointer; text-decoration: none; }\n.rz-admin .rz-update__link:hover { color: var(--text-primary); }\n.rz-admin .rz-update__later { margin-left: auto; background: none; border: 0; padding: 0; font: inherit; font-size: .8rem; color: var(--text-muted); cursor: pointer; }\n.rz-admin .rz-update__later:hover { color: var(--text-primary); }\n.rz-admin .rz-update__notes { margin: .6rem 0 0; font-size: .875rem; line-height: 1.55; color: var(--text-secondary); white-space: pre-line; }\n.rz-admin .rz-update__problem { margin: .6rem 0 0; font-size: .875rem; color: var(--status-down); }\n.rz-admin .rz-update__done { display: block; margin-top: .5rem; font-size: .875rem; color: var(--text-secondary); }\n";
|
|
395
|
+
declare const STUDIO_CSS = "\n/*\n * /admin \u2014 overrides only. Layout, color and components come from\n * @realiizlabs/admin/shell (SHELL_CSS, injected by AdminShell). The Realiiz\n * palette is the package default, so this file just maps the shell's font\n * hooks onto the site's loaded fonts. To rebrand, redeclare tokens here:\n * .rz-admin { --signal: #0a58ca; }\n */\n.rz-admin {\n --rz-font: var(--font-inter), system-ui, sans-serif;\n --rz-font-display: var(--font-space-grotesk), system-ui, sans-serif;\n --rz-font-mono: var(--font-jetbrains-mono), ui-monospace, monospace;\n}\n\n/* Posts table: one wide column for the post (title, slug beneath in small mono) and\n tight fixed columns for the known-width bits. Nothing wraps; the title and slug end in\n an ellipsis with the full text as tooltip. The title opens the live post; the outbound\n arrow sits inline after it and appears on hover (the shell's a:hover .rz-arrow motion). */\n.rz-admin .rz-table--posts { table-layout: fixed; width: 100%; }\n.rz-admin .rz-table--posts td, .rz-admin .rz-table--posts th { white-space: nowrap; overflow: hidden; }\n.rz-admin .rz-col-title { width: auto; }\n.rz-admin .rz-col-date { width: 7.5rem; }\n.rz-admin .rz-col-status { width: 11.5rem; }\n.rz-admin .rz-col-actions { width: 8.5rem; }\n.rz-admin .rz-title-text { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; min-width: 0; }\n.rz-admin .rz-slug { font-family: var(--rz-font-mono); font-size: .78rem; margin-top: .2rem; }\n.rz-admin [data-slugs=\"off\"] .rz-slug { display: none; }\n.rz-admin .rz-toolbar { display: flex; justify-content: flex-end; margin: 0 0 .6rem; }\n.rz-admin .rz-switch { display: inline-flex; align-items: center; gap: .55rem; font-size: .8rem; color: var(--text-secondary); cursor: pointer; user-select: none; }\n.rz-admin .rz-switch input { position: absolute; opacity: 0; width: 1px; height: 1px; }\n.rz-admin .rz-switch__track { position: relative; width: 30px; height: 18px; border-radius: 999px; background: var(--surface-3); transition: background .15s; }\n.rz-admin .rz-switch__thumb { position: absolute; top: 2px; left: 2px; width: 14px; height: 14px; border-radius: 50%; background: #fff; box-shadow: 0 1px 2px rgba(0,0,0,.25); transition: transform .15s; }\n.rz-admin .rz-switch input:checked + .rz-switch__track { background: var(--signal); }\n.rz-admin .rz-switch input:checked + .rz-switch__track .rz-switch__thumb { transform: translateX(12px); }\n.rz-admin .rz-switch input:focus-visible + .rz-switch__track { outline: 2px solid var(--signal); outline-offset: 2px; }\n.rz-admin .rz-switch:hover .rz-switch__label { color: var(--text-primary); }\n.rz-admin .rz-title-link { display: flex; align-items: center; gap: .35em; max-width: 100%; color: inherit; text-decoration: none; }\n.rz-admin .rz-title-link .rz-arrow { opacity: 0; }\n.rz-admin .rz-title-link:hover { color: var(--signal); }\n.rz-admin .rz-title-link:hover .rz-arrow { opacity: 1; }\n/* Phones: the four columns can't share the width, so each row becomes a small card \u2014\n the title on its own line (wrapping to two), the address under it, then date \u00B7 status \u00B7\n actions on one row. Same markup; only the display changes. */\n@media (max-width: 720px) {\n .rz-admin .rz-table--posts, .rz-admin .rz-table--posts tbody { display: block; }\n .rz-admin .rz-table--posts colgroup, .rz-admin .rz-table--posts thead { display: none; }\n .rz-admin .rz-table--posts tr { display: flex; flex-wrap: wrap; align-items: center; gap: .35rem .9rem; padding: .8rem .9rem; border-bottom: 1px solid var(--separator); }\n .rz-admin .rz-table--posts tr:last-child { border-bottom: 0; }\n .rz-admin .rz-table--posts td, .rz-admin .rz-table--posts td.rz-fit { display: block; width: auto; padding: 0; border: 0; white-space: nowrap; overflow: visible; }\n .rz-admin .rz-table--posts .rz-title-cell { flex: 1 1 100%; min-width: 0; margin-bottom: .15rem; white-space: normal; }\n .rz-admin .rz-table--posts .rz-title-cell .rz-title-text { white-space: normal; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; font-weight: 500; color: var(--text-primary); }\n .rz-admin .rz-table--posts .rz-title-link { display: inline; }\n .rz-admin .rz-table--posts .rz-slug { font-weight: 400; color: var(--text-muted); overflow-wrap: anywhere; -webkit-line-clamp: 1; }\n .rz-admin [data-slugs=\"off\"] .rz-table--posts .rz-slug { display: none; }\n .rz-admin .rz-table--posts td.rz-fit { font-size: .85rem; }\n .rz-admin .rz-table--posts td.rz-fit:last-child { margin-left: auto; }\n}\n\n/* Dashboard card for a section that isn't built yet: the real card, faded, buttons disabled. */\n/* Account page (05b): tracker-style \u2014 H1, email, underlined tabs, stacked form cards. */\n.rz-admin .acct-h1 { font-size: 1.25rem; font-weight: 600; margin: 0 0 .25rem; color: var(--text-primary); }\n.rz-admin .acct-email { font-size: .875rem; color: var(--text-muted); margin: 0 0 1.25rem; }\n.rz-admin .acct-stack { display: flex; flex-direction: column; gap: 1rem; max-width: 560px; }\n.rz-admin .acct-stack:has(.acct-team) { max-width: none; }\n.rz-admin .acct-card { display: flex; flex-direction: column; gap: .9rem; }\n.rz-admin .acct-title { font-size: 1rem; font-weight: 600; margin: 0; color: var(--text-primary); }\n.rz-admin .acct-blurb { font-size: .875rem; color: var(--text-secondary); margin: -.4rem 0 0; line-height: 1.5; }\n.rz-admin .acct-blurb--link { margin-top: .6rem; }\n.rz-admin .acct-blurb a { color: var(--signal); text-decoration: underline; text-underline-offset: 3px; }\n.rz-admin .acct-blurb a:hover { color: var(--text-primary); }\n.rz-admin .acct-field { display: flex; flex-direction: column; gap: .35rem; }\n.rz-admin .acct-label { font-size: .85rem; font-weight: 500; color: var(--text-primary); }\n.rz-admin .acct-hint { font-size: .78rem; color: var(--text-muted); }\n.rz-admin .acct-input { font: inherit; font-size: .9rem; color: var(--text-primary); background: var(--surface-0); border: 1px solid var(--border); border-radius: 6px; padding: 9px 11px; min-height: 40px; width: 100%; }\n.rz-admin .acct-input:read-only { color: var(--text-secondary); background: var(--surface-2); }\n.rz-admin .acct-input:focus-visible { outline: 2px solid var(--signal); outline-offset: 1px; }\n.rz-admin .acct-select { width: auto; padding-right: 2rem; }\n.rz-admin .acct-select--sm { min-height: 32px; padding: 4px 28px 4px 8px; font-size: .8rem; }\n.rz-admin .acct-actions { display: flex; align-items: center; gap: 1rem; flex-wrap: wrap; }\n.rz-admin .acct-ok { font-size: .85rem; color: var(--signal); }\n.rz-admin .acct-link { font: inherit; font-size: .82rem; background: none; border: 0; padding: 0; color: var(--text-secondary); text-decoration: underline; text-underline-offset: 3px; cursor: pointer; }\n.rz-admin .acct-link:hover { color: var(--signal); }\n.rz-admin .acct-link--danger:hover { color: #c0392b; }\n.rz-admin .acct-link:disabled { opacity: .5; cursor: default; }\n.rz-admin .acct-team-head { display: flex; align-items: center; justify-content: space-between; gap: 1rem; flex-wrap: wrap; }\n.rz-admin .acct-invite__row { display: flex; gap: .6rem; align-items: center; flex-wrap: wrap; }\n.rz-admin .acct-invite__row .acct-input[type=\"email\"] { flex: 1 1 220px; width: auto; }\n.rz-admin .acct-person { display: flex; align-items: center; gap: .7rem; }\n.rz-admin .acct-person__avatar { width: 32px; height: 32px; border-radius: 50%; background: var(--surface-3); border: 1px solid var(--border); display: inline-flex; align-items: center; justify-content: center; font-size: .7rem; font-weight: 600; overflow: hidden; flex-shrink: 0; }\n.rz-admin .acct-person__avatar img { width: 100%; height: 100%; object-fit: cover; }\n.rz-admin .acct-person__text { display: flex; flex-direction: column; line-height: 1.25; }\n.rz-admin .acct-person__email { font-size: .78rem; }\n.rz-admin .acct-row-actions { display: flex; gap: .8rem; align-items: center; white-space: nowrap; min-height: 34px; }\n.rz-admin .acct-help-list { margin: 0; padding-left: 1.2rem; color: var(--text-secondary); line-height: 1.7; }\n\n/* Sign-in: the password option under the magic-link form. */\n.rz-admin .pwsi-toggle { margin: 1.1rem 0 0; text-align: center; }\n.rz-admin .pwsi { display: flex; flex-direction: column; gap: .9rem; margin-top: 1.25rem; padding-top: 1.25rem; border-top: 1px solid var(--separator); }\n\n/* Password boxes: eye toggle + the requirement checklist that lights up as each rule passes. */\n.rz-admin .acct-pw { position: relative; }\n.rz-admin .acct-pw .acct-input { padding-right: 2.6rem; }\n.rz-admin .acct-pw__eye { position: absolute; right: .5rem; top: 50%; transform: translateY(-50%); background: none; border: 0; padding: .35rem; color: var(--text-muted); cursor: pointer; display: inline-flex; border-radius: 4px; }\n.rz-admin .acct-pw__eye:hover, .rz-admin .acct-pw__eye[aria-pressed=\"true\"] { color: var(--text-secondary); }\n.rz-admin .acct-rules { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: .5rem; }\n.rz-admin .acct-rule { display: flex; align-items: center; gap: .5rem; font-size: .8125rem; color: var(--text-muted); transition: color .15s; }\n.rz-admin .acct-rule--met { color: var(--signal); }\n\n/* Picture uploader (avatar, logo, favicon): one grid everywhere \u2014 preview | buttons row, hint under the buttons. */\n.rz-admin .acct-pic { border: 1px dashed var(--border); border-radius: 8px; padding: 16px 18px; background: var(--surface-0); outline: none; transition: border-color .15s; }\n.rz-admin .acct-pic:focus-visible, .rz-admin .acct-pic--over { border-color: var(--signal); border-style: solid; }\n.rz-admin .acct-pic--busy { opacity: .7; }\n.rz-admin .acct-pic__file { display: none; }\n.rz-admin .acct-pic__empty { display: flex; align-items: center; gap: 14px; flex-wrap: wrap; color: var(--text-muted); }\n.rz-admin .acct-pic__fallback { width: 44px; height: 44px; flex-shrink: 0; display: inline-flex; align-items: center; justify-content: center; border-radius: 8px; background: var(--surface-3); color: var(--text-muted); font-size: .9rem; font-weight: 600; letter-spacing: .04em; }\n.rz-admin .acct-pic__fallback--circle { border-radius: 50%; }\n.rz-admin .acct-pic__or { font-size: .8125rem; }\n.rz-admin .acct-pic__has { display: flex; align-items: flex-start; gap: 16px; }\n.rz-admin .acct-pic__thumb { display: block; width: 96px; height: 96px; object-fit: cover; border-radius: 8px; border: 1px solid var(--border); background: var(--surface-3); flex-shrink: 0; }\n.rz-admin .acct-pic__thumb--circle { border-radius: 50%; }\n.rz-admin .acct-pic__meta { display: flex; flex-direction: column; gap: 10px; min-width: 0; }\n.rz-admin .acct-pic__actions { display: flex; align-items: center; gap: 14px; }\n.rz-admin .acct-pic__remove { font: inherit; font-size: .8125rem; background: none; border: 0; padding: 0; color: var(--text-muted); text-decoration: underline; text-underline-offset: 3px; cursor: pointer; }\n.rz-admin .acct-pic__remove:hover { color: #c0392b; }\n.rz-admin .acct-pic__remove:disabled { cursor: default; opacity: .6; }\n.rz-admin .acct-pic__hint { margin: 10px 0 0; font-size: .75rem; color: var(--text-muted); line-height: 1.4; }\n.rz-admin .acct-pic__has .acct-pic__hint { margin-top: 0; }\n.rz-admin .acct-pic__note { margin: 8px 0 0; }\n.rz-admin .acct-pic__error { margin: 8px 0 0; font-size: .8rem; color: #c0392b; }\n\n/* Branded dropdown (role pickers): a bordered button that opens the shell's menu, checkmark on the current choice. */\n.rz-admin .acct-dd { position: relative; display: inline-block; }\n.rz-admin .acct-dd__btn { display: inline-flex; align-items: center; gap: .5rem; font: inherit; font-size: .85rem; color: var(--text-primary); background: var(--surface-0); border: 1px solid var(--border); border-radius: 6px; padding: 0 .7rem; height: 34px; cursor: pointer; }\n.rz-admin .acct-dd__btn:hover { border-color: var(--text-muted); }\n.rz-admin .acct-dd__btn:focus-visible { outline: 2px solid var(--signal); outline-offset: 1px; }\n.rz-admin .acct-dd__btn:disabled { opacity: .6; cursor: default; }\n.rz-admin .acct-dd__menu { left: 0; right: auto; min-width: 15rem; padding: .3rem 0; }\n.rz-admin .acct-dd__item { align-items: flex-start; }\n.rz-admin .acct-dd__check { width: 1rem; flex-shrink: 0; color: var(--signal); font-weight: 700; }\n.rz-admin .acct-dd__text { display: flex; flex-direction: column; line-height: 1.3; }\n.rz-admin .acct-dd__hint { font-size: .74rem; color: var(--text-muted); }\n/* Team table: everything on one center line, and the role menu may overflow the table (the shell\n clips .rz-table for rounded corners, so round the header cells by hand instead). */\n.rz-admin .acct-team { overflow: visible; }\n.rz-admin .acct-team thead th:first-child { border-top-left-radius: 8px; }\n.rz-admin .acct-team thead th:last-child { border-top-right-radius: 8px; }\n.rz-admin .acct-team tbody tr:last-child td { border-bottom: 0; }\n.rz-admin .acct-team td { vertical-align: middle; }\n.rz-admin .acct-team td > * { vertical-align: middle; }\n.rz-admin .acct-team .rz-pill { position: relative; top: 0; }\n.rz-admin .acct-dd__menu { z-index: 60; }\n.rz-admin .acct-invite__row .acct-dd__btn { height: 40px; }\n\n.rz-admin .rz-term { position: relative; display: inline; }\n.rz-admin .rz-term__word { cursor: help; text-decoration: underline dotted; text-underline-offset: 4px; text-decoration-color: color-mix(in srgb, currentColor 50%, transparent); }\n.rz-admin .rz-term__word:hover, .rz-admin .rz-term__word:focus-visible { text-decoration-color: var(--signal); outline: none; }\n.rz-admin .rz-term__tip { position: absolute; left: 0; top: calc(100% + 8px); z-index: 70; width: 272px; max-width: 80vw; padding: 12px 14px; border-radius: 8px; background: var(--text-primary); color: var(--surface-0); font-size: .8125rem; line-height: 1.4; font-weight: 400; box-shadow: 0 8px 24px rgba(14,23,38,.18); opacity: 0; pointer-events: none; transition: opacity .15s; }\n.rz-admin .rz-term__tip--open { opacity: 1; }\n\n/* ---- Help center ---------------------------------------------------- */\n.rz-admin .rz-help__search { position: relative; margin: 0 0 1.5rem; max-width: 44rem; }\n.rz-admin .rz-help__search svg { position: absolute; left: .9rem; top: 50%; transform: translateY(-50%); color: var(--text-muted); pointer-events: none; }\n.rz-admin .rz-help__search input { width: 100%; padding-left: 2.6rem; font-size: 1rem; }\n.rz-admin .rz-help__body { display: grid; grid-template-columns: 13rem minmax(0, 1fr); gap: 2rem; align-items: start; }\n@media (max-width: 760px) { .rz-admin .rz-help__body { grid-template-columns: 1fr; gap: 1rem; } .rz-admin .rz-help__nav { display: flex; flex-wrap: wrap; gap: .25rem; } }\n.rz-admin .rz-help__nav { position: sticky; top: calc(var(--rz-topbar) + 1rem); display: flex; flex-direction: column; gap: .1rem; }\n.rz-admin .rz-help__navitem { padding: .45rem .75rem; border-radius: 6px; color: var(--text-secondary); text-decoration: none; font-size: .875rem; }\n.rz-admin .rz-help__navitem:hover { background: var(--surface-2); color: var(--text-primary); }\n.rz-admin .rz-help__navitem--active { background: var(--surface-2); color: var(--signal); font-weight: 500; }\n.rz-admin .rz-help__main { max-width: 44rem; min-width: 0; }\n.rz-admin .rz-help__h { font-family: var(--rz-font-display); font-size: 1.5rem; font-weight: 600; letter-spacing: -.01em; margin: 0 0 .35rem; }\n.rz-admin .rz-help__blurb { color: var(--text-secondary); margin: 0 0 1.25rem; }\n.rz-admin .rz-help__count { color: var(--text-muted); font-size: .85rem; margin: 0 0 .75rem; }\n.rz-admin .rz-help__list { list-style: none; margin: 0; padding: 0; display: grid; gap: .6rem; }\n.rz-admin .rz-help__card { display: flex; flex-direction: column; gap: .2rem; padding: .9rem 1rem; background: var(--surface-1); border: 1px solid var(--border); border-radius: var(--rz-radius); text-decoration: none; color: inherit; transition: border-color .15s; }\n.rz-admin .rz-help__card:hover { border-color: var(--signal); }\n.rz-admin .rz-help__meta { font-family: var(--rz-font-mono); font-size: .65rem; text-transform: uppercase; letter-spacing: .08em; color: var(--text-muted); }\n.rz-admin .rz-help__title { font-weight: 600; color: var(--text-primary); }\n.rz-admin .rz-help__summary { color: var(--text-secondary); font-size: .9rem; line-height: 1.5; }\n.rz-admin .rz-help__crumb { display: inline-flex; align-items: center; gap: .35rem; font-family: var(--rz-font-mono); font-size: .75rem; text-transform: uppercase; letter-spacing: .08em; color: var(--text-muted); text-decoration: none; margin: 0 0 1rem; }\n.rz-admin .rz-help__crumb:hover { color: var(--signal); }\n.rz-admin .rz-help__prose { line-height: 1.65; color: var(--text-primary); }\n.rz-admin .rz-help__prose > * + * { margin-top: .85rem; }\n.rz-admin .rz-help__prose h2 { font-family: var(--rz-font-display); font-size: 1.1rem; font-weight: 600; margin-top: 1.75rem; }\n.rz-admin .rz-help__prose h3 { font-size: .95rem; font-weight: 600; margin-top: 1.25rem; }\n.rz-admin .rz-help__prose p, .rz-admin .rz-help__prose li { color: var(--text-secondary); }\n.rz-admin .rz-help__prose strong { color: var(--text-primary); font-weight: 600; }\n.rz-admin .rz-help__prose ul, .rz-admin .rz-help__prose ol { padding-left: 1.35rem; }\n.rz-admin .rz-help__prose li + li { margin-top: .3rem; }\n.rz-admin .rz-help__prose code { font-family: var(--rz-font-mono); font-size: .85em; background: var(--surface-2); border: 1px solid var(--border); border-radius: 4px; padding: .05em .35em; }\n.rz-admin .rz-help__prose pre { background: var(--surface-2); border: 1px solid var(--border); border-radius: var(--rz-radius); padding: .8rem 1rem; overflow-x: auto; }\n.rz-admin .rz-help__prose pre code { background: transparent; border: 0; padding: 0; font-size: .82rem; line-height: 1.55; }\n.rz-admin .rz-help__prose blockquote { margin: 0; padding: .2rem 0 .2rem 1rem; border-left: 3px solid var(--signal); color: var(--text-secondary); }\n.rz-admin .rz-help__prose a { color: var(--signal); text-decoration: none; }\n.rz-admin .rz-help__prose a:hover { color: var(--text-primary); }\n.rz-admin .rz-help__prose .rz-table td { white-space: normal; color: var(--text-secondary); }\n.rz-admin .rz-help__pager { display: flex; justify-content: space-between; gap: 1rem; margin-top: 2.5rem; padding-top: 1rem; border-top: 1px solid var(--separator); font-size: .875rem; }\n.rz-admin .rz-help__pager a { display: inline-flex; align-items: center; gap: .35rem; color: var(--text-secondary); text-decoration: none; }\n.rz-admin .rz-help__pager a:hover { color: var(--signal); }\n.rz-admin .rz-arrow--back { transform: none; }\n@media (prefers-reduced-motion: no-preference) { .rz-admin a:hover .rz-arrow--back { transform: translateX(-4px); } }\n\n/* ---- Studio update strip / Settings \u2192 Studio ---------------------------- */\n.rz-admin .rz-update { border: 1px solid color-mix(in srgb, var(--signal) 22%, var(--border)); border-radius: 8px; background: color-mix(in srgb, var(--signal) 5%, var(--surface-1)); padding: .75rem 1.1rem; }\n.rz-admin .rz-update--strip { margin: 0 0 1.5rem; }\n.rz-admin .rz-update__row { display: flex; flex-wrap: wrap; align-items: center; gap: .5rem 1.1rem; }\n.rz-admin .rz-update__title { display: inline-flex; align-items: center; gap: .55rem; font-weight: 600; color: var(--text-primary); }\n.rz-admin .rz-update--line { display: flex; flex-wrap: wrap; align-items: center; gap: .35rem 1rem; padding: .55rem 1.1rem; font-size: .875rem; }\n.rz-admin .rz-update--line .rz-update__later { margin-left: auto; }\n.rz-admin .rz-update__row .rz-update__done { flex: 1; margin-top: .5rem; }\n.rz-admin .rz-update__row .rz-update__later { align-self: flex-end; margin-top: .5rem; }\n.rz-admin .rz-update__title::before { content: \"\"; width: 8px; height: 8px; border-radius: 50%; background: var(--signal); box-shadow: 0 0 0 3px color-mix(in srgb, var(--signal) 18%, transparent); }\n.rz-admin .rz-update__link { display: inline-flex; align-items: center; gap: .3rem; background: none; border: 0; padding: 0; font: inherit; font-size: .875rem; color: var(--signal); cursor: pointer; text-decoration: none; }\n.rz-admin .rz-update__link:hover { color: var(--text-primary); }\n.rz-admin .rz-update__later { margin-left: auto; background: none; border: 0; padding: 0; font: inherit; font-size: .8rem; color: var(--text-muted); cursor: pointer; }\n.rz-admin .rz-update__later:hover { color: var(--text-primary); }\n.rz-admin .rz-update__notes { margin: .6rem 0 0; font-size: .875rem; line-height: 1.55; color: var(--text-secondary); white-space: pre-line; }\n.rz-admin .rz-update__problem { margin: .6rem 0 0; font-size: .875rem; color: var(--status-down); }\n.rz-admin .rz-update__done { display: block; margin-top: .5rem; font-size: .875rem; color: var(--text-secondary); }\n";
|
|
386
396
|
|
|
387
397
|
/**
|
|
388
398
|
* Plain-English facts about how Studio works — the text a site's help
|
|
@@ -475,4 +485,4 @@ declare function searchHelp(query: string, articles?: HelpArticle[]): HelpHit[];
|
|
|
475
485
|
/** Every article as plain text, section by section — what STUDIO_FACTS carries to the assistant. */
|
|
476
486
|
declare function helpAsText(vars?: HelpVars): string;
|
|
477
487
|
|
|
478
|
-
export { ACTION_NAMES, type ActionResult, ContentEditor, type DiscardOutcome, GLOSSARY, HELP_ARTICLES, HELP_SECTIONS, type HelpArticle, type HelpSection, type HelpSectionId, type ImagePayload, InstallTracker, type Installing, Jargon, type ListRow, type MergeOutcome, type PendingSummary, type PublishInput, PublishPanel, RemoveItem, STUDIO_CSS, STUDIO_FACTS, StudioAcceptInvite, StudioAccount, type StudioActions, type StudioContextValue, StudioDashboard, StudioEdit, StudioHelp, StudioList, StudioNew, StudioNoAccess, StudioNotConfigured, StudioProvider, StudioPullRequest, StudioShellFrame, StudioSignIn, StudioTerm, type StudioUpdate, type TeamState, UpdateBody, UpdateStrip, canSeeUpdates, copyFor, fillVars, helpAsText, joinTypes, publicDirOf, searchHelp, useEntry, useInstalling, useStudio };
|
|
488
|
+
export { ACTION_NAMES, type ActionResult, ContentEditor, type DiscardOutcome, GLOSSARY, HELP_ARTICLES, HELP_SECTIONS, type HelpArticle, type HelpSection, type HelpSectionId, type ImagePayload, InstallTracker, type Installing, Jargon, type ListRow, type MergeOutcome, type NudgeOutcome, type PendingSummary, type PublishInput, PublishPanel, RemoveItem, STUDIO_CSS, STUDIO_FACTS, StudioAcceptInvite, StudioAccount, type StudioActions, type StudioContextValue, StudioDashboard, StudioEdit, StudioHelp, StudioList, StudioNew, StudioNoAccess, StudioNotConfigured, StudioProvider, StudioPullRequest, StudioShellFrame, StudioSignIn, StudioTerm, type StudioUpdate, type TeamState, UpdateBody, UpdateStrip, canSeeUpdates, copyFor, fillVars, helpAsText, joinTypes, publicDirOf, searchHelp, useEntry, useInstalling, useStudio };
|
package/dist/studio-ui/index.js
CHANGED
|
@@ -244,7 +244,7 @@ var OutIcon = () => /* @__PURE__ */ jsxs("svg", { ...ico, children: [
|
|
|
244
244
|
/* @__PURE__ */ jsx("path", { d: "M16 17l5-5-5-5" }),
|
|
245
245
|
/* @__PURE__ */ jsx("path", { d: "M21 12H9" })
|
|
246
246
|
] });
|
|
247
|
-
function AccountMenu({ user, role, theme, onTheme, signOutPath, accountHref, helpHref, siteUrl }) {
|
|
247
|
+
function AccountMenu({ user, role, theme, onTheme, signOutPath, accountHref, helpHref, siteUrl, version }) {
|
|
248
248
|
const [open, setOpen] = useState(false);
|
|
249
249
|
const wrap = useRef(null);
|
|
250
250
|
useEffect(() => {
|
|
@@ -297,11 +297,15 @@ function AccountMenu({ user, role, theme, onTheme, signOutPath, accountHref, hel
|
|
|
297
297
|
/* @__PURE__ */ jsx("form", { method: "post", action: signOutPath, className: "rz-menu__signout", children: /* @__PURE__ */ jsxs("button", { type: "submit", role: "menuitem", className: "rz-menu__item", children: [
|
|
298
298
|
/* @__PURE__ */ jsx(OutIcon, {}),
|
|
299
299
|
"Sign out"
|
|
300
|
-
] }) })
|
|
300
|
+
] }) }),
|
|
301
|
+
version && /* @__PURE__ */ jsxs("div", { className: "rz-menu__version", children: [
|
|
302
|
+
"Studio ",
|
|
303
|
+
version
|
|
304
|
+
] })
|
|
301
305
|
] })
|
|
302
306
|
] });
|
|
303
307
|
}
|
|
304
|
-
function TopBar({ siteName, productName, logoUrl, homeHref, siteUrl, user, role, theme, onTheme, signOutPath, accountHref, helpHref }) {
|
|
308
|
+
function TopBar({ siteName, productName, logoUrl, homeHref, siteUrl, user, role, theme, onTheme, signOutPath, accountHref, helpHref, version }) {
|
|
305
309
|
return /* @__PURE__ */ jsxs("header", { className: "rz-topbar", children: [
|
|
306
310
|
/* @__PURE__ */ jsxs(
|
|
307
311
|
"a",
|
|
@@ -322,7 +326,7 @@ function TopBar({ siteName, productName, logoUrl, homeHref, siteUrl, user, role,
|
|
|
322
326
|
"Welcome back, ",
|
|
323
327
|
firstNameOf(user)
|
|
324
328
|
] }),
|
|
325
|
-
/* @__PURE__ */ jsx(AccountMenu, { user, role, theme, onTheme, signOutPath, accountHref, helpHref, siteUrl })
|
|
329
|
+
/* @__PURE__ */ jsx(AccountMenu, { user, role, theme, onTheme, signOutPath, accountHref, helpHref, siteUrl, version })
|
|
326
330
|
] })
|
|
327
331
|
] });
|
|
328
332
|
}
|
|
@@ -403,6 +407,7 @@ var SHELL_CSS = `
|
|
|
403
407
|
.rz-sidebar__collapse:hover { color: var(--text-primary); }
|
|
404
408
|
.rz-sidebar__collapse svg { flex-shrink: 0; }
|
|
405
409
|
.rz-sidebar--collapsed .rz-sidebar__collapse { justify-content: center; padding: .6rem 0; }
|
|
410
|
+
.rz-menu__version { padding: .45rem 1rem .55rem; border-top: 1px solid var(--separator); font-family: var(--rz-font-mono); font-size: .6875rem; letter-spacing: .04em; color: var(--text-muted); }
|
|
406
411
|
.rz-sidebar__version { display: block; padding: 0 1rem .75rem; font-family: var(--rz-font-mono); font-size: .6875rem; letter-spacing: .04em; color: var(--text-muted); opacity: .8; white-space: nowrap; }
|
|
407
412
|
.rz-sidebar--collapsed .rz-sidebar__version { padding: 0 0 .75rem; text-align: center; }
|
|
408
413
|
.rz-main { flex: 1; min-width: 0; }
|
|
@@ -634,7 +639,8 @@ function AdminShell({
|
|
|
634
639
|
onTheme: setTheme,
|
|
635
640
|
signOutPath: signOutPath ?? `${basePath}/auth/signout`,
|
|
636
641
|
accountHref: accountHref === null ? void 0 : accountHref ?? `${basePath}/account`,
|
|
637
|
-
helpHref: helpHref === null ? void 0 : helpHref ?? `${basePath}/help
|
|
642
|
+
helpHref: helpHref === null ? void 0 : helpHref ?? `${basePath}/help`,
|
|
643
|
+
version
|
|
638
644
|
}
|
|
639
645
|
),
|
|
640
646
|
/* @__PURE__ */ jsxs("div", { className: "rz-body", children: [
|
|
@@ -727,7 +733,7 @@ function Tabs({ options, value, onChange, label = "Sections" }) {
|
|
|
727
733
|
}
|
|
728
734
|
|
|
729
735
|
// src/version.ts
|
|
730
|
-
var ADMIN_VERSION = "0.15.
|
|
736
|
+
var ADMIN_VERSION = "0.15.7" ;
|
|
731
737
|
|
|
732
738
|
// src/studio-ui/css.ts
|
|
733
739
|
var STUDIO_CSS = `
|
|
@@ -937,6 +943,10 @@ var STUDIO_CSS = `
|
|
|
937
943
|
.rz-admin .rz-update--strip { margin: 0 0 1.5rem; }
|
|
938
944
|
.rz-admin .rz-update__row { display: flex; flex-wrap: wrap; align-items: center; gap: .5rem 1.1rem; }
|
|
939
945
|
.rz-admin .rz-update__title { display: inline-flex; align-items: center; gap: .55rem; font-weight: 600; color: var(--text-primary); }
|
|
946
|
+
.rz-admin .rz-update--line { display: flex; flex-wrap: wrap; align-items: center; gap: .35rem 1rem; padding: .55rem 1.1rem; font-size: .875rem; }
|
|
947
|
+
.rz-admin .rz-update--line .rz-update__later { margin-left: auto; }
|
|
948
|
+
.rz-admin .rz-update__row .rz-update__done { flex: 1; margin-top: .5rem; }
|
|
949
|
+
.rz-admin .rz-update__row .rz-update__later { align-self: flex-end; margin-top: .5rem; }
|
|
940
950
|
.rz-admin .rz-update__title::before { content: ""; width: 8px; height: 8px; border-radius: 50%; background: var(--signal); box-shadow: 0 0 0 3px color-mix(in srgb, var(--signal) 18%, transparent); }
|
|
941
951
|
.rz-admin .rz-update__link { display: inline-flex; align-items: center; gap: .3rem; background: none; border: 0; padding: 0; font: inherit; font-size: .875rem; color: var(--signal); cursor: pointer; text-decoration: none; }
|
|
942
952
|
.rz-admin .rz-update__link:hover { color: var(--text-primary); }
|
|
@@ -948,14 +958,16 @@ var STUDIO_CSS = `
|
|
|
948
958
|
`;
|
|
949
959
|
var POLL_MS = 8e3;
|
|
950
960
|
var LOCAL_FALLBACK_MS = 15e4;
|
|
961
|
+
var SLOW_MS = 4 * 6e4;
|
|
951
962
|
var GIVE_UP_MS = 15 * 6e4;
|
|
952
|
-
function useDeployed(active, mergedSha) {
|
|
963
|
+
function useDeployed(active, mergedSha, attempt = 0) {
|
|
953
964
|
const [state, setState] = useState("waiting");
|
|
954
965
|
useEffect(() => {
|
|
955
966
|
if (!active) return;
|
|
956
967
|
let stop = false;
|
|
957
968
|
let baseline;
|
|
958
969
|
const started = Date.now();
|
|
970
|
+
setState("waiting");
|
|
959
971
|
const read2 = async () => {
|
|
960
972
|
try {
|
|
961
973
|
const r = await fetch("/api/version", { cache: "no-store" });
|
|
@@ -979,22 +991,24 @@ function useDeployed(active, mergedSha) {
|
|
|
979
991
|
return;
|
|
980
992
|
}
|
|
981
993
|
if (elapsed >= GIVE_UP_MS) {
|
|
982
|
-
setState("
|
|
994
|
+
setState("stalled");
|
|
983
995
|
return;
|
|
984
996
|
}
|
|
997
|
+
if (elapsed >= SLOW_MS) setState("slow");
|
|
985
998
|
setTimeout(tick, POLL_MS);
|
|
986
999
|
};
|
|
987
1000
|
void tick();
|
|
988
1001
|
return () => {
|
|
989
1002
|
stop = true;
|
|
990
1003
|
};
|
|
991
|
-
}, [active, mergedSha]);
|
|
1004
|
+
}, [active, mergedSha, attempt]);
|
|
992
1005
|
return state;
|
|
993
1006
|
}
|
|
994
1007
|
var KEY = "rz-update-installing";
|
|
1008
|
+
var MIN_KEY = "rz-update-minimized";
|
|
995
1009
|
function readInstalling() {
|
|
996
1010
|
try {
|
|
997
|
-
const raw =
|
|
1011
|
+
const raw = localStorage.getItem(KEY);
|
|
998
1012
|
if (!raw) return null;
|
|
999
1013
|
const v = JSON.parse(raw);
|
|
1000
1014
|
return typeof v.version === "string" ? v : null;
|
|
@@ -1004,8 +1018,11 @@ function readInstalling() {
|
|
|
1004
1018
|
}
|
|
1005
1019
|
function writeInstalling(i) {
|
|
1006
1020
|
try {
|
|
1007
|
-
if (i)
|
|
1008
|
-
else
|
|
1021
|
+
if (i) localStorage.setItem(KEY, JSON.stringify(i));
|
|
1022
|
+
else {
|
|
1023
|
+
localStorage.removeItem(KEY);
|
|
1024
|
+
localStorage.removeItem(MIN_KEY);
|
|
1025
|
+
}
|
|
1009
1026
|
} catch {
|
|
1010
1027
|
}
|
|
1011
1028
|
}
|
|
@@ -1026,21 +1043,55 @@ function useInstalling() {
|
|
|
1026
1043
|
return [installing, update];
|
|
1027
1044
|
}
|
|
1028
1045
|
function InstallTracker({ installing, compact = false }) {
|
|
1029
|
-
const
|
|
1046
|
+
const { actions, supportName } = useStudio();
|
|
1047
|
+
const [attempt, setAttempt] = useState(0);
|
|
1048
|
+
const [nudge, setNudge] = useState(null);
|
|
1049
|
+
const deploy = useDeployed(true, installing.sha, attempt);
|
|
1030
1050
|
const live = deploy === "live";
|
|
1051
|
+
const late = deploy === "slow" || deploy === "stalled";
|
|
1052
|
+
const doNudge = async () => {
|
|
1053
|
+
if (!actions.nudgeBuild) return;
|
|
1054
|
+
setNudge("busy");
|
|
1055
|
+
const out = await actions.nudgeBuild();
|
|
1056
|
+
setNudge(out);
|
|
1057
|
+
if (out.state === "sent") setAttempt((n) => n + 1);
|
|
1058
|
+
};
|
|
1059
|
+
const [minimized, setMinimized] = useState(false);
|
|
1060
|
+
useEffect(() => {
|
|
1061
|
+
try {
|
|
1062
|
+
setMinimized(localStorage.getItem(MIN_KEY) === "1");
|
|
1063
|
+
} catch {
|
|
1064
|
+
}
|
|
1065
|
+
}, []);
|
|
1066
|
+
const minimize = (on) => {
|
|
1067
|
+
try {
|
|
1068
|
+
on ? localStorage.setItem(MIN_KEY, "1") : localStorage.removeItem(MIN_KEY);
|
|
1069
|
+
} catch {
|
|
1070
|
+
}
|
|
1071
|
+
setMinimized(on);
|
|
1072
|
+
};
|
|
1073
|
+
const reload = /* @__PURE__ */ jsx("button", { type: "button", className: "rz-update__link", onClick: () => window.location.reload(), children: "Reload Studio" });
|
|
1074
|
+
if (live || minimized && compact) {
|
|
1075
|
+
return /* @__PURE__ */ jsxs("div", { className: `rz-update rz-update--line${compact ? " rz-update--strip" : ""}`, role: "status", children: [
|
|
1076
|
+
/* @__PURE__ */ jsx("span", { className: "rz-update__title", children: live ? `Studio ${installing.version} is live` : `Installing Studio ${installing.version}` }),
|
|
1077
|
+
live ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
1078
|
+
reload,
|
|
1079
|
+
" to start using it."
|
|
1080
|
+
] }) : /* @__PURE__ */ jsx("span", { className: "rz-muted", children: "The website is rebuilding \u2014 keep working." }),
|
|
1081
|
+
!live && /* @__PURE__ */ jsx("button", { type: "button", className: "rz-update__later", onClick: () => minimize(false), children: "Show progress" })
|
|
1082
|
+
] });
|
|
1083
|
+
}
|
|
1031
1084
|
const steps = [
|
|
1032
1085
|
{ label: "Updated", state: "done", note: `Studio ${installing.version}` },
|
|
1033
|
-
{ label: "Live", state:
|
|
1086
|
+
{ label: "Live", state: "active", note: late ? "Taking longer than usual" : "Rebuilding the website" }
|
|
1034
1087
|
];
|
|
1035
1088
|
return /* @__PURE__ */ jsxs("div", { className: `rz-update${compact ? " rz-update--strip" : ""}`, role: "status", children: [
|
|
1036
1089
|
/* @__PURE__ */ jsx(Steps, { steps }),
|
|
1037
|
-
/* @__PURE__ */
|
|
1038
|
-
"Studio ",
|
|
1039
|
-
|
|
1040
|
-
"
|
|
1041
|
-
|
|
1042
|
-
" to start using it \u2014 the version at the foot of the sidebar will change."
|
|
1043
|
-
] }) : "Update accepted. Nothing to do meanwhile \u2014 keep working. The website is rebuilding with the new Studio; this turns green when it's done, in about two minutes." })
|
|
1090
|
+
/* @__PURE__ */ jsxs("div", { className: "rz-update__row", children: [
|
|
1091
|
+
/* @__PURE__ */ jsx("span", { className: "rz-update__done", children: !late ? "Update accepted. Nothing to do meanwhile \u2014 keep working. The website is rebuilding with the new Studio; usually a few minutes, sometimes longer. This turns green when it's done." : nudge === "busy" ? "Asking the hosting service to build again\u2026" : nudge?.state === "sent" ? "Asked. The rebuild should start within a minute; this turns green when it's done." : nudge?.state === "error" ? `That didn't work (${nudge.message}). Tell ${supportName} \u2014 it's a one-click fix on their side.` : nudge?.state === "unavailable" || !actions.nudgeBuild ? `This is taking longer than usual. Occasionally the hosting service misses a rebuild \u2014 tell ${supportName}; it's a one-click fix on their side, and nothing on your website has changed.` : "This is taking longer than usual. Occasionally the hosting service misses a rebuild. You can ask it again \u2014 it's safe to press, nothing on your website changes." }),
|
|
1092
|
+
late && actions.nudgeBuild && nudge !== "busy" && nudge?.state !== "sent" && nudge?.state !== "unavailable" && /* @__PURE__ */ jsx(Button, { size: "sm", onClick: doNudge, children: "Nudge the build" }),
|
|
1093
|
+
compact && /* @__PURE__ */ jsx("button", { type: "button", className: "rz-update__later", onClick: () => minimize(true), children: "Minimize" })
|
|
1094
|
+
] })
|
|
1044
1095
|
] });
|
|
1045
1096
|
}
|
|
1046
1097
|
var HIDE_KEY = "rz-update-later";
|
|
@@ -3173,7 +3224,7 @@ function PublishPanel({ number, htmlUrl, merged, closed = false, branch, removal
|
|
|
3173
3224
|
{
|
|
3174
3225
|
label: removal ? "Removed" : "Live",
|
|
3175
3226
|
state: onSite ? "done" : live ? "active" : "todo",
|
|
3176
|
-
note: onSite ? removal ? "Off the site" : "On the site" : live ? deploy === "
|
|
3227
|
+
note: onSite ? removal ? "Off the site" : "On the site" : live ? deploy === "waiting" ? "Rebuilding the website" : "Taking longer than usual" : "Automatic"
|
|
3177
3228
|
}
|
|
3178
3229
|
];
|
|
3179
3230
|
if (discarded) {
|
|
@@ -3195,7 +3246,7 @@ function PublishPanel({ number, htmlUrl, merged, closed = false, branch, removal
|
|
|
3195
3246
|
}
|
|
3196
3247
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
3197
3248
|
/* @__PURE__ */ jsx(Steps, { steps }),
|
|
3198
|
-
live ? onSite ? /* @__PURE__ */ jsx("p", { style: { margin: 0 }, children: removal ? `Done \u2014 the ${noun} is off the website.` : "Done \u2014 your change is on the website now." }) : deploy === "slow" ? /* @__PURE__ */ jsx("p", { style: { margin: 0 }, children: "The site is taking longer than usual to rebuild. It will get there; check back in a few minutes." }) : /* @__PURE__ */ jsx("p", { style: { margin: 0 }, children: "Published. The website is rebuilding with your change \u2014
|
|
3249
|
+
live ? onSite ? /* @__PURE__ */ jsx("p", { style: { margin: 0 }, children: removal ? `Done \u2014 the ${noun} is off the website.` : "Done \u2014 your change is on the website now." }) : deploy === "stalled" ? /* @__PURE__ */ jsx("p", { style: { margin: 0 }, children: "The website still hasn't rebuilt. Your change is saved and published; the rebuild just hasn't happened. Tell your web team \u2014 it's a one-click fix on their side." }) : deploy === "slow" ? /* @__PURE__ */ jsx("p", { style: { margin: 0 }, children: "The site is taking longer than usual to rebuild. It will get there; check back in a few minutes." }) : /* @__PURE__ */ jsx("p", { style: { margin: 0 }, children: "Published. The website is rebuilding with your change \u2014 usually a few minutes. Stay here and this page will tell you the moment it's live; if you look at the site before then you'll still see the old version." }) : stale ? /* @__PURE__ */ jsxs("div", { className: "rz-alert admin__alert", children: [
|
|
3199
3250
|
"Someone else changed this file first. ",
|
|
3200
3251
|
/* @__PURE__ */ jsx(Link3, { href: "/admin", children: "Open it again" }),
|
|
3201
3252
|
", make your change on the latest version, and publish."
|
|
@@ -3215,7 +3266,7 @@ function PublishPanel({ number, htmlUrl, merged, closed = false, branch, removal
|
|
|
3215
3266
|
noun
|
|
3216
3267
|
] })),
|
|
3217
3268
|
/* @__PURE__ */ jsx(LinkButton, { variant: removal || !liveUrl ? "primary" : "secondary", href: listUrl, children: backLabel }),
|
|
3218
|
-
live && !onSite && /* @__PURE__ */ jsx("span", { className: "rz-actions__hint", children: deploy === "
|
|
3269
|
+
live && !onSite && /* @__PURE__ */ jsx("span", { className: "rz-actions__hint", children: deploy === "waiting" ? "Waiting for the site to rebuild\u2026" : "Still rebuilding." })
|
|
3219
3270
|
] }) : /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
3220
3271
|
/* @__PURE__ */ jsx(Button, { variant: "primary", disabled: pending || !ready, onClick: publish, children: pending ? "Publishing\u2026" : "Publish" }),
|
|
3221
3272
|
previewUrl && ready && /* @__PURE__ */ jsx(LinkButton, { external: true, href: previewUrl, children: "Preview the change" }),
|
|
@@ -5219,7 +5270,7 @@ The new version didn't build cleanly against your website. Nothing was installed
|
|
|
5219
5270
|
|
|
5220
5271
|
## The tracker is stuck on "Live"
|
|
5221
5272
|
|
|
5222
|
-
The rebuild usually takes
|
|
5273
|
+
The rebuild usually takes a few minutes. After a while the tracker says *taking longer than usual* and, on most sites, offers **Nudge the build**. Press it \u2014 it asks the hosting service to build the website again. It's safe: the update is already accepted, nothing on your website changes, and pressing it twice does no harm. If the button isn't there, or it doesn't help within ten minutes, tell {supportName}; it's a one-click fix on their side. Either way you can leave the page and come back \u2014 the tracker remembers.
|
|
5223
5274
|
|
|
5224
5275
|
## I'm not seeing updates at all
|
|
5225
5276
|
|
|
@@ -5665,6 +5716,7 @@ function BackArrow() {
|
|
|
5665
5716
|
// src/studio-ui/types.ts
|
|
5666
5717
|
var ACTION_NAMES = [
|
|
5667
5718
|
"updateStudio",
|
|
5719
|
+
"nudgeBuild",
|
|
5668
5720
|
"publishContent",
|
|
5669
5721
|
"removeContent",
|
|
5670
5722
|
"mergeContentPr",
|