From bbb794cfbfe3fa5278f1f7c903e71fb9079f9cd8 Mon Sep 17 00:00:00 2001 From: "Cratis Stagehand (AI)" Date: Sat, 26 Sep 2026 07:20:33 +0000 Subject: [PATCH 1/2] Document the DataTableStatus members The public API TSDoc gate (verify-api-docs) flags the four members the query-state work introduced: every declaration reachable from a JS exports subpath must carry a TSDoc comment. Describe what each state renders so the enum documents itself the way NumberInputCommitReason does. --- Source/DataTables/DataTableStatus.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Source/DataTables/DataTableStatus.ts b/Source/DataTables/DataTableStatus.ts index 8bcb9f2a..b1ba5496 100644 --- a/Source/DataTables/DataTableStatus.ts +++ b/Source/DataTables/DataTableStatus.ts @@ -3,8 +3,12 @@ /** Display state of a loaded-page data table. */ export enum DataTableStatus { + /** Rows (or the empty row) render normally; the default. */ Ready = 'ready', + /** The first result is on its way. Without rows a loading row renders; with rows they stay visible and the table marks itself busy. */ Loading = 'loading', + /** The query failed or its result is invalid; the failure row renders and server exception text is never shown. */ Failed = 'failed', + /** The user is not allowed to see the result; the failure row renders with the unauthorized message. */ Unauthorized = 'unauthorized', } From ff527921e2bfa9a8abb9eb3dde3602fffccd53c1 Mon Sep 17 00:00:00 2001 From: "Cratis Stagehand (AI)" Date: Sat, 26 Sep 2026 07:20:54 +0000 Subject: [PATCH 2/2] Trim stylesheet separator decoration to keep the CSS gzip budget The query-state rows and the PivotViewer loading label pushed the published aggregate stylesheet to 32791 gzip bytes, 23 past the reviewed 32 KiB ceiling that every renderer-adapter, package-manager and arc-consumer leg re-checks. The ceiling is deliberately never raised without a compensating reduction, so take one: the per-file separator comment that ships inside the aggregate and every per-area stylesheet loses its dash run. Measured on the packed archive: raw 203689, gzip 32558, 1170 declaration blocks, all 21 per-area sheets within budget. The measurement is recorded beside the earlier ones in the gate. --- Source/scripts/verify-package-archive.mjs | 6 ++++++ rollup.config.mjs | 10 ++++++++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/Source/scripts/verify-package-archive.mjs b/Source/scripts/verify-package-archive.mjs index c9d2e792..1baa538a 100644 --- a/Source/scripts/verify-package-archive.mjs +++ b/Source/scripts/verify-package-archive.mjs @@ -228,6 +228,12 @@ const declarationBlocks = styles.match(/\{/gu)?.length ?? 0; // that documents the split, so the ceilings stay where they are once more - and the rule they // encode is no longer the only lever, because a consumer that does not want every surface can now // import the areas it mounts instead of raising this ceiling. +// Measured again when the query-state rows and the PivotViewer loading label landed +// (Cratis/Components#338): their rules alone measured gzip 32791, 23 bytes past the ceiling, so +// the addition came with the reduction the ceiling demands - the per-file separator comment in +// the published stylesheets dropped its dash decoration (45 banners across the aggregate, and +// every per-area sheet carries fewer of the same), measuring raw 203689, gzip 32558, 1170 +// declaration blocks. The ceilings stay where they are. const styleBudget = { rawBytes: 205 * 1024, gzipBytes: 32 * 1024, diff --git a/rollup.config.mjs b/rollup.config.mjs index 4bfee3df..139849f2 100644 --- a/rollup.config.mjs +++ b/rollup.config.mjs @@ -57,9 +57,15 @@ function findComponentStylesheets(sourceDir, directory = sourceDir, found = []) return found; } -/** One manifest entry rendered the way it appears inside the published stylesheets. */ +/** + * One manifest entry rendered the way it appears inside the published stylesheets. + * + * The separator carries no decoration beyond the two-dash frame on purpose: it ships inside + * every published stylesheet (aggregate and per-area alike), and the aggregate's reviewed gzip + * ceiling is what forces that payload to stay honest. + */ const renderStyleEntry = ({ specifier, file }) => - `/* ── ${specifier} ─────────────────────────────────────── */\n${readFileSync(file, 'utf8')}`; + `/* ── ${specifier} ── */\n${readFileSync(file, 'utf8')}`; /** * Resolves the `@import` statements in `styles.css` into one flat stylesheet.