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
|
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.
|
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
|
## 0.4.0
|
||||||
|
|
||||||
**Breaking.** Set `apiVersion: "0.4.0"`. The app shell no longer bounds the content column, so a page
|
**Breaking.** Set `apiVersion: "0.4.0"`. The app shell no longer bounds the content column, so a page
|
||||||
|
|||||||
@@ -58,7 +58,7 @@
|
|||||||
--radius: 5px;
|
--radius: 5px;
|
||||||
--nav-w: 264px;
|
--nav-w: 264px;
|
||||||
--row-h: 34px;
|
--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: 13px;
|
||||||
--fz-sm: 12px;
|
--fz-sm: 12px;
|
||||||
--fz-xs: 11px;
|
--fz-xs: 11px;
|
||||||
@@ -336,7 +336,7 @@ span.nav-self { cursor: default; } /* static / non-clickable */
|
|||||||
.topbar {
|
.topbar {
|
||||||
flex: 0 0 auto; height: 48px;
|
flex: 0 0 auto; height: 48px;
|
||||||
display: flex; align-items: center; gap: 12px;
|
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);
|
background: var(--surface);
|
||||||
}
|
}
|
||||||
.hamburger { display: none; } /* shown only on narrow */
|
.hamburger { display: none; } /* shown only on narrow */
|
||||||
@@ -352,7 +352,7 @@ span.nav-self { cursor: default; } /* static / non-clickable */
|
|||||||
.filters {
|
.filters {
|
||||||
flex: 0 0 auto; background: var(--surface);
|
flex: 0 0 auto; background: var(--surface);
|
||||||
border-bottom: 1px solid var(--border);
|
border-bottom: 1px solid var(--border);
|
||||||
padding: 10px 16px;
|
padding: 10px var(--pad-x);
|
||||||
display: flex; flex-direction: column; gap: 9px;
|
display: flex; flex-direction: column; gap: 9px;
|
||||||
}
|
}
|
||||||
.filter-row {
|
.filter-row {
|
||||||
@@ -584,7 +584,7 @@ table.table {
|
|||||||
.col-num { text-align: right; }
|
.col-num { text-align: right; }
|
||||||
.cell-strong { font-weight: 550; }
|
.cell-strong { font-weight: 550; }
|
||||||
.cell-muted { color: var(--text-muted); }
|
.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;
|
.cell-mono { font-variant-numeric: tabular-nums;
|
||||||
font-family: ui-monospace, "SF Mono", Menlo, monospace; font-size: var(--fz-sm); }
|
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 {
|
.pager {
|
||||||
flex: 0 0 auto;
|
flex: 0 0 auto;
|
||||||
display: flex; align-items: center; gap: 12px;
|
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);
|
background: var(--surface); font-size: var(--fz-sm); color: var(--text-muted);
|
||||||
}
|
}
|
||||||
.pager .spacer { flex: 1 1 auto; }
|
.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; }
|
#nav-toggle { position: fixed; top: 0; left: 0; opacity: 0; pointer-events: none; }
|
||||||
|
|
||||||
/* admin forms: create/edit user, account actions */
|
/* 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 {
|
.form-card {
|
||||||
display: flex; flex-direction: column; gap: 14px;
|
display: flex; flex-direction: column; gap: 14px;
|
||||||
padding: 18px; background: var(--surface);
|
padding: 18px; background: var(--surface);
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
`Bar = 1`
|
`Bar = 1`
|
||||||
|
|
||||||
`Next ID = 27`
|
`Next ID = 28`
|
||||||
|
|
||||||
## Items
|
## 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 |
|
| 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 |
|
| 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 |
|
| 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 |
|
| 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 |
|
| 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 |
|
| 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.
|
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.
|
### 25. Point the views' references to `docs/plugin-contract.md` at the README.
|
||||||
|
|
||||||
`examples/plugins/scheduling/views/shifts.ejs` still cites it.
|
`examples/plugins/scheduling/views/shifts.ejs` still cites it.
|
||||||
|
|||||||
Reference in New Issue
Block a user