[pull] main from TryGhost:main#1358
Merged
Merged
Conversation
no ref - replaced the raw offers table markup with Shade `Table` primitives - replaced bespoke active, inactive and archived pills with Shade `Badge` - moved table surfaces, borders and secondary text onto semantic Shade tokens - changed click-only anchors into buttons while keeping redemption destinations as links - fixed sorting so Date added, Name, Redemptions and direction apply to every visible signup and retention row - derived retention-row dates from the latest underlying retention offer - added acceptance coverage for every sorting option and both directions
ref [GVA-868](https://linear.app/ghost/issue/GVA-868/allow-billing-to-navigate-to-approved-ghost-admin-settings) Ember-only changes silently never shipped: `@tryghost/admin:build` lists `ghost-admin` in `dependsOn`, which orders the Ember build before the React build but creates no project-graph edge, and Nx computes the `^default` input hash from graph dependencies only. An Ember-only source change therefore never invalidated `@tryghost/admin:build`, so CI restored the whole combined `apps/admin/dist` (and `ghost/core/core/built/admin`) from the remote cache while the freshly built Ember output was silently discarded — the build for merge commit `e91932a4037` served an Ember bundle byte-identical to the pre-merge build, with the new billing navigation code missing, even though `ghost-admin:build` itself ran as a cache miss in the same job. Declaring `ghost-admin` as a `workspace:*` devDependency of `@tryghost/admin` gives pnpm and Nx the same source of truth: Nx derives the graph edge from it, putting Ember sources into the build hash (`nx show projects --affected --files=apps/ember-admin/...` now lists `@tryghost/admin`), and pnpm's filtered installs follow it, so the Playwright acceptance job's `pnpm install --filter @tryghost/admin...` installs the Ember app's toolchain for the `ghost-admin:build` task that now runs in its `^build` chain. `apps/ember-admin` has no dependency back on `@tryghost/admin`, so no cycle is introduced.
…ipients` table (#29529) closes https://linear.app/ghost/issue/NY-1487/ ## Summary - Added track_clicks and clicked_at columns to automated email recipients - Updated the current schema definition and integrity hash
closes [NY-1466](https://linear.app/ghost/issue/NY-1466) When "Email opens" or "Email clicks" is disabled in Settings → Analytics, automation email metrics show a muted "Off" instead of a number — on the canvas step footer and in the step sidebar's Email performance panel. Metrics stay in place rather than hiding, and "Off" is distinct from "--" (tracking on, no data yet). Untracked sidebar tiles get a hover card explaining why, their chart rings fade to an empty track, and the status is exposed to screen readers. Display-only — re-enabling tracking restores the numbers immediately. Gated behind the `automationAnalytics` labs flag. To test: open an automation with a Send email step and toggle the two settings. Note that there's no actual click data yet, so you'll only see "Off" or "--". demo: https://github.com/user-attachments/assets/d9b39db9-2401-49fe-b418-ffbca01b1be1
no ref - added a small compound `ActionList` component to Shade for reusable title/detail/action rows - migrated Settings lists and row-style pseudo-tables to `ActionList` - migrated the webhooks grid to the semantic Shade `Table` - kept recommendation reveal/loading behavior local to recommendations - removed the legacy Admin X `List`, `Table`, `DynamicTable`, `Pagination`, and duplicate pagination hook, including their stories and tests
…able (#29532) closes https://linear.app/ghost/issue/NY-1488/add-nullable-email-clicked-count-to-automation-action-revisions ## Summary - Adds a nullable unsigned email_clicked_count column to automation_action_revisions - This column is dormant for now, but will be populated soon
no ref - Replaced every admin settings use of the legacy Heading, Link, and IconLabel components with Shade primitives or semantic elements. - Updated legacy design-system internals and shared form labels to render through Shade while the package is being retired. - Removed the legacy components, their stories, and their exports. - Aligned Mailgun controls and shared TextField, HtmlField, and CodeEditor labels with current Settings field styling. - Permitted the one-way admin-x-design-system to Shade migration dependency while continuing to forbid dependencies on admin-x-framework.
no ref - added a reusable Shade image-upload pattern built on `Dropzone` - expanded `Dropzone` with filled and button variants plus input accessibility/test hooks - migrated Settings image and file uploads, pasted dropzones, and Pintura file inputs to Shade - removed the legacy design-system `ImageUpload` and `FileUpload` components - fixed custom-integration modal overflow with long API keys - restored persistent profile-upload and cover-action backgrounds via Shade inverse-surface tokens
…9539) closes https://linear.app/ghost/issue/NY-1464 closes https://linear.app/ghost/issue/NY-1476 What ---- Adds an index to improve performance. Along the way, had to add support for [index prefixes in isMySQL][0]. Why --- MySQL can't index long `VARCHAR`s in full. You can solve this by hashing the value or by using an [index prefix][0], which effectively only indexes the first *N* characters. We chose the latter: an index prefix. We don't need uniqueness so it's okay if there's a little overlap. The bulk of this PR adds support for those index prefixes, with the actual migration as a little sprinkle on top. Test plan --------- Added several automated tests. Also manually ran this SQL and checked the output, on _both_ a fresh database and a migrated one: ```sql SELECT * FROM information_schema.STATISTICS WHERE table_name = 'automated_email_recipients' AND column_name = 'mailgun_message_id'; ``` I **did not** test this with real data on staging because (1) I didn't want to (2) I think it's _relatively_ low-risk. Happy to do that if you think I should. [0]: https://dev.mysql.com/doc/refman/8.4/en/column-indexes.html#column-indexes-prefix
no ref - added reusable Shade `SortableList`, `DragIndicator`, and `StickyFooter` components - expanded the Shade color picker pattern with reusable triggers and swatches - moved settings-specific CodeMirror, HTML/Koenig, infinite-scroll, sorting-hook, and Stripe behavior into admin-x-settings - migrated navigation, tier benefits, newsletters, color fields, editors, history loading, Stripe controls, and sticky footers - removed the matching admin-x-design-system components, stories, exports, and dependencies - preserved immediate Escape handling so a color picker closes without closing its parent modal - added item-specific accessible names to drag handles
no ref - added a shared Shade `DirtyConfirmDialog` pattern and controller hook, with a Storybook story and unit coverage - migrated Settings exit guards, tips preview, welcome-email design, and legacy modal close paths off the NiceModal-based `confirmIfDirty` helper - moved legacy text fields, editors, and Settings sidebar focus tracking onto Shade's existing focus context - removed the duplicate dirty/focus providers and legacy dirty-confirmation implementation from `admin-x-design-system` - allowed AlertDialog consumers to raise the overlay with the content so confirmations stay above legacy Settings modals
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
See Commits and Changes for more details.
Created by
pull[bot] (v2.0.0-alpha.4)
Can you help keep this open source service alive? 💖 Please sponsor : )