feat: refine ISAC design and prepare production deployment
Validate and deploy production / validate (push) Successful in 18s
Validate and deploy staging / validate (push) Successful in 18s
Validate and deploy production / deploy (push) Successful in 1m1s
Validate and deploy staging / deploy (push) Successful in 28s

This commit is contained in:
JB
2026-07-26 12:25:47 -04:00
parent 75faef50b8
commit 2e868d86ff
153 changed files with 64660 additions and 264 deletions
@@ -0,0 +1,16 @@
<script lang="ts">
import { page } from '$app/state';
let { compact = false }: { compact?: boolean } = $props();
const permissions = $derived((page.data.permissions as string[] | undefined) ?? []);
const can = (permission: string) => permissions.includes('*') || permissions.includes(permission);
const publishesDirectly = $derived(can('data.manage'));
const canSubmit = $derived(publishesDirectly || (can('data.propose') && Boolean(page.data.contributorMode?.enabled)));
</script>
{#if canSubmit}
<p class="mutation-consequence" class:compact class:direct={publishesDirectly} role="note">
<b>{publishesDirectly ? 'DIRECT PUBLISH' : 'OVERSIGHT REVIEW'}</b>
<span>{publishesDirectly ? 'Changes publish immediately and create an audit event.' : 'Saving creates a proposal; live data remains unchanged until Oversight approves it.'}</span>
</p>
{/if}
+12 -9
View File
@@ -65,6 +65,7 @@
);
const start = $derived(pagination.total ? (pagination.page - 1) * pagination.perPage + 1 : 0);
const end = $derived(Math.min(pagination.total, pagination.page * pagination.perPage));
const hasMultiplePages = $derived(pagination.pageCount > 1);
</script>
<nav class="registry-pagination" aria-label="Registry pagination">
@@ -77,13 +78,15 @@
</form>
{/if}
<div class="pagination-range"><span>DISPLAYING</span><b>{start}–{end}</b><span>OF {pagination.total}</span></div>
<div class="pagination-pages">
<a class:disabled={pagination.page === 1} aria-disabled={pagination.page === 1} href={href(Math.max(1, pagination.page - 1))}>← PREV</a>
{#each visiblePages as page, index}
{#if index > 0 && page - visiblePages[index - 1] > 1}<span class="pagination-gap">···</span>{/if}
<a class:active={page === pagination.page} aria-current={page === pagination.page ? 'page' : undefined} href={href(page)}>{page}</a>
{/each}
<a class:disabled={pagination.page === pagination.pageCount} aria-disabled={pagination.page === pagination.pageCount} href={href(Math.min(pagination.pageCount, pagination.page + 1))}>NEXT →</a>
</div>
<div class="pagination-sizes"><span>ROWS</span>{#each [10, 25, 50, 100] as size}<a class:active={size === pagination.perPage} href={href(1, size)}>{size}</a>{/each}</div>
{#if hasMultiplePages}
<div class="pagination-pages">
<a class:disabled={pagination.page === 1} aria-disabled={pagination.page === 1} href={href(Math.max(1, pagination.page - 1))}>← PREV</a>
{#each visiblePages as page, index}
{#if index > 0 && page - visiblePages[index - 1] > 1}<span class="pagination-gap">···</span>{/if}
<a class:active={page === pagination.page} aria-current={page === pagination.page ? 'page' : undefined} href={href(page)}>{page}</a>
{/each}
<a class:disabled={pagination.page === pagination.pageCount} aria-disabled={pagination.page === pagination.pageCount} href={href(Math.min(pagination.pageCount, pagination.page + 1))}>NEXT →</a>
</div>
<div class="pagination-sizes"><span>ROWS</span>{#each [10, 25, 50, 100] as size}<a class:active={size === pagination.perPage} href={href(1, size)}>{size}</a>{/each}</div>
{/if}
</nav>