@realiizlabs/admin 0.15.6 → 0.15.8
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 +95 -28
- 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 +95 -28
- 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.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; white-space: nowrap; }\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/* Phones: sections become one row of chips that scrolls sideways above the content (must come\n after the desktop rules above \u2014 same specificity, last one wins). */\n@media (max-width: 760px) {\n .rz-admin .rz-help__body { grid-template-columns: 1fr; gap: 1rem; }\n .rz-admin .rz-help__nav { position: static; flex-direction: row; gap: .35rem; overflow-x: auto; scrollbar-width: none; -webkit-overflow-scrolling: touch; margin: 0 -14px; padding: .1rem 14px .4rem; -webkit-mask-image: linear-gradient(90deg, #000 calc(100% - 2.5rem), transparent); mask-image: linear-gradient(90deg, #000 calc(100% - 2.5rem), transparent); }\n .rz-admin .rz-help__nav::-webkit-scrollbar { display: none; }\n .rz-admin .rz-help__navitem { flex: 0 0 auto; border: 1px solid var(--border); border-radius: 999px; padding: .4rem .8rem; background: var(--surface-1); }\n .rz-admin .rz-help__navitem--active { border-color: var(--signal); }\n}\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.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; white-space: nowrap; }\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/* Phones: sections become one row of chips that scrolls sideways above the content (must come\n after the desktop rules above \u2014 same specificity, last one wins). */\n@media (max-width: 760px) {\n .rz-admin .rz-help__body { grid-template-columns: 1fr; gap: 1rem; }\n .rz-admin .rz-help__nav { position: static; flex-direction: row; gap: .35rem; overflow-x: auto; scrollbar-width: none; -webkit-overflow-scrolling: touch; margin: 0 -14px; padding: .1rem 14px .4rem; -webkit-mask-image: linear-gradient(90deg, #000 calc(100% - 2.5rem), transparent); mask-image: linear-gradient(90deg, #000 calc(100% - 2.5rem), transparent); }\n .rz-admin .rz-help__nav::-webkit-scrollbar { display: none; }\n .rz-admin .rz-help__navitem { flex: 0 0 auto; border: 1px solid var(--border); border-radius: 999px; padding: .4rem .8rem; background: var(--surface-1); }\n .rz-admin .rz-help__navitem--active { border-color: var(--signal); }\n}\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.8" ;
|
|
731
737
|
|
|
732
738
|
// src/studio-ui/css.ts
|
|
733
739
|
var STUDIO_CSS = `
|
|
@@ -894,12 +900,20 @@ var STUDIO_CSS = `
|
|
|
894
900
|
.rz-admin .rz-help__search svg { position: absolute; left: .9rem; top: 50%; transform: translateY(-50%); color: var(--text-muted); pointer-events: none; }
|
|
895
901
|
.rz-admin .rz-help__search input { width: 100%; padding-left: 2.6rem; font-size: 1rem; }
|
|
896
902
|
.rz-admin .rz-help__body { display: grid; grid-template-columns: 13rem minmax(0, 1fr); gap: 2rem; align-items: start; }
|
|
897
|
-
@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; } }
|
|
898
903
|
.rz-admin .rz-help__nav { position: sticky; top: calc(var(--rz-topbar) + 1rem); display: flex; flex-direction: column; gap: .1rem; }
|
|
899
|
-
.rz-admin .rz-help__navitem { padding: .45rem .75rem; border-radius: 6px; color: var(--text-secondary); text-decoration: none; font-size: .875rem; }
|
|
904
|
+
.rz-admin .rz-help__navitem { padding: .45rem .75rem; border-radius: 6px; color: var(--text-secondary); text-decoration: none; font-size: .875rem; white-space: nowrap; }
|
|
900
905
|
.rz-admin .rz-help__navitem:hover { background: var(--surface-2); color: var(--text-primary); }
|
|
901
906
|
.rz-admin .rz-help__navitem--active { background: var(--surface-2); color: var(--signal); font-weight: 500; }
|
|
902
907
|
.rz-admin .rz-help__main { max-width: 44rem; min-width: 0; }
|
|
908
|
+
/* Phones: sections become one row of chips that scrolls sideways above the content (must come
|
|
909
|
+
after the desktop rules above \u2014 same specificity, last one wins). */
|
|
910
|
+
@media (max-width: 760px) {
|
|
911
|
+
.rz-admin .rz-help__body { grid-template-columns: 1fr; gap: 1rem; }
|
|
912
|
+
.rz-admin .rz-help__nav { position: static; flex-direction: row; gap: .35rem; overflow-x: auto; scrollbar-width: none; -webkit-overflow-scrolling: touch; margin: 0 -14px; padding: .1rem 14px .4rem; -webkit-mask-image: linear-gradient(90deg, #000 calc(100% - 2.5rem), transparent); mask-image: linear-gradient(90deg, #000 calc(100% - 2.5rem), transparent); }
|
|
913
|
+
.rz-admin .rz-help__nav::-webkit-scrollbar { display: none; }
|
|
914
|
+
.rz-admin .rz-help__navitem { flex: 0 0 auto; border: 1px solid var(--border); border-radius: 999px; padding: .4rem .8rem; background: var(--surface-1); }
|
|
915
|
+
.rz-admin .rz-help__navitem--active { border-color: var(--signal); }
|
|
916
|
+
}
|
|
903
917
|
.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; }
|
|
904
918
|
.rz-admin .rz-help__blurb { color: var(--text-secondary); margin: 0 0 1.25rem; }
|
|
905
919
|
.rz-admin .rz-help__count { color: var(--text-muted); font-size: .85rem; margin: 0 0 .75rem; }
|
|
@@ -937,6 +951,10 @@ var STUDIO_CSS = `
|
|
|
937
951
|
.rz-admin .rz-update--strip { margin: 0 0 1.5rem; }
|
|
938
952
|
.rz-admin .rz-update__row { display: flex; flex-wrap: wrap; align-items: center; gap: .5rem 1.1rem; }
|
|
939
953
|
.rz-admin .rz-update__title { display: inline-flex; align-items: center; gap: .55rem; font-weight: 600; color: var(--text-primary); }
|
|
954
|
+
.rz-admin .rz-update--line { display: flex; flex-wrap: wrap; align-items: center; gap: .35rem 1rem; padding: .55rem 1.1rem; font-size: .875rem; }
|
|
955
|
+
.rz-admin .rz-update--line .rz-update__later { margin-left: auto; }
|
|
956
|
+
.rz-admin .rz-update__row .rz-update__done { flex: 1; margin-top: .5rem; }
|
|
957
|
+
.rz-admin .rz-update__row .rz-update__later { align-self: flex-end; margin-top: .5rem; }
|
|
940
958
|
.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
959
|
.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
960
|
.rz-admin .rz-update__link:hover { color: var(--text-primary); }
|
|
@@ -948,14 +966,16 @@ var STUDIO_CSS = `
|
|
|
948
966
|
`;
|
|
949
967
|
var POLL_MS = 8e3;
|
|
950
968
|
var LOCAL_FALLBACK_MS = 15e4;
|
|
969
|
+
var SLOW_MS = 4 * 6e4;
|
|
951
970
|
var GIVE_UP_MS = 15 * 6e4;
|
|
952
|
-
function useDeployed(active, mergedSha) {
|
|
971
|
+
function useDeployed(active, mergedSha, attempt = 0) {
|
|
953
972
|
const [state, setState] = useState("waiting");
|
|
954
973
|
useEffect(() => {
|
|
955
974
|
if (!active) return;
|
|
956
975
|
let stop = false;
|
|
957
976
|
let baseline;
|
|
958
977
|
const started = Date.now();
|
|
978
|
+
setState("waiting");
|
|
959
979
|
const read2 = async () => {
|
|
960
980
|
try {
|
|
961
981
|
const r = await fetch("/api/version", { cache: "no-store" });
|
|
@@ -979,22 +999,24 @@ function useDeployed(active, mergedSha) {
|
|
|
979
999
|
return;
|
|
980
1000
|
}
|
|
981
1001
|
if (elapsed >= GIVE_UP_MS) {
|
|
982
|
-
setState("
|
|
1002
|
+
setState("stalled");
|
|
983
1003
|
return;
|
|
984
1004
|
}
|
|
1005
|
+
if (elapsed >= SLOW_MS) setState("slow");
|
|
985
1006
|
setTimeout(tick, POLL_MS);
|
|
986
1007
|
};
|
|
987
1008
|
void tick();
|
|
988
1009
|
return () => {
|
|
989
1010
|
stop = true;
|
|
990
1011
|
};
|
|
991
|
-
}, [active, mergedSha]);
|
|
1012
|
+
}, [active, mergedSha, attempt]);
|
|
992
1013
|
return state;
|
|
993
1014
|
}
|
|
994
1015
|
var KEY = "rz-update-installing";
|
|
1016
|
+
var MIN_KEY = "rz-update-minimized";
|
|
995
1017
|
function readInstalling() {
|
|
996
1018
|
try {
|
|
997
|
-
const raw =
|
|
1019
|
+
const raw = localStorage.getItem(KEY);
|
|
998
1020
|
if (!raw) return null;
|
|
999
1021
|
const v = JSON.parse(raw);
|
|
1000
1022
|
return typeof v.version === "string" ? v : null;
|
|
@@ -1004,8 +1026,11 @@ function readInstalling() {
|
|
|
1004
1026
|
}
|
|
1005
1027
|
function writeInstalling(i) {
|
|
1006
1028
|
try {
|
|
1007
|
-
if (i)
|
|
1008
|
-
else
|
|
1029
|
+
if (i) localStorage.setItem(KEY, JSON.stringify(i));
|
|
1030
|
+
else {
|
|
1031
|
+
localStorage.removeItem(KEY);
|
|
1032
|
+
localStorage.removeItem(MIN_KEY);
|
|
1033
|
+
}
|
|
1009
1034
|
} catch {
|
|
1010
1035
|
}
|
|
1011
1036
|
}
|
|
@@ -1026,21 +1051,56 @@ function useInstalling() {
|
|
|
1026
1051
|
return [installing, update];
|
|
1027
1052
|
}
|
|
1028
1053
|
function InstallTracker({ installing, compact = false }) {
|
|
1029
|
-
const
|
|
1054
|
+
const { actions, supportName } = useStudio();
|
|
1055
|
+
const [attempt, setAttempt] = useState(0);
|
|
1056
|
+
const [nudge, setNudge] = useState(null);
|
|
1057
|
+
const deploy = useDeployed(true, installing.sha, attempt);
|
|
1030
1058
|
const live = deploy === "live";
|
|
1059
|
+
const late = deploy === "slow" || deploy === "stalled";
|
|
1060
|
+
const doNudge = async () => {
|
|
1061
|
+
if (!actions.nudgeBuild) return;
|
|
1062
|
+
setNudge("busy");
|
|
1063
|
+
const out = await actions.nudgeBuild();
|
|
1064
|
+
setNudge(out);
|
|
1065
|
+
if (out.state === "sent") setAttempt((n) => n + 1);
|
|
1066
|
+
};
|
|
1067
|
+
const [minimized, setMinimized] = useState(false);
|
|
1068
|
+
useEffect(() => {
|
|
1069
|
+
try {
|
|
1070
|
+
setMinimized(localStorage.getItem(MIN_KEY) === "1");
|
|
1071
|
+
} catch {
|
|
1072
|
+
}
|
|
1073
|
+
}, []);
|
|
1074
|
+
const minimize = (on) => {
|
|
1075
|
+
try {
|
|
1076
|
+
if (on) localStorage.setItem(MIN_KEY, "1");
|
|
1077
|
+
else localStorage.removeItem(MIN_KEY);
|
|
1078
|
+
} catch {
|
|
1079
|
+
}
|
|
1080
|
+
setMinimized(on);
|
|
1081
|
+
};
|
|
1082
|
+
const reload = /* @__PURE__ */ jsx("button", { type: "button", className: "rz-update__link", onClick: () => window.location.reload(), children: "Reload Studio" });
|
|
1083
|
+
if (live || minimized && compact) {
|
|
1084
|
+
return /* @__PURE__ */ jsxs("div", { className: `rz-update rz-update--line${compact ? " rz-update--strip" : ""}`, role: "status", children: [
|
|
1085
|
+
/* @__PURE__ */ jsx("span", { className: "rz-update__title", children: live ? `Studio ${installing.version} is live` : `Installing Studio ${installing.version}` }),
|
|
1086
|
+
live ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
1087
|
+
reload,
|
|
1088
|
+
" to start using it."
|
|
1089
|
+
] }) : /* @__PURE__ */ jsx("span", { className: "rz-muted", children: "The website is rebuilding \u2014 keep working." }),
|
|
1090
|
+
!live && /* @__PURE__ */ jsx("button", { type: "button", className: "rz-update__later", onClick: () => minimize(false), children: "Show progress" })
|
|
1091
|
+
] });
|
|
1092
|
+
}
|
|
1031
1093
|
const steps = [
|
|
1032
1094
|
{ label: "Updated", state: "done", note: `Studio ${installing.version}` },
|
|
1033
|
-
{ label: "Live", state:
|
|
1095
|
+
{ label: "Live", state: "active", note: late ? "Taking longer than usual" : "Rebuilding the website" }
|
|
1034
1096
|
];
|
|
1035
1097
|
return /* @__PURE__ */ jsxs("div", { className: `rz-update${compact ? " rz-update--strip" : ""}`, role: "status", children: [
|
|
1036
1098
|
/* @__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." })
|
|
1099
|
+
/* @__PURE__ */ jsxs("div", { className: "rz-update__row", children: [
|
|
1100
|
+
/* @__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." }),
|
|
1101
|
+
late && actions.nudgeBuild && nudge !== "busy" && nudge?.state !== "sent" && nudge?.state !== "unavailable" && /* @__PURE__ */ jsx(Button, { size: "sm", onClick: doNudge, children: "Nudge the build" }),
|
|
1102
|
+
compact && /* @__PURE__ */ jsx("button", { type: "button", className: "rz-update__later", onClick: () => minimize(true), children: "Minimize" })
|
|
1103
|
+
] })
|
|
1044
1104
|
] });
|
|
1045
1105
|
}
|
|
1046
1106
|
var HIDE_KEY = "rz-update-later";
|
|
@@ -3173,7 +3233,7 @@ function PublishPanel({ number, htmlUrl, merged, closed = false, branch, removal
|
|
|
3173
3233
|
{
|
|
3174
3234
|
label: removal ? "Removed" : "Live",
|
|
3175
3235
|
state: onSite ? "done" : live ? "active" : "todo",
|
|
3176
|
-
note: onSite ? removal ? "Off the site" : "On the site" : live ? deploy === "
|
|
3236
|
+
note: onSite ? removal ? "Off the site" : "On the site" : live ? deploy === "waiting" ? "Rebuilding the website" : "Taking longer than usual" : "Automatic"
|
|
3177
3237
|
}
|
|
3178
3238
|
];
|
|
3179
3239
|
if (discarded) {
|
|
@@ -3195,7 +3255,7 @@ function PublishPanel({ number, htmlUrl, merged, closed = false, branch, removal
|
|
|
3195
3255
|
}
|
|
3196
3256
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
3197
3257
|
/* @__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
|
|
3258
|
+
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
3259
|
"Someone else changed this file first. ",
|
|
3200
3260
|
/* @__PURE__ */ jsx(Link3, { href: "/admin", children: "Open it again" }),
|
|
3201
3261
|
", make your change on the latest version, and publish."
|
|
@@ -3215,7 +3275,7 @@ function PublishPanel({ number, htmlUrl, merged, closed = false, branch, removal
|
|
|
3215
3275
|
noun
|
|
3216
3276
|
] })),
|
|
3217
3277
|
/* @__PURE__ */ jsx(LinkButton, { variant: removal || !liveUrl ? "primary" : "secondary", href: listUrl, children: backLabel }),
|
|
3218
|
-
live && !onSite && /* @__PURE__ */ jsx("span", { className: "rz-actions__hint", children: deploy === "
|
|
3278
|
+
live && !onSite && /* @__PURE__ */ jsx("span", { className: "rz-actions__hint", children: deploy === "waiting" ? "Waiting for the site to rebuild\u2026" : "Still rebuilding." })
|
|
3219
3279
|
] }) : /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
3220
3280
|
/* @__PURE__ */ jsx(Button, { variant: "primary", disabled: pending || !ready, onClick: publish, children: pending ? "Publishing\u2026" : "Publish" }),
|
|
3221
3281
|
previewUrl && ready && /* @__PURE__ */ jsx(LinkButton, { external: true, href: previewUrl, children: "Preview the change" }),
|
|
@@ -5219,7 +5279,7 @@ The new version didn't build cleanly against your website. Nothing was installed
|
|
|
5219
5279
|
|
|
5220
5280
|
## The tracker is stuck on "Live"
|
|
5221
5281
|
|
|
5222
|
-
The rebuild usually takes
|
|
5282
|
+
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
5283
|
|
|
5224
5284
|
## I'm not seeing updates at all
|
|
5225
5285
|
|
|
@@ -5546,6 +5606,12 @@ function StudioHelp() {
|
|
|
5546
5606
|
};
|
|
5547
5607
|
const hits = q.trim().length > 1 ? searchHelp(q) : null;
|
|
5548
5608
|
const activeSection = view.kind === "section" ? view.id : view.article.section;
|
|
5609
|
+
const nav = useRef(null);
|
|
5610
|
+
useEffect(() => {
|
|
5611
|
+
const el = nav.current;
|
|
5612
|
+
if (!el || el.scrollWidth <= el.clientWidth) return;
|
|
5613
|
+
el.querySelector(".rz-help__navitem--active")?.scrollIntoView?.({ inline: "center", block: "nearest" });
|
|
5614
|
+
}, [activeSection, hits]);
|
|
5549
5615
|
return /* @__PURE__ */ jsxs("div", { ref: top, className: "rz-help", children: [
|
|
5550
5616
|
/* @__PURE__ */ jsx(PageHeader, { eyebrow: "Help", title: "Help center", subtitle: "Everything about running your website from Studio, in plain English. Search, or browse by section." }),
|
|
5551
5617
|
/* @__PURE__ */ jsxs("div", { className: "rz-help__search", children: [
|
|
@@ -5569,7 +5635,7 @@ function StudioHelp() {
|
|
|
5569
5635
|
)
|
|
5570
5636
|
] }),
|
|
5571
5637
|
/* @__PURE__ */ jsxs("div", { className: "rz-help__body", children: [
|
|
5572
|
-
/* @__PURE__ */ jsx("nav", { className: "rz-help__nav", "aria-label": "Help sections", children: HELP_SECTIONS.map((s) => /* @__PURE__ */ jsx("a", { href: `#s-${s.id}`, className: `rz-help__navitem${!hits && activeSection === s.id ? " rz-help__navitem--active" : ""}`, onClick: (e) => {
|
|
5638
|
+
/* @__PURE__ */ jsx("nav", { ref: nav, className: "rz-help__nav", "aria-label": "Help sections", children: HELP_SECTIONS.map((s) => /* @__PURE__ */ jsx("a", { href: `#s-${s.id}`, className: `rz-help__navitem${!hits && activeSection === s.id ? " rz-help__navitem--active" : ""}`, onClick: (e) => {
|
|
5573
5639
|
e.preventDefault();
|
|
5574
5640
|
go(`s-${s.id}`);
|
|
5575
5641
|
}, children: s.title }, s.id)) }),
|
|
@@ -5665,6 +5731,7 @@ function BackArrow() {
|
|
|
5665
5731
|
// src/studio-ui/types.ts
|
|
5666
5732
|
var ACTION_NAMES = [
|
|
5667
5733
|
"updateStudio",
|
|
5734
|
+
"nudgeBuild",
|
|
5668
5735
|
"publishContent",
|
|
5669
5736
|
"removeContent",
|
|
5670
5737
|
"mergeContentPr",
|