Repository navigation
refactor(dashboard): lote 10 — root, auth, error, status, legal, landing shell and docs pages on the CI UI Kit (KEA-7886) - #17865
Merged
Conversation
error.tsx and global-error.tsx get the Keak lockup, kit buttons and semantic error tones; global-error imports the global stylesheet and applies the stored theme itself, since it replaces the root layout. iconMap: build → Wrench, folder_open → FolderOpen.
…EA-7886, lote 10)
…hell (KEA-7886, lote 10)
…nd the PATCH badge (KEA-7886, lote 10)
…ismissable Node alerts, miniapp label (KEA-7886, lote 10)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Lote 10 (Task 40, KEA-7886): pages outside the dashboard on the CI UI Kit
Base:
feat/new-uikit. Branchfeat/new-uikit-lote10, head1e3a300e. The latest integration tip (886f8127, incl. lote 3 #17411) is merged in as28bf0b47, with no rebase and no stash.Screens × spec × tests × screenshots
_artifacts/)TokenHealthBadge,DegradationBadge,CapabilityBadge)shared/misc.mdBadge. Token health uses a kitButtontrigger plus aPopover(hover, click, Escape). Degradation uses a warning-tone badge rendered as the link. Capability uses a dense kit pill. Status hex/--orchstyles becometext-success/warning/error.PwaRegister,LocaleAutoDetectandBasePathNetworkProviderhave no UI and are unchanged.design-kit-bridge(badge guard now asserts the semantic status utilities; the no-hex check is kept). New RTL filetests/unit/ui/misc-badges.test.tsx(7 tests, axe on the open popover)./statusand the header/(error.tsx,global-error.tsx)root.md<Icon>,ci-heading, kit buttons,bg-error-bg/text-error.global-errorimportsglobals.cssand applies the stored theme itself, because it replaces the root layout. It uses the kitButton/buttonVariantsdirectly soiconMapstays out of the every-page chunk.brand-pages-static: list extended witherror,global-error,forbidden,forgot-password(exactly one lockup each)/400…/503400…503.mdErrorPageScaffold. 0 Material spans left, nothing to change.lote10-{400,503,404}-*/forbiddenforbidden.mdtext-whitelook is replaced by lockup +ci-dashboard-display+buttonVariantslote10-forbidden-*/loginlogin.mdInputlabel/hint/errorprops (no loose<label>/<p>). Sign-in form insideCard. Node warning uses kitAlert critical. Spinner. Onboarding cards useCard. Tokens replace the red/amber/gradient palette.login-11143,auth-redirect-login,classify-pr-changesgreen)lote10-login-*/forgot-passwordforgot-password.mdci-heading, token code blocks. DirectCardimport instead of the barrel, which also shrinksrouteNamespaces.root(regenerated).lote10-forgot-password-*/callback,/auth/callbackcallback.md,auth-callback.mdCard, sized<Icon>, success/warning tokensoauth-callback-*green)lote10-{callback,auth-callback}-*/connect/codex/[token]connect-codex-token.mdCard, tokenslote10-connect-codex-token-*/statusstatus.mdStatusMatrixfor the provider breakers,Badge livefor a healthy service,Cardstat tiles,Alert criticalfor errors,Buttonrefresherror-pages/status)lote10-status-*/maintenance,/offlinemaintenance.md,offline.mdCard,buttonVariants, offline status pill uses theBadgetone. Maintenance becomes a client component becausebuttonVariantslives in a "use client" module.lote10-{maintenance,offline}-*/terms,/privacyterms.md,privacy.mdci-headingh1/h2 (6 and 7 h2 kept forsmoke.spec.ts),<Icon>,border-borderlote10-{terms,privacy}-*/landing(shell only)landing.mdNavigation/FooteruseOmniRouteLockup(white ink on the fixed dark shell) and<Icon>. The footer GitHub icon link gets a name.lote10-landing-*/miniappminiapp.mdstyle={}replaced by tokens. KitInput+Button. User bubble is lime with dark ink.lote10-miniapp-*/docs,/docs/api-explorer,/docs/[...slug]docs*.mdtext-fd-primary→text-primary(readable ink),ci-heading,<Icon>. API explorer moves toButton/Badge(method tones)/Input/Field+Textarea/EmptyState. Slug page: nothing to change.docs-*,dockerignore-docs-coverage,baseline-headroomgreen)lote10-{docs,docs-api-explorer,docs-slug}-*(both themes)iconMap:
folder_open → FolderOpen(new import) andbuild → Wrench(was null).i18n:
publicSystem.status.breakerClosed/breakerNotClosedadded to en, pt-BR and vi (the vi parity test pins every en key). The other 64 locales come in the i18n wave.P6 greps (lote scope: root files, 400…503, forbidden, login, forgot-password, callback, auth, connect, status, maintenance, offline, terms, privacy, miniapp, docs, landing Navigation/Footer, misc group)
material-symbols-outlined: 22 → 0<table|button|input|select|textarea>: 18 → 4. All 4 arelanding/components/Navigation.tsxbuttons (marketing styling is out of scope per spec §2 and the ruling "landing Navigation/Footer → ProductLockup only")."use client"is the first statement in every touched.tsx: 0 violations.Validation
npm run lint -- --concurrency=6(local gate lock)npm run typecheck:corenpm run check:dashboard-typechecknpm run check:open-sse-typechecknpm run check:ui-icucheck-key-completeness --warnRUN_BUILD_TESTS)npm run build(headf4e6b433)Turbopack build encountered 232 warnings(= base)smoke+error-pages+a11y@axe-core/playwrightis not installed on the .113; meta-test passed)/loginafter2a365620; remaining: Fumadocs' own GitHub iconsvg-img-altand light active-item contrast (pendências 3–4) —_artifacts/lote10-axe.jsonAfter the build:
2a365620(class strings only, from the axe check) and the merge of lote 3 (#17411, gated in its own PR). Re-run on the local post-merge head28bf0b47: lint rc 0, typecheck:core rc 0, dashboard-typecheck OK 194, ui-icu PASS, node focused 102/0/1, vitest focused 58/58.Pushed: the merge
28bf0b47went out together with fix round 1 (1e3a300e) once GitHub git access came back.Smoke (§8)
Dev server on port 20160 with an isolated
DATA_DIR. 19 routes × light/dark/390 = 57 shots,_artifacts/lote10-<screen>-{light,dark,390}.png, with the DOM probe in_artifacts/lote10-smoke.json. On every page:url= requested path);rgb(4,13,16)vsrgb(251,251,248))./docsopens in both themes (light and dark shots of/docs,/docs/api-explorerand/docs/getting-started/QUICK-START).Left out (pendências)
buttonVariants.<button>s and hex palette;/landing(pre-existing).RootProvidernext-themes usesstorageKey "theme", the same key as themeStore. It writes the persisted JSON as an<html>class, and.darkis never set on/docs. The tokens still followdata-theme, so both themes render. Fix indocs/layout.tsx:theme={{ enabled: false }}or a separate storageKey (not a palette class, so not done here).globals.cssneed:--color-fd-primaryis lime, so Fumadocs' active sidebar text fails contrast in light (axe). It needs a text-only ink split like--text-color-primary.svg role="img"without a name (axesvg-img-alt). Upstream markup.src/shared/components/layouts/AuthLayout.tsx: 0 importers, still carries orange blur orbs. Remove it in F4 (not in the lote file list).Alert: no persistent non-dismissable mode (missing prop: something likedismissible={false}). The kitAlertalways renders a dismiss button. Since fix round 1, login and status compose the kit parts (ci-alert ci-alert--critical+AlertTitle/AlertDescription/AlertActions) without the dismiss control, so behaviour is unchanged. The kit gap stays.publicSystem.miniapp.askAnything, fix round 1). The other pre-existing English strings (greeting, errors, "Send", busy "…") stay for the i18n wave./docs/[...slug]logs a pre-existingcookies().getsync-dynamic-API error in dev.manifest.tsandviewport.themeColorkeep#0b0f1a(metadata). Decide in F4.@axe-core/playwrightmissing there). The equivalent axe check above stands in for them.publicSystem.status.breakerClosed/breakerNotClosed,publicSystem.miniapp.askAnything) still need the other 64 locales (i18n wave). vi has them because of the parity test.timer_off → Timer(base mapping) is kept. LucideTimerOffexists.Fix round 1 (review
batch-lote10-review.md)TokenHealthBadgehover-open no longer moves focus (open and close auto-focus are prevented when the focus is elsewhere). A click after a hover-open pins the panel instead of closing it. RTL tests cover both (red first, then green), and Escape still returns focus to the trigger.FolderOpenfolded into the main lucide import block.lote10-login-signin-{light,dark,390}.png(sign-in state,INITIAL_PASSWORDseeded) andlote10-status-matrix-{light,dark,390}.png(health stubbed with 6 providers: 6 matrix cells and the live badge visible).Screenshot paths (63,
/home/diegosouzapw/dev/proxys/OmniRoute/_artifacts/)lote10-login-light.png·lote10-login-dark.png·lote10-login-390.pnglote10-forgot-password-light.png·lote10-forgot-password-dark.png·lote10-forgot-password-390.pnglote10-forbidden-light.png·lote10-forbidden-dark.png·lote10-forbidden-390.pnglote10-status-light.png·lote10-status-dark.png·lote10-status-390.pnglote10-maintenance-light.png·lote10-maintenance-dark.png·lote10-maintenance-390.pnglote10-offline-light.png·lote10-offline-dark.png·lote10-offline-390.pnglote10-callback-light.png·lote10-callback-dark.png·lote10-callback-390.pnglote10-auth-callback-light.png·lote10-auth-callback-dark.png·lote10-auth-callback-390.pnglote10-connect-codex-token-light.png·lote10-connect-codex-token-dark.png·lote10-connect-codex-token-390.pnglote10-terms-light.png·lote10-terms-dark.png·lote10-terms-390.pnglote10-privacy-light.png·lote10-privacy-dark.png·lote10-privacy-390.pnglote10-miniapp-light.png·lote10-miniapp-dark.png·lote10-miniapp-390.pnglote10-landing-light.png·lote10-landing-dark.png·lote10-landing-390.pnglote10-404-light.png·lote10-404-dark.png·lote10-404-390.pnglote10-400-light.png·lote10-400-dark.png·lote10-400-390.pnglote10-503-light.png·lote10-503-dark.png·lote10-503-390.pnglote10-docs-light.png·lote10-docs-dark.png·lote10-docs-390.pnglote10-docs-api-explorer-light.png·lote10-docs-api-explorer-dark.png·lote10-docs-api-explorer-390.pnglote10-docs-slug-light.png·lote10-docs-slug-dark.png·lote10-docs-slug-390.pnglote10-login-signin-light.png·lote10-login-signin-dark.png·lote10-login-signin-390.pnglote10-status-matrix-light.png·lote10-status-matrix-dark.png·lote10-status-matrix-390.png