Inset the topbar, filter bar, pager, form page and empty table by --pad-x #171
@@ -4,6 +4,14 @@ The release version **is** the plugin contract version (`HOST_API_VERSION`), so
|
||||
contract break: a plugin's `apiVersion` must match the host's `major.minor` or discovery refuses it
|
||||
at boot. Entries start at 0.3.0.
|
||||
|
||||
## Unreleased
|
||||
|
||||
### One horizontal inset across the content pane
|
||||
|
||||
The topbar, filter bar, pager, form page and empty-table message inset their content by `--pad-x`
|
||||
(12px), as table cells do, instead of 16px. A plugin that overrides `--pad-x` now moves all of them
|
||||
together.
|
||||
|
||||
## 0.4.0
|
||||
|
||||
**Breaking.** Set `apiVersion: "0.4.0"`. The app shell no longer bounds the content column, so a page
|
||||
|
||||
@@ -58,7 +58,7 @@
|
||||
--radius: 5px;
|
||||
--nav-w: 264px;
|
||||
--row-h: 34px;
|
||||
--pad-x: 12px;
|
||||
--pad-x: 12px; /* side padding of the content pane's bars and form page, and of every table cell, so their text lines up */
|
||||
--fz: 13px;
|
||||
--fz-sm: 12px;
|
||||
--fz-xs: 11px;
|
||||
@@ -336,7 +336,7 @@ span.nav-self { cursor: default; } /* static / non-clickable */
|
||||
.topbar {
|
||||
flex: 0 0 auto; height: 48px;
|
||||
display: flex; align-items: center; gap: 12px;
|
||||
padding: 0 16px; border-bottom: 1px solid var(--border);
|
||||
padding: 0 var(--pad-x); border-bottom: 1px solid var(--border);
|
||||
background: var(--surface);
|
||||
}
|
||||
.hamburger { display: none; } /* shown only on narrow */
|
||||
@@ -352,7 +352,7 @@ span.nav-self { cursor: default; } /* static / non-clickable */
|
||||
.filters {
|
||||
flex: 0 0 auto; background: var(--surface);
|
||||
border-bottom: 1px solid var(--border);
|
||||
padding: 10px 16px;
|
||||
padding: 10px var(--pad-x);
|
||||
display: flex; flex-direction: column; gap: 9px;
|
||||
}
|
||||
.filter-row {
|
||||
@@ -584,7 +584,7 @@ table.table {
|
||||
.col-num { text-align: right; }
|
||||
.cell-strong { font-weight: 550; }
|
||||
.cell-muted { color: var(--text-muted); }
|
||||
.table-empty { text-align: center; color: var(--text-muted); padding: 28px 12px; }
|
||||
.table-empty { text-align: center; color: var(--text-muted); padding: 28px var(--pad-x); }
|
||||
.cell-mono { font-variant-numeric: tabular-nums;
|
||||
font-family: ui-monospace, "SF Mono", Menlo, monospace; font-size: var(--fz-sm); }
|
||||
|
||||
@@ -648,7 +648,7 @@ th[aria-sort="descending"] .sort-ico { transform: rotate(180deg); }
|
||||
.pager {
|
||||
flex: 0 0 auto;
|
||||
display: flex; align-items: center; gap: 12px;
|
||||
padding: 8px 16px; border-top: 1px solid var(--border);
|
||||
padding: 8px var(--pad-x); border-top: 1px solid var(--border);
|
||||
background: var(--surface); font-size: var(--fz-sm); color: var(--text-muted);
|
||||
}
|
||||
.pager .spacer { flex: 1 1 auto; }
|
||||
@@ -696,7 +696,7 @@ th[aria-sort="descending"] .sort-ico { transform: rotate(180deg); }
|
||||
#nav-toggle { position: fixed; top: 0; left: 0; opacity: 0; pointer-events: none; }
|
||||
|
||||
/* admin forms: create/edit user, account actions */
|
||||
.form-page { padding: 16px; display: flex; flex-direction: column; gap: 14px; max-width: 560px; }
|
||||
.form-page { padding: 16px var(--pad-x); display: flex; flex-direction: column; gap: 14px; max-width: 560px; }
|
||||
.form-card {
|
||||
display: flex; flex-direction: column; gap: 14px;
|
||||
padding: 18px; background: var(--surface);
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
|
||||
`Bar = 1`
|
||||
|
||||
`Next ID = 27`
|
||||
`Next ID = 28`
|
||||
|
||||
## Items
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
| 24 | 0.4.21 | | | **Retire `src/ui/shell-context.ts` and render the dashboard from `ctx.chrome`.** | 2 | 1 | 2 | 3 | 4 | code health by 3 | 9.0 |
|
||||
| 17 | 0.4.21 | | | **Remove the icons no caller uses from `ICON_NAMES` and the sprite.** | 1 | 1 | 1 | 1 | 1 | 8 by 1, code health by 1 | 8.8 |
|
||||
| 21 | 0.4.21 | | | **Fail the gate on a function that exceeds a size or complexity limit.** | 3 | 1 | 1 | 3 | 5 | code health by 4 | 7.2 |
|
||||
| 27 | 0.4.21 | | | **Inset the scheduling example's lead text, shift count, alerts and call-to-action by `--pad-x`, like the bars around them.** | 1 | 2 | 1 | 2 | 1 | 9 by 2, 2 by 1 | 4.8 |
|
||||
| 25 | 0.4.21 | | | **Point the views' references to `docs/plugin-contract.md` at the README.** | 1 | 2 | 1 | 2 | 1 | 9 by 3 | 4.6 |
|
||||
| 20 | 0.4.21 | | | **Redirect an anonymous hit on a session-needing flow page to sign-in, instead of a 500.** | 2 | 2 | 2 | 4 | 3 | 2 by 4 | 4.2 |
|
||||
| 4 | 0.4.21 | | | **Refuse a permission save whose baseline no longer matches Keto, so concurrent edits are not silently lost.** | 2 | 2 | 2 | 4 | 4 | 2 by 4 | 2.8 |
|
||||
@@ -91,6 +92,11 @@ AGENTS.md → "`ICON_NAMES` is a host-owned registry" already makes this routine
|
||||
|
||||
Only `tsc --strict` runs today. A new tool is a new dependency, so justify it.
|
||||
|
||||
### 27. Inset the scheduling example's lead text, shift count, alerts and call-to-action by `--pad-x`, like the bars around them.
|
||||
|
||||
They sit flush against the content pane's edge while the filter bar, table and pager sit 12px in.
|
||||
The fix belongs in `examples/plugins/scheduling/public/scheduling.css`; check each page in a browser.
|
||||
|
||||
### 25. Point the views' references to `docs/plugin-contract.md` at the README.
|
||||
|
||||
`examples/plugins/scheduling/views/shifts.ejs` still cites it.
|
||||
|
||||
Reference in New Issue
Block a user