Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
44 commits
Select commit Hold shift + click to select a range
b9cd172
feat: show cloud loading status notices
imantsk Jul 23, 2026
6a32210
feat: add cloud preview quick actions
imantsk Jul 23, 2026
4ad2118
fix: align preview modal type badge
imantsk Jul 23, 2026
651de0d
fix: prioritize loading state over stale search errors
imantsk Jul 23, 2026
f78f3bf
fix: label cloud status notices
imantsk Jul 23, 2026
bbd20a3
fix: announce cloud request status
imantsk Jul 24, 2026
2f9cb8b
fix: refresh cloud actions after download
imantsk Jul 24, 2026
f740d76
fix: place preview badge in content flow
imantsk Jul 24, 2026
0397e17
fix: establish cloud card view in e2e
imantsk Jul 24, 2026
04ac272
fix: export cloud download button props
imantsk Jul 24, 2026
f71d56e
fix: stabilize preview badge test
imantsk Jul 24, 2026
cba70d5
fix: share cloud download state
imantsk Jul 24, 2026
d8fe0f8
fix: isolate cloud download e2e state
imantsk Jul 24, 2026
910c91e
fix: scope cloud action assertions
imantsk Jul 24, 2026
4b8e6af
fix: align cloud table header
imantsk Jul 27, 2026
8bac780
fix: move preview badge into modal header
imantsk Jul 27, 2026
1f58207
fix: pad preview trash action
imantsk Jul 27, 2026
cd5ea61
fix: center list table checkboxes
imantsk Jul 27, 2026
6de3e7b
fix: align list table action colors
imantsk Jul 27, 2026
6b83a0c
fix: strengthen checkbox alignment selector
imantsk Jul 27, 2026
20dc140
fix: center snippet row contents
imantsk Jul 27, 2026
f0f88ea
fix: unify plugin checkbox styles
imantsk Jul 27, 2026
8847b8f
fix: align list table column padding
imantsk Jul 27, 2026
5ae6fa2
fix: use neutral border for unchecked checkboxes
imantsk Jul 27, 2026
7d0105c
fix: filter notices from settings screen
imantsk Jul 27, 2026
0f47cec
test: assert cloud status notice ownership
imantsk Jul 27, 2026
6e1e917
Merge branch 'fix/166-ui-review-fixes' into feat/community-cloud-polish
imantsk Jul 27, 2026
4b14272
chore: merge list table alignment
imantsk Jul 27, 2026
2d3add9
Merge branch 'fix/canonical-checkbox' into feat/community-cloud-polish
imantsk Jul 27, 2026
4b6e160
fix: match column padding across snippet tables
imantsk Jul 27, 2026
344424d
fix: add a focus ring to snippet type badges
imantsk Jul 27, 2026
7265bc5
fix: align snippet table cell contents
imantsk Jul 27, 2026
44ec2a3
fix: enlarge the checkbox checkmark
imantsk Jul 27, 2026
b9967ff
fix: match the add new button to other plugin buttons
imantsk Jul 27, 2026
bd7ab9d
fix: hide foreign notices on every plugin screen
imantsk Jul 27, 2026
6686f53
fix: match row action hover colour to snippet links
imantsk Jul 28, 2026
02fcc06
fix: apply plugin button styles to modal actions
imantsk Jul 28, 2026
0b0d2c5
fix: align the upgrade button icon
imantsk Jul 28, 2026
328d64e
fix: mark rendered notices as plugin owned
imantsk Jul 28, 2026
669ccbd
test: consolidate list table and cloud coverage
imantsk Jul 28, 2026
72d3ac0
docs: condense notice filter style comment
imantsk Jul 28, 2026
9eb1e35
test: assert cloud download state before refresh
imantsk Jul 28, 2026
412b95c
test: reset stored cloud view without the toolbar
imantsk Jul 28, 2026
fa41e4e
refactor: combine foreign notice selectors
imantsk Jul 28, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 2 additions & 28 deletions src/css/common/_cards.scss
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
@use 'checkbox';
@use 'theme';

.code-snippets-cards {
Expand Down Expand Up @@ -84,34 +85,7 @@
}

input[type='checkbox'].snippet-card-select {
appearance: none;
display: grid;
place-content: center;
inline-size: 20px;
block-size: 20px;
padding: 0;
box-sizing: border-box;
background: #fff;
border: 1.5px solid theme.$accent;
border-radius: 5px;
box-shadow: 0 2px 2px rgb(0 0 0 / 5%);
cursor: pointer;

&::before {
content: none;
}

&:checked {
background: theme.$accent;

&::before {
content: '';
inline-size: 14px;
block-size: 14px;
margin: 0;
background: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3E%3Cpath d='M14.83 4.89l1.34.94-5.81 8.38H9.02L5.78 9.67l1.34-1.25 2.57 2.4z' fill='%23fff'/%3E%3C/svg%3E") center/14px no-repeat;
}
}
@include checkbox.canonical;
}

&.is-selectable .card-inner > h3 {
Expand Down
35 changes: 35 additions & 0 deletions src/css/common/_checkbox.scss
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
@use 'theme';

@mixin canonical {
appearance: none;
display: inline-grid;
place-content: center;
vertical-align: middle;
inline-size: 20px;
block-size: 20px;
padding: 0;
margin: 0;
box-sizing: border-box;
background: #fff;
border: 1.5px solid theme.$control-border;
border-radius: 5px;
box-shadow: 0 2px 2px rgb(0 0 0 / 5%);
cursor: pointer;

&::before {
content: none;
}

&:checked {
background: theme.$accent;
border-color: theme.$accent;

&::before {
content: '';
inline-size: 20px;
block-size: 20px;
margin: 0;
background: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3E%3Cpath d='M14.83 4.89l1.34.94-5.81 8.38H9.02L5.78 9.67l1.34-1.25 2.57 2.4z' fill='%23fff'/%3E%3C/svg%3E") center/20px no-repeat;
}
}
}
22 changes: 14 additions & 8 deletions src/css/common/_modal.scss
Original file line number Diff line number Diff line change
Expand Up @@ -66,13 +66,10 @@
border-block-end-color: #ddd;
}

// The badge lives in the modal content because the minimum-supported
// WordPress Modal (5.5–6.3) has no headerActions prop; shift it up into
// the header area, clear of the close button.
.code-snippets-preview-modal__badge {
position: absolute;
inset-block-start: 18px;
inset-inline-end: 56px;
display: flex;
flex-shrink: 0;
margin-inline-end: 8px;
}

// Header and footer stay pinned; the CodeMirror editor is the only
Expand All @@ -85,8 +82,7 @@
overflow: hidden;
}

// The modal component wraps its children in an unstyled focus container;
// it must join the flex chain or the editor grows to its content height.
// Newer Modal versions wrap children in an unstyled focus container.
.components-modal__header + div {
display: flex;
flex-flow: column;
Expand Down Expand Up @@ -151,11 +147,21 @@
}

.button-link.code-snippets-preview-modal__trash {
min-block-size: 38px;
padding-block: 0;
padding-inline: 16px;
border: 1px solid #b32d2e;
border-radius: 5px;
background: #f6f7f7;
line-height: 2.5715;
font-weight: 400;
color: #b32d2e;
text-decoration: none;

&:hover,
&:focus {
border-color: #d63638;
background: #f0f0f1;
color: #d63638;
}
}
Expand Down
9 changes: 7 additions & 2 deletions src/css/common/_wp-admin.scss
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,11 @@
// plugin's own more-specific per-control rules, which are emitted later in each bundle and so
// win on equal specificity. This lets bespoke controls (conditions button, row-action links,
// priority input, etc.) keep their intended styling without per-element exclusions here.
.wrap {
.wrap,
// Modals render through a portal on `document.body`, outside the page wrapper, so
// the plugin's own dialogs are listed here to pick up the same control tokens.
.code-snippets-preview-modal,
.code-snippets-modal {
// Native single-line text controls and selects: token height + border.
// `@wordpress/components` inputs/selects (`.components-*`) keep their own design — they
// are excluded so React widgets such as the tags token field are left untouched.
Expand Down Expand Up @@ -77,7 +81,8 @@
// so its solid fill below is not overwritten. The line-height centres text vertically
// in anchor-based buttons, which lack a button element's automatic centring.
.button:not(.button-primary, .button-link),
.button-secondary {
.button-secondary,
.page-title-action {
min-block-size: theme.$control-height;
padding-block: 0;
padding-inline: 12px;
Expand Down
79 changes: 73 additions & 6 deletions src/css/common/list-table/_layout.scss
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
@use '../checkbox';
@use '../theme';

.column-name {
Expand Down Expand Up @@ -43,6 +44,17 @@
}

.wp-list-table {
.check-column input[type='checkbox'] {
@include checkbox.canonical;
}

// Shared horizontal rhythm for every snippet table, so the cloud table lines
// up with the snippets table rather than keeping the wider WordPress default.
th:not(.check-column),
td:not(.check-column) {
padding-inline: 9px;
}

td.column-id {
text-align: center;
}
Expand Down Expand Up @@ -78,7 +90,8 @@
cursor: pointer;
text-align: start;
overflow: hidden;
padding: 8px;
padding-block: 8px;
padding-inline: 0;
}

th.sortable .list-table-sort-button:focus-visible,
Expand All @@ -88,11 +101,38 @@
border-radius: 2px;
}

// The type badge is wrapped in an unclassed link that lays out as an inline
// box shorter than the badge, so wrap the badge exactly and draw our own
// focus ring: the inherited one resolves to a transparent outline.
.column-type a {
display: inline-flex;
border-radius: 3px;

// Matches the activation switch: a white ring separates the badge from
// the accent ring, so the indicator does not sit tight on the border.
// Applied to `:focus` as well, since a click leaves the WordPress ring
// behind, which hugs the badge.
&:focus,
&:focus-visible {
outline: none;
box-shadow: 0 0 0 2px #fff, 0 0 0 4px theme.$accent;
}
}

.row-actions {
color: #646970;
position: relative;
inset-inline-start: 0;

a:not(.delete) {
color: theme.$accent;

&:hover,
&:focus {
color: theme.$accent-hover;
}
}

// Row-action buttons render as plain inline links. On WP 7.0 the generic `.button`
// compatibility styling would otherwise give them a fill, border, radius and fixed
// height, so fully neutralise it here (this rule is emitted after the wp-admin layer
Expand All @@ -107,6 +147,7 @@
box-shadow: none;
line-height: inherit;
font-weight: 400;
color: theme.$accent;

&:hover:not(:disabled),
&:focus:not(:disabled) {
Expand All @@ -115,6 +156,11 @@
box-shadow: none;
}

&:hover:not(:disabled, .delete, .snippet-cloud-update),
&:focus:not(:disabled, .delete, .snippet-cloud-update) {
color: theme.$accent-hover;
}

&.delete {
color: #b32d2e;
}
Expand Down Expand Up @@ -151,27 +197,47 @@
}

.column-activate {
padding-inline-end: 0 !important;
text-align: center;

.snippet-activation-switch,
input[type='checkbox'].switch {
margin-inline: auto;
}
}

.clear-filters {
vertical-align: middle;
}

tfoot th.check-column {
padding: 13px 0 0 3px;
thead th.check-column,
thead td.check-column,
tfoot th.check-column,
tfoot td.check-column,
tbody th.check-column,
tbody td.check-column {
padding-block: 0;
padding-inline-start: 9px;
vertical-align: middle;
}

// Line every checkbox up on the same starting edge. Rows flagged as active
// draw a 2px accent border on this cell, so the same width is reserved as a
// transparent border elsewhere; without it the header, footer and inactive
// rows sit 2px further in, and rows shift as snippets are toggled.
thead th.check-column,
thead td.check-column,
tfoot th.check-column,
.inactive-snippet th.check-column {
padding-inline-start: 5px;
tfoot td.check-column,
tbody tr:not(.active-snippet) th.check-column,
tbody tr:not(.active-snippet) td.check-column {
border-inline-start: 2px solid transparent;
}

.active-snippet, .inactive-snippet {
td, th {
padding: 10px 9px;
box-shadow: inset 0 -1px 0 rgb(0 0 0 / 10%);
vertical-align: middle;
}
}

Expand Down Expand Up @@ -225,6 +291,7 @@
}
}


.snippets-table-toolbar {
display: flex;
justify-content: space-between;
Expand Down
9 changes: 2 additions & 7 deletions src/css/common/list-table/_pagination.scss
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
@use '../theme';
@use '../checkbox';

// The pagination group and view toggle wrap together as one end-pinned
// cluster so narrow viewports never split them across rows.
Expand Down Expand Up @@ -30,12 +30,7 @@
font-size: 14px;

input[type='checkbox'] {
inline-size: 20px;
block-size: 20px;
margin: 0;
border: 1px solid theme.$control-border;
border-radius: 5px;
box-shadow: 0 2px 2px rgb(0 0 0 / 5%);
@include checkbox.canonical;
}
}

Expand Down
5 changes: 5 additions & 0 deletions src/css/import.scss
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
@use 'common/checkbox';
@use 'common/toolbar';
@use 'common/subnav';
@use 'common/wp-admin';
Expand All @@ -6,3 +7,7 @@
@use 'import/card';
@use 'import/upload';
@use 'import/migrate';

.wp-list-table .check-column input[type='checkbox'] {
@include checkbox.canonical;
}
5 changes: 4 additions & 1 deletion src/css/manage/_cloud-community.scss
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,10 @@ $status-colors: (
}

.cloud-snippets-table {
td {
// Body rows only: the header row also holds a `td` for the select-all cell,
// and a fixed height there would make this header taller than the one on the
// snippets table.
tbody td {
box-sizing: border-box;
block-size: 60px;
vertical-align: middle;
Expand Down
2 changes: 2 additions & 0 deletions src/css/menu.scss
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,8 @@
.dashicons {
vertical-align: text-bottom;
color: inherit;
font-size: 16px;
padding-block-start: 2px;

// WP 7.0's taller button line-height (≈38px) leaks onto the icon and pushes it out
// of alignment; reset it so the glyph stays centred within the flex pill.
Expand Down
6 changes: 6 additions & 0 deletions src/css/settings.scss
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
@use 'common/checkbox';
@use 'common/codemirror';
@use 'common/subnav';
@use 'common/theme';
Expand All @@ -7,6 +8,11 @@

$sections: general, editor, debug, version-switch;

.settings-section input[type='checkbox']:not(.switch) {
@include checkbox.canonical;
margin-inline-end: 8px;
}

.snippets-page-header h1 {
color: #2c3337;
}
Expand Down
Loading
Loading